diff --git a/lib/sql-parser/parser.racc b/lib/sql-parser/parser.racc index e1079d2..1617cc3 100644 --- a/lib/sql-parser/parser.racc +++ b/lib/sql-parser/parser.racc @@ -9,6 +9,8 @@ rule direct_sql_data_statement : direct_select_statement_multiple_rows | insert_specification + | update_specification + | delete_specification direct_select_statement_multiple_rows : query_expression order_by_clause { result = SQLParser::Statement::DirectSelect.new(val[0], val[1]) } @@ -46,6 +48,22 @@ rule : INSERT INTO table_reference value_list { result = SQLParser::Statement::Insert.new(val[2], nil, val[3]) } | INSERT INTO table_reference column_list value_list { result = SQLParser::Statement::Insert.new(val[2], val[3], val[4]) } + update_specification + : UPDATE table_reference SET update_column_list where_clause { result = SQLParser::Statement::Update.new(val[1], val[3], val[4]) } + + update_column + : column_name equals_operator value_expression { result = SQLParser::Statement::UpdateColumn.new(val[0], val[2]) } + + update_column_sublist + : update_column comma update_column_sublist { result = Array(val[0]) + Array(val[2]) } + | update_column + + update_column_list + : update_column_sublist { result = SQLParser::Statement::UpdateColumnList.new(val[0]) } + + delete_specification + : DELETE from_clause where_clause { result = SQLParser::Statement::Delete.new(val[1], val[2]) } + column_list : left_paren in_column_list right_paren { result = SQLParser::Statement::InColumnList.new(val[1]) } diff --git a/lib/sql-parser/parser.racc.rb b/lib/sql-parser/parser.racc.rb index a14a43c..c57d88f 100644 --- a/lib/sql-parser/parser.racc.rb +++ b/lib/sql-parser/parser.racc.rb @@ -11,7 +11,7 @@ module SQLParser class Parser < Racc::Parser -module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 329) +module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 347) def self.parse(sql) new.scan_str(sql) @@ -20,476 +20,496 @@ def self.parse(sql) ##### State transition tables begin ### racc_action_table = [ - 44, 70, 166, 145, 215, 91, 91, 65, 103, 226, - 7, 130, 131, 8, 126, 227, 138, 217, 44, 218, - 219, 220, 85, 84, 152, 68, 69, 139, 140, 67, - 67, 149, 18, 185, 71, 141, 44, 67, 67, 220, - 47, 48, 67, 32, 45, 36, 38, 39, 40, 41, - 18, 49, 144, 52, 47, 48, 60, 135, 47, 48, - 165, 32, 45, 36, 38, 39, 40, 41, 18, 49, - 44, 52, -123, 28, 137, 167, 47, 48, 8, 32, - 45, 36, 38, 39, 40, 41, 168, 49, 44, 52, - 169, 28, 170, 171, 95, 173, 174, 14, 128, 60, - 60, 180, 18, -123, -123, -123, 181, 127, 185, 122, - 47, 48, 197, 32, 45, 36, 38, 39, 40, 41, - 18, 49, 44, 52, 200, 28, 67, 114, 47, 48, - 8, 32, 45, 36, 38, 39, 40, 41, 203, 49, - 44, 52, 204, 220, 67, 60, 18, 214, 106, 114, - 86, 83, 82, 222, 18, 81, -142, 80, 44, 79, - 78, 220, 47, 48, 77, 32, 45, 36, 38, 39, - 40, 41, 18, 49, 76, 52, 75, 8, -79, 64, - 47, 48, 63, 32, 45, 36, 38, 39, 40, 41, - 18, 49, 44, 52, 237, 145, 185, 238, 47, 48, - 200, 32, 45, 36, 38, 39, 40, 41, 60, 49, - 44, 52, 222, 28, 54, 53, 152, 242, 12, 244, - 185, 67, 18, 149, 18, 249, 11, 251, 44, 252, - 253, 28, 47, 48, 9, 32, 45, 36, 38, 39, - 40, 41, 18, 49, 67, 52, nil, nil, nil, nil, - 47, 48, nil, 32, 45, 36, 38, 39, 40, 41, - 18, 49, 44, 52, nil, 145, nil, nil, 47, 48, - nil, 32, 45, 36, 38, 39, 40, 41, nil, 49, - 44, 52, 96, 28, nil, nil, 152, nil, nil, nil, - nil, nil, nil, 149, 18, 97, nil, 99, 100, nil, - 101, 102, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, 18, 49, 44, 52, nil, 145, nil, nil, - 47, 48, 8, 32, 45, 36, 38, 39, 40, 41, - nil, 49, 44, 52, nil, 28, nil, nil, 152, nil, - nil, nil, nil, nil, nil, 149, 18, nil, nil, nil, - 44, nil, nil, 28, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, nil, 52, 44, nil, - nil, 28, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, 18, 49, nil, 52, 44, nil, nil, 220, - nil, nil, nil, 32, 45, 36, 38, 39, 40, 41, - 18, 49, nil, 52, 44, nil, nil, 220, 47, 48, - nil, 32, 45, 36, 38, 39, 40, 41, 18, 49, - nil, 52, 44, nil, nil, 220, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, 18, 49, nil, 52, - 44, nil, nil, 220, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, nil, 52, 44, nil, - nil, 220, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, 18, 49, nil, 52, 44, nil, nil, 220, - 47, 48, nil, 32, 45, 36, 38, 39, 40, 41, - 18, 49, nil, 52, 44, nil, nil, 28, 47, 48, - nil, 32, 45, 36, 38, 39, 40, 41, 18, 49, - nil, 52, 44, nil, nil, 220, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, 18, 49, nil, 52, - 44, nil, nil, 220, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, nil, 52, 44, nil, - nil, 28, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, 18, 49, nil, 52, 44, nil, nil, 28, - 47, 48, nil, 32, 45, 36, 38, 39, 40, 41, - 18, 49, nil, 52, 44, nil, nil, 28, 47, 48, - nil, 32, 45, 36, 38, 39, 40, 41, 18, 49, - nil, 52, nil, nil, nil, nil, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, 18, 49, 44, 52, - nil, 145, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 28, - nil, nil, nil, nil, nil, 116, nil, nil, nil, 149, - 18, nil, nil, nil, 44, nil, nil, 28, 47, 48, - nil, 32, 45, 36, 38, 39, 40, 41, 18, 49, - nil, 52, 44, nil, nil, 28, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, 18, 49, nil, 52, - nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, 44, 52, nil, 145, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 44, 52, nil, 28, nil, nil, - 152, nil, nil, nil, nil, nil, nil, 149, 18, nil, - nil, nil, 44, nil, nil, 28, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, 18, 49, nil, 52, - 44, nil, nil, 28, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, nil, 52, nil, nil, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, 18, 49, 44, 52, nil, 145, nil, nil, - 47, 48, nil, 32, 45, 36, 38, 39, 40, 41, - nil, 49, nil, 52, nil, nil, nil, nil, 152, nil, - nil, nil, nil, nil, nil, 149, 18, nil, nil, nil, - nil, nil, nil, 96, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 97, 52, 99, 100, - nil, 101, 102, 208, 209, 96, nil, nil, nil, 94, - nil, nil, nil, 95, nil, nil, nil, nil, 97, nil, - 99, 100, nil, 101, 102, 186, 187, nil, 188, 189, - 190, nil, nil, nil, nil, 191, 192, 193, 194, 195, - 196 ] + 56, 89, 110, 40, 110, 69, 222, 9, 198, 10, + 76, 122, 11, 85, 12, 233, 224, 56, 225, 226, + 227, 234, 70, 121, 72, 73, 161, 74, 75, 219, + 220, 165, 78, 90, 56, 78, 30, 227, 78, 183, + 78, 169, 170, 59, 60, 120, 44, 57, 48, 50, + 51, 52, 53, 30, 61, 56, 64, 166, 40, 167, + 59, 60, 80, 44, 57, 48, 50, 51, 52, 53, + 30, 61, 114, 64, 59, 60, 22, 59, 60, 174, + 44, 57, 48, 50, 51, 52, 53, 80, 61, 56, + 64, 30, 126, 87, 88, 176, -131, 177, 59, 60, + 22, 44, 57, 48, 50, 51, 52, 53, 22, 61, + 56, 64, 78, 40, 104, 103, 183, 133, 78, 195, + 198, 105, 12, 201, 130, 30, -131, -131, -131, 202, + 203, 56, 59, 60, 40, 44, 57, 48, 50, 51, + 52, 53, 204, 61, 26, 64, 30, 205, 206, 207, + 208, 124, 210, 59, 60, 211, 44, 57, 48, 50, + 51, 52, 53, 102, 61, 56, 64, 30, 227, 101, + 78, 69, 100, 221, 59, 60, -150, 44, 57, 48, + 50, 51, 52, 53, 153, 61, 56, 64, 70, 40, + 72, 73, 99, 74, 75, 78, 98, 229, 12, 97, + 78, 30, 96, 56, 95, 94, 227, 153, 59, 60, + -87, 44, 57, 48, 50, 51, 52, 53, 84, 61, + 56, 64, 30, 40, 12, 24, 243, 244, 22, 59, + 60, 246, 44, 57, 48, 50, 51, 52, 53, 30, + 61, 56, 64, 247, 40, 80, 59, 60, 249, 44, + 57, 48, 50, 51, 52, 53, 30, 61, 123, 64, + 22, 229, 66, 59, 60, 65, 44, 57, 48, 50, + 51, 52, 53, 253, 61, 56, 64, 30, 126, 24, + 255, 22, 30, 16, 59, 60, 183, 44, 57, 48, + 50, 51, 52, 53, 78, 61, 56, 64, 264, 40, + 15, 266, 183, 133, 267, 268, 269, 13, 30, 78, + 130, 30, nil, nil, nil, nil, nil, nil, 59, 60, + nil, 44, 57, 48, 50, 51, 52, 53, nil, 61, + 56, 64, 30, 126, nil, nil, nil, nil, nil, 59, + 60, nil, 44, 57, 48, 50, 51, 52, 53, nil, + 61, 56, 64, nil, 227, nil, nil, nil, 133, nil, + nil, nil, nil, nil, nil, 130, 30, nil, 56, nil, + nil, 40, nil, 59, 60, nil, 44, 57, 48, 50, + 51, 52, 53, nil, 61, 56, 64, 30, 227, nil, + nil, nil, nil, nil, 59, 60, nil, 44, 57, 48, + 50, 51, 52, 53, 30, 61, 56, 64, nil, 40, + nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, + 53, 30, 61, 56, 64, nil, 227, nil, 59, 60, + nil, 44, 57, 48, 50, 51, 52, 53, nil, 61, + nil, 64, 30, nil, nil, nil, nil, nil, 56, 59, + 60, 126, 44, 57, 48, 50, 51, 52, 53, 30, + 61, nil, 64, nil, nil, 56, 59, 60, 40, 44, + 57, 48, 50, 51, 52, 53, 133, 61, nil, 64, + nil, nil, 56, 130, 30, 40, nil, nil, nil, nil, + nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, + 53, 30, 61, 56, 64, nil, 227, nil, nil, nil, + nil, 44, 57, 48, 50, 51, 52, 53, 30, 61, + 56, 64, nil, 227, nil, 59, 60, nil, 44, 57, + 48, 50, 51, 52, 53, nil, 61, 56, 64, 30, + 227, nil, nil, nil, nil, nil, 59, 60, nil, 44, + 57, 48, 50, 51, 52, 53, 30, 61, 56, 64, + nil, 40, nil, 59, 60, nil, 44, 57, 48, 50, + 51, 52, 53, 30, 61, 56, 64, nil, 227, nil, + 59, 60, nil, 44, 57, 48, 50, 51, 52, 53, + nil, 61, nil, 64, 30, nil, nil, nil, nil, nil, + 56, 59, 60, 126, 44, 57, 48, 50, 51, 52, + 53, 30, 61, nil, 64, nil, nil, 56, 59, 60, + 40, 44, 57, 48, 50, 51, 52, 53, 133, 61, + 155, 64, nil, nil, 56, 130, 30, 40, nil, nil, + nil, nil, nil, 59, 60, nil, 44, 57, 48, 50, + 51, 52, 53, 30, 61, 56, 64, nil, 40, nil, + 59, 60, nil, 44, 57, 48, 50, 51, 52, 53, + 30, 61, 56, 64, nil, 40, nil, 59, 60, nil, + 44, 57, 48, 50, 51, 52, 53, nil, 61, 56, + 64, 30, 40, nil, nil, nil, nil, nil, 59, 60, + nil, 44, 57, 48, 50, 51, 52, 53, 30, 61, + nil, 64, nil, nil, 56, 59, 60, 126, 44, 57, + 48, 50, 51, 52, 53, 30, 61, nil, 64, nil, + nil, 56, 59, 60, 40, 44, 57, 48, 50, 51, + 52, 53, nil, 61, nil, 64, nil, nil, 56, 130, + 30, 40, nil, nil, nil, nil, nil, 59, 60, nil, + 44, 57, 48, 50, 51, 52, 53, 30, 61, nil, + 64, nil, nil, 56, 59, 60, 227, 44, 57, 48, + 50, 51, 52, 53, 30, 61, nil, 64, nil, nil, + nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, + 53, nil, 61, 56, 64, nil, 126, nil, nil, 30, + nil, nil, nil, nil, nil, 12, 59, 60, nil, 44, + 57, 48, 50, 51, 52, 53, nil, 61, nil, 64, + nil, 133, nil, nil, nil, nil, nil, nil, 130, 30, + nil, 189, nil, nil, nil, nil, 59, 60, nil, 44, + 57, 48, 50, 51, 52, 53, nil, 61, 69, 64, + 184, 185, nil, 186, 187, 188, nil, 68, nil, nil, + 190, 191, 192, 193, 194, 70, nil, 72, 73, 69, + 74, 75, nil, 113, nil, nil, nil, nil, nil, nil, + nil, 114, nil, nil, nil, nil, 70, nil, 72, 73, + nil, 74, 75 ] racc_action_check = [ - 106, 22, 117, 106, 183, 54, 128, 17, 56, 190, - 0, 89, 89, 0, 83, 190, 98, 186, 249, 186, - 186, 249, 49, 49, 106, 21, 21, 100, 101, 17, - 56, 106, 106, 183, 22, 102, 242, 54, 128, 242, - 106, 106, 103, 106, 106, 106, 106, 106, 106, 106, - 249, 106, 105, 106, 83, 83, 96, 95, 249, 249, - 116, 249, 249, 249, 249, 249, 249, 249, 242, 249, - 222, 249, 20, 222, 97, 118, 242, 242, 222, 242, - 242, 242, 242, 242, 242, 242, 119, 242, 8, 242, - 120, 8, 121, 125, 93, 133, 134, 8, 87, 137, - 138, 143, 222, 20, 20, 20, 144, 84, 146, 81, - 222, 222, 149, 222, 222, 222, 222, 222, 222, 222, - 8, 222, 220, 222, 150, 220, 75, 74, 8, 8, - 220, 8, 8, 8, 8, 8, 8, 8, 175, 8, - 219, 8, 176, 219, 65, 63, 181, 182, 62, 184, - 52, 46, 45, 188, 220, 44, 42, 41, 217, 40, - 39, 217, 220, 220, 38, 220, 220, 220, 220, 220, - 220, 220, 219, 220, 36, 220, 33, 197, 18, 16, - 219, 219, 13, 219, 219, 219, 219, 219, 219, 219, - 217, 219, 208, 219, 209, 208, 210, 211, 217, 217, - 216, 217, 217, 217, 217, 217, 217, 217, 12, 217, - 204, 217, 218, 204, 11, 9, 208, 221, 7, 226, - 236, 237, 238, 208, 208, 239, 5, 243, 94, 245, - 246, 94, 208, 208, 1, 208, 208, 208, 208, 208, - 208, 208, 204, 208, 253, 208, nil, nil, nil, nil, - 204, 204, nil, 204, 204, 204, 204, 204, 204, 204, - 94, 204, 200, 204, nil, 200, nil, nil, 94, 94, - nil, 94, 94, 94, 94, 94, 94, 94, nil, 94, - 135, 94, 107, 135, nil, nil, 200, nil, nil, nil, - nil, nil, nil, 200, 200, 107, nil, 107, 107, nil, - 107, 107, 200, 200, nil, 200, 200, 200, 200, 200, - 200, 200, 135, 200, 145, 200, nil, 145, nil, nil, - 135, 135, 145, 135, 135, 135, 135, 135, 135, 135, - nil, 135, 80, 135, nil, 80, nil, nil, 145, nil, - nil, nil, nil, nil, nil, 145, 145, nil, nil, nil, - 23, nil, nil, 23, 145, 145, nil, 145, 145, 145, - 145, 145, 145, 145, 80, 145, nil, 145, 28, nil, - nil, 28, 80, 80, nil, 80, 80, 80, 80, 80, - 80, 80, 23, 80, nil, 80, 196, nil, nil, 196, - nil, nil, nil, 23, 23, 23, 23, 23, 23, 23, - 28, 23, nil, 23, 195, nil, nil, 195, 28, 28, - nil, 28, 28, 28, 28, 28, 28, 28, 196, 28, - nil, 28, 194, nil, nil, 194, 196, 196, nil, 196, - 196, 196, 196, 196, 196, 196, 195, 196, nil, 196, - 193, nil, nil, 193, 195, 195, nil, 195, 195, 195, - 195, 195, 195, 195, 194, 195, nil, 195, 192, nil, - nil, 192, 194, 194, nil, 194, 194, 194, 194, 194, - 194, 194, 193, 194, nil, 194, 191, nil, nil, 191, - 193, 193, nil, 193, 193, 193, 193, 193, 193, 193, - 192, 193, nil, 193, 79, nil, nil, 79, 192, 192, - nil, 192, 192, 192, 192, 192, 192, 192, 191, 192, - nil, 192, 189, nil, nil, 189, 191, 191, nil, 191, - 191, 191, 191, 191, 191, 191, 79, 191, nil, 191, - 187, nil, nil, 187, 79, 79, nil, 79, 79, 79, - 79, 79, 79, 79, 189, 79, nil, 79, 78, nil, - nil, 78, 189, 189, nil, 189, 189, 189, 189, 189, - 189, 189, 187, 189, nil, 189, 77, nil, nil, 77, - 187, 187, nil, 187, 187, 187, 187, 187, 187, 187, - 78, 187, nil, 187, 69, nil, nil, 69, 78, 78, - nil, 78, 78, 78, 78, 78, 78, 78, 77, 78, - nil, 78, nil, nil, nil, nil, 77, 77, nil, 77, - 77, 77, 77, 77, 77, 77, 69, 77, 152, 77, - nil, 152, nil, nil, 69, 69, nil, 69, 69, 69, - 69, 69, 69, 69, nil, 69, 76, 69, nil, 76, - nil, nil, nil, nil, nil, 76, nil, nil, nil, 152, - 152, nil, nil, nil, 174, nil, nil, 174, 152, 152, - nil, 152, 152, 152, 152, 152, 152, 152, 76, 152, - nil, 152, 71, nil, nil, 71, 76, 76, nil, 76, - 76, 76, 76, 76, 76, 76, 174, 76, nil, 76, - nil, nil, nil, nil, 174, 174, nil, 174, 174, 174, - 174, 174, 174, 174, 71, 174, 180, 174, nil, 180, - nil, nil, 71, 71, nil, 71, 71, 71, 71, 71, - 71, 71, nil, 71, 64, 71, nil, 64, nil, nil, - 180, nil, nil, nil, nil, nil, nil, 180, 180, nil, - nil, nil, 70, nil, nil, 70, 180, 180, nil, 180, - 180, 180, 180, 180, 180, 180, 64, 180, nil, 180, - 68, nil, nil, 68, 64, 64, nil, 64, 64, 64, - 64, 64, 64, 64, 70, 64, nil, 64, nil, nil, - nil, nil, 70, 70, nil, 70, 70, 70, 70, 70, - 70, 70, 68, 70, 185, 70, nil, 185, nil, nil, - 68, 68, nil, 68, 68, 68, 68, 68, 68, 68, - nil, 68, nil, 68, nil, nil, nil, nil, 185, nil, - nil, nil, nil, nil, nil, 185, 185, nil, nil, nil, - nil, nil, nil, 178, 185, 185, nil, 185, 185, 185, - 185, 185, 185, 185, nil, 185, 178, 185, 178, 178, - nil, 178, 178, 178, 178, 55, nil, nil, nil, 55, - nil, nil, nil, 55, nil, nil, nil, nil, 55, nil, - 55, 55, nil, 55, 55, 148, 148, nil, 148, 148, - 148, nil, nil, nil, nil, 148, 148, 148, 148, 148, - 148 ] + 88, 34, 167, 88, 66, 179, 181, 0, 223, 0, + 18, 73, 0, 29, 0, 188, 184, 264, 184, 184, + 264, 188, 179, 71, 179, 179, 100, 179, 179, 179, + 179, 102, 18, 34, 253, 29, 88, 253, 167, 181, + 66, 108, 108, 88, 88, 70, 88, 88, 88, 88, + 88, 88, 88, 264, 88, 247, 88, 103, 247, 106, + 264, 264, 83, 264, 264, 264, 264, 264, 264, 264, + 253, 264, 112, 264, 102, 102, 69, 253, 253, 114, + 253, 253, 253, 253, 253, 253, 253, 115, 253, 243, + 253, 247, 243, 33, 33, 116, 32, 117, 247, 247, + 120, 247, 247, 247, 247, 247, 247, 247, 121, 247, + 229, 247, 68, 229, 61, 61, 127, 243, 85, 130, + 131, 64, 229, 146, 243, 243, 32, 32, 32, 155, + 156, 12, 243, 243, 12, 243, 243, 243, 243, 243, + 243, 243, 157, 243, 12, 243, 229, 158, 159, 160, + 164, 75, 172, 229, 229, 173, 229, 229, 229, 229, + 229, 229, 229, 58, 229, 226, 229, 12, 226, 57, + 177, 81, 56, 180, 12, 12, 54, 12, 12, 12, + 12, 12, 12, 12, 182, 12, 227, 12, 81, 227, + 81, 81, 53, 81, 81, 76, 52, 186, 227, 51, + 94, 226, 50, 224, 48, 45, 224, 93, 226, 226, + 30, 226, 226, 226, 226, 226, 226, 226, 28, 226, + 87, 226, 227, 87, 195, 25, 200, 201, 24, 227, + 227, 212, 227, 227, 227, 227, 227, 227, 227, 224, + 227, 89, 227, 213, 89, 23, 224, 224, 220, 224, + 224, 224, 224, 224, 224, 224, 87, 224, 74, 224, + 16, 225, 15, 87, 87, 13, 87, 87, 87, 87, + 87, 87, 87, 228, 87, 219, 87, 89, 219, 11, + 233, 10, 244, 9, 89, 89, 248, 89, 89, 89, + 89, 89, 89, 89, 249, 89, 211, 89, 250, 211, + 7, 254, 256, 219, 257, 261, 262, 1, 267, 269, + 219, 219, nil, nil, nil, nil, nil, nil, 219, 219, + nil, 219, 219, 219, 219, 219, 219, 219, nil, 219, + 198, 219, 211, 198, nil, nil, nil, nil, nil, 211, + 211, nil, 211, 211, 211, 211, 211, 211, 211, nil, + 211, 194, 211, nil, 194, nil, nil, nil, 198, nil, + nil, nil, nil, nil, nil, 198, 198, nil, 84, nil, + nil, 84, nil, 198, 198, nil, 198, 198, 198, 198, + 198, 198, 198, nil, 198, 193, 198, 194, 193, nil, + nil, nil, nil, nil, 194, 194, nil, 194, 194, 194, + 194, 194, 194, 194, 84, 194, 90, 194, nil, 90, + nil, 84, 84, nil, 84, 84, 84, 84, 84, 84, + 84, 193, 84, 192, 84, nil, 192, nil, 193, 193, + nil, 193, 193, 193, 193, 193, 193, 193, nil, 193, + nil, 193, 90, nil, nil, nil, nil, nil, 80, 90, + 90, 80, 90, 90, 90, 90, 90, 90, 90, 192, + 90, nil, 90, nil, nil, 35, 192, 192, 35, 192, + 192, 192, 192, 192, 192, 192, 80, 192, nil, 192, + nil, nil, 40, 80, 80, 40, nil, nil, nil, nil, + nil, 80, 80, nil, 80, 80, 80, 80, 80, 80, + 80, 35, 80, 191, 80, nil, 191, nil, nil, nil, + nil, 35, 35, 35, 35, 35, 35, 35, 40, 35, + 190, 35, nil, 190, nil, 40, 40, nil, 40, 40, + 40, 40, 40, 40, 40, nil, 40, 189, 40, 191, + 189, nil, nil, nil, nil, nil, 191, 191, nil, 191, + 191, 191, 191, 191, 191, 191, 190, 191, 113, 191, + nil, 113, nil, 190, 190, nil, 190, 190, 190, 190, + 190, 190, 190, 189, 190, 185, 190, nil, 185, nil, + 189, 189, nil, 189, 189, 189, 189, 189, 189, 189, + nil, 189, nil, 189, 113, nil, nil, nil, nil, nil, + 183, 113, 113, 183, 113, 113, 113, 113, 113, 113, + 113, 185, 113, nil, 113, nil, nil, 95, 185, 185, + 95, 185, 185, 185, 185, 185, 185, 185, 183, 185, + 95, 185, nil, nil, 96, 183, 183, 96, nil, nil, + nil, nil, nil, 183, 183, nil, 183, 183, 183, 183, + 183, 183, 183, 95, 183, 176, 183, nil, 176, nil, + 95, 95, nil, 95, 95, 95, 95, 95, 95, 95, + 96, 95, 174, 95, nil, 174, nil, 96, 96, nil, + 96, 96, 96, 96, 96, 96, 96, nil, 96, 97, + 96, 176, 97, nil, nil, nil, nil, nil, 176, 176, + nil, 176, 176, 176, 176, 176, 176, 176, 174, 176, + nil, 176, nil, nil, 133, 174, 174, 133, 174, 174, + 174, 174, 174, 174, 174, 97, 174, nil, 174, nil, + nil, 98, 97, 97, 98, 97, 97, 97, 97, 97, + 97, 97, nil, 97, nil, 97, nil, nil, 99, 133, + 133, 99, nil, nil, nil, nil, nil, 133, 133, nil, + 133, 133, 133, 133, 133, 133, 133, 98, 133, nil, + 133, nil, nil, 187, 98, 98, 187, 98, 98, 98, + 98, 98, 98, 98, 99, 98, nil, 98, nil, nil, + nil, 99, 99, nil, 99, 99, 99, 99, 99, 99, + 99, nil, 99, 126, 99, nil, 126, nil, nil, 187, + nil, nil, nil, nil, nil, 126, 187, 187, nil, 187, + 187, 187, 187, 187, 187, 187, nil, 187, nil, 187, + nil, 126, nil, nil, nil, nil, nil, nil, 126, 126, + nil, 129, nil, nil, nil, nil, 126, 126, nil, 126, + 126, 126, 126, 126, 126, 126, nil, 126, 17, 126, + 129, 129, nil, 129, 129, 129, nil, 17, nil, nil, + 129, 129, 129, 129, 129, 17, nil, 17, 17, 67, + 17, 17, nil, 67, nil, nil, nil, nil, nil, nil, + nil, 67, nil, nil, nil, nil, 67, nil, 67, 67, + nil, 67, 67 ] racc_action_pointer = [ - 0, 234, nil, nil, nil, 224, nil, 207, 83, 215, - nil, 211, 171, 166, nil, nil, 175, -8, 129, nil, - 58, -20, -13, 345, nil, nil, nil, nil, 363, nil, - nil, nil, nil, 127, nil, nil, 166, nil, 156, 152, - 151, 149, 101, nil, 106, 147, 96, nil, nil, -34, - nil, nil, 91, nil, 0, 851, -7, nil, nil, nil, - nil, nil, 122, 108, 719, 107, nil, nil, 755, 579, - 737, 667, nil, nil, 118, 89, 631, 561, 543, 489, - 327, 104, nil, 9, 51, nil, nil, 94, nil, 5, - nil, nil, nil, 82, 223, 49, 19, 56, -2, nil, - 6, 7, 14, 5, nil, 25, -5, 278, nil, nil, - nil, nil, nil, nil, nil, nil, 51, -7, 66, 77, - 81, 83, nil, nil, nil, 88, nil, nil, 1, nil, - nil, nil, nil, 86, 92, 275, nil, 62, 63, nil, - nil, nil, nil, 73, 103, 309, 70, nil, 846, 104, - 93, nil, 613, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 649, 129, 138, nil, 829, nil, - 701, 109, 138, -5, 140, 789, -13, 525, 145, 507, - -20, 471, 453, 435, 417, 399, 381, 164, nil, nil, - 257, nil, nil, nil, 205, nil, nil, nil, 187, 186, - 158, 193, nil, nil, nil, nil, 169, 153, 204, 135, - 117, 186, 65, nil, nil, nil, 184, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 182, 184, 185, 194, - nil, nil, 31, 218, nil, 220, 226, nil, nil, 13, - nil, nil, nil, 207, nil, nil ] + -3, 307, nil, nil, nil, nil, nil, 298, nil, 272, + 240, 259, 126, 265, nil, 259, 219, 854, -9, nil, + nil, nil, nil, 215, 187, 205, nil, nil, 214, -6, + 158, nil, 78, 45, -17, 460, nil, nil, nil, nil, + 477, nil, nil, nil, nil, 153, nil, nil, 196, nil, + 194, 191, 188, 184, 118, nil, 120, 164, 105, nil, + nil, 55, nil, nil, 59, nil, -1, 875, 71, 35, + 23, 1, nil, -14, 233, 126, 154, nil, nil, nil, + 443, 167, nil, 32, 363, 77, nil, 215, -5, 236, + 401, nil, nil, 198, 159, 612, 629, 684, 726, 743, + 21, nil, 26, -2, nil, nil, 55, nil, 35, nil, + nil, nil, 56, 553, 71, 57, 81, 93, nil, nil, + 59, 67, nil, nil, nil, nil, 798, 74, nil, 827, + 111, 85, nil, 709, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 92, nil, nil, nil, + nil, nil, nil, nil, nil, 120, 121, 133, 138, 139, + 140, nil, nil, nil, 145, nil, nil, -3, nil, nil, + nil, nil, 143, 151, 667, nil, 650, 129, nil, 1, + 164, -3, 175, 595, -18, 570, 189, 768, -18, 532, + 515, 498, 418, 380, 346, 207, nil, nil, 325, nil, + 194, 224, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 291, 222, 239, nil, nil, nil, nil, nil, 270, + 240, nil, nil, -27, 198, 253, 160, 181, 238, 105, + nil, nil, nil, 241, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 84, 241, nil, nil, 50, 244, 253, + 263, nil, nil, 29, 292, nil, 260, 300, nil, nil, + nil, 296, 302, nil, 12, nil, nil, 267, nil, 268, + nil, nil, nil ] racc_action_default = [ - -154, -154, -1, -2, -3, -5, -16, -154, -154, -154, - -4, -154, -154, -24, -25, -26, -28, -31, -148, -106, - -107, -110, -113, -154, -115, -116, -117, -118, -154, -120, - -121, -122, -124, -154, -126, -127, -154, -129, -154, -154, - -154, -154, -135, -136, -140, -154, -154, -146, -147, -154, - -151, -152, -154, 256, -154, -154, -36, -37, -39, -40, - -79, -23, -56, -154, -154, -154, -30, -148, -154, -154, - -154, -154, -114, -123, -154, -154, -154, -154, -154, -154, - -154, -138, -139, -154, -154, -150, -153, -6, -8, -12, - -10, -11, -17, -154, -154, -154, -154, -154, -154, -44, - -46, -48, -49, -154, -35, -58, -154, -33, -27, -29, - -108, -109, -111, -112, -119, -125, -154, -154, -154, -154, - -154, -154, -137, -141, -143, -154, -145, -149, -154, -9, - -13, -14, -18, -154, -21, -154, -41, -154, -154, -45, - -47, -50, -34, -63, -154, -154, -57, -65, -154, -154, - -82, -84, -154, -87, -88, -89, -91, -92, -93, -94, - -95, -96, -103, -104, -105, -128, -130, -131, -132, -133, - -134, -144, -7, -19, -154, -154, -73, -42, -154, -32, - -154, -154, -154, -154, -105, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -38, -78, - -154, -86, -20, -22, -154, -43, -51, -52, -154, -154, - -64, -59, -61, -62, -15, -90, -83, -154, -154, -154, - -154, -154, -154, -69, -70, -75, -154, -77, -97, -98, - -99, -100, -101, -102, -85, -72, -53, -154, -154, -154, - -68, -74, -154, -154, -76, -154, -55, -81, -60, -154, - -67, -71, -54, -154, -66, -80 ] + -162, -162, -1, -2, -3, -4, -5, -7, -18, -162, + -162, -162, -162, -162, -6, -162, -162, -162, -44, -45, + -47, -48, -87, -64, -162, -32, -33, -34, -36, -39, + -156, -114, -115, -118, -121, -162, -123, -124, -125, -126, + -162, -128, -129, -130, -132, -162, -134, -135, -162, -137, + -162, -162, -162, -162, -143, -144, -148, -162, -162, -154, + -155, -162, -159, -160, -162, 273, -162, -162, -162, -162, + -162, -162, -52, -54, -56, -57, -162, -43, -156, -26, + -162, -41, -31, -64, -162, -162, -38, -162, -162, -162, + -162, -122, -131, -162, -162, -162, -162, -162, -162, -162, + -146, -147, -162, -162, -158, -161, -8, -10, -14, -12, + -13, -19, -162, -162, -162, -64, -162, -24, -25, -49, + -162, -162, -53, -55, -58, -42, -162, -65, -73, -162, + -162, -90, -92, -162, -95, -96, -97, -99, -100, -101, + -102, -103, -104, -111, -112, -113, -66, -35, -37, -116, + -117, -119, -120, -127, -133, -162, -162, -162, -162, -162, + -162, -145, -149, -151, -162, -153, -157, -162, -11, -15, + -16, -20, -162, -29, -162, -21, -162, -162, -50, -162, + -162, -162, -113, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -46, -86, -162, -94, + -71, -162, -136, -138, -139, -140, -141, -142, -152, -9, + -27, -162, -162, -81, -22, -23, -51, -59, -60, -162, + -162, -17, -98, -91, -162, -162, -162, -162, -162, -162, + -77, -78, -83, -162, -85, -105, -106, -107, -108, -109, + -110, -93, -40, -162, -162, -28, -30, -162, -61, -162, + -162, -76, -82, -162, -162, -84, -72, -67, -69, -70, + -80, -162, -63, -89, -162, -75, -79, -162, -62, -162, + -74, -68, -88 ] racc_goto_table = [ - 66, 17, 146, 55, 133, 56, 175, 88, 198, 212, - 213, 92, 15, 223, 73, 112, 113, 110, 111, 179, - 13, 74, 62, 221, 105, 225, 143, 228, 229, 230, - 231, 232, 233, 61, 93, 199, 205, 90, 206, 104, - 207, 183, 129, 240, 245, 246, 211, 198, 109, 132, - 1, 87, 10, 239, 107, 241, 56, 17, 115, 73, - 73, 73, 73, 5, 216, 234, 248, 213, 108, 117, - 118, 119, 120, 121, 201, 235, 210, 198, 250, 4, - 3, 172, 2, 125, 202, 254, 142, 134, 72, 136, - 123, 124, nil, 243, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, nil, - nil, 90, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 176, 178, - 177, 56, nil, nil, nil, nil, nil, nil, 184, nil, + 77, 29, 17, 127, 107, 118, 18, 212, 67, 172, + 27, 86, 18, 196, 79, 111, 81, 230, 23, 259, + 18, 258, 151, 152, 149, 150, 1, 112, 25, 93, + 82, 228, 83, 232, 115, 235, 236, 237, 238, 239, + 240, 92, 259, 200, 271, 242, 168, 197, 109, 181, + 116, 216, 217, 218, 106, 261, 251, 262, 125, 257, + 171, 14, 254, 7, 6, 119, 5, 148, 223, 196, + 250, 241, 252, 29, 146, 199, 154, 4, 3, 2, + 260, 164, 147, 91, 156, 157, 158, 159, 160, 162, + 163, nil, nil, 92, 92, 92, 92, nil, nil, 265, + nil, nil, 173, nil, nil, 209, 175, 245, 196, nil, + 270, nil, nil, 179, 215, 182, 178, 18, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 248, nil, nil, nil, nil, nil, nil, 109, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 116, + nil, nil, nil, 213, nil, 214, 256, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 134, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 173, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 93, nil, 213, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 176, nil, nil, + nil, 263, nil, nil, nil, nil, 213, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 74, nil, 176, nil, nil, nil, nil, - 247, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 255 ] + nil, 272 ] racc_goto_check = [ - 11, 18, 37, 14, 17, 28, 19, 8, 12, 41, - 42, 15, 22, 47, 59, 60, 60, 58, 58, 27, - 20, 18, 24, 45, 25, 45, 26, 45, 45, 45, - 45, 45, 45, 21, 16, 30, 34, 11, 35, 11, - 36, 37, 10, 47, 38, 39, 40, 12, 11, 15, - 1, 7, 6, 45, 14, 45, 28, 18, 11, 59, - 59, 59, 59, 5, 51, 52, 41, 42, 22, 18, - 18, 18, 18, 18, 53, 19, 37, 12, 45, 4, - 3, 8, 2, 62, 17, 45, 11, 18, 63, 28, - 74, 75, nil, 19, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, 11, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 18, 14, - 28, 28, nil, nil, nil, nil, nil, nil, 18, nil, + 13, 22, 16, 42, 10, 23, 33, 26, 16, 25, + 29, 13, 33, 14, 20, 17, 16, 52, 24, 47, + 33, 46, 65, 65, 63, 63, 1, 18, 27, 22, + 28, 50, 24, 50, 19, 50, 50, 50, 50, 50, + 50, 64, 47, 31, 46, 32, 12, 35, 13, 42, + 13, 39, 40, 41, 9, 43, 52, 44, 13, 45, + 17, 8, 26, 7, 6, 33, 5, 13, 56, 14, + 50, 57, 50, 22, 20, 58, 13, 4, 3, 2, + 26, 67, 29, 68, 22, 22, 22, 22, 22, 79, + 80, nil, nil, 64, 64, 64, 64, nil, nil, 50, + nil, nil, 22, nil, nil, 10, 20, 25, 14, nil, + 50, nil, nil, 16, 23, 22, 33, 33, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 42, nil, nil, nil, nil, nil, nil, 13, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 13, + nil, nil, nil, 22, nil, 22, 42, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 22, nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, + nil, 13, nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 18, nil, 18, nil, nil, nil, nil, - 11, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 11 ] + nil, 13 ] racc_goto_pointer = [ - nil, 50, 82, 80, 79, 63, 47, -3, -47, nil, - -47, -17, -141, nil, -9, -44, -21, -90, -7, -129, - 12, 20, 4, nil, 9, -38, -79, -124, -7, nil, - -114, nil, nil, nil, -142, -140, -138, -104, -193, -192, - -135, -172, -171, nil, nil, -164, nil, -175, nil, nil, - nil, -121, -135, -78, nil, nil, nil, nil, -51, -9, - -55, nil, 0, 65, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 7, 8, nil, nil ] + nil, 26, 79, 78, 77, 66, 64, 63, 54, -12, + -62, nil, -62, -18, -117, nil, -8, -52, -40, -34, + -9, nil, -11, -63, 7, -104, -167, 16, 5, -2, + nil, -103, -155, -4, nil, -83, nil, nil, nil, -128, + -127, -126, -77, -194, -192, -185, -223, -225, nil, nil, + -154, nil, -169, nil, nil, nil, -115, -127, -58, nil, + nil, nil, nil, -63, 6, -67, nil, -21, 48, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, -13, + -12, nil, nil ] racc_goto_default = [ - nil, nil, nil, nil, nil, 182, nil, nil, nil, 89, - nil, 34, 147, 6, nil, nil, nil, nil, 164, nil, - nil, nil, nil, 16, nil, nil, nil, nil, 35, 57, - 224, 58, 59, 98, nil, nil, nil, nil, nil, nil, - nil, nil, 26, 163, 157, 148, 158, nil, 159, 160, - 161, 150, 151, 153, 154, 155, 156, 162, 19, 20, - 21, 22, 23, 24, 25, 27, 29, 30, 31, 33, - 37, 42, 43, 46, nil, nil, 50, 51 ] + nil, nil, nil, nil, nil, nil, nil, 180, nil, nil, + nil, 108, nil, 46, 128, 8, nil, nil, nil, nil, + nil, 117, 145, nil, nil, nil, nil, nil, nil, nil, + 28, nil, nil, 47, 19, 231, 20, 21, 71, nil, + nil, nil, nil, nil, nil, nil, nil, 38, 144, 138, + 129, 139, nil, 140, 141, 142, 131, 132, 134, 135, + 136, 137, 143, 31, 32, 33, 34, 35, 36, 37, + 39, 41, 42, 43, 45, 49, 54, 55, 58, nil, + nil, 62, 63 ] racc_reduce_table = [ 0, 0, :racc_error, - 1, 61, :_reduce_none, - 1, 62, :_reduce_none, - 1, 62, :_reduce_none, - 2, 63, :_reduce_4, - 0, 66, :_reduce_none, - 3, 66, :_reduce_6, - 3, 67, :_reduce_7, - 1, 67, :_reduce_none, - 2, 68, :_reduce_9, - 1, 69, :_reduce_none, - 1, 69, :_reduce_11, - 0, 70, :_reduce_12, - 1, 70, :_reduce_13, - 1, 70, :_reduce_14, - 3, 72, :_reduce_15, + 1, 64, :_reduce_none, 1, 65, :_reduce_none, - 4, 64, :_reduce_17, - 5, 64, :_reduce_18, - 3, 76, :_reduce_19, - 3, 77, :_reduce_20, - 1, 77, :_reduce_none, - 4, 75, :_reduce_22, - 3, 73, :_reduce_23, - 2, 73, :_reduce_24, - 1, 80, :_reduce_25, - 1, 80, :_reduce_26, - 3, 82, :_reduce_27, - 1, 82, :_reduce_none, - 3, 83, :_reduce_29, - 2, 83, :_reduce_30, - 1, 83, :_reduce_none, - 4, 81, :_reduce_32, - 2, 84, :_reduce_33, - 3, 74, :_reduce_34, - 2, 74, :_reduce_35, - 1, 74, :_reduce_none, + 1, 65, :_reduce_none, + 1, 65, :_reduce_none, + 1, 65, :_reduce_none, + 2, 66, :_reduce_6, + 0, 71, :_reduce_none, + 3, 71, :_reduce_8, + 3, 72, :_reduce_9, + 1, 72, :_reduce_none, + 2, 73, :_reduce_11, 1, 74, :_reduce_none, - 1, 90, :_reduce_none, - 1, 89, :_reduce_none, - 1, 89, :_reduce_none, - 3, 91, :_reduce_41, - 4, 91, :_reduce_42, - 5, 92, :_reduce_43, - 1, 93, :_reduce_44, - 2, 93, :_reduce_45, - 1, 93, :_reduce_46, - 2, 93, :_reduce_47, - 1, 93, :_reduce_48, - 1, 93, :_reduce_49, - 2, 93, :_reduce_50, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 2, 95, :_reduce_53, - 4, 96, :_reduce_54, - 1, 98, :_reduce_none, - 0, 85, :_reduce_none, - 2, 85, :_reduce_57, - 0, 86, :_reduce_none, - 3, 86, :_reduce_59, - 3, 100, :_reduce_60, - 1, 100, :_reduce_none, - 1, 101, :_reduce_none, - 0, 87, :_reduce_none, - 2, 87, :_reduce_64, - 1, 103, :_reduce_none, - 6, 104, :_reduce_66, - 5, 104, :_reduce_67, - 4, 106, :_reduce_68, - 3, 106, :_reduce_69, - 1, 107, :_reduce_none, - 3, 107, :_reduce_71, - 3, 79, :_reduce_72, + 1, 74, :_reduce_13, + 0, 75, :_reduce_14, + 1, 75, :_reduce_15, + 1, 75, :_reduce_16, + 3, 77, :_reduce_17, + 1, 70, :_reduce_none, + 4, 67, :_reduce_19, + 5, 67, :_reduce_20, + 5, 68, :_reduce_21, + 3, 84, :_reduce_22, + 3, 86, :_reduce_23, + 1, 86, :_reduce_none, + 1, 82, :_reduce_25, + 3, 69, :_reduce_26, + 3, 81, :_reduce_27, + 3, 88, :_reduce_28, + 1, 88, :_reduce_none, + 4, 80, :_reduce_30, + 3, 78, :_reduce_31, + 2, 78, :_reduce_32, + 1, 90, :_reduce_33, + 1, 90, :_reduce_34, + 3, 92, :_reduce_35, + 1, 92, :_reduce_none, + 3, 93, :_reduce_37, + 2, 93, :_reduce_38, + 1, 93, :_reduce_none, + 4, 91, :_reduce_40, + 2, 87, :_reduce_41, + 3, 79, :_reduce_42, + 2, 79, :_reduce_43, + 1, 79, :_reduce_none, 1, 79, :_reduce_none, - 4, 108, :_reduce_74, - 3, 108, :_reduce_75, - 4, 109, :_reduce_76, - 3, 109, :_reduce_77, - 2, 110, :_reduce_78, - 1, 88, :_reduce_79, - 3, 99, :_reduce_80, - 1, 99, :_reduce_none, + 1, 98, :_reduce_none, + 1, 97, :_reduce_none, 1, 97, :_reduce_none, - 3, 97, :_reduce_83, + 3, 99, :_reduce_49, + 4, 99, :_reduce_50, + 5, 100, :_reduce_51, + 1, 101, :_reduce_52, + 2, 101, :_reduce_53, + 1, 101, :_reduce_54, + 2, 101, :_reduce_55, + 1, 101, :_reduce_56, + 1, 101, :_reduce_57, + 2, 101, :_reduce_58, + 1, 102, :_reduce_none, + 1, 102, :_reduce_none, + 2, 103, :_reduce_61, + 4, 104, :_reduce_62, + 1, 106, :_reduce_none, + 0, 83, :_reduce_none, + 2, 83, :_reduce_65, + 0, 94, :_reduce_none, + 3, 94, :_reduce_67, + 3, 108, :_reduce_68, + 1, 108, :_reduce_none, + 1, 109, :_reduce_none, + 0, 95, :_reduce_none, + 2, 95, :_reduce_72, 1, 111, :_reduce_none, - 3, 111, :_reduce_85, - 2, 112, :_reduce_86, - 1, 112, :_reduce_none, - 1, 113, :_reduce_none, - 1, 114, :_reduce_none, - 3, 114, :_reduce_90, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, + 6, 112, :_reduce_74, + 5, 112, :_reduce_75, + 4, 114, :_reduce_76, + 3, 114, :_reduce_77, 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 3, 116, :_reduce_97, - 3, 116, :_reduce_98, - 3, 116, :_reduce_99, - 3, 116, :_reduce_100, - 3, 116, :_reduce_101, - 3, 116, :_reduce_102, - 1, 105, :_reduce_none, + 3, 115, :_reduce_79, + 3, 89, :_reduce_80, + 1, 89, :_reduce_none, + 4, 116, :_reduce_82, + 3, 116, :_reduce_83, + 4, 117, :_reduce_84, + 3, 117, :_reduce_85, + 2, 118, :_reduce_86, + 1, 96, :_reduce_87, + 3, 107, :_reduce_88, + 1, 107, :_reduce_none, 1, 105, :_reduce_none, - 1, 117, :_reduce_none, - 1, 78, :_reduce_none, - 1, 78, :_reduce_none, - 3, 118, :_reduce_108, - 3, 118, :_reduce_109, - 1, 118, :_reduce_none, - 3, 120, :_reduce_111, - 3, 120, :_reduce_112, + 3, 105, :_reduce_91, + 1, 119, :_reduce_none, + 3, 119, :_reduce_93, + 2, 120, :_reduce_94, 1, 120, :_reduce_none, - 2, 121, :_reduce_114, 1, 121, :_reduce_none, + 1, 122, :_reduce_none, + 3, 122, :_reduce_98, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, - 3, 123, :_reduce_119, - 1, 124, :_reduce_none, - 1, 124, :_reduce_none, - 1, 126, :_reduce_none, - 1, 126, :_reduce_none, - 1, 127, :_reduce_124, - 3, 102, :_reduce_125, - 1, 102, :_reduce_none, - 1, 129, :_reduce_none, - 4, 125, :_reduce_128, + 1, 123, :_reduce_none, + 1, 123, :_reduce_none, + 1, 123, :_reduce_none, + 3, 124, :_reduce_105, + 3, 124, :_reduce_106, + 3, 124, :_reduce_107, + 3, 124, :_reduce_108, + 3, 124, :_reduce_109, + 3, 124, :_reduce_110, + 1, 113, :_reduce_none, + 1, 113, :_reduce_none, 1, 125, :_reduce_none, - 4, 130, :_reduce_130, - 4, 130, :_reduce_131, - 4, 130, :_reduce_132, - 4, 130, :_reduce_133, - 4, 130, :_reduce_134, - 1, 128, :_reduce_none, + 1, 85, :_reduce_none, + 1, 85, :_reduce_none, + 3, 126, :_reduce_116, + 3, 126, :_reduce_117, + 1, 126, :_reduce_none, + 3, 128, :_reduce_119, + 3, 128, :_reduce_120, 1, 128, :_reduce_none, - 3, 131, :_reduce_137, - 2, 131, :_reduce_138, - 2, 131, :_reduce_139, - 1, 131, :_reduce_140, - 3, 132, :_reduce_141, - 1, 133, :_reduce_none, + 2, 129, :_reduce_122, + 1, 129, :_reduce_none, + 1, 131, :_reduce_none, + 1, 131, :_reduce_none, + 1, 131, :_reduce_none, + 3, 131, :_reduce_127, + 1, 132, :_reduce_none, + 1, 132, :_reduce_none, 1, 134, :_reduce_none, - 2, 135, :_reduce_144, - 1, 135, :_reduce_145, - 1, 122, :_reduce_146, - 1, 122, :_reduce_147, - 1, 71, :_reduce_148, - 3, 119, :_reduce_149, - 2, 119, :_reduce_150, - 1, 119, :_reduce_none, + 1, 134, :_reduce_none, + 1, 135, :_reduce_132, + 3, 110, :_reduce_133, + 1, 110, :_reduce_none, + 1, 137, :_reduce_none, + 4, 133, :_reduce_136, + 1, 133, :_reduce_none, + 4, 138, :_reduce_138, + 4, 138, :_reduce_139, + 4, 138, :_reduce_140, + 4, 138, :_reduce_141, + 4, 138, :_reduce_142, 1, 136, :_reduce_none, - 2, 137, :_reduce_153 ] - -racc_reduce_n = 154 - -racc_shift_n = 256 + 1, 136, :_reduce_none, + 3, 139, :_reduce_145, + 2, 139, :_reduce_146, + 2, 139, :_reduce_147, + 1, 139, :_reduce_148, + 3, 140, :_reduce_149, + 1, 141, :_reduce_none, + 1, 142, :_reduce_none, + 2, 143, :_reduce_152, + 1, 143, :_reduce_153, + 1, 130, :_reduce_154, + 1, 130, :_reduce_155, + 1, 76, :_reduce_156, + 3, 127, :_reduce_157, + 2, 127, :_reduce_158, + 1, 127, :_reduce_none, + 1, 144, :_reduce_none, + 2, 145, :_reduce_161 ] + +racc_reduce_n = 162 + +racc_shift_n = 273 racc_token_table = { false => 0, @@ -504,56 +524,59 @@ def self.parse(sql) :right_paren => 9, :INSERT => 10, :INTO => 11, - :VALUES => 12, - :SELECT => 13, - :asterisk => 14, - :AS => 15, - :FROM => 16, - :CROSS => 17, - :JOIN => 18, - :INNER => 19, - :LEFT => 20, - :OUTER => 21, - :RIGHT => 22, - :FULL => 23, - :ON => 24, - :USING => 25, - :WHERE => 26, - :GROUP => 27, - :HAVING => 28, - :NOT => 29, - :BETWEEN => 30, - :AND => 31, - :IN => 32, - :LIKE => 33, - :IS => 34, - :NULL => 35, - :EXISTS => 36, - :identifier => 37, - :OR => 38, - :equals_operator => 39, - :not_equals_operator => 40, - :less_than_operator => 41, - :greater_than_operator => 42, - :less_than_or_equals_operator => 43, - :greater_than_or_equals_operator => 44, - :plus_sign => 45, - :minus_sign => 46, - :solidus => 47, - :CURRENT_USER => 48, - :period => 49, - :COUNT => 50, - :AVG => 51, - :MAX => 52, - :MIN => 53, - :SUM => 54, - :E => 55, - :quote => 56, - :character_string_literal => 57, - :DATE => 58, - :date_string => 59 } - -racc_nt_base = 60 + :UPDATE => 12, + :SET => 13, + :equals_operator => 14, + :DELETE => 15, + :VALUES => 16, + :SELECT => 17, + :asterisk => 18, + :AS => 19, + :FROM => 20, + :CROSS => 21, + :JOIN => 22, + :INNER => 23, + :LEFT => 24, + :OUTER => 25, + :RIGHT => 26, + :FULL => 27, + :ON => 28, + :USING => 29, + :WHERE => 30, + :GROUP => 31, + :HAVING => 32, + :NOT => 33, + :BETWEEN => 34, + :AND => 35, + :IN => 36, + :LIKE => 37, + :IS => 38, + :NULL => 39, + :EXISTS => 40, + :identifier => 41, + :OR => 42, + :not_equals_operator => 43, + :less_than_operator => 44, + :greater_than_operator => 45, + :less_than_or_equals_operator => 46, + :greater_than_or_equals_operator => 47, + :plus_sign => 48, + :minus_sign => 49, + :solidus => 50, + :CURRENT_USER => 51, + :period => 52, + :COUNT => 53, + :AVG => 54, + :MAX => 55, + :MIN => 56, + :SUM => 57, + :E => 58, + :quote => 59, + :character_string_literal => 60, + :DATE => 61, + :date_string => 62 } + +racc_nt_base = 63 racc_use_result_var = true @@ -586,6 +609,10 @@ def self.parse(sql) "right_paren", "INSERT", "INTO", + "UPDATE", + "SET", + "equals_operator", + "DELETE", "VALUES", "SELECT", "asterisk", @@ -613,7 +640,6 @@ def self.parse(sql) "EXISTS", "identifier", "OR", - "equals_operator", "not_equals_operator", "less_than_operator", "greater_than_operator", @@ -639,6 +665,8 @@ def self.parse(sql) "direct_sql_data_statement", "direct_select_statement_multiple_rows", "insert_specification", + "update_specification", + "delete_specification", "query_expression", "order_by_clause", "sort_specification_list", @@ -651,15 +679,18 @@ def self.parse(sql) "table_reference", "value_list", "column_list", - "in_column_list", + "update_column_list", + "where_clause", + "update_column", "value_expression", + "update_column_sublist", + "from_clause", + "in_column_list", "in_value_list", "select_list", "table_expression", "select_sublist", "derived_column", - "from_clause", - "where_clause", "group_by_clause", "having_clause", "table_name", @@ -725,756 +756,797 @@ def self.parse(sql) # reduce 3 omitted -module_eval(<<'.,.,', 'parser.racc', 13) - def _reduce_4(val, _values, result) +# reduce 4 omitted + +# reduce 5 omitted + +module_eval(<<'.,.,', 'parser.racc', 15) + def _reduce_6(val, _values, result) result = SQLParser::Statement::DirectSelect.new(val[0], val[1]) result end .,., -# reduce 5 omitted +# reduce 7 omitted -module_eval(<<'.,.,', 'parser.racc', 18) - def _reduce_6(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 20) + def _reduce_8(val, _values, result) result = SQLParser::Statement::OrderBy.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 21) - def _reduce_7(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 23) + def _reduce_9(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 8 omitted +# reduce 10 omitted -module_eval(<<'.,.,', 'parser.racc', 25) - def _reduce_9(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 27) + def _reduce_11(val, _values, result) result = val[1].new(val[0]) result end .,., -# reduce 10 omitted +# reduce 12 omitted -module_eval(<<'.,.,', 'parser.racc', 29) - def _reduce_11(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 31) + def _reduce_13(val, _values, result) result = SQLParser::Statement::Integer.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 32) - def _reduce_12(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 34) + def _reduce_14(val, _values, result) result = SQLParser::Statement::Ascending result end .,., -module_eval(<<'.,.,', 'parser.racc', 33) - def _reduce_13(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 35) + def _reduce_15(val, _values, result) result = SQLParser::Statement::Ascending result end .,., -module_eval(<<'.,.,', 'parser.racc', 34) - def _reduce_14(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 36) + def _reduce_16(val, _values, result) result = SQLParser::Statement::Descending result end .,., -module_eval(<<'.,.,', 'parser.racc', 39) - def _reduce_15(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 41) + def _reduce_17(val, _values, result) result = SQLParser::Statement::Subquery.new(val[1]) result end .,., -# reduce 16 omitted +# reduce 18 omitted -module_eval(<<'.,.,', 'parser.racc', 45) - def _reduce_17(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 47) + def _reduce_19(val, _values, result) result = SQLParser::Statement::Insert.new(val[2], nil, val[3]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 46) - def _reduce_18(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 48) + def _reduce_20(val, _values, result) result = SQLParser::Statement::Insert.new(val[2], val[3], val[4]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 49) - def _reduce_19(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 51) + def _reduce_21(val, _values, result) + result = SQLParser::Statement::Update.new(val[1], val[3], val[4]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 54) + def _reduce_22(val, _values, result) + result = SQLParser::Statement::UpdateColumn.new(val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 57) + def _reduce_23(val, _values, result) + result = Array(val[0]) + Array(val[2]) + result + end +.,., + +# reduce 24 omitted + +module_eval(<<'.,.,', 'parser.racc', 61) + def _reduce_25(val, _values, result) + result = SQLParser::Statement::UpdateColumnList.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 64) + def _reduce_26(val, _values, result) + result = SQLParser::Statement::Delete.new(val[1], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 67) + def _reduce_27(val, _values, result) result = SQLParser::Statement::InColumnList.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 52) - def _reduce_20(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 70) + def _reduce_28(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 21 omitted +# reduce 29 omitted -module_eval(<<'.,.,', 'parser.racc', 56) - def _reduce_22(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 74) + def _reduce_30(val, _values, result) result = SQLParser::Statement::InValueList.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 59) - def _reduce_23(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 77) + def _reduce_31(val, _values, result) result = SQLParser::Statement::Select.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 60) - def _reduce_24(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 78) + def _reduce_32(val, _values, result) result = SQLParser::Statement::Select.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 63) - def _reduce_25(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 81) + def _reduce_33(val, _values, result) result = SQLParser::Statement::All.new result end .,., -module_eval(<<'.,.,', 'parser.racc', 64) - def _reduce_26(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 82) + def _reduce_34(val, _values, result) result = SQLParser::Statement::SelectList.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 67) - def _reduce_27(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 85) + def _reduce_35(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 28 omitted +# reduce 36 omitted -module_eval(<<'.,.,', 'parser.racc', 71) - def _reduce_29(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 89) + def _reduce_37(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 72) - def _reduce_30(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 90) + def _reduce_38(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 31 omitted +# reduce 39 omitted -module_eval(<<'.,.,', 'parser.racc', 76) - def _reduce_32(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 94) + def _reduce_40(val, _values, result) result = SQLParser::Statement::TableExpression.new(val[0], val[1], val[2], val[3]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 79) - def _reduce_33(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 97) + def _reduce_41(val, _values, result) result = SQLParser::Statement::FromClause.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 82) - def _reduce_34(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 100) + def _reduce_42(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 83) - def _reduce_35(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 101) + def _reduce_43(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 36 omitted +# reduce 44 omitted -# reduce 37 omitted +# reduce 45 omitted -# reduce 38 omitted +# reduce 46 omitted -# reduce 39 omitted +# reduce 47 omitted -# reduce 40 omitted +# reduce 48 omitted -module_eval(<<'.,.,', 'parser.racc', 95) - def _reduce_41(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 113) + def _reduce_49(val, _values, result) result = SQLParser::Statement::CrossJoin.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 96) - def _reduce_42(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 114) + def _reduce_50(val, _values, result) result = SQLParser::Statement::CrossJoin.new(val[0], val[3]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 99) - def _reduce_43(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 117) + def _reduce_51(val, _values, result) result = val[1].new(val[0], val[3], val[4]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 102) - def _reduce_44(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 120) + def _reduce_52(val, _values, result) result = SQLParser::Statement::InnerJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 103) - def _reduce_45(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 121) + def _reduce_53(val, _values, result) result = SQLParser::Statement::LeftOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 104) - def _reduce_46(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 122) + def _reduce_54(val, _values, result) result = SQLParser::Statement::LeftJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 105) - def _reduce_47(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 123) + def _reduce_55(val, _values, result) result = SQLParser::Statement::RightOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 106) - def _reduce_48(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 124) + def _reduce_56(val, _values, result) result = SQLParser::Statement::RightJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 107) - def _reduce_49(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 125) + def _reduce_57(val, _values, result) result = SQLParser::Statement::FullJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 108) - def _reduce_50(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 126) + def _reduce_58(val, _values, result) result = SQLParser::Statement::FullOuterJoin result end .,., -# reduce 51 omitted +# reduce 59 omitted -# reduce 52 omitted +# reduce 60 omitted -module_eval(<<'.,.,', 'parser.racc', 115) - def _reduce_53(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 133) + def _reduce_61(val, _values, result) result = SQLParser::Statement::On.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 118) - def _reduce_54(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 136) + def _reduce_62(val, _values, result) result = SQLParser::Statement::Using.new(val[2]) result end .,., -# reduce 55 omitted +# reduce 63 omitted -# reduce 56 omitted +# reduce 64 omitted -module_eval(<<'.,.,', 'parser.racc', 125) - def _reduce_57(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 143) + def _reduce_65(val, _values, result) result = SQLParser::Statement::WhereClause.new(val[1]) result end .,., -# reduce 58 omitted +# reduce 66 omitted -module_eval(<<'.,.,', 'parser.racc', 129) - def _reduce_59(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 147) + def _reduce_67(val, _values, result) result = SQLParser::Statement::GroupByClause.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 132) - def _reduce_60(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 150) + def _reduce_68(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 61 omitted +# reduce 69 omitted -# reduce 62 omitted +# reduce 70 omitted -# reduce 63 omitted +# reduce 71 omitted -module_eval(<<'.,.,', 'parser.racc', 140) - def _reduce_64(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 158) + def _reduce_72(val, _values, result) result = SQLParser::Statement::HavingClause.new(val[1]) result end .,., -# reduce 65 omitted +# reduce 73 omitted -module_eval(<<'.,.,', 'parser.racc', 147) - def _reduce_66(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 165) + def _reduce_74(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Between.new(val[0], val[3], val[5])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 148) - def _reduce_67(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 166) + def _reduce_75(val, _values, result) result = SQLParser::Statement::Between.new(val[0], val[2], val[4]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 151) - def _reduce_68(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 169) + def _reduce_76(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::In.new(val[0], val[3])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 152) - def _reduce_69(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 170) + def _reduce_77(val, _values, result) result = SQLParser::Statement::In.new(val[0], val[2]) result end .,., -# reduce 70 omitted +# reduce 78 omitted -module_eval(<<'.,.,', 'parser.racc', 156) - def _reduce_71(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 174) + def _reduce_79(val, _values, result) result = SQLParser::Statement::InValueList.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 159) - def _reduce_72(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 177) + def _reduce_80(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 73 omitted +# reduce 81 omitted -module_eval(<<'.,.,', 'parser.racc', 166) - def _reduce_74(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 184) + def _reduce_82(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Like.new(val[0], val[3])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 167) - def _reduce_75(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 185) + def _reduce_83(val, _values, result) result = SQLParser::Statement::Like.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 170) - def _reduce_76(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 188) + def _reduce_84(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Is.new(val[0], SQLParser::Statement::Null.new)) result end .,., -module_eval(<<'.,.,', 'parser.racc', 171) - def _reduce_77(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 189) + def _reduce_85(val, _values, result) result = SQLParser::Statement::Is.new(val[0], SQLParser::Statement::Null.new) result end .,., -module_eval(<<'.,.,', 'parser.racc', 174) - def _reduce_78(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 192) + def _reduce_86(val, _values, result) result = SQLParser::Statement::Exists.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 178) - def _reduce_79(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 196) + def _reduce_87(val, _values, result) result = SQLParser::Statement::Table.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 181) - def _reduce_80(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 199) + def _reduce_88(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 81 omitted +# reduce 89 omitted -# reduce 82 omitted +# reduce 90 omitted -module_eval(<<'.,.,', 'parser.racc', 187) - def _reduce_83(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 205) + def _reduce_91(val, _values, result) result = SQLParser::Statement::Or.new(val[0], val[2]) result end .,., -# reduce 84 omitted +# reduce 92 omitted -module_eval(<<'.,.,', 'parser.racc', 191) - def _reduce_85(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 209) + def _reduce_93(val, _values, result) result = SQLParser::Statement::And.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 194) - def _reduce_86(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 212) + def _reduce_94(val, _values, result) result = SQLParser::Statement::Not.new(val[1]) result end .,., -# reduce 87 omitted +# reduce 95 omitted -# reduce 88 omitted +# reduce 96 omitted -# reduce 89 omitted +# reduce 97 omitted -module_eval(<<'.,.,', 'parser.racc', 202) - def _reduce_90(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 220) + def _reduce_98(val, _values, result) result = val[1] result end .,., -# reduce 91 omitted +# reduce 99 omitted -# reduce 92 omitted +# reduce 100 omitted -# reduce 93 omitted +# reduce 101 omitted -# reduce 94 omitted +# reduce 102 omitted -# reduce 95 omitted +# reduce 103 omitted -# reduce 96 omitted +# reduce 104 omitted -module_eval(<<'.,.,', 'parser.racc', 213) - def _reduce_97(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 231) + def _reduce_105(val, _values, result) result = SQLParser::Statement::Equals.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 214) - def _reduce_98(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 232) + def _reduce_106(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Equals.new(val[0], val[2])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 215) - def _reduce_99(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 233) + def _reduce_107(val, _values, result) result = SQLParser::Statement::Less.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 216) - def _reduce_100(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 234) + def _reduce_108(val, _values, result) result = SQLParser::Statement::Greater.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 217) - def _reduce_101(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 235) + def _reduce_109(val, _values, result) result = SQLParser::Statement::LessOrEquals.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 218) - def _reduce_102(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 236) + def _reduce_110(val, _values, result) result = SQLParser::Statement::GreaterOrEquals.new(val[0], val[2]) result end .,., -# reduce 103 omitted +# reduce 111 omitted -# reduce 104 omitted +# reduce 112 omitted -# reduce 105 omitted +# reduce 113 omitted -# reduce 106 omitted +# reduce 114 omitted -# reduce 107 omitted +# reduce 115 omitted -module_eval(<<'.,.,', 'parser.racc', 232) - def _reduce_108(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 250) + def _reduce_116(val, _values, result) result = SQLParser::Statement::Add.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 233) - def _reduce_109(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 251) + def _reduce_117(val, _values, result) result = SQLParser::Statement::Subtract.new(val[0], val[2]) result end .,., -# reduce 110 omitted +# reduce 118 omitted -module_eval(<<'.,.,', 'parser.racc', 237) - def _reduce_111(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 255) + def _reduce_119(val, _values, result) result = SQLParser::Statement::Multiply.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 238) - def _reduce_112(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 256) + def _reduce_120(val, _values, result) result = SQLParser::Statement::Divide.new(val[0], val[2]) result end .,., -# reduce 113 omitted +# reduce 121 omitted -module_eval(<<'.,.,', 'parser.racc', 242) - def _reduce_114(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 260) + def _reduce_122(val, _values, result) result = val[0].new(val[1]) result end .,., -# reduce 115 omitted +# reduce 123 omitted -# reduce 116 omitted +# reduce 124 omitted -# reduce 117 omitted +# reduce 125 omitted -# reduce 118 omitted +# reduce 126 omitted -module_eval(<<'.,.,', 'parser.racc', 249) - def _reduce_119(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 267) + def _reduce_127(val, _values, result) result = val[1] result end .,., -# reduce 120 omitted +# reduce 128 omitted -# reduce 121 omitted +# reduce 129 omitted -# reduce 122 omitted +# reduce 130 omitted -# reduce 123 omitted +# reduce 131 omitted -module_eval(<<'.,.,', 'parser.racc', 260) - def _reduce_124(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 278) + def _reduce_132(val, _values, result) result = SQLParser::Statement::CurrentUser.new result end .,., -module_eval(<<'.,.,', 'parser.racc', 263) - def _reduce_125(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 281) + def _reduce_133(val, _values, result) result = SQLParser::Statement::QualifiedColumn.new(val[0], val[2]) result end .,., -# reduce 126 omitted +# reduce 134 omitted -# reduce 127 omitted +# reduce 135 omitted -module_eval(<<'.,.,', 'parser.racc', 270) - def _reduce_128(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 288) + def _reduce_136(val, _values, result) result = SQLParser::Statement::Count.new(SQLParser::Statement::All.new) result end .,., -# reduce 129 omitted +# reduce 137 omitted -module_eval(<<'.,.,', 'parser.racc', 274) - def _reduce_130(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 292) + def _reduce_138(val, _values, result) result = SQLParser::Statement::Count.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 275) - def _reduce_131(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 293) + def _reduce_139(val, _values, result) result = SQLParser::Statement::Average.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 276) - def _reduce_132(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 294) + def _reduce_140(val, _values, result) result = SQLParser::Statement::Maximum.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 277) - def _reduce_133(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 295) + def _reduce_141(val, _values, result) result = SQLParser::Statement::Minimum.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 278) - def _reduce_134(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 296) + def _reduce_142(val, _values, result) result = SQLParser::Statement::Sum.new(val[2]) result end .,., -# reduce 135 omitted +# reduce 143 omitted -# reduce 136 omitted +# reduce 144 omitted -module_eval(<<'.,.,', 'parser.racc', 286) - def _reduce_137(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 304) + def _reduce_145(val, _values, result) result = SQLParser::Statement::Float.new("#{val[0]}.#{val[2]}".to_f) result end .,., -module_eval(<<'.,.,', 'parser.racc', 287) - def _reduce_138(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 305) + def _reduce_146(val, _values, result) result = SQLParser::Statement::Float.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 288) - def _reduce_139(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 306) + def _reduce_147(val, _values, result) result = SQLParser::Statement::Float.new("0.#{val[1]}".to_f) result end .,., -module_eval(<<'.,.,', 'parser.racc', 289) - def _reduce_140(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 307) + def _reduce_148(val, _values, result) result = SQLParser::Statement::Integer.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 292) - def _reduce_141(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 310) + def _reduce_149(val, _values, result) result = SQLParser::Statement::ApproximateFloat.new(val[0], val[2]) result end .,., -# reduce 142 omitted +# reduce 150 omitted -# reduce 143 omitted +# reduce 151 omitted -module_eval(<<'.,.,', 'parser.racc', 301) - def _reduce_144(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 319) + def _reduce_152(val, _values, result) result = val[0].new(SQLParser::Statement::Integer.new(val[1])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 302) - def _reduce_145(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 320) + def _reduce_153(val, _values, result) result = SQLParser::Statement::Integer.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 305) - def _reduce_146(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 323) + def _reduce_154(val, _values, result) result = SQLParser::Statement::UnaryPlus result end .,., -module_eval(<<'.,.,', 'parser.racc', 306) - def _reduce_147(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 324) + def _reduce_155(val, _values, result) result = SQLParser::Statement::UnaryMinus result end .,., -module_eval(<<'.,.,', 'parser.racc', 310) - def _reduce_148(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 328) + def _reduce_156(val, _values, result) result = SQLParser::Statement::Column.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 314) - def _reduce_149(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 332) + def _reduce_157(val, _values, result) result = SQLParser::Statement::String.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 315) - def _reduce_150(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 333) + def _reduce_158(val, _values, result) result = SQLParser::Statement::String.new('') result end .,., -# reduce 151 omitted +# reduce 159 omitted -# reduce 152 omitted +# reduce 160 omitted -module_eval(<<'.,.,', 'parser.racc', 322) - def _reduce_153(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 340) + def _reduce_161(val, _values, result) result = SQLParser::Statement::Date.new(val[1]) result end diff --git a/lib/sql-parser/parser.rex b/lib/sql-parser/parser.rex index 2ab6b95..4923155 100644 --- a/lib/sql-parser/parser.rex +++ b/lib/sql-parser/parser.rex @@ -37,6 +37,8 @@ rule # keywords SELECT { [:SELECT, text] } + UPDATE { [:UPDATE, text] } + DELETE { [:DELETE, text] } DATE { [:DATE, text] } ASC { [:ASC, text] } AS { [:AS, text] } @@ -74,6 +76,7 @@ rule DESC { [:DESC, text] } CURRENT_USER { [:CURRENT_USER, text] } VALUES { [:VALUES, text] } + SET { [:SET, text] } # tokens E { [:E, text] } diff --git a/lib/sql-parser/parser.rex.rb b/lib/sql-parser/parser.rex.rb index a9e002a..a56fb2f 100644 --- a/lib/sql-parser/parser.rex.rb +++ b/lib/sql-parser/parser.rex.rb @@ -45,7 +45,7 @@ def scan_file( filename ) def next_token return if @ss.eos? - + # skips empty actions until token = _next_token or @ss.eos?; end token @@ -78,6 +78,12 @@ def _next_token when (text = @ss.scan(/SELECT/i)) action { [:SELECT, text] } + when (text = @ss.scan(/UPDATE/i)) + action { [:UPDATE, text] } + + when (text = @ss.scan(/DELETE/i)) + action { [:DELETE, text] } + when (text = @ss.scan(/DATE/i)) action { [:DATE, text] } @@ -189,6 +195,9 @@ def _next_token when (text = @ss.scan(/VALUES/i)) action { [:VALUES, text] } + when (text = @ss.scan(/SET/i)) + action { [:SET, text] } + when (text = @ss.scan(/E/i)) action { [:E, text] } @@ -260,7 +269,7 @@ def _next_token action { @state = nil; [:quote, text] } when (text = @ss.scan(/.*(?=\')/i)) - action { [:character_string_literal, text.gsub("''", "'")] } + action { [:character_string_literal, text.gsub("''", "'")] } else text = @ss.string[@ss.pos .. -1] @@ -273,7 +282,7 @@ def _next_token action { @state = nil; [:quote, text] } when (text = @ss.scan(/.*(?=\")/i)) - action { [:character_string_literal, text.gsub('""', '"')] } + action { [:character_string_literal, text.gsub('""', '"')] } else text = @ss.string[@ss.pos .. -1] diff --git a/lib/sql-parser/sql_visitor.rb b/lib/sql-parser/sql_visitor.rb index e1478c7..9f4b878 100644 --- a/lib/sql-parser/sql_visitor.rb +++ b/lib/sql-parser/sql_visitor.rb @@ -9,6 +9,29 @@ def initialize def visit(node) node.accept(self) end + + def visit_Delete(o) + name = visit(o.from_clause) + where_clause = o.where_clause.nil? ? '' : ' ' + visit(o.where_clause) + "DELETE #{name}#{where_clause}" + end + + def visit_Update(o) + name = visit(o.table_reference) + update_column_list = visit(o.update_column_list) + where_clause = o.where_clause.nil? ? '' : ' ' + visit(o.where_clause) + "UPDATE #{name} SET #{update_column_list}#{where_clause}" + end + + def visit_UpdateColumn(o) + column = visit(o.column) + value = visit(o.value) + "#{column} = #{value}" + end + + def visit_UpdateColumnList(o) + arrayize(o.update_columns) + end def visit_Insert(o) name = visit(o.table_reference) @@ -359,4 +382,4 @@ def qualified_join(join_type, o) end -end \ No newline at end of file +end diff --git a/lib/sql-parser/statement.rb b/lib/sql-parser/statement.rb index cc878a6..95dacd5 100644 --- a/lib/sql-parser/statement.rb +++ b/lib/sql-parser/statement.rb @@ -27,6 +27,42 @@ def demodulize(str) end end + + class Delete < Node + + def initialize(from_clause, where_clause = nil) + @from_clause = from_clause + @where_clause = where_clause + end + + attr_reader :from_clause + attr_reader :where_clause + + end + + class Update < Node + + def initialize(table_reference, update_column_list, where_clause = nil) + @table_reference = table_reference + @update_column_list = update_column_list + @where_clause = where_clause + end + + attr_reader :table_reference + attr_reader :update_column_list + attr_reader :where_clause + + end + + class UpdateColumnList < Node + + def initialize(update_columns) + @update_columns = Array(update_columns) + end + + attr_reader :update_columns + + end class Insert < Node @@ -262,17 +298,17 @@ class In < ComparisonPredicate class InValueList < Node def initialize(values) - @values = values + @values = Array(values) end attr_reader :values end - + class InColumnList < Node def initialize(columns) - @columns = columns + @columns = Array(columns) end attr_reader :columns @@ -408,6 +444,18 @@ class Table < Identifier class Column < Identifier end + class UpdateColumn < Node + + def initialize(column, value) + @column = column + @value = value + end + + attr_reader :column + attr_reader :value + + end + class As < Node def initialize(value, column) @@ -513,4 +561,4 @@ class Integer < Literal end end -end \ No newline at end of file +end diff --git a/test/test_parser.rb b/test/test_parser.rb index 7f956a4..2bd229c 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -10,12 +10,28 @@ def test_current_user assert_understands 'SELECT `CURRENT_USER`' assert_understands 'SELECT `current_user`' end + + def test_delete_from + assert_understands 'DELETE FROM `users`' + end + + def test_delete_from_with_where + assert_understands 'DELETE FROM `users` WHERE `id` = 1' + end + + def test_update + assert_understands 'UPDATE `users` SET `active` = 0' + end + + def test_update_multiple + assert_understands 'UPDATE `users` SET `active` = 0, `email` = \'\'' + end def test_insert_into_clause assert_understands 'INSERT INTO `users` VALUES (1, 2)' end - def test_insert_into_clause + def test_insert_into_clause_quoted assert_understands 'INSERT INTO `users` VALUES (`a`, `b`)' end diff --git a/test/test_statement.rb b/test/test_statement.rb index 70a71df..40de5a8 100644 --- a/test/test_statement.rb +++ b/test/test_statement.rb @@ -2,6 +2,22 @@ require 'test/unit' class TestStatement < Test::Unit::TestCase + def test_update_column + assert_sql '`active` = 1', update_col(col('active'), int(1)) + end + + def test_update + assert_sql 'UPDATE `users` SET `active` = 1', SQLParser::Statement::Update.new(tbl('users'), update_col(col('active'), int(1))) + end + + def test_delete + assert_sql 'DELETE FROM `users`', SQLParser::Statement::Delete.new(from(tbl('users'))) + end + + def test_insert + assert_sql 'INSERT INTO `users` (`id`) VALUES (1)', SQLParser::Statement::Insert.new(tbl('users'), cols(col('id')), values(int(1))) + end + def test_direct_select assert_sql 'SELECT * FROM `users` ORDER BY `name`', SQLParser::Statement::DirectSelect.new(select(all, tblx(from(tbl('users')))), SQLParser::Statement::OrderBy.new(col('name'))) end @@ -285,10 +301,18 @@ def int(value) SQLParser::Statement::Integer.new(value) end + def values(ary) + SQLParser::Statement::InValueList.new(ary) + end + def col(name) SQLParser::Statement::Column.new(name) end + def cols(ary) + SQLParser::Statement::InColumnList.new(ary) + end + def tbl(name) SQLParser::Statement::Table.new(name) end @@ -320,4 +344,8 @@ def where(search_condition) def group_by(columns) SQLParser::Statement::GroupByClause.new(columns) end + + def update_col(column, value) + SQLParser::Statement::UpdateColumn.new(column, value) + end end