From dc798beff651a4f705b4cfdc5ce8c72e73df77ca Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Fri, 13 Jan 2017 11:06:05 -0500 Subject: [PATCH 1/6] Rename duplicated test --- test/test_parser.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_parser.rb b/test/test_parser.rb index 7f956a4..ad5e05c 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -15,7 +15,7 @@ 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 From 6923c8c0a314ef4e88ca65583d1f952569012b36 Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Fri, 13 Jan 2017 11:16:42 -0500 Subject: [PATCH 2/6] Add skeleton of new rules for parsing UPDATE and DELETE --- lib/sql-parser/parser.racc | 13 + lib/sql-parser/parser.racc.rb | 1402 +++++++++++++++++---------------- lib/sql-parser/parser.rex | 2 + lib/sql-parser/parser.rex.rb | 12 +- 4 files changed, 758 insertions(+), 671 deletions(-) diff --git a/lib/sql-parser/parser.racc b/lib/sql-parser/parser.racc index e1079d2..7895f57 100644 --- a/lib/sql-parser/parser.racc +++ b/lib/sql-parser/parser.racc @@ -46,6 +46,19 @@ 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_field_list where_clause { result = nil } + + update_field + : column_name equals_operator value_expression { result = nil } + + update_field_list + : update_field comma update_field_list + | update_field + + delete_specification + : DELETE from_clause where_clause { result = nil } + 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..9abc581 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', 342) def self.parse(sql) new.scan_str(sql) @@ -20,253 +20,277 @@ 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, + 44, -128, 91, 145, 91, 7, 215, 96, 166, 70, + 226, 138, 8, 139, 126, 140, 227, 44, 141, 217, + 220, 218, 219, 103, 97, 67, 99, 100, 152, 101, + 102, -128, -128, -128, 44, 149, 18, 220, 67, 185, + 67, 71, 144, 47, 48, 67, 32, 45, 36, 38, + 39, 40, 41, 18, 49, 60, 52, 47, 48, 44, + 47, 48, 28, 32, 45, 36, 38, 39, 40, 41, + 18, 49, 14, 52, 96, 68, 69, 47, 48, 135, + 32, 45, 36, 38, 39, 40, 41, 165, 49, 44, + 52, 97, 28, 99, 100, 18, 101, 102, 208, 209, + 65, 8, 47, 48, 137, 32, 45, 36, 38, 39, + 40, 41, 167, 49, 44, 52, 168, 28, 85, 84, + 130, 131, 67, 169, 170, 18, 8, 171, 95, 173, + 174, 44, 47, 48, 220, 32, 45, 36, 38, 39, + 40, 41, 128, 49, 60, 52, 60, 180, 44, 181, + 18, 220, 127, 185, 122, 197, 200, 47, 48, 67, + 32, 45, 36, 38, 39, 40, 41, 18, 49, 114, + 52, 203, 204, 44, 47, 48, 145, 32, 45, 36, + 38, 39, 40, 41, 18, 49, 67, 52, 60, 18, + 44, 47, 48, 28, 32, 45, 36, 38, 39, 40, + 41, 152, 49, 214, 52, 106, 114, 44, 149, 18, + 28, 86, 83, 82, 222, 81, 47, 48, -147, 32, + 45, 36, 38, 39, 40, 41, 18, 49, 80, 52, + 79, 78, 44, 47, 48, 145, 32, 45, 36, 38, + 39, 40, 41, 18, 49, 77, 52, 76, 75, 44, + 47, 48, 28, 32, 45, 36, 38, 39, 40, 41, + 152, 49, 8, 52, -84, 64, 63, 149, 18, 237, + 185, 238, 200, 60, 44, 47, 48, 28, 32, 45, + 36, 38, 39, 40, 41, 18, 49, 222, 52, 54, + 53, 242, 47, 48, 12, 32, 45, 36, 38, 39, + 40, 41, 244, 49, 44, 52, 185, 145, 67, 18, + 18, 249, 11, 251, 252, 253, 8, 47, 48, 9, + 32, 45, 36, 38, 39, 40, 41, 67, 49, nil, + 52, 44, 152, nil, 28, nil, nil, nil, nil, 149, + 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, + 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, + 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 32, 45, 36, + 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, + nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, + nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, + 40, 41, nil, 49, 44, 52, nil, 220, nil, nil, + nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, + 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, + 49, 44, 52, nil, 220, nil, nil, nil, nil, nil, + 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, + 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, + 52, nil, 220, nil, nil, nil, nil, 18, nil, nil, + nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, + 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, + nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, + nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, + 40, 41, nil, 49, 44, 52, nil, 220, nil, nil, + nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, + 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, + 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, + 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, + 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, + 52, nil, 220, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, 18, 49, 44, 52, nil, 145, + 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, + nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, 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, 18, nil, nil, nil, nil, nil, nil, 47, + 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, + 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, + 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, + 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, + 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, + nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, + 38, 39, 40, 41, nil, 49, 44, 52, nil, 28, + nil, nil, nil, nil, nil, 18, nil, nil, nil, 116, 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 ] + 40, 41, nil, 49, 44, 52, nil, 145, nil, nil, + nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, + 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, + 49, 44, 52, nil, 28, nil, nil, nil, nil, 149, + 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, + 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, + 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, + nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, + 38, 39, 40, 41, nil, 49, 44, 52, nil, 145, + nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, + nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, + 40, 41, nil, 49, 152, 52, 44, nil, nil, 28, + nil, 149, 18, nil, nil, nil, nil, nil, nil, 47, + 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, + 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, + nil, nil, 18, nil, nil, nil, nil, nil, 44, 47, + 48, 28, 32, 45, 36, 38, 39, 40, 41, nil, + 49, nil, 52, nil, nil, nil, nil, 18, nil, nil, + nil, nil, nil, 44, 47, 48, 145, 32, 45, 36, + 38, 39, 40, 41, 18, 49, nil, 52, nil, nil, + nil, 47, 48, nil, 32, 45, 36, 38, 39, 40, + 41, 152, 49, nil, 52, nil, nil, nil, 149, 18, + nil, 191, nil, nil, nil, nil, 47, 48, nil, 32, + 45, 36, 38, 39, 40, 41, nil, 49, nil, 52, + 186, 187, nil, 188, 189, 190, nil, nil, nil, nil, + 192, 193, 194, 195, 196, 96, nil, nil, nil, 94, + nil, nil, nil, nil, nil, nil, nil, 95, nil, nil, + nil, nil, 97, nil, 99, 100, nil, 101, 102 ] 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, + 106, 20, 54, 106, 128, 0, 183, 107, 117, 22, + 190, 98, 0, 100, 83, 101, 190, 249, 102, 186, + 249, 186, 186, 56, 107, 103, 107, 107, 106, 107, + 107, 20, 20, 20, 242, 106, 106, 242, 54, 183, + 128, 22, 105, 106, 106, 56, 106, 106, 106, 106, + 106, 106, 106, 249, 106, 96, 106, 83, 83, 8, + 249, 249, 8, 249, 249, 249, 249, 249, 249, 249, + 242, 249, 8, 249, 178, 21, 21, 242, 242, 95, + 242, 242, 242, 242, 242, 242, 242, 116, 242, 222, + 242, 178, 222, 178, 178, 8, 178, 178, 178, 178, + 17, 222, 8, 8, 97, 8, 8, 8, 8, 8, + 8, 8, 118, 8, 220, 8, 119, 220, 49, 49, + 89, 89, 17, 120, 121, 222, 220, 125, 93, 133, + 134, 219, 222, 222, 219, 222, 222, 222, 222, 222, + 222, 222, 87, 222, 137, 222, 138, 143, 217, 144, + 220, 217, 84, 146, 81, 149, 150, 220, 220, 75, + 220, 220, 220, 220, 220, 220, 220, 219, 220, 74, + 220, 175, 176, 208, 219, 219, 208, 219, 219, 219, + 219, 219, 219, 219, 217, 219, 65, 219, 63, 181, + 204, 217, 217, 204, 217, 217, 217, 217, 217, 217, + 217, 208, 217, 182, 217, 62, 184, 94, 208, 208, + 94, 52, 46, 45, 188, 44, 208, 208, 42, 208, + 208, 208, 208, 208, 208, 208, 204, 208, 41, 208, + 40, 39, 200, 204, 204, 200, 204, 204, 204, 204, + 204, 204, 204, 94, 204, 38, 204, 36, 33, 135, + 94, 94, 135, 94, 94, 94, 94, 94, 94, 94, + 200, 94, 197, 94, 18, 16, 13, 200, 200, 209, + 210, 211, 216, 12, 80, 200, 200, 80, 200, 200, + 200, 200, 200, 200, 200, 135, 200, 218, 200, 11, + 9, 221, 135, 135, 7, 135, 135, 135, 135, 135, + 135, 135, 226, 135, 145, 135, 236, 145, 237, 238, + 80, 239, 5, 243, 245, 246, 145, 80, 80, 1, + 80, 80, 80, 80, 80, 80, 80, 253, 80, nil, + 80, 23, 145, nil, 23, nil, nil, nil, nil, 145, + 145, nil, nil, nil, nil, nil, nil, 145, 145, nil, + 145, 145, 145, 145, 145, 145, 145, nil, 145, 28, + 145, nil, 28, nil, nil, nil, nil, 23, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 23, 23, 23, + 23, 23, 23, 23, nil, 23, 196, 23, nil, 196, + nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, + nil, nil, 28, 28, nil, 28, 28, 28, 28, 28, + 28, 28, nil, 28, 195, 28, nil, 195, nil, nil, + nil, nil, 196, nil, nil, nil, nil, nil, nil, 196, + 196, nil, 196, 196, 196, 196, 196, 196, 196, nil, + 196, 194, 196, nil, 194, nil, nil, nil, nil, nil, + 195, nil, nil, nil, nil, nil, nil, 195, 195, nil, + 195, 195, 195, 195, 195, 195, 195, nil, 195, 193, + 195, nil, 193, nil, nil, nil, nil, 194, nil, nil, + nil, nil, nil, nil, 194, 194, nil, 194, 194, 194, + 194, 194, 194, 194, nil, 194, 192, 194, nil, 192, + nil, nil, nil, nil, nil, 193, nil, nil, nil, nil, + nil, nil, 193, 193, nil, 193, 193, 193, 193, 193, + 193, 193, nil, 193, 191, 193, nil, 191, nil, nil, + nil, nil, 192, nil, nil, nil, nil, nil, nil, 192, + 192, nil, 192, 192, 192, 192, 192, 192, 192, nil, + 192, 79, 192, nil, 79, nil, nil, nil, nil, nil, + 191, nil, nil, nil, nil, nil, nil, 191, 191, nil, + 191, 191, 191, 191, 191, 191, 191, nil, 191, 189, + 191, nil, 189, nil, nil, nil, nil, 79, nil, nil, + nil, nil, nil, nil, 79, 79, nil, 79, 79, 79, + 79, 79, 79, 79, nil, 79, 187, 79, nil, 187, + nil, nil, nil, nil, nil, 189, nil, nil, nil, nil, + nil, nil, 189, 189, nil, 189, 189, 189, 189, 189, + 189, 189, nil, 189, 78, 189, nil, 78, nil, nil, + nil, nil, 187, nil, nil, nil, nil, nil, nil, 187, + 187, nil, 187, 187, 187, 187, 187, 187, 187, nil, + 187, 77, 187, nil, 77, nil, nil, nil, nil, nil, + 78, nil, nil, nil, nil, nil, nil, 78, 78, nil, + 78, 78, 78, 78, 78, 78, 78, nil, 78, 69, + 78, nil, 69, nil, nil, nil, nil, 77, nil, nil, + nil, nil, nil, nil, 77, 77, nil, 77, 77, 77, + 77, 77, 77, 77, nil, 77, 76, 77, nil, 76, + nil, nil, nil, nil, nil, 69, nil, nil, nil, 76, + nil, nil, 69, 69, nil, 69, 69, 69, 69, 69, + 69, 69, nil, 69, 152, 69, nil, 152, nil, nil, + nil, nil, 76, nil, nil, nil, nil, nil, nil, 76, + 76, nil, 76, 76, 76, 76, 76, 76, 76, nil, + 76, 174, 76, nil, 174, nil, nil, nil, nil, 152, + 152, nil, nil, nil, nil, nil, nil, 152, 152, nil, + 152, 152, 152, 152, 152, 152, 152, nil, 152, 71, + 152, nil, 71, nil, nil, nil, nil, 174, nil, nil, nil, nil, nil, nil, 174, 174, nil, 174, 174, 174, - 174, 174, 174, 174, 71, 174, 180, 174, nil, 180, + 174, 174, 174, 174, nil, 174, 180, 174, nil, 180, + nil, nil, nil, nil, nil, 71, nil, nil, nil, nil, 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 ] + 71, 71, nil, 71, 180, 71, 64, nil, nil, 64, + nil, 180, 180, nil, nil, nil, nil, nil, nil, 180, + 180, nil, 180, 180, 180, 180, 180, 180, 180, nil, + 180, 70, 180, nil, 70, nil, nil, nil, nil, nil, + nil, nil, 64, nil, nil, nil, nil, nil, 68, 64, + 64, 68, 64, 64, 64, 64, 64, 64, 64, nil, + 64, nil, 64, nil, nil, nil, nil, 70, nil, nil, + nil, nil, nil, 185, 70, 70, 185, 70, 70, 70, + 70, 70, 70, 70, 68, 70, nil, 70, nil, nil, + nil, 68, 68, nil, 68, 68, 68, 68, 68, 68, + 68, 185, 68, nil, 68, nil, nil, nil, 185, 185, + nil, 148, nil, nil, nil, nil, 185, 185, nil, 185, + 185, 185, 185, 185, 185, 185, nil, 185, nil, 185, + 148, 148, nil, 148, 148, 148, nil, nil, nil, nil, + 148, 148, 148, 148, 148, 55, nil, nil, nil, 55, + nil, nil, nil, nil, nil, nil, nil, 55, nil, nil, + nil, nil, 55, nil, 55, 55, nil, 55, 55 ] 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, + -5, 319, nil, nil, nil, 310, nil, 283, 54, 290, + nil, 286, 232, 246, nil, nil, 261, 81, 212, nil, + -17, 27, -9, 326, nil, nil, nil, nil, 354, nil, + nil, nil, nil, 196, nil, nil, 239, nil, 237, 223, + 222, 220, 160, nil, 163, 208, 154, nil, nil, 59, + nil, nil, 149, nil, -3, 991, 4, nil, nil, nil, + nil, nil, 175, 147, 851, 145, nil, nil, 893, 684, + 876, 794, nil, nil, 160, 118, 711, 656, 629, 546, + 269, 149, nil, 9, 93, nil, nil, 138, nil, 114, + nil, nil, nil, 112, 202, 71, 14, 82, -11, nil, + -12, -10, -7, -16, nil, 11, -5, 3, nil, nil, + nil, nil, nil, nil, nil, nil, 78, -1, 103, 107, + 114, 115, nil, nil, nil, 122, nil, nil, -1, nil, + nil, nil, nil, 120, 126, 244, nil, 103, 105, nil, + nil, nil, nil, 115, 146, 299, 111, nil, 947, 147, + 121, nil, 739, 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 ] + nil, nil, nil, nil, 766, 162, 168, nil, 70, nil, + 821, 148, 194, -3, 197, 918, -15, 601, 206, 574, + -23, 519, 491, 464, 436, 409, 381, 245, nil, nil, + 227, nil, nil, nil, 185, nil, nil, nil, 168, 261, + 228, 267, nil, nil, nil, nil, 237, 143, 279, 126, + 109, 256, 84, nil, nil, nil, 263, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 264, 267, 268, 276, + nil, nil, 29, 304, nil, 305, 311, nil, nil, 12, + nil, nil, nil, 286, 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 ] + -159, -159, -1, -2, -3, -5, -16, -159, -159, -159, + -4, -159, -159, -29, -30, -31, -33, -36, -153, -111, + -112, -115, -118, -159, -120, -121, -122, -123, -159, -125, + -126, -127, -129, -159, -131, -132, -159, -134, -159, -159, + -159, -159, -140, -141, -145, -159, -159, -151, -152, -159, + -156, -157, -159, 256, -159, -159, -41, -42, -44, -45, + -84, -28, -61, -159, -159, -159, -35, -153, -159, -159, + -159, -159, -119, -128, -159, -159, -159, -159, -159, -159, + -159, -143, -144, -159, -159, -155, -158, -6, -8, -12, + -10, -11, -17, -159, -159, -159, -159, -159, -159, -49, + -51, -53, -54, -159, -40, -63, -159, -38, -32, -34, + -113, -114, -116, -117, -124, -130, -159, -159, -159, -159, + -159, -159, -142, -146, -148, -159, -150, -154, -159, -9, + -13, -14, -18, -159, -26, -159, -46, -159, -159, -50, + -52, -55, -39, -68, -159, -159, -62, -70, -159, -159, + -87, -89, -159, -92, -93, -94, -96, -97, -98, -99, + -100, -101, -108, -109, -110, -133, -135, -136, -137, -138, + -139, -149, -7, -24, -159, -159, -78, -47, -159, -37, + -159, -159, -159, -159, -110, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -43, -83, + -159, -91, -25, -27, -159, -48, -56, -57, -159, -159, + -69, -64, -66, -67, -15, -95, -88, -159, -159, -159, + -159, -159, -159, -74, -75, -80, -159, -82, -102, -103, + -104, -105, -106, -107, -90, -77, -58, -159, -159, -159, + -73, -79, -159, -159, -81, -159, -60, -86, -65, -159, + -72, -76, -59, -159, -71, -85 ] 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, + 66, 17, 146, 55, 133, 56, 175, 88, 198, 213, + 212, 92, 15, 223, 73, 112, 113, 110, 111, 179, + 13, 74, 61, 221, 105, 225, 143, 228, 229, 230, + 231, 232, 233, 62, 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, + 73, 73, 73, 5, 216, 234, 213, 248, 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, @@ -286,208 +310,215 @@ def self.parse(sql) nil, nil, nil, nil, nil, nil, 255 ] 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, + 11, 21, 41, 14, 24, 32, 25, 8, 12, 46, + 45, 15, 28, 51, 63, 64, 64, 62, 62, 31, + 26, 21, 27, 49, 19, 49, 30, 49, 49, 49, + 49, 49, 49, 23, 16, 34, 38, 11, 39, 11, + 40, 41, 10, 51, 42, 43, 44, 12, 11, 15, + 1, 7, 6, 49, 14, 49, 32, 21, 11, 63, + 63, 63, 63, 5, 55, 56, 46, 45, 28, 21, + 21, 21, 21, 21, 57, 25, 41, 12, 49, 4, + 3, 8, 2, 66, 24, 49, 11, 21, 67, 32, + 78, 79, nil, 25, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 41, 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, + nil, nil, nil, nil, nil, nil, nil, nil, 21, 14, + 32, 32, nil, nil, nil, nil, nil, nil, 21, 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, 21, 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, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 18, nil, 18, nil, nil, nil, nil, + nil, nil, nil, 21, nil, 21, nil, nil, nil, nil, 11, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 11 ] 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 ] + -47, -17, -141, nil, -9, -44, -21, nil, nil, -38, + nil, -7, nil, 20, -90, -129, 12, 9, 4, nil, + -79, -124, -7, nil, -114, nil, nil, nil, -142, -140, + -138, -104, -193, -192, -135, -171, -172, 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 ] 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, 34, 147, 6, nil, nil, nil, nil, nil, nil, + nil, 164, nil, nil, nil, nil, nil, nil, nil, 16, + 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 ] 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, 65, :_reduce_none, + 2, 66, :_reduce_4, + 0, 69, :_reduce_none, + 3, 69, :_reduce_6, + 3, 70, :_reduce_7, + 1, 70, :_reduce_none, + 2, 71, :_reduce_9, + 1, 72, :_reduce_none, + 1, 72, :_reduce_11, + 0, 73, :_reduce_12, + 1, 73, :_reduce_13, + 1, 73, :_reduce_14, + 3, 75, :_reduce_15, + 1, 68, :_reduce_none, + 4, 67, :_reduce_17, + 5, 67, :_reduce_18, + 5, 80, :_reduce_19, + 3, 83, :_reduce_20, + 3, 81, :_reduce_none, + 1, 81, :_reduce_none, + 3, 85, :_reduce_23, + 3, 79, :_reduce_24, + 3, 87, :_reduce_25, + 1, 87, :_reduce_none, + 4, 78, :_reduce_27, + 3, 76, :_reduce_28, + 2, 76, :_reduce_29, + 1, 89, :_reduce_30, + 1, 89, :_reduce_31, + 3, 91, :_reduce_32, + 1, 91, :_reduce_none, + 3, 92, :_reduce_34, + 2, 92, :_reduce_35, + 1, 92, :_reduce_none, + 4, 90, :_reduce_37, + 2, 86, :_reduce_38, + 3, 77, :_reduce_39, + 2, 77, :_reduce_40, + 1, 77, :_reduce_none, 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, 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, 97, :_reduce_none, + 1, 96, :_reduce_none, + 1, 96, :_reduce_none, + 3, 98, :_reduce_46, + 4, 98, :_reduce_47, + 5, 99, :_reduce_48, + 1, 100, :_reduce_49, + 2, 100, :_reduce_50, + 1, 100, :_reduce_51, + 2, 100, :_reduce_52, + 1, 100, :_reduce_53, + 1, 100, :_reduce_54, + 2, 100, :_reduce_55, + 1, 101, :_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, + 2, 102, :_reduce_58, + 4, 103, :_reduce_59, + 1, 105, :_reduce_none, + 0, 82, :_reduce_none, + 2, 82, :_reduce_62, + 0, 93, :_reduce_none, + 3, 93, :_reduce_64, + 3, 107, :_reduce_65, 1, 107, :_reduce_none, - 3, 107, :_reduce_71, - 3, 79, :_reduce_72, - 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, 97, :_reduce_none, - 3, 97, :_reduce_83, - 1, 111, :_reduce_none, - 3, 111, :_reduce_85, - 2, 112, :_reduce_86, - 1, 112, :_reduce_none, - 1, 113, :_reduce_none, + 1, 108, :_reduce_none, + 0, 94, :_reduce_none, + 2, 94, :_reduce_69, + 1, 110, :_reduce_none, + 6, 111, :_reduce_71, + 5, 111, :_reduce_72, + 4, 113, :_reduce_73, + 3, 113, :_reduce_74, 1, 114, :_reduce_none, - 3, 114, :_reduce_90, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 1, 115, :_reduce_none, - 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, - 1, 105, :_reduce_none, - 1, 117, :_reduce_none, - 1, 78, :_reduce_none, - 1, 78, :_reduce_none, - 3, 118, :_reduce_108, - 3, 118, :_reduce_109, + 3, 114, :_reduce_76, + 3, 88, :_reduce_77, + 1, 88, :_reduce_none, + 4, 115, :_reduce_79, + 3, 115, :_reduce_80, + 4, 116, :_reduce_81, + 3, 116, :_reduce_82, + 2, 117, :_reduce_83, + 1, 95, :_reduce_84, + 3, 106, :_reduce_85, + 1, 106, :_reduce_none, + 1, 104, :_reduce_none, + 3, 104, :_reduce_88, 1, 118, :_reduce_none, - 3, 120, :_reduce_111, - 3, 120, :_reduce_112, + 3, 118, :_reduce_90, + 2, 119, :_reduce_91, + 1, 119, :_reduce_none, 1, 120, :_reduce_none, - 2, 121, :_reduce_114, 1, 121, :_reduce_none, - 1, 123, :_reduce_none, - 1, 123, :_reduce_none, - 1, 123, :_reduce_none, - 3, 123, :_reduce_119, - 1, 124, :_reduce_none, + 3, 121, :_reduce_95, + 1, 122, :_reduce_none, + 1, 122, :_reduce_none, + 1, 122, :_reduce_none, + 1, 122, :_reduce_none, + 1, 122, :_reduce_none, + 1, 122, :_reduce_none, + 3, 123, :_reduce_102, + 3, 123, :_reduce_103, + 3, 123, :_reduce_104, + 3, 123, :_reduce_105, + 3, 123, :_reduce_106, + 3, 123, :_reduce_107, + 1, 112, :_reduce_none, + 1, 112, :_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, 84, :_reduce_none, + 1, 84, :_reduce_none, + 3, 125, :_reduce_113, + 3, 125, :_reduce_114, 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, + 3, 127, :_reduce_116, + 3, 127, :_reduce_117, + 1, 127, :_reduce_none, + 2, 128, :_reduce_119, 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, 130, :_reduce_none, + 1, 130, :_reduce_none, + 1, 130, :_reduce_none, + 3, 130, :_reduce_124, + 1, 131, :_reduce_none, + 1, 131, :_reduce_none, 1, 133, :_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, 133, :_reduce_none, + 1, 134, :_reduce_129, + 3, 109, :_reduce_130, + 1, 109, :_reduce_none, 1, 136, :_reduce_none, - 2, 137, :_reduce_153 ] + 4, 132, :_reduce_133, + 1, 132, :_reduce_none, + 4, 137, :_reduce_135, + 4, 137, :_reduce_136, + 4, 137, :_reduce_137, + 4, 137, :_reduce_138, + 4, 137, :_reduce_139, + 1, 135, :_reduce_none, + 1, 135, :_reduce_none, + 3, 138, :_reduce_142, + 2, 138, :_reduce_143, + 2, 138, :_reduce_144, + 1, 138, :_reduce_145, + 3, 139, :_reduce_146, + 1, 140, :_reduce_none, + 1, 141, :_reduce_none, + 2, 142, :_reduce_149, + 1, 142, :_reduce_150, + 1, 129, :_reduce_151, + 1, 129, :_reduce_152, + 1, 74, :_reduce_153, + 3, 126, :_reduce_154, + 2, 126, :_reduce_155, + 1, 126, :_reduce_none, + 1, 143, :_reduce_none, + 2, 144, :_reduce_158 ] -racc_reduce_n = 154 +racc_reduce_n = 159 racc_shift_n = 256 @@ -504,56 +535,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 +620,10 @@ def self.parse(sql) "right_paren", "INSERT", "INTO", + "UPDATE", + "SET", + "equals_operator", + "DELETE", "VALUES", "SELECT", "asterisk", @@ -613,7 +651,6 @@ def self.parse(sql) "EXISTS", "identifier", "OR", - "equals_operator", "not_equals_operator", "less_than_operator", "greater_than_operator", @@ -651,15 +688,19 @@ def self.parse(sql) "table_reference", "value_list", "column_list", - "in_column_list", + "update_specification", + "update_field_list", + "where_clause", + "update_field", "value_expression", + "delete_specification", + "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", @@ -812,669 +853,694 @@ def _reduce_18(val, _values, result) module_eval(<<'.,.,', 'parser.racc', 49) def _reduce_19(val, _values, result) - result = SQLParser::Statement::InColumnList.new(val[1]) + result = nil result end .,., module_eval(<<'.,.,', 'parser.racc', 52) def _reduce_20(val, _values, result) - result = Array(val[0]) + Array(val[2]) + result = nil result end .,., # reduce 21 omitted -module_eval(<<'.,.,', 'parser.racc', 56) - def _reduce_22(val, _values, result) +# reduce 22 omitted + +module_eval(<<'.,.,', 'parser.racc', 59) + def _reduce_23(val, _values, result) + result = nil + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 62) + def _reduce_24(val, _values, result) + result = SQLParser::Statement::InColumnList.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 65) + def _reduce_25(val, _values, result) + result = Array(val[0]) + Array(val[2]) + result + end +.,., + +# reduce 26 omitted + +module_eval(<<'.,.,', 'parser.racc', 69) + def _reduce_27(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', 72) + def _reduce_28(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', 73) + def _reduce_29(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', 76) + def _reduce_30(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', 77) + def _reduce_31(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', 80) + def _reduce_32(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 28 omitted +# reduce 33 omitted -module_eval(<<'.,.,', 'parser.racc', 71) - def _reduce_29(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 84) + def _reduce_34(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', 85) + def _reduce_35(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 31 omitted +# reduce 36 omitted -module_eval(<<'.,.,', 'parser.racc', 76) - def _reduce_32(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 89) + def _reduce_37(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', 92) + def _reduce_38(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', 95) + def _reduce_39(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', 96) + def _reduce_40(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 36 omitted +# reduce 41 omitted -# reduce 37 omitted +# reduce 42 omitted -# reduce 38 omitted +# reduce 43 omitted -# reduce 39 omitted +# reduce 44 omitted -# reduce 40 omitted +# reduce 45 omitted -module_eval(<<'.,.,', 'parser.racc', 95) - def _reduce_41(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 108) + def _reduce_46(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', 109) + def _reduce_47(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', 112) + def _reduce_48(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', 115) + def _reduce_49(val, _values, result) result = SQLParser::Statement::InnerJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 103) - def _reduce_45(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 116) + def _reduce_50(val, _values, result) result = SQLParser::Statement::LeftOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 104) - def _reduce_46(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 117) + def _reduce_51(val, _values, result) result = SQLParser::Statement::LeftJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 105) - def _reduce_47(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 118) + def _reduce_52(val, _values, result) result = SQLParser::Statement::RightOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 106) - def _reduce_48(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 119) + def _reduce_53(val, _values, result) result = SQLParser::Statement::RightJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 107) - def _reduce_49(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 120) + def _reduce_54(val, _values, result) result = SQLParser::Statement::FullJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 108) - def _reduce_50(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 121) + def _reduce_55(val, _values, result) result = SQLParser::Statement::FullOuterJoin result end .,., -# reduce 51 omitted +# reduce 56 omitted -# reduce 52 omitted +# reduce 57 omitted -module_eval(<<'.,.,', 'parser.racc', 115) - def _reduce_53(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 128) + def _reduce_58(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', 131) + def _reduce_59(val, _values, result) result = SQLParser::Statement::Using.new(val[2]) result end .,., -# reduce 55 omitted +# reduce 60 omitted -# reduce 56 omitted +# reduce 61 omitted -module_eval(<<'.,.,', 'parser.racc', 125) - def _reduce_57(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 138) + def _reduce_62(val, _values, result) result = SQLParser::Statement::WhereClause.new(val[1]) result end .,., -# reduce 58 omitted +# reduce 63 omitted -module_eval(<<'.,.,', 'parser.racc', 129) - def _reduce_59(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 142) + def _reduce_64(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', 145) + def _reduce_65(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 61 omitted +# reduce 66 omitted -# reduce 62 omitted +# reduce 67 omitted -# reduce 63 omitted +# reduce 68 omitted -module_eval(<<'.,.,', 'parser.racc', 140) - def _reduce_64(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 153) + def _reduce_69(val, _values, result) result = SQLParser::Statement::HavingClause.new(val[1]) result end .,., -# reduce 65 omitted +# reduce 70 omitted -module_eval(<<'.,.,', 'parser.racc', 147) - def _reduce_66(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 160) + def _reduce_71(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', 161) + def _reduce_72(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', 164) + def _reduce_73(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', 165) + def _reduce_74(val, _values, result) result = SQLParser::Statement::In.new(val[0], val[2]) result end .,., -# reduce 70 omitted +# reduce 75 omitted -module_eval(<<'.,.,', 'parser.racc', 156) - def _reduce_71(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 169) + def _reduce_76(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', 172) + def _reduce_77(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 73 omitted +# reduce 78 omitted -module_eval(<<'.,.,', 'parser.racc', 166) - def _reduce_74(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 179) + def _reduce_79(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', 180) + def _reduce_80(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', 183) + def _reduce_81(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', 184) + def _reduce_82(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', 187) + def _reduce_83(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', 191) + def _reduce_84(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', 194) + def _reduce_85(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 81 omitted +# reduce 86 omitted -# reduce 82 omitted +# reduce 87 omitted -module_eval(<<'.,.,', 'parser.racc', 187) - def _reduce_83(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 200) + def _reduce_88(val, _values, result) result = SQLParser::Statement::Or.new(val[0], val[2]) result end .,., -# reduce 84 omitted +# reduce 89 omitted -module_eval(<<'.,.,', 'parser.racc', 191) - def _reduce_85(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 204) + def _reduce_90(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', 207) + def _reduce_91(val, _values, result) result = SQLParser::Statement::Not.new(val[1]) result end .,., -# reduce 87 omitted +# reduce 92 omitted -# reduce 88 omitted +# reduce 93 omitted -# reduce 89 omitted +# reduce 94 omitted -module_eval(<<'.,.,', 'parser.racc', 202) - def _reduce_90(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 215) + def _reduce_95(val, _values, result) result = val[1] result end .,., -# reduce 91 omitted +# reduce 96 omitted -# reduce 92 omitted +# reduce 97 omitted -# reduce 93 omitted +# reduce 98 omitted -# reduce 94 omitted +# reduce 99 omitted -# reduce 95 omitted +# reduce 100 omitted -# reduce 96 omitted +# reduce 101 omitted -module_eval(<<'.,.,', 'parser.racc', 213) - def _reduce_97(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 226) + def _reduce_102(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', 227) + def _reduce_103(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', 228) + def _reduce_104(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', 229) + def _reduce_105(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', 230) + def _reduce_106(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', 231) + def _reduce_107(val, _values, result) result = SQLParser::Statement::GreaterOrEquals.new(val[0], val[2]) result end .,., -# reduce 103 omitted +# reduce 108 omitted -# reduce 104 omitted +# reduce 109 omitted -# reduce 105 omitted +# reduce 110 omitted -# reduce 106 omitted +# reduce 111 omitted -# reduce 107 omitted +# reduce 112 omitted -module_eval(<<'.,.,', 'parser.racc', 232) - def _reduce_108(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 245) + def _reduce_113(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', 246) + def _reduce_114(val, _values, result) result = SQLParser::Statement::Subtract.new(val[0], val[2]) result end .,., -# reduce 110 omitted +# reduce 115 omitted -module_eval(<<'.,.,', 'parser.racc', 237) - def _reduce_111(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 250) + def _reduce_116(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', 251) + def _reduce_117(val, _values, result) result = SQLParser::Statement::Divide.new(val[0], val[2]) result end .,., -# reduce 113 omitted +# reduce 118 omitted -module_eval(<<'.,.,', 'parser.racc', 242) - def _reduce_114(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 255) + def _reduce_119(val, _values, result) result = val[0].new(val[1]) result end .,., -# reduce 115 omitted +# reduce 120 omitted -# reduce 116 omitted +# reduce 121 omitted -# reduce 117 omitted +# reduce 122 omitted -# reduce 118 omitted +# reduce 123 omitted -module_eval(<<'.,.,', 'parser.racc', 249) - def _reduce_119(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 262) + def _reduce_124(val, _values, result) result = val[1] result end .,., -# reduce 120 omitted +# reduce 125 omitted -# reduce 121 omitted +# reduce 126 omitted -# reduce 122 omitted +# reduce 127 omitted -# reduce 123 omitted +# reduce 128 omitted -module_eval(<<'.,.,', 'parser.racc', 260) - def _reduce_124(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 273) + def _reduce_129(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', 276) + def _reduce_130(val, _values, result) result = SQLParser::Statement::QualifiedColumn.new(val[0], val[2]) result end .,., -# reduce 126 omitted +# reduce 131 omitted -# reduce 127 omitted +# reduce 132 omitted -module_eval(<<'.,.,', 'parser.racc', 270) - def _reduce_128(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 283) + def _reduce_133(val, _values, result) result = SQLParser::Statement::Count.new(SQLParser::Statement::All.new) result end .,., -# reduce 129 omitted +# reduce 134 omitted -module_eval(<<'.,.,', 'parser.racc', 274) - def _reduce_130(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 287) + def _reduce_135(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', 288) + def _reduce_136(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', 289) + def _reduce_137(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', 290) + def _reduce_138(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', 291) + def _reduce_139(val, _values, result) result = SQLParser::Statement::Sum.new(val[2]) result end .,., -# reduce 135 omitted +# reduce 140 omitted -# reduce 136 omitted +# reduce 141 omitted -module_eval(<<'.,.,', 'parser.racc', 286) - def _reduce_137(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 299) + def _reduce_142(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', 300) + def _reduce_143(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', 301) + def _reduce_144(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', 302) + def _reduce_145(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', 305) + def _reduce_146(val, _values, result) result = SQLParser::Statement::ApproximateFloat.new(val[0], val[2]) result end .,., -# reduce 142 omitted +# reduce 147 omitted -# reduce 143 omitted +# reduce 148 omitted -module_eval(<<'.,.,', 'parser.racc', 301) - def _reduce_144(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 314) + def _reduce_149(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', 315) + def _reduce_150(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', 318) + def _reduce_151(val, _values, result) result = SQLParser::Statement::UnaryPlus result end .,., -module_eval(<<'.,.,', 'parser.racc', 306) - def _reduce_147(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 319) + def _reduce_152(val, _values, result) result = SQLParser::Statement::UnaryMinus result end .,., -module_eval(<<'.,.,', 'parser.racc', 310) - def _reduce_148(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 323) + def _reduce_153(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', 327) + def _reduce_154(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', 328) + def _reduce_155(val, _values, result) result = SQLParser::Statement::String.new('') result end .,., -# reduce 151 omitted +# reduce 156 omitted -# reduce 152 omitted +# reduce 157 omitted -module_eval(<<'.,.,', 'parser.racc', 322) - def _reduce_153(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 335) + def _reduce_158(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..5189e95 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] } diff --git a/lib/sql-parser/parser.rex.rb b/lib/sql-parser/parser.rex.rb index a9e002a..b676297 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] } @@ -260,7 +266,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 +279,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] From ba3b6cf81ffdd5dfb0581f5e617bd841bf016991 Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Sun, 15 Jan 2017 19:41:08 -0500 Subject: [PATCH 3/6] Add DELETE support --- lib/sql-parser/parser.racc | 4 +- lib/sql-parser/parser.racc.rb | 1304 ++++++++++++++++----------------- lib/sql-parser/sql_visitor.rb | 8 +- lib/sql-parser/statement.rb | 14 +- test/test_parser.rb | 8 + 5 files changed, 679 insertions(+), 659 deletions(-) diff --git a/lib/sql-parser/parser.racc b/lib/sql-parser/parser.racc index 7895f57..43c0b10 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]) } @@ -57,7 +59,7 @@ rule | update_field delete_specification - : DELETE from_clause where_clause { result = nil } + : 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 9abc581..4cb7453 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', 342) +module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 344) def self.parse(sql) new.scan_str(sql) @@ -20,507 +20,495 @@ def self.parse(sql) ##### State transition tables begin ### racc_action_table = [ - 44, -128, 91, 145, 91, 7, 215, 96, 166, 70, - 226, 138, 8, 139, 126, 140, 227, 44, 141, 217, - 220, 218, 219, 103, 97, 67, 99, 100, 152, 101, - 102, -128, -128, -128, 44, 149, 18, 220, 67, 185, - 67, 71, 144, 47, 48, 67, 32, 45, 36, 38, - 39, 40, 41, 18, 49, 60, 52, 47, 48, 44, - 47, 48, 28, 32, 45, 36, 38, 39, 40, 41, - 18, 49, 14, 52, 96, 68, 69, 47, 48, 135, - 32, 45, 36, 38, 39, 40, 41, 165, 49, 44, - 52, 97, 28, 99, 100, 18, 101, 102, 208, 209, - 65, 8, 47, 48, 137, 32, 45, 36, 38, 39, - 40, 41, 167, 49, 44, 52, 168, 28, 85, 84, - 130, 131, 67, 169, 170, 18, 8, 171, 95, 173, - 174, 44, 47, 48, 220, 32, 45, 36, 38, 39, - 40, 41, 128, 49, 60, 52, 60, 180, 44, 181, - 18, 220, 127, 185, 122, 197, 200, 47, 48, 67, - 32, 45, 36, 38, 39, 40, 41, 18, 49, 114, - 52, 203, 204, 44, 47, 48, 145, 32, 45, 36, - 38, 39, 40, 41, 18, 49, 67, 52, 60, 18, - 44, 47, 48, 28, 32, 45, 36, 38, 39, 40, - 41, 152, 49, 214, 52, 106, 114, 44, 149, 18, - 28, 86, 83, 82, 222, 81, 47, 48, -147, 32, - 45, 36, 38, 39, 40, 41, 18, 49, 80, 52, - 79, 78, 44, 47, 48, 145, 32, 45, 36, 38, - 39, 40, 41, 18, 49, 77, 52, 76, 75, 44, - 47, 48, 28, 32, 45, 36, 38, 39, 40, 41, - 152, 49, 8, 52, -84, 64, 63, 149, 18, 237, - 185, 238, 200, 60, 44, 47, 48, 28, 32, 45, - 36, 38, 39, 40, 41, 18, 49, 222, 52, 54, - 53, 242, 47, 48, 12, 32, 45, 36, 38, 39, - 40, 41, 244, 49, 44, 52, 185, 145, 67, 18, - 18, 249, 11, 251, 252, 253, 8, 47, 48, 9, - 32, 45, 36, 38, 39, 40, 41, 67, 49, nil, - 52, 44, 152, nil, 28, nil, nil, nil, nil, 149, - 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, - 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, - 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 44, 52, nil, 220, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, - 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, - 49, 44, 52, nil, 220, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, - 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, - 52, nil, 220, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 44, 52, nil, 220, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, - 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, - 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, - 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, - 52, nil, 220, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 220, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 44, 52, nil, 28, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, - 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, - 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, - 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, - 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 28, - nil, nil, nil, nil, nil, 18, nil, nil, nil, 116, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 44, 52, nil, 145, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 47, - 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, - 49, 44, 52, nil, 28, nil, nil, nil, nil, 149, - 18, nil, nil, nil, nil, nil, nil, 47, 48, nil, - 32, 45, 36, 38, 39, 40, 41, nil, 49, 44, - 52, nil, 28, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 47, 48, nil, 32, 45, 36, - 38, 39, 40, 41, nil, 49, 44, 52, nil, 145, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 47, 48, nil, 32, 45, 36, 38, 39, - 40, 41, nil, 49, 152, 52, 44, nil, nil, 28, - nil, 149, 18, nil, nil, nil, nil, nil, nil, 47, - 48, nil, 32, 45, 36, 38, 39, 40, 41, nil, - 49, 44, 52, nil, 28, nil, nil, nil, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, 44, 47, - 48, 28, 32, 45, 36, 38, 39, 40, 41, nil, - 49, nil, 52, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, 44, 47, 48, 145, 32, 45, 36, - 38, 39, 40, 41, 18, 49, nil, 52, nil, nil, - nil, 47, 48, nil, 32, 45, 36, 38, 39, 40, - 41, 152, 49, nil, 52, nil, nil, nil, 149, 18, - nil, 191, nil, nil, nil, nil, 47, 48, nil, 32, - 45, 36, 38, 39, 40, 41, nil, 49, nil, 52, - 186, 187, nil, 188, 189, 190, nil, nil, nil, nil, - 192, 193, 194, 195, 196, 96, nil, nil, nil, 94, - nil, nil, nil, nil, nil, nil, nil, 95, nil, nil, - nil, nil, 97, nil, 99, 100, nil, 101, 102 ] + 56, 89, 110, 40, 110, 69, 221, 9, 197, 10, + 76, 121, 11, 85, 12, 232, 223, 56, 224, 225, + 226, 233, 70, 120, 72, 73, 160, 74, 75, 218, + 219, 164, 78, 90, 56, 78, 30, 226, 78, 182, + 78, 168, 169, 59, 60, 119, 44, 57, 48, 50, + 51, 52, 53, 30, 61, 56, 64, 165, 40, 166, + 59, 60, 80, 44, 57, 48, 50, 51, 52, 53, + 30, 61, 114, 64, 59, 60, 22, 59, 60, 173, + 44, 57, 48, 50, 51, 52, 53, 80, 61, 56, + 64, 30, 125, 87, 88, 175, -130, 176, 59, 60, + 22, 44, 57, 48, 50, 51, 52, 53, 22, 61, + 56, 64, 78, 40, 104, 103, 182, 132, 78, 194, + 197, 105, 12, 200, 129, 30, -130, -130, -130, 201, + 202, 56, 59, 60, 40, 44, 57, 48, 50, 51, + 52, 53, 203, 61, 26, 64, 30, 204, 205, 206, + 207, 123, 209, 59, 60, 210, 44, 57, 48, 50, + 51, 52, 53, 102, 61, 56, 64, 30, 226, 101, + 78, 69, 100, 220, 59, 60, -149, 44, 57, 48, + 50, 51, 52, 53, 152, 61, 56, 64, 70, 40, + 72, 73, 99, 74, 75, 78, 98, 228, 12, 97, + 78, 30, 96, 56, 95, 94, 226, 152, 59, 60, + -86, 44, 57, 48, 50, 51, 52, 53, 84, 61, + 56, 64, 30, 40, 12, 24, 242, 243, 22, 59, + 60, 245, 44, 57, 48, 50, 51, 52, 53, 30, + 61, 56, 64, 246, 40, 80, 59, 60, 248, 44, + 57, 48, 50, 51, 52, 53, 30, 61, 122, 64, + 22, 228, 66, 59, 60, 65, 44, 57, 48, 50, + 51, 52, 53, 252, 61, 56, 64, 30, 125, 24, + 254, 22, 30, 16, 59, 60, 182, 44, 57, 48, + 50, 51, 52, 53, 78, 61, 56, 64, 263, 40, + 15, 265, 182, 132, 266, 267, 268, 13, 30, 78, + 129, 30, nil, nil, nil, nil, nil, nil, 59, 60, + nil, 44, 57, 48, 50, 51, 52, 53, nil, 61, + 56, 64, 30, 125, nil, nil, nil, nil, nil, 59, + 60, nil, 44, 57, 48, 50, 51, 52, 53, nil, + 61, 56, 64, nil, 226, nil, nil, nil, 132, nil, + nil, nil, nil, nil, nil, 129, 30, nil, 56, nil, + nil, 40, nil, 59, 60, nil, 44, 57, 48, 50, + 51, 52, 53, nil, 61, 56, 64, 30, 226, 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, 226, nil, 59, 60, + nil, 44, 57, 48, 50, 51, 52, 53, nil, 61, + nil, 64, 30, nil, nil, nil, nil, nil, 56, 59, + 60, 125, 44, 57, 48, 50, 51, 52, 53, 30, + 61, nil, 64, nil, nil, 56, 59, 60, 40, 44, + 57, 48, 50, 51, 52, 53, 132, 61, nil, 64, + nil, nil, 56, 129, 30, 40, nil, nil, nil, nil, + nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, + 53, 30, 61, 56, 64, nil, 226, nil, nil, nil, + nil, 44, 57, 48, 50, 51, 52, 53, 30, 61, + 56, 64, nil, 226, nil, 59, 60, nil, 44, 57, + 48, 50, 51, 52, 53, nil, 61, 56, 64, 30, + 226, 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, 226, nil, + 59, 60, nil, 44, 57, 48, 50, 51, 52, 53, + nil, 61, nil, 64, 30, nil, nil, nil, nil, nil, + 56, 59, 60, 125, 44, 57, 48, 50, 51, 52, + 53, 30, 61, nil, 64, nil, nil, 56, 59, 60, + 40, 44, 57, 48, 50, 51, 52, 53, 132, 61, + 154, 64, nil, nil, 56, 129, 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, 125, 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, 129, + 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, 226, 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, 125, nil, nil, 30, + nil, nil, nil, nil, nil, 12, 59, 60, nil, 44, + 57, 48, 50, 51, 52, 53, nil, 61, nil, 64, + nil, 132, nil, nil, nil, nil, nil, nil, 129, 30, + nil, 188, nil, nil, nil, nil, 59, 60, nil, 44, + 57, 48, 50, 51, 52, 53, nil, 61, 69, 64, + 183, 184, nil, 185, 186, 187, nil, 68, nil, nil, + 189, 190, 191, 192, 193, 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, 20, 54, 106, 128, 0, 183, 107, 117, 22, - 190, 98, 0, 100, 83, 101, 190, 249, 102, 186, - 249, 186, 186, 56, 107, 103, 107, 107, 106, 107, - 107, 20, 20, 20, 242, 106, 106, 242, 54, 183, - 128, 22, 105, 106, 106, 56, 106, 106, 106, 106, - 106, 106, 106, 249, 106, 96, 106, 83, 83, 8, - 249, 249, 8, 249, 249, 249, 249, 249, 249, 249, - 242, 249, 8, 249, 178, 21, 21, 242, 242, 95, - 242, 242, 242, 242, 242, 242, 242, 116, 242, 222, - 242, 178, 222, 178, 178, 8, 178, 178, 178, 178, - 17, 222, 8, 8, 97, 8, 8, 8, 8, 8, - 8, 8, 118, 8, 220, 8, 119, 220, 49, 49, - 89, 89, 17, 120, 121, 222, 220, 125, 93, 133, - 134, 219, 222, 222, 219, 222, 222, 222, 222, 222, - 222, 222, 87, 222, 137, 222, 138, 143, 217, 144, - 220, 217, 84, 146, 81, 149, 150, 220, 220, 75, - 220, 220, 220, 220, 220, 220, 220, 219, 220, 74, - 220, 175, 176, 208, 219, 219, 208, 219, 219, 219, - 219, 219, 219, 219, 217, 219, 65, 219, 63, 181, - 204, 217, 217, 204, 217, 217, 217, 217, 217, 217, - 217, 208, 217, 182, 217, 62, 184, 94, 208, 208, - 94, 52, 46, 45, 188, 44, 208, 208, 42, 208, - 208, 208, 208, 208, 208, 208, 204, 208, 41, 208, - 40, 39, 200, 204, 204, 200, 204, 204, 204, 204, - 204, 204, 204, 94, 204, 38, 204, 36, 33, 135, - 94, 94, 135, 94, 94, 94, 94, 94, 94, 94, - 200, 94, 197, 94, 18, 16, 13, 200, 200, 209, - 210, 211, 216, 12, 80, 200, 200, 80, 200, 200, - 200, 200, 200, 200, 200, 135, 200, 218, 200, 11, - 9, 221, 135, 135, 7, 135, 135, 135, 135, 135, - 135, 135, 226, 135, 145, 135, 236, 145, 237, 238, - 80, 239, 5, 243, 245, 246, 145, 80, 80, 1, - 80, 80, 80, 80, 80, 80, 80, 253, 80, nil, - 80, 23, 145, nil, 23, nil, nil, nil, nil, 145, - 145, nil, nil, nil, nil, nil, nil, 145, 145, nil, - 145, 145, 145, 145, 145, 145, 145, nil, 145, 28, - 145, nil, 28, nil, nil, nil, nil, 23, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 23, 23, 23, - 23, 23, 23, 23, nil, 23, 196, 23, nil, 196, - nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, - nil, nil, 28, 28, nil, 28, 28, 28, 28, 28, - 28, 28, nil, 28, 195, 28, nil, 195, nil, nil, - nil, nil, 196, nil, nil, nil, nil, nil, nil, 196, - 196, nil, 196, 196, 196, 196, 196, 196, 196, nil, - 196, 194, 196, nil, 194, nil, nil, nil, nil, nil, - 195, nil, nil, nil, nil, nil, nil, 195, 195, nil, - 195, 195, 195, 195, 195, 195, 195, nil, 195, 193, - 195, nil, 193, nil, nil, nil, nil, 194, nil, nil, - nil, nil, nil, nil, 194, 194, nil, 194, 194, 194, - 194, 194, 194, 194, nil, 194, 192, 194, nil, 192, - nil, nil, nil, nil, nil, 193, nil, nil, nil, nil, - nil, nil, 193, 193, nil, 193, 193, 193, 193, 193, - 193, 193, nil, 193, 191, 193, nil, 191, nil, nil, - nil, nil, 192, nil, nil, nil, nil, nil, nil, 192, - 192, nil, 192, 192, 192, 192, 192, 192, 192, nil, - 192, 79, 192, nil, 79, nil, nil, nil, nil, nil, - 191, nil, nil, nil, nil, nil, nil, 191, 191, nil, - 191, 191, 191, 191, 191, 191, 191, nil, 191, 189, - 191, nil, 189, nil, nil, nil, nil, 79, nil, nil, - nil, nil, nil, nil, 79, 79, nil, 79, 79, 79, - 79, 79, 79, 79, nil, 79, 187, 79, nil, 187, - nil, nil, nil, nil, nil, 189, nil, nil, nil, nil, - nil, nil, 189, 189, nil, 189, 189, 189, 189, 189, - 189, 189, nil, 189, 78, 189, nil, 78, nil, nil, - nil, nil, 187, nil, nil, nil, nil, nil, nil, 187, - 187, nil, 187, 187, 187, 187, 187, 187, 187, nil, - 187, 77, 187, nil, 77, nil, nil, nil, nil, nil, - 78, nil, nil, nil, nil, nil, nil, 78, 78, nil, - 78, 78, 78, 78, 78, 78, 78, nil, 78, 69, - 78, nil, 69, nil, nil, nil, nil, 77, nil, nil, - nil, nil, nil, nil, 77, 77, nil, 77, 77, 77, - 77, 77, 77, 77, nil, 77, 76, 77, nil, 76, - nil, nil, nil, nil, nil, 69, nil, nil, nil, 76, - nil, nil, 69, 69, nil, 69, 69, 69, 69, 69, - 69, 69, nil, 69, 152, 69, nil, 152, nil, nil, - nil, nil, 76, nil, nil, nil, nil, nil, nil, 76, - 76, nil, 76, 76, 76, 76, 76, 76, 76, nil, - 76, 174, 76, nil, 174, nil, nil, nil, nil, 152, - 152, nil, nil, nil, nil, nil, nil, 152, 152, nil, - 152, 152, 152, 152, 152, 152, 152, nil, 152, 71, - 152, nil, 71, nil, nil, nil, nil, 174, nil, nil, - nil, nil, nil, nil, 174, 174, nil, 174, 174, 174, - 174, 174, 174, 174, nil, 174, 180, 174, nil, 180, - nil, nil, nil, nil, nil, 71, nil, nil, nil, nil, - nil, nil, 71, 71, nil, 71, 71, 71, 71, 71, - 71, 71, nil, 71, 180, 71, 64, nil, nil, 64, - nil, 180, 180, nil, nil, nil, nil, nil, nil, 180, - 180, nil, 180, 180, 180, 180, 180, 180, 180, nil, - 180, 70, 180, nil, 70, nil, nil, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, nil, 68, 64, - 64, 68, 64, 64, 64, 64, 64, 64, 64, nil, - 64, nil, 64, nil, nil, nil, nil, 70, nil, nil, - nil, nil, nil, 185, 70, 70, 185, 70, 70, 70, - 70, 70, 70, 70, 68, 70, nil, 70, nil, nil, - nil, 68, 68, nil, 68, 68, 68, 68, 68, 68, - 68, 185, 68, nil, 68, nil, nil, nil, 185, 185, - nil, 148, nil, nil, nil, nil, 185, 185, nil, 185, - 185, 185, 185, 185, 185, 185, nil, 185, nil, 185, - 148, 148, nil, 148, 148, 148, nil, nil, nil, nil, - 148, 148, 148, 148, 148, 55, nil, nil, nil, 55, - nil, nil, nil, nil, nil, nil, nil, 55, nil, nil, - nil, nil, 55, nil, 55, 55, nil, 55, 55 ] + 88, 34, 166, 88, 66, 178, 180, 0, 222, 0, + 18, 73, 0, 29, 0, 187, 183, 263, 183, 183, + 263, 187, 178, 71, 178, 178, 100, 178, 178, 178, + 178, 102, 18, 34, 252, 29, 88, 252, 166, 180, + 66, 108, 108, 88, 88, 70, 88, 88, 88, 88, + 88, 88, 88, 263, 88, 246, 88, 103, 246, 106, + 263, 263, 83, 263, 263, 263, 263, 263, 263, 263, + 252, 263, 112, 263, 102, 102, 69, 252, 252, 114, + 252, 252, 252, 252, 252, 252, 252, 115, 252, 242, + 252, 246, 242, 33, 33, 116, 32, 117, 246, 246, + 119, 246, 246, 246, 246, 246, 246, 246, 120, 246, + 228, 246, 68, 228, 61, 61, 126, 242, 85, 129, + 130, 64, 228, 145, 242, 242, 32, 32, 32, 154, + 155, 12, 242, 242, 12, 242, 242, 242, 242, 242, + 242, 242, 156, 242, 12, 242, 228, 157, 158, 159, + 163, 75, 171, 228, 228, 172, 228, 228, 228, 228, + 228, 228, 228, 58, 228, 225, 228, 12, 225, 57, + 176, 81, 56, 179, 12, 12, 54, 12, 12, 12, + 12, 12, 12, 12, 181, 12, 226, 12, 81, 226, + 81, 81, 53, 81, 81, 76, 52, 185, 226, 51, + 94, 225, 50, 223, 48, 45, 223, 93, 225, 225, + 30, 225, 225, 225, 225, 225, 225, 225, 28, 225, + 87, 225, 226, 87, 194, 25, 199, 200, 24, 226, + 226, 211, 226, 226, 226, 226, 226, 226, 226, 223, + 226, 89, 226, 212, 89, 23, 223, 223, 219, 223, + 223, 223, 223, 223, 223, 223, 87, 223, 74, 223, + 16, 224, 15, 87, 87, 13, 87, 87, 87, 87, + 87, 87, 87, 227, 87, 218, 87, 89, 218, 11, + 232, 10, 243, 9, 89, 89, 247, 89, 89, 89, + 89, 89, 89, 89, 248, 89, 210, 89, 249, 210, + 7, 253, 255, 218, 256, 260, 261, 1, 266, 268, + 218, 218, nil, nil, nil, nil, nil, nil, 218, 218, + nil, 218, 218, 218, 218, 218, 218, 218, nil, 218, + 197, 218, 210, 197, nil, nil, nil, nil, nil, 210, + 210, nil, 210, 210, 210, 210, 210, 210, 210, nil, + 210, 193, 210, nil, 193, nil, nil, nil, 197, nil, + nil, nil, nil, nil, nil, 197, 197, nil, 84, nil, + nil, 84, nil, 197, 197, nil, 197, 197, 197, 197, + 197, 197, 197, nil, 197, 192, 197, 193, 192, nil, + nil, nil, nil, nil, 193, 193, nil, 193, 193, 193, + 193, 193, 193, 193, 84, 193, 90, 193, nil, 90, + nil, 84, 84, nil, 84, 84, 84, 84, 84, 84, + 84, 192, 84, 191, 84, nil, 191, nil, 192, 192, + nil, 192, 192, 192, 192, 192, 192, 192, nil, 192, + nil, 192, 90, nil, nil, nil, nil, nil, 80, 90, + 90, 80, 90, 90, 90, 90, 90, 90, 90, 191, + 90, nil, 90, nil, nil, 35, 191, 191, 35, 191, + 191, 191, 191, 191, 191, 191, 80, 191, nil, 191, + nil, nil, 40, 80, 80, 40, nil, nil, nil, nil, + nil, 80, 80, nil, 80, 80, 80, 80, 80, 80, + 80, 35, 80, 190, 80, nil, 190, nil, nil, nil, + nil, 35, 35, 35, 35, 35, 35, 35, 40, 35, + 189, 35, nil, 189, nil, 40, 40, nil, 40, 40, + 40, 40, 40, 40, 40, nil, 40, 188, 40, 190, + 188, nil, nil, nil, nil, nil, 190, 190, nil, 190, + 190, 190, 190, 190, 190, 190, 189, 190, 113, 190, + nil, 113, nil, 189, 189, nil, 189, 189, 189, 189, + 189, 189, 189, 188, 189, 184, 189, nil, 184, nil, + 188, 188, nil, 188, 188, 188, 188, 188, 188, 188, + nil, 188, nil, 188, 113, nil, nil, nil, nil, nil, + 182, 113, 113, 182, 113, 113, 113, 113, 113, 113, + 113, 184, 113, nil, 113, nil, nil, 95, 184, 184, + 95, 184, 184, 184, 184, 184, 184, 184, 182, 184, + 95, 184, nil, nil, 96, 182, 182, 96, nil, nil, + nil, nil, nil, 182, 182, nil, 182, 182, 182, 182, + 182, 182, 182, 95, 182, 175, 182, nil, 175, nil, + 95, 95, nil, 95, 95, 95, 95, 95, 95, 95, + 96, 95, 173, 95, nil, 173, nil, 96, 96, nil, + 96, 96, 96, 96, 96, 96, 96, nil, 96, 97, + 96, 175, 97, nil, nil, nil, nil, nil, 175, 175, + nil, 175, 175, 175, 175, 175, 175, 175, 173, 175, + nil, 175, nil, nil, 132, 173, 173, 132, 173, 173, + 173, 173, 173, 173, 173, 97, 173, nil, 173, nil, + nil, 98, 97, 97, 98, 97, 97, 97, 97, 97, + 97, 97, nil, 97, nil, 97, nil, nil, 99, 132, + 132, 99, nil, nil, nil, nil, nil, 132, 132, nil, + 132, 132, 132, 132, 132, 132, 132, 98, 132, nil, + 132, nil, nil, 186, 98, 98, 186, 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, 125, 99, nil, 125, nil, nil, 186, + nil, nil, nil, nil, nil, 125, 186, 186, nil, 186, + 186, 186, 186, 186, 186, 186, nil, 186, nil, 186, + nil, 125, nil, nil, nil, nil, nil, nil, 125, 125, + nil, 128, nil, nil, nil, nil, 125, 125, nil, 125, + 125, 125, 125, 125, 125, 125, nil, 125, 17, 125, + 128, 128, nil, 128, 128, 128, nil, 17, nil, nil, + 128, 128, 128, 128, 128, 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 = [ - -5, 319, nil, nil, nil, 310, nil, 283, 54, 290, - nil, 286, 232, 246, nil, nil, 261, 81, 212, nil, - -17, 27, -9, 326, nil, nil, nil, nil, 354, nil, - nil, nil, nil, 196, nil, nil, 239, nil, 237, 223, - 222, 220, 160, nil, 163, 208, 154, nil, nil, 59, - nil, nil, 149, nil, -3, 991, 4, nil, nil, nil, - nil, nil, 175, 147, 851, 145, nil, nil, 893, 684, - 876, 794, nil, nil, 160, 118, 711, 656, 629, 546, - 269, 149, nil, 9, 93, nil, nil, 138, nil, 114, - nil, nil, nil, 112, 202, 71, 14, 82, -11, nil, - -12, -10, -7, -16, nil, 11, -5, 3, nil, nil, - nil, nil, nil, nil, nil, nil, 78, -1, 103, 107, - 114, 115, nil, nil, nil, 122, nil, nil, -1, nil, - nil, nil, nil, 120, 126, 244, nil, 103, 105, nil, - nil, nil, nil, 115, 146, 299, 111, nil, 947, 147, - 121, nil, 739, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 766, 162, 168, nil, 70, nil, - 821, 148, 194, -3, 197, 918, -15, 601, 206, 574, - -23, 519, 491, 464, 436, 409, 381, 245, nil, nil, - 227, nil, nil, nil, 185, nil, nil, nil, 168, 261, - 228, 267, nil, nil, nil, nil, 237, 143, 279, 126, - 109, 256, 84, nil, nil, nil, 263, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 264, 267, 268, 276, - nil, nil, 29, 304, nil, 305, 311, nil, nil, 12, - nil, nil, nil, 286, 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, 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 = [ - -159, -159, -1, -2, -3, -5, -16, -159, -159, -159, - -4, -159, -159, -29, -30, -31, -33, -36, -153, -111, - -112, -115, -118, -159, -120, -121, -122, -123, -159, -125, - -126, -127, -129, -159, -131, -132, -159, -134, -159, -159, - -159, -159, -140, -141, -145, -159, -159, -151, -152, -159, - -156, -157, -159, 256, -159, -159, -41, -42, -44, -45, - -84, -28, -61, -159, -159, -159, -35, -153, -159, -159, - -159, -159, -119, -128, -159, -159, -159, -159, -159, -159, - -159, -143, -144, -159, -159, -155, -158, -6, -8, -12, - -10, -11, -17, -159, -159, -159, -159, -159, -159, -49, - -51, -53, -54, -159, -40, -63, -159, -38, -32, -34, - -113, -114, -116, -117, -124, -130, -159, -159, -159, -159, - -159, -159, -142, -146, -148, -159, -150, -154, -159, -9, - -13, -14, -18, -159, -26, -159, -46, -159, -159, -50, - -52, -55, -39, -68, -159, -159, -62, -70, -159, -159, - -87, -89, -159, -92, -93, -94, -96, -97, -98, -99, - -100, -101, -108, -109, -110, -133, -135, -136, -137, -138, - -139, -149, -7, -24, -159, -159, -78, -47, -159, -37, - -159, -159, -159, -159, -110, -159, -159, -159, -159, -159, - -159, -159, -159, -159, -159, -159, -159, -159, -43, -83, - -159, -91, -25, -27, -159, -48, -56, -57, -159, -159, - -69, -64, -66, -67, -15, -95, -88, -159, -159, -159, - -159, -159, -159, -74, -75, -80, -159, -82, -102, -103, - -104, -105, -106, -107, -90, -77, -58, -159, -159, -159, - -73, -79, -159, -159, -81, -159, -60, -86, -65, -159, - -72, -76, -59, -159, -71, -85 ] + -161, -161, -1, -2, -3, -4, -5, -7, -18, -161, + -161, -161, -161, -161, -6, -161, -161, -161, -43, -44, + -46, -47, -86, -63, -161, -31, -32, -33, -35, -38, + -155, -113, -114, -117, -120, -161, -122, -123, -124, -125, + -161, -127, -128, -129, -131, -161, -133, -134, -161, -136, + -161, -161, -161, -161, -142, -143, -147, -161, -161, -153, + -154, -161, -158, -159, -161, 272, -161, -161, -161, -161, + -161, -161, -51, -53, -55, -56, -161, -42, -155, -25, + -161, -40, -30, -63, -161, -161, -37, -161, -161, -161, + -161, -121, -130, -161, -161, -161, -161, -161, -161, -161, + -145, -146, -161, -161, -157, -160, -8, -10, -14, -12, + -13, -19, -161, -161, -161, -63, -161, -24, -48, -161, + -161, -52, -54, -57, -41, -161, -64, -72, -161, -161, + -89, -91, -161, -94, -95, -96, -98, -99, -100, -101, + -102, -103, -110, -111, -112, -65, -34, -36, -115, -116, + -118, -119, -126, -132, -161, -161, -161, -161, -161, -161, + -144, -148, -150, -161, -152, -156, -161, -11, -15, -16, + -20, -161, -28, -161, -21, -161, -161, -49, -161, -161, + -161, -112, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -45, -85, -161, -93, -70, + -161, -135, -137, -138, -139, -140, -141, -151, -9, -26, + -161, -161, -80, -22, -23, -50, -58, -59, -161, -161, + -17, -97, -90, -161, -161, -161, -161, -161, -161, -76, + -77, -82, -161, -84, -104, -105, -106, -107, -108, -109, + -92, -39, -161, -161, -27, -29, -161, -60, -161, -161, + -75, -81, -161, -161, -83, -71, -66, -68, -69, -79, + -161, -62, -88, -161, -74, -78, -161, -61, -161, -73, + -67, -87 ] racc_goto_table = [ - 66, 17, 146, 55, 133, 56, 175, 88, 198, 213, - 212, 92, 15, 223, 73, 112, 113, 110, 111, 179, - 13, 74, 61, 221, 105, 225, 143, 228, 229, 230, - 231, 232, 233, 62, 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, 213, 248, 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, 18, 17, 126, 107, 171, 115, 18, 67, + 211, 86, 195, 229, 79, 111, 18, 81, 27, 257, + 258, 150, 151, 148, 149, 92, 23, 199, 25, 93, + 227, 82, 231, 167, 234, 235, 236, 237, 238, 239, + 83, 112, 270, 258, 241, 1, 196, 215, 109, 180, + 116, 216, 250, 217, 106, 260, 261, 256, 124, 14, + 170, 118, 7, 6, 5, 253, 222, 147, 195, 249, + 240, 251, 198, 29, 145, 4, 153, 92, 92, 92, + 92, 3, 2, 259, 155, 156, 157, 158, 159, 163, + 146, 91, 161, 162, nil, nil, nil, nil, 264, nil, + nil, nil, 172, 244, nil, 208, 174, 195, nil, 269, + nil, 177, 18, 178, 181, 214, 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, 247, nil, nil, nil, nil, nil, 109, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 116, nil, + nil, nil, 212, nil, 213, nil, 255, 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, 172, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 93, nil, 212, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 176, nil, nil, + 262, nil, nil, nil, nil, 212, nil, 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 ] + 271 ] racc_goto_check = [ - 11, 21, 41, 14, 24, 32, 25, 8, 12, 46, - 45, 15, 28, 51, 63, 64, 64, 62, 62, 31, - 26, 21, 27, 49, 19, 49, 30, 49, 49, 49, - 49, 49, 49, 23, 16, 34, 38, 11, 39, 11, - 40, 41, 10, 51, 42, 43, 44, 12, 11, 15, - 1, 7, 6, 49, 14, 49, 32, 21, 11, 63, - 63, 63, 63, 5, 55, 56, 46, 45, 28, 21, - 21, 21, 21, 21, 57, 25, 41, 12, 49, 4, - 3, 8, 2, 66, 24, 49, 11, 21, 67, 32, - 78, 79, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, 11, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, 14, - 32, 32, nil, nil, nil, nil, nil, nil, 21, nil, + 13, 22, 32, 16, 41, 10, 24, 19, 32, 16, + 25, 13, 14, 51, 20, 17, 32, 16, 28, 45, + 46, 64, 64, 62, 62, 63, 23, 30, 26, 22, + 49, 27, 49, 12, 49, 49, 49, 49, 49, 49, + 23, 18, 45, 46, 31, 1, 34, 38, 13, 41, + 13, 39, 51, 40, 9, 42, 43, 44, 13, 8, + 17, 32, 7, 6, 5, 25, 55, 13, 14, 49, + 56, 49, 57, 22, 20, 4, 13, 63, 63, 63, + 63, 3, 2, 25, 22, 22, 22, 22, 22, 66, + 28, 67, 78, 79, nil, nil, nil, nil, 49, nil, + nil, nil, 22, 24, nil, 10, 20, 14, nil, 49, + nil, 32, 32, 16, 22, 19, 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, nil, 21, nil, nil, + nil, nil, 41, nil, nil, nil, nil, nil, 13, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 13, nil, + nil, nil, 22, nil, 22, nil, 41, 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, 21, 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, 21, nil, 21, nil, nil, nil, nil, - 11, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 11 ] + nil, nil, nil, nil, nil, 22, nil, 22, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 13, nil, nil, nil, nil, 22, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 13 ] racc_goto_pointer = [ - nil, 50, 82, 80, 79, 63, 47, -3, -47, nil, - -47, -17, -141, nil, -9, -44, -21, nil, nil, -38, - nil, -7, nil, 20, -90, -129, 12, 9, 4, nil, - -79, -124, -7, nil, -114, nil, nil, nil, -142, -140, - -138, -104, -193, -192, -135, -171, -172, 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, 45, 82, 81, 75, 64, 63, 62, 52, -12, + -61, nil, -75, -18, -117, nil, -7, -52, -26, -61, + -9, nil, -11, 15, -107, -163, 16, 6, 6, nil, + -118, -155, -8, nil, -83, nil, nil, nil, -131, -127, + -125, -76, -193, -192, -186, -224, -223, nil, nil, -154, + nil, -172, nil, nil, nil, -116, -127, -60, nil, nil, + nil, nil, -64, -10, -68, nil, -13, 56, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, -10, -9, nil, nil ] racc_goto_default = [ - nil, nil, nil, nil, nil, 182, nil, nil, nil, 89, - nil, 34, 147, 6, nil, nil, nil, nil, nil, nil, - nil, 164, nil, nil, nil, nil, nil, nil, nil, 16, - 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, 179, nil, nil, + nil, 108, nil, 46, 127, 8, nil, nil, nil, nil, + nil, 117, 144, nil, nil, nil, nil, nil, nil, 28, + nil, nil, 47, 19, 230, 20, 21, 71, nil, nil, + nil, nil, nil, nil, nil, nil, 38, 143, 137, 128, + 138, nil, 139, 140, 141, 130, 131, 133, 134, 135, + 136, 142, 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, 64, :_reduce_none, 1, 65, :_reduce_none, 1, 65, :_reduce_none, - 2, 66, :_reduce_4, - 0, 69, :_reduce_none, - 3, 69, :_reduce_6, - 3, 70, :_reduce_7, - 1, 70, :_reduce_none, - 2, 71, :_reduce_9, + 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, - 1, 72, :_reduce_11, - 0, 73, :_reduce_12, - 1, 73, :_reduce_13, - 1, 73, :_reduce_14, - 3, 75, :_reduce_15, - 1, 68, :_reduce_none, - 4, 67, :_reduce_17, - 5, 67, :_reduce_18, - 5, 80, :_reduce_19, - 3, 83, :_reduce_20, - 3, 81, :_reduce_none, - 1, 81, :_reduce_none, - 3, 85, :_reduce_23, - 3, 79, :_reduce_24, - 3, 87, :_reduce_25, + 2, 73, :_reduce_11, + 1, 74, :_reduce_none, + 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, 82, :_reduce_none, + 1, 82, :_reduce_none, + 3, 69, :_reduce_25, + 3, 81, :_reduce_26, + 3, 87, :_reduce_27, 1, 87, :_reduce_none, - 4, 78, :_reduce_27, - 3, 76, :_reduce_28, - 2, 76, :_reduce_29, - 1, 89, :_reduce_30, - 1, 89, :_reduce_31, - 3, 91, :_reduce_32, + 4, 80, :_reduce_29, + 3, 78, :_reduce_30, + 2, 78, :_reduce_31, + 1, 89, :_reduce_32, + 1, 89, :_reduce_33, + 3, 91, :_reduce_34, 1, 91, :_reduce_none, - 3, 92, :_reduce_34, - 2, 92, :_reduce_35, + 3, 92, :_reduce_36, + 2, 92, :_reduce_37, 1, 92, :_reduce_none, - 4, 90, :_reduce_37, - 2, 86, :_reduce_38, - 3, 77, :_reduce_39, - 2, 77, :_reduce_40, - 1, 77, :_reduce_none, - 1, 77, :_reduce_none, + 4, 90, :_reduce_39, + 2, 86, :_reduce_40, + 3, 79, :_reduce_41, + 2, 79, :_reduce_42, + 1, 79, :_reduce_none, + 1, 79, :_reduce_none, 1, 97, :_reduce_none, 1, 96, :_reduce_none, 1, 96, :_reduce_none, - 3, 98, :_reduce_46, - 4, 98, :_reduce_47, - 5, 99, :_reduce_48, - 1, 100, :_reduce_49, - 2, 100, :_reduce_50, + 3, 98, :_reduce_48, + 4, 98, :_reduce_49, + 5, 99, :_reduce_50, 1, 100, :_reduce_51, 2, 100, :_reduce_52, 1, 100, :_reduce_53, - 1, 100, :_reduce_54, - 2, 100, :_reduce_55, + 2, 100, :_reduce_54, + 1, 100, :_reduce_55, + 1, 100, :_reduce_56, + 2, 100, :_reduce_57, 1, 101, :_reduce_none, 1, 101, :_reduce_none, - 2, 102, :_reduce_58, - 4, 103, :_reduce_59, + 2, 102, :_reduce_60, + 4, 103, :_reduce_61, 1, 105, :_reduce_none, - 0, 82, :_reduce_none, - 2, 82, :_reduce_62, + 0, 83, :_reduce_none, + 2, 83, :_reduce_64, 0, 93, :_reduce_none, - 3, 93, :_reduce_64, - 3, 107, :_reduce_65, + 3, 93, :_reduce_66, + 3, 107, :_reduce_67, 1, 107, :_reduce_none, 1, 108, :_reduce_none, 0, 94, :_reduce_none, - 2, 94, :_reduce_69, + 2, 94, :_reduce_71, 1, 110, :_reduce_none, - 6, 111, :_reduce_71, - 5, 111, :_reduce_72, - 4, 113, :_reduce_73, - 3, 113, :_reduce_74, + 6, 111, :_reduce_73, + 5, 111, :_reduce_74, + 4, 113, :_reduce_75, + 3, 113, :_reduce_76, 1, 114, :_reduce_none, - 3, 114, :_reduce_76, - 3, 88, :_reduce_77, + 3, 114, :_reduce_78, + 3, 88, :_reduce_79, 1, 88, :_reduce_none, - 4, 115, :_reduce_79, - 3, 115, :_reduce_80, - 4, 116, :_reduce_81, - 3, 116, :_reduce_82, - 2, 117, :_reduce_83, - 1, 95, :_reduce_84, - 3, 106, :_reduce_85, + 4, 115, :_reduce_81, + 3, 115, :_reduce_82, + 4, 116, :_reduce_83, + 3, 116, :_reduce_84, + 2, 117, :_reduce_85, + 1, 95, :_reduce_86, + 3, 106, :_reduce_87, 1, 106, :_reduce_none, 1, 104, :_reduce_none, - 3, 104, :_reduce_88, + 3, 104, :_reduce_90, 1, 118, :_reduce_none, - 3, 118, :_reduce_90, - 2, 119, :_reduce_91, + 3, 118, :_reduce_92, + 2, 119, :_reduce_93, 1, 119, :_reduce_none, 1, 120, :_reduce_none, 1, 121, :_reduce_none, - 3, 121, :_reduce_95, + 3, 121, :_reduce_97, 1, 122, :_reduce_none, 1, 122, :_reduce_none, 1, 122, :_reduce_none, 1, 122, :_reduce_none, 1, 122, :_reduce_none, 1, 122, :_reduce_none, - 3, 123, :_reduce_102, - 3, 123, :_reduce_103, 3, 123, :_reduce_104, 3, 123, :_reduce_105, 3, 123, :_reduce_106, 3, 123, :_reduce_107, + 3, 123, :_reduce_108, + 3, 123, :_reduce_109, 1, 112, :_reduce_none, 1, 112, :_reduce_none, 1, 124, :_reduce_none, - 1, 84, :_reduce_none, - 1, 84, :_reduce_none, - 3, 125, :_reduce_113, - 3, 125, :_reduce_114, + 1, 85, :_reduce_none, + 1, 85, :_reduce_none, + 3, 125, :_reduce_115, + 3, 125, :_reduce_116, 1, 125, :_reduce_none, - 3, 127, :_reduce_116, - 3, 127, :_reduce_117, + 3, 127, :_reduce_118, + 3, 127, :_reduce_119, 1, 127, :_reduce_none, - 2, 128, :_reduce_119, + 2, 128, :_reduce_121, 1, 128, :_reduce_none, 1, 130, :_reduce_none, 1, 130, :_reduce_none, 1, 130, :_reduce_none, - 3, 130, :_reduce_124, + 3, 130, :_reduce_126, 1, 131, :_reduce_none, 1, 131, :_reduce_none, 1, 133, :_reduce_none, 1, 133, :_reduce_none, - 1, 134, :_reduce_129, - 3, 109, :_reduce_130, + 1, 134, :_reduce_131, + 3, 109, :_reduce_132, 1, 109, :_reduce_none, 1, 136, :_reduce_none, - 4, 132, :_reduce_133, + 4, 132, :_reduce_135, 1, 132, :_reduce_none, - 4, 137, :_reduce_135, - 4, 137, :_reduce_136, 4, 137, :_reduce_137, 4, 137, :_reduce_138, 4, 137, :_reduce_139, + 4, 137, :_reduce_140, + 4, 137, :_reduce_141, 1, 135, :_reduce_none, 1, 135, :_reduce_none, - 3, 138, :_reduce_142, - 2, 138, :_reduce_143, - 2, 138, :_reduce_144, - 1, 138, :_reduce_145, - 3, 139, :_reduce_146, + 3, 138, :_reduce_144, + 2, 138, :_reduce_145, + 2, 138, :_reduce_146, + 1, 138, :_reduce_147, + 3, 139, :_reduce_148, 1, 140, :_reduce_none, 1, 141, :_reduce_none, - 2, 142, :_reduce_149, - 1, 142, :_reduce_150, - 1, 129, :_reduce_151, - 1, 129, :_reduce_152, - 1, 74, :_reduce_153, - 3, 126, :_reduce_154, - 2, 126, :_reduce_155, + 2, 142, :_reduce_151, + 1, 142, :_reduce_152, + 1, 129, :_reduce_153, + 1, 129, :_reduce_154, + 1, 76, :_reduce_155, + 3, 126, :_reduce_156, + 2, 126, :_reduce_157, 1, 126, :_reduce_none, 1, 143, :_reduce_none, - 2, 144, :_reduce_158 ] + 2, 144, :_reduce_160 ] -racc_reduce_n = 159 +racc_reduce_n = 161 -racc_shift_n = 256 +racc_shift_n = 272 racc_token_table = { false => 0, @@ -676,6 +664,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", @@ -688,12 +678,10 @@ def self.parse(sql) "table_reference", "value_list", "column_list", - "update_specification", "update_field_list", "where_clause", "update_field", "value_expression", - "delete_specification", "from_clause", "in_column_list", "in_value_list", @@ -766,499 +754,499 @@ 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 = nil result end .,., -module_eval(<<'.,.,', 'parser.racc', 52) - def _reduce_20(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 54) + def _reduce_22(val, _values, result) result = nil result end .,., -# reduce 21 omitted +# reduce 23 omitted -# reduce 22 omitted +# reduce 24 omitted -module_eval(<<'.,.,', 'parser.racc', 59) - def _reduce_23(val, _values, result) - result = nil +module_eval(<<'.,.,', 'parser.racc', 61) + def _reduce_25(val, _values, result) + result = SQLParser::Statement::Delete.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 62) - def _reduce_24(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 64) + def _reduce_26(val, _values, result) result = SQLParser::Statement::InColumnList.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 65) - def _reduce_25(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 67) + def _reduce_27(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 26 omitted +# reduce 28 omitted -module_eval(<<'.,.,', 'parser.racc', 69) - def _reduce_27(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 71) + def _reduce_29(val, _values, result) result = SQLParser::Statement::InValueList.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 72) - def _reduce_28(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 74) + def _reduce_30(val, _values, result) result = SQLParser::Statement::Select.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 73) - def _reduce_29(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 75) + def _reduce_31(val, _values, result) result = SQLParser::Statement::Select.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 76) - def _reduce_30(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 78) + def _reduce_32(val, _values, result) result = SQLParser::Statement::All.new result end .,., -module_eval(<<'.,.,', 'parser.racc', 77) - def _reduce_31(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 79) + def _reduce_33(val, _values, result) result = SQLParser::Statement::SelectList.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 80) - def _reduce_32(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 82) + def _reduce_34(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 33 omitted +# reduce 35 omitted -module_eval(<<'.,.,', 'parser.racc', 84) - def _reduce_34(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 86) + def _reduce_36(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 85) - def _reduce_35(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 87) + def _reduce_37(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 36 omitted +# reduce 38 omitted -module_eval(<<'.,.,', 'parser.racc', 89) - def _reduce_37(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 91) + def _reduce_39(val, _values, result) result = SQLParser::Statement::TableExpression.new(val[0], val[1], val[2], val[3]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 92) - def _reduce_38(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 94) + def _reduce_40(val, _values, result) result = SQLParser::Statement::FromClause.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 95) - def _reduce_39(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 97) + def _reduce_41(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 96) - def _reduce_40(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 98) + def _reduce_42(val, _values, result) result = SQLParser::Statement::As.new(val[0], val[1]) result end .,., -# reduce 41 omitted - -# reduce 42 omitted - # reduce 43 omitted # reduce 44 omitted # reduce 45 omitted -module_eval(<<'.,.,', 'parser.racc', 108) - def _reduce_46(val, _values, result) +# reduce 46 omitted + +# reduce 47 omitted + +module_eval(<<'.,.,', 'parser.racc', 110) + def _reduce_48(val, _values, result) result = SQLParser::Statement::CrossJoin.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 109) - def _reduce_47(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 111) + def _reduce_49(val, _values, result) result = SQLParser::Statement::CrossJoin.new(val[0], val[3]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 112) - def _reduce_48(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 114) + def _reduce_50(val, _values, result) result = val[1].new(val[0], val[3], val[4]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 115) - def _reduce_49(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 117) + def _reduce_51(val, _values, result) result = SQLParser::Statement::InnerJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 116) - def _reduce_50(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 118) + def _reduce_52(val, _values, result) result = SQLParser::Statement::LeftOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 117) - def _reduce_51(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 119) + def _reduce_53(val, _values, result) result = SQLParser::Statement::LeftJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 118) - def _reduce_52(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 120) + def _reduce_54(val, _values, result) result = SQLParser::Statement::RightOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 119) - def _reduce_53(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 121) + def _reduce_55(val, _values, result) result = SQLParser::Statement::RightJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 120) - def _reduce_54(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 122) + def _reduce_56(val, _values, result) result = SQLParser::Statement::FullJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 121) - def _reduce_55(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 123) + def _reduce_57(val, _values, result) result = SQLParser::Statement::FullOuterJoin result end .,., -# reduce 56 omitted +# reduce 58 omitted -# reduce 57 omitted +# reduce 59 omitted -module_eval(<<'.,.,', 'parser.racc', 128) - def _reduce_58(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 130) + def _reduce_60(val, _values, result) result = SQLParser::Statement::On.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 131) - def _reduce_59(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 133) + def _reduce_61(val, _values, result) result = SQLParser::Statement::Using.new(val[2]) result end .,., -# reduce 60 omitted +# reduce 62 omitted -# reduce 61 omitted +# reduce 63 omitted -module_eval(<<'.,.,', 'parser.racc', 138) - def _reduce_62(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 140) + def _reduce_64(val, _values, result) result = SQLParser::Statement::WhereClause.new(val[1]) result end .,., -# reduce 63 omitted +# reduce 65 omitted -module_eval(<<'.,.,', 'parser.racc', 142) - def _reduce_64(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 144) + def _reduce_66(val, _values, result) result = SQLParser::Statement::GroupByClause.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 145) - def _reduce_65(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 147) + def _reduce_67(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 66 omitted +# reduce 68 omitted -# reduce 67 omitted +# reduce 69 omitted -# reduce 68 omitted +# reduce 70 omitted -module_eval(<<'.,.,', 'parser.racc', 153) - def _reduce_69(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 155) + def _reduce_71(val, _values, result) result = SQLParser::Statement::HavingClause.new(val[1]) result end .,., -# reduce 70 omitted +# reduce 72 omitted -module_eval(<<'.,.,', 'parser.racc', 160) - def _reduce_71(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 162) + def _reduce_73(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Between.new(val[0], val[3], val[5])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 161) - def _reduce_72(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 163) + def _reduce_74(val, _values, result) result = SQLParser::Statement::Between.new(val[0], val[2], val[4]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 164) - def _reduce_73(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 166) + def _reduce_75(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::In.new(val[0], val[3])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 165) - def _reduce_74(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 167) + def _reduce_76(val, _values, result) result = SQLParser::Statement::In.new(val[0], val[2]) result end .,., -# reduce 75 omitted +# reduce 77 omitted -module_eval(<<'.,.,', 'parser.racc', 169) - def _reduce_76(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 171) + def _reduce_78(val, _values, result) result = SQLParser::Statement::InValueList.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 172) - def _reduce_77(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 174) + def _reduce_79(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 78 omitted +# reduce 80 omitted -module_eval(<<'.,.,', 'parser.racc', 179) - def _reduce_79(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 181) + def _reduce_81(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Like.new(val[0], val[3])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 180) - def _reduce_80(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 182) + def _reduce_82(val, _values, result) result = SQLParser::Statement::Like.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 183) - def _reduce_81(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 185) + def _reduce_83(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Is.new(val[0], SQLParser::Statement::Null.new)) result end .,., -module_eval(<<'.,.,', 'parser.racc', 184) - def _reduce_82(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 186) + def _reduce_84(val, _values, result) result = SQLParser::Statement::Is.new(val[0], SQLParser::Statement::Null.new) result end .,., -module_eval(<<'.,.,', 'parser.racc', 187) - def _reduce_83(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 189) + def _reduce_85(val, _values, result) result = SQLParser::Statement::Exists.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 191) - def _reduce_84(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 193) + def _reduce_86(val, _values, result) result = SQLParser::Statement::Table.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 194) - def _reduce_85(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 196) + def _reduce_87(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 86 omitted +# reduce 88 omitted -# reduce 87 omitted +# reduce 89 omitted -module_eval(<<'.,.,', 'parser.racc', 200) - def _reduce_88(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 202) + def _reduce_90(val, _values, result) result = SQLParser::Statement::Or.new(val[0], val[2]) result end .,., -# reduce 89 omitted +# reduce 91 omitted -module_eval(<<'.,.,', 'parser.racc', 204) - def _reduce_90(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 206) + def _reduce_92(val, _values, result) result = SQLParser::Statement::And.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 207) - def _reduce_91(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 209) + def _reduce_93(val, _values, result) result = SQLParser::Statement::Not.new(val[1]) result end .,., -# reduce 92 omitted +# reduce 94 omitted -# reduce 93 omitted +# reduce 95 omitted -# reduce 94 omitted +# reduce 96 omitted -module_eval(<<'.,.,', 'parser.racc', 215) - def _reduce_95(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 217) + def _reduce_97(val, _values, result) result = val[1] result end .,., -# reduce 96 omitted - -# reduce 97 omitted - # reduce 98 omitted # reduce 99 omitted @@ -1267,280 +1255,284 @@ def _reduce_95(val, _values, result) # reduce 101 omitted -module_eval(<<'.,.,', 'parser.racc', 226) - def _reduce_102(val, _values, result) +# reduce 102 omitted + +# reduce 103 omitted + +module_eval(<<'.,.,', 'parser.racc', 228) + def _reduce_104(val, _values, result) result = SQLParser::Statement::Equals.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 227) - def _reduce_103(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 229) + def _reduce_105(val, _values, result) result = SQLParser::Statement::Not.new(SQLParser::Statement::Equals.new(val[0], val[2])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 228) - def _reduce_104(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 230) + def _reduce_106(val, _values, result) result = SQLParser::Statement::Less.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 229) - def _reduce_105(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 231) + def _reduce_107(val, _values, result) result = SQLParser::Statement::Greater.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 230) - def _reduce_106(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 232) + def _reduce_108(val, _values, result) result = SQLParser::Statement::LessOrEquals.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 231) - def _reduce_107(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 233) + def _reduce_109(val, _values, result) result = SQLParser::Statement::GreaterOrEquals.new(val[0], val[2]) result end .,., -# reduce 108 omitted - -# reduce 109 omitted - # reduce 110 omitted # reduce 111 omitted # reduce 112 omitted -module_eval(<<'.,.,', 'parser.racc', 245) - def _reduce_113(val, _values, result) +# reduce 113 omitted + +# reduce 114 omitted + +module_eval(<<'.,.,', 'parser.racc', 247) + def _reduce_115(val, _values, result) result = SQLParser::Statement::Add.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 246) - def _reduce_114(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 248) + def _reduce_116(val, _values, result) result = SQLParser::Statement::Subtract.new(val[0], val[2]) result end .,., -# reduce 115 omitted +# reduce 117 omitted -module_eval(<<'.,.,', 'parser.racc', 250) - def _reduce_116(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 252) + def _reduce_118(val, _values, result) result = SQLParser::Statement::Multiply.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 251) - def _reduce_117(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 253) + def _reduce_119(val, _values, result) result = SQLParser::Statement::Divide.new(val[0], val[2]) result end .,., -# reduce 118 omitted +# reduce 120 omitted -module_eval(<<'.,.,', 'parser.racc', 255) - def _reduce_119(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 257) + def _reduce_121(val, _values, result) result = val[0].new(val[1]) result end .,., -# reduce 120 omitted - -# reduce 121 omitted - # reduce 122 omitted # reduce 123 omitted -module_eval(<<'.,.,', 'parser.racc', 262) - def _reduce_124(val, _values, result) +# reduce 124 omitted + +# reduce 125 omitted + +module_eval(<<'.,.,', 'parser.racc', 264) + def _reduce_126(val, _values, result) result = val[1] result end .,., -# reduce 125 omitted - -# reduce 126 omitted - # reduce 127 omitted # reduce 128 omitted -module_eval(<<'.,.,', 'parser.racc', 273) - def _reduce_129(val, _values, result) +# reduce 129 omitted + +# reduce 130 omitted + +module_eval(<<'.,.,', 'parser.racc', 275) + def _reduce_131(val, _values, result) result = SQLParser::Statement::CurrentUser.new result end .,., -module_eval(<<'.,.,', 'parser.racc', 276) - def _reduce_130(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 278) + def _reduce_132(val, _values, result) result = SQLParser::Statement::QualifiedColumn.new(val[0], val[2]) result end .,., -# reduce 131 omitted +# reduce 133 omitted -# reduce 132 omitted +# reduce 134 omitted -module_eval(<<'.,.,', 'parser.racc', 283) - def _reduce_133(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 285) + def _reduce_135(val, _values, result) result = SQLParser::Statement::Count.new(SQLParser::Statement::All.new) result end .,., -# reduce 134 omitted +# reduce 136 omitted -module_eval(<<'.,.,', 'parser.racc', 287) - def _reduce_135(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 289) + def _reduce_137(val, _values, result) result = SQLParser::Statement::Count.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 288) - def _reduce_136(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 290) + def _reduce_138(val, _values, result) result = SQLParser::Statement::Average.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 289) - def _reduce_137(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 291) + def _reduce_139(val, _values, result) result = SQLParser::Statement::Maximum.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 290) - def _reduce_138(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 292) + def _reduce_140(val, _values, result) result = SQLParser::Statement::Minimum.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 291) - def _reduce_139(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 293) + def _reduce_141(val, _values, result) result = SQLParser::Statement::Sum.new(val[2]) result end .,., -# reduce 140 omitted +# reduce 142 omitted -# reduce 141 omitted +# reduce 143 omitted -module_eval(<<'.,.,', 'parser.racc', 299) - def _reduce_142(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 301) + def _reduce_144(val, _values, result) result = SQLParser::Statement::Float.new("#{val[0]}.#{val[2]}".to_f) result end .,., -module_eval(<<'.,.,', 'parser.racc', 300) - def _reduce_143(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 302) + def _reduce_145(val, _values, result) result = SQLParser::Statement::Float.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 301) - def _reduce_144(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 303) + def _reduce_146(val, _values, result) result = SQLParser::Statement::Float.new("0.#{val[1]}".to_f) result end .,., -module_eval(<<'.,.,', 'parser.racc', 302) - def _reduce_145(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 304) + def _reduce_147(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', 307) + def _reduce_148(val, _values, result) result = SQLParser::Statement::ApproximateFloat.new(val[0], val[2]) result end .,., -# reduce 147 omitted +# reduce 149 omitted -# reduce 148 omitted +# reduce 150 omitted -module_eval(<<'.,.,', 'parser.racc', 314) - def _reduce_149(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 316) + def _reduce_151(val, _values, result) result = val[0].new(SQLParser::Statement::Integer.new(val[1])) result end .,., -module_eval(<<'.,.,', 'parser.racc', 315) - def _reduce_150(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 317) + def _reduce_152(val, _values, result) result = SQLParser::Statement::Integer.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 318) - def _reduce_151(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 320) + def _reduce_153(val, _values, result) result = SQLParser::Statement::UnaryPlus result end .,., -module_eval(<<'.,.,', 'parser.racc', 319) - def _reduce_152(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 321) + def _reduce_154(val, _values, result) result = SQLParser::Statement::UnaryMinus result end .,., -module_eval(<<'.,.,', 'parser.racc', 323) - def _reduce_153(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 325) + def _reduce_155(val, _values, result) result = SQLParser::Statement::Column.new(val[0]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 327) - def _reduce_154(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 329) + def _reduce_156(val, _values, result) result = SQLParser::Statement::String.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 328) - def _reduce_155(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 330) + def _reduce_157(val, _values, result) result = SQLParser::Statement::String.new('') result end .,., -# reduce 156 omitted +# reduce 158 omitted -# reduce 157 omitted +# reduce 159 omitted -module_eval(<<'.,.,', 'parser.racc', 335) - def _reduce_158(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 337) + def _reduce_160(val, _values, result) result = SQLParser::Statement::Date.new(val[1]) result end diff --git a/lib/sql-parser/sql_visitor.rb b/lib/sql-parser/sql_visitor.rb index e1478c7..f0479d6 100644 --- a/lib/sql-parser/sql_visitor.rb +++ b/lib/sql-parser/sql_visitor.rb @@ -9,6 +9,12 @@ 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_Insert(o) name = visit(o.table_reference) @@ -359,4 +365,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..6a22437 100644 --- a/lib/sql-parser/statement.rb +++ b/lib/sql-parser/statement.rb @@ -27,6 +27,18 @@ 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 Insert < Node @@ -513,4 +525,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 ad5e05c..85c84f0 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -10,6 +10,14 @@ 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_insert_into_clause assert_understands 'INSERT INTO `users` VALUES (1, 2)' From 98bfbf342a0980c2c541d6e26b27aad128340d06 Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Sun, 15 Jan 2017 22:36:55 -0500 Subject: [PATCH 4/6] Add updates with single columns --- lib/sql-parser/parser.racc | 12 ++++++------ lib/sql-parser/parser.racc.rb | 17 +++++++++++------ lib/sql-parser/parser.rex | 1 + lib/sql-parser/parser.rex.rb | 3 +++ lib/sql-parser/sql_visitor.rb | 13 +++++++++++++ lib/sql-parser/statement.rb | 28 +++++++++++++++++++++++++++- test/test_parser.rb | 4 ++++ 7 files changed, 65 insertions(+), 13 deletions(-) diff --git a/lib/sql-parser/parser.racc b/lib/sql-parser/parser.racc index 43c0b10..12022d6 100644 --- a/lib/sql-parser/parser.racc +++ b/lib/sql-parser/parser.racc @@ -49,14 +49,14 @@ rule | 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_field_list where_clause { result = nil } + : UPDATE table_reference SET update_column_list where_clause { result = SQLParser::Statement::Update.new(val[1], val[3], val[4]) } - update_field - : column_name equals_operator value_expression { result = nil } + update_column + : column_name equals_operator value_expression { result = SQLParser::Statement::UpdateColumn.new(val[0], val[2]) } - update_field_list - : update_field comma update_field_list - | update_field + update_column_list + : update_column comma update_column_list { result = Array(val[0]) + Array(val[2]) } + | update_column delete_specification : DELETE from_clause where_clause { result = SQLParser::Statement::Delete.new(val[1], val[2]) } diff --git a/lib/sql-parser/parser.racc.rb b/lib/sql-parser/parser.racc.rb index 4cb7453..6479f7f 100644 --- a/lib/sql-parser/parser.racc.rb +++ b/lib/sql-parser/parser.racc.rb @@ -367,7 +367,7 @@ def self.parse(sql) 5, 67, :_reduce_20, 5, 68, :_reduce_21, 3, 84, :_reduce_22, - 3, 82, :_reduce_none, + 3, 82, :_reduce_23, 1, 82, :_reduce_none, 3, 69, :_reduce_25, 3, 81, :_reduce_26, @@ -678,9 +678,9 @@ def self.parse(sql) "table_reference", "value_list", "column_list", - "update_field_list", + "update_column_list", "where_clause", - "update_field", + "update_column", "value_expression", "from_clause", "in_column_list", @@ -845,19 +845,24 @@ def _reduce_20(val, _values, result) module_eval(<<'.,.,', 'parser.racc', 51) def _reduce_21(val, _values, result) - result = nil + 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 = nil + result = SQLParser::Statement::UpdateColumn.new(val[0], val[2]) result end .,., -# reduce 23 omitted +module_eval(<<'.,.,', 'parser.racc', 57) + def _reduce_23(val, _values, result) + result = Array(val[0]) + Array(val[2]) + result + end +.,., # reduce 24 omitted diff --git a/lib/sql-parser/parser.rex b/lib/sql-parser/parser.rex index 5189e95..4923155 100644 --- a/lib/sql-parser/parser.rex +++ b/lib/sql-parser/parser.rex @@ -76,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 b676297..a56fb2f 100644 --- a/lib/sql-parser/parser.rex.rb +++ b/lib/sql-parser/parser.rex.rb @@ -195,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] } diff --git a/lib/sql-parser/sql_visitor.rb b/lib/sql-parser/sql_visitor.rb index f0479d6..cbcd169 100644 --- a/lib/sql-parser/sql_visitor.rb +++ b/lib/sql-parser/sql_visitor.rb @@ -15,6 +15,19 @@ def visit_Delete(o) 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_Insert(o) name = visit(o.table_reference) diff --git a/lib/sql-parser/statement.rb b/lib/sql-parser/statement.rb index 6a22437..b016cd8 100644 --- a/lib/sql-parser/statement.rb +++ b/lib/sql-parser/statement.rb @@ -39,6 +39,20 @@ def initialize(from_clause, where_clause = nil) attr_reader :where_clause end + + class Update < Node + + def initialize(table_reference, update_column_list, where_clause) + @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 Insert < Node @@ -280,7 +294,7 @@ def initialize(values) attr_reader :values end - + class InColumnList < Node def initialize(columns) @@ -420,6 +434,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) diff --git a/test/test_parser.rb b/test/test_parser.rb index 85c84f0..ccd4262 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -18,6 +18,10 @@ def test_delete_from 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_insert_into_clause assert_understands 'INSERT INTO `users` VALUES (1, 2)' From 6ba8e7db387b835d905bf2c3e0902639d64f15d5 Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Mon, 16 Jan 2017 08:15:20 -0500 Subject: [PATCH 5/6] Allow multiple columns in updates --- lib/sql-parser/parser.racc | 7 +- lib/sql-parser/parser.racc.rb | 1109 +++++++++++++++++---------------- lib/sql-parser/sql_visitor.rb | 4 + lib/sql-parser/statement.rb | 10 + test/test_parser.rb | 4 + 5 files changed, 582 insertions(+), 552 deletions(-) diff --git a/lib/sql-parser/parser.racc b/lib/sql-parser/parser.racc index 12022d6..1617cc3 100644 --- a/lib/sql-parser/parser.racc +++ b/lib/sql-parser/parser.racc @@ -54,10 +54,13 @@ rule update_column : column_name equals_operator value_expression { result = SQLParser::Statement::UpdateColumn.new(val[0], val[2]) } - update_column_list - : update_column comma update_column_list { result = Array(val[0]) + Array(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]) } diff --git a/lib/sql-parser/parser.racc.rb b/lib/sql-parser/parser.racc.rb index 6479f7f..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', 344) +module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 347) def self.parse(sql) new.scan_str(sql) @@ -20,70 +20,70 @@ def self.parse(sql) ##### State transition tables begin ### racc_action_table = [ - 56, 89, 110, 40, 110, 69, 221, 9, 197, 10, - 76, 121, 11, 85, 12, 232, 223, 56, 224, 225, - 226, 233, 70, 120, 72, 73, 160, 74, 75, 218, - 219, 164, 78, 90, 56, 78, 30, 226, 78, 182, - 78, 168, 169, 59, 60, 119, 44, 57, 48, 50, - 51, 52, 53, 30, 61, 56, 64, 165, 40, 166, + 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, 173, + 30, 61, 114, 64, 59, 60, 22, 59, 60, 174, 44, 57, 48, 50, 51, 52, 53, 80, 61, 56, - 64, 30, 125, 87, 88, 175, -130, 176, 59, 60, + 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, 182, 132, 78, 194, - 197, 105, 12, 200, 129, 30, -130, -130, -130, 201, - 202, 56, 59, 60, 40, 44, 57, 48, 50, 51, - 52, 53, 203, 61, 26, 64, 30, 204, 205, 206, - 207, 123, 209, 59, 60, 210, 44, 57, 48, 50, - 51, 52, 53, 102, 61, 56, 64, 30, 226, 101, - 78, 69, 100, 220, 59, 60, -149, 44, 57, 48, - 50, 51, 52, 53, 152, 61, 56, 64, 70, 40, - 72, 73, 99, 74, 75, 78, 98, 228, 12, 97, - 78, 30, 96, 56, 95, 94, 226, 152, 59, 60, - -86, 44, 57, 48, 50, 51, 52, 53, 84, 61, - 56, 64, 30, 40, 12, 24, 242, 243, 22, 59, - 60, 245, 44, 57, 48, 50, 51, 52, 53, 30, - 61, 56, 64, 246, 40, 80, 59, 60, 248, 44, - 57, 48, 50, 51, 52, 53, 30, 61, 122, 64, - 22, 228, 66, 59, 60, 65, 44, 57, 48, 50, - 51, 52, 53, 252, 61, 56, 64, 30, 125, 24, - 254, 22, 30, 16, 59, 60, 182, 44, 57, 48, - 50, 51, 52, 53, 78, 61, 56, 64, 263, 40, - 15, 265, 182, 132, 266, 267, 268, 13, 30, 78, - 129, 30, nil, nil, nil, nil, nil, nil, 59, 60, + 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, 125, nil, nil, nil, nil, nil, 59, + 56, 64, 30, 126, nil, nil, nil, nil, nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, 53, nil, - 61, 56, 64, nil, 226, nil, nil, nil, 132, nil, - nil, nil, nil, nil, nil, 129, 30, nil, 56, 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, 226, nil, + 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, 226, nil, 59, 60, + 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, 125, 44, 57, 48, 50, 51, 52, 53, 30, + 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, 132, 61, nil, 64, - nil, nil, 56, 129, 30, 40, nil, nil, nil, nil, + 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, 226, nil, nil, nil, + 53, 30, 61, 56, 64, nil, 227, nil, nil, nil, nil, 44, 57, 48, 50, 51, 52, 53, 30, 61, - 56, 64, nil, 226, nil, 59, 60, nil, 44, 57, + 56, 64, nil, 227, nil, 59, 60, nil, 44, 57, 48, 50, 51, 52, 53, nil, 61, 56, 64, 30, - 226, nil, nil, nil, nil, nil, 59, 60, nil, 44, + 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, 226, nil, + 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, 125, 44, 57, 48, 50, 51, 52, + 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, 132, 61, - 154, 64, nil, nil, 56, 129, 30, 40, nil, nil, + 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, @@ -91,116 +91,116 @@ def self.parse(sql) 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, 125, 44, 57, + 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, 129, + 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, 226, 44, 57, 48, + 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, 125, nil, nil, 30, + 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, 132, nil, nil, nil, nil, nil, nil, 129, 30, - nil, 188, nil, nil, nil, nil, 59, 60, nil, 44, + 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, - 183, 184, nil, 185, 186, 187, nil, 68, nil, nil, - 189, 190, 191, 192, 193, 70, nil, 72, 73, 69, + 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 = [ - 88, 34, 166, 88, 66, 178, 180, 0, 222, 0, - 18, 73, 0, 29, 0, 187, 183, 263, 183, 183, - 263, 187, 178, 71, 178, 178, 100, 178, 178, 178, - 178, 102, 18, 34, 252, 29, 88, 252, 166, 180, + 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, 263, 88, 246, 88, 103, 246, 106, - 263, 263, 83, 263, 263, 263, 263, 263, 263, 263, - 252, 263, 112, 263, 102, 102, 69, 252, 252, 114, - 252, 252, 252, 252, 252, 252, 252, 115, 252, 242, - 252, 246, 242, 33, 33, 116, 32, 117, 246, 246, - 119, 246, 246, 246, 246, 246, 246, 246, 120, 246, - 228, 246, 68, 228, 61, 61, 126, 242, 85, 129, - 130, 64, 228, 145, 242, 242, 32, 32, 32, 154, - 155, 12, 242, 242, 12, 242, 242, 242, 242, 242, - 242, 242, 156, 242, 12, 242, 228, 157, 158, 159, - 163, 75, 171, 228, 228, 172, 228, 228, 228, 228, - 228, 228, 228, 58, 228, 225, 228, 12, 225, 57, - 176, 81, 56, 179, 12, 12, 54, 12, 12, 12, - 12, 12, 12, 12, 181, 12, 226, 12, 81, 226, - 81, 81, 53, 81, 81, 76, 52, 185, 226, 51, - 94, 225, 50, 223, 48, 45, 223, 93, 225, 225, - 30, 225, 225, 225, 225, 225, 225, 225, 28, 225, - 87, 225, 226, 87, 194, 25, 199, 200, 24, 226, - 226, 211, 226, 226, 226, 226, 226, 226, 226, 223, - 226, 89, 226, 212, 89, 23, 223, 223, 219, 223, - 223, 223, 223, 223, 223, 223, 87, 223, 74, 223, - 16, 224, 15, 87, 87, 13, 87, 87, 87, 87, - 87, 87, 87, 227, 87, 218, 87, 89, 218, 11, - 232, 10, 243, 9, 89, 89, 247, 89, 89, 89, - 89, 89, 89, 89, 248, 89, 210, 89, 249, 210, - 7, 253, 255, 218, 256, 260, 261, 1, 266, 268, - 218, 218, nil, nil, nil, nil, nil, nil, 218, 218, - nil, 218, 218, 218, 218, 218, 218, 218, nil, 218, - 197, 218, 210, 197, nil, nil, nil, nil, nil, 210, - 210, nil, 210, 210, 210, 210, 210, 210, 210, nil, - 210, 193, 210, nil, 193, nil, nil, nil, 197, nil, - nil, nil, nil, nil, nil, 197, 197, nil, 84, nil, - nil, 84, nil, 197, 197, nil, 197, 197, 197, 197, - 197, 197, 197, nil, 197, 192, 197, 193, 192, nil, - nil, nil, nil, nil, 193, 193, nil, 193, 193, 193, - 193, 193, 193, 193, 84, 193, 90, 193, nil, 90, + 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, 192, 84, 191, 84, nil, 191, nil, 192, 192, - nil, 192, 192, 192, 192, 192, 192, 192, nil, 192, - nil, 192, 90, nil, nil, nil, nil, nil, 80, 90, - 90, 80, 90, 90, 90, 90, 90, 90, 90, 191, - 90, nil, 90, nil, nil, 35, 191, 191, 35, 191, - 191, 191, 191, 191, 191, 191, 80, 191, nil, 191, + 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, 190, 80, nil, 190, nil, nil, nil, + 80, 35, 80, 191, 80, nil, 191, nil, nil, nil, nil, 35, 35, 35, 35, 35, 35, 35, 40, 35, - 189, 35, nil, 189, nil, 40, 40, nil, 40, 40, - 40, 40, 40, 40, 40, nil, 40, 188, 40, 190, - 188, nil, nil, nil, nil, nil, 190, 190, nil, 190, - 190, 190, 190, 190, 190, 190, 189, 190, 113, 190, - nil, 113, nil, 189, 189, nil, 189, 189, 189, 189, - 189, 189, 189, 188, 189, 184, 189, nil, 184, nil, - 188, 188, nil, 188, 188, 188, 188, 188, 188, 188, - nil, 188, nil, 188, 113, nil, nil, nil, nil, nil, - 182, 113, 113, 182, 113, 113, 113, 113, 113, 113, - 113, 184, 113, nil, 113, nil, nil, 95, 184, 184, - 95, 184, 184, 184, 184, 184, 184, 184, 182, 184, - 95, 184, nil, nil, 96, 182, 182, 96, nil, nil, - nil, nil, nil, 182, 182, nil, 182, 182, 182, 182, - 182, 182, 182, 95, 182, 175, 182, nil, 175, nil, + 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, 173, 95, nil, 173, nil, 96, 96, nil, + 96, 95, 174, 95, nil, 174, nil, 96, 96, nil, 96, 96, 96, 96, 96, 96, 96, nil, 96, 97, - 96, 175, 97, nil, nil, nil, nil, nil, 175, 175, - nil, 175, 175, 175, 175, 175, 175, 175, 173, 175, - nil, 175, nil, nil, 132, 173, 173, 132, 173, 173, - 173, 173, 173, 173, 173, 97, 173, nil, 173, nil, + 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, 132, - 132, 99, nil, nil, nil, nil, nil, 132, 132, nil, - 132, 132, 132, 132, 132, 132, 132, 98, 132, nil, - 132, nil, nil, 186, 98, 98, 186, 98, 98, 98, + 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, 125, 99, nil, 125, nil, nil, 186, - nil, nil, nil, nil, nil, 125, 186, 186, nil, 186, - 186, 186, 186, 186, 186, 186, nil, 186, nil, 186, - nil, 125, nil, nil, nil, nil, nil, nil, 125, 125, - nil, 128, nil, nil, nil, nil, 125, 125, nil, 125, - 125, 125, 125, 125, 125, 125, nil, 125, 17, 125, - 128, 128, nil, 128, 128, 128, nil, 17, nil, nil, - 128, 128, 128, 128, 128, 17, nil, 17, 17, 67, + 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 ] @@ -217,131 +217,131 @@ def self.parse(sql) 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, 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 ] + 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 = [ - -161, -161, -1, -2, -3, -4, -5, -7, -18, -161, - -161, -161, -161, -161, -6, -161, -161, -161, -43, -44, - -46, -47, -86, -63, -161, -31, -32, -33, -35, -38, - -155, -113, -114, -117, -120, -161, -122, -123, -124, -125, - -161, -127, -128, -129, -131, -161, -133, -134, -161, -136, - -161, -161, -161, -161, -142, -143, -147, -161, -161, -153, - -154, -161, -158, -159, -161, 272, -161, -161, -161, -161, - -161, -161, -51, -53, -55, -56, -161, -42, -155, -25, - -161, -40, -30, -63, -161, -161, -37, -161, -161, -161, - -161, -121, -130, -161, -161, -161, -161, -161, -161, -161, - -145, -146, -161, -161, -157, -160, -8, -10, -14, -12, - -13, -19, -161, -161, -161, -63, -161, -24, -48, -161, - -161, -52, -54, -57, -41, -161, -64, -72, -161, -161, - -89, -91, -161, -94, -95, -96, -98, -99, -100, -101, - -102, -103, -110, -111, -112, -65, -34, -36, -115, -116, - -118, -119, -126, -132, -161, -161, -161, -161, -161, -161, - -144, -148, -150, -161, -152, -156, -161, -11, -15, -16, - -20, -161, -28, -161, -21, -161, -161, -49, -161, -161, - -161, -112, -161, -161, -161, -161, -161, -161, -161, -161, - -161, -161, -161, -161, -161, -45, -85, -161, -93, -70, - -161, -135, -137, -138, -139, -140, -141, -151, -9, -26, - -161, -161, -80, -22, -23, -50, -58, -59, -161, -161, - -17, -97, -90, -161, -161, -161, -161, -161, -161, -76, - -77, -82, -161, -84, -104, -105, -106, -107, -108, -109, - -92, -39, -161, -161, -27, -29, -161, -60, -161, -161, - -75, -81, -161, -161, -83, -71, -66, -68, -69, -79, - -161, -62, -88, -161, -74, -78, -161, -61, -161, -73, - -67, -87 ] + -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 = [ - 77, 29, 18, 17, 126, 107, 171, 115, 18, 67, - 211, 86, 195, 229, 79, 111, 18, 81, 27, 257, - 258, 150, 151, 148, 149, 92, 23, 199, 25, 93, - 227, 82, 231, 167, 234, 235, 236, 237, 238, 239, - 83, 112, 270, 258, 241, 1, 196, 215, 109, 180, - 116, 216, 250, 217, 106, 260, 261, 256, 124, 14, - 170, 118, 7, 6, 5, 253, 222, 147, 195, 249, - 240, 251, 198, 29, 145, 4, 153, 92, 92, 92, - 92, 3, 2, 259, 155, 156, 157, 158, 159, 163, - 146, 91, 161, 162, nil, nil, nil, nil, 264, nil, - nil, nil, 172, 244, nil, 208, 174, 195, nil, 269, - nil, 177, 18, 178, 181, 214, nil, nil, nil, 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, 247, nil, nil, nil, nil, nil, 109, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 116, nil, - nil, nil, 212, nil, 213, nil, 255, 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, nil, nil, 172, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 93, nil, 212, 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, - 262, nil, nil, nil, nil, 212, nil, nil, nil, nil, + nil, 263, nil, nil, nil, nil, 213, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 271 ] + nil, 272 ] racc_goto_check = [ - 13, 22, 32, 16, 41, 10, 24, 19, 32, 16, - 25, 13, 14, 51, 20, 17, 32, 16, 28, 45, - 46, 64, 64, 62, 62, 63, 23, 30, 26, 22, - 49, 27, 49, 12, 49, 49, 49, 49, 49, 49, - 23, 18, 45, 46, 31, 1, 34, 38, 13, 41, - 13, 39, 51, 40, 9, 42, 43, 44, 13, 8, - 17, 32, 7, 6, 5, 25, 55, 13, 14, 49, - 56, 49, 57, 22, 20, 4, 13, 63, 63, 63, - 63, 3, 2, 25, 22, 22, 22, 22, 22, 66, - 28, 67, 78, 79, nil, nil, nil, nil, 49, nil, - nil, nil, 22, 24, nil, 10, 20, 14, nil, 49, - nil, 32, 32, 16, 22, 19, nil, nil, nil, 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, 41, nil, nil, nil, nil, nil, 13, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 13, nil, - nil, nil, 22, nil, 22, nil, 41, 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, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, 22, 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, - 13, nil, nil, nil, nil, 22, nil, nil, nil, nil, + nil, 13, nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 13 ] + nil, 13 ] racc_goto_pointer = [ - nil, 45, 82, 81, 75, 64, 63, 62, 52, -12, - -61, nil, -75, -18, -117, nil, -7, -52, -26, -61, - -9, nil, -11, 15, -107, -163, 16, 6, 6, nil, - -118, -155, -8, nil, -83, nil, nil, nil, -131, -127, - -125, -76, -193, -192, -186, -224, -223, nil, nil, -154, - nil, -172, nil, nil, nil, -116, -127, -60, nil, nil, - nil, nil, -64, -10, -68, nil, -13, 56, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -10, -9, - 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, nil, nil, 179, nil, nil, - nil, 108, nil, 46, 127, 8, nil, nil, nil, nil, - nil, 117, 144, nil, nil, nil, nil, nil, nil, 28, - nil, nil, 47, 19, 230, 20, 21, 71, nil, nil, - nil, nil, nil, nil, nil, nil, 38, 143, 137, 128, - 138, nil, 139, 140, 141, 130, 131, 133, 134, 135, - 136, 142, 31, 32, 33, 34, 35, 36, 37, 39, - 41, 42, 43, 45, 49, 54, 55, 58, nil, nil, - 62, 63 ] + 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, @@ -367,148 +367,149 @@ def self.parse(sql) 5, 67, :_reduce_20, 5, 68, :_reduce_21, 3, 84, :_reduce_22, - 3, 82, :_reduce_23, - 1, 82, :_reduce_none, - 3, 69, :_reduce_25, - 3, 81, :_reduce_26, - 3, 87, :_reduce_27, - 1, 87, :_reduce_none, - 4, 80, :_reduce_29, - 3, 78, :_reduce_30, - 2, 78, :_reduce_31, - 1, 89, :_reduce_32, - 1, 89, :_reduce_33, - 3, 91, :_reduce_34, - 1, 91, :_reduce_none, - 3, 92, :_reduce_36, - 2, 92, :_reduce_37, + 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, - 4, 90, :_reduce_39, - 2, 86, :_reduce_40, - 3, 79, :_reduce_41, - 2, 79, :_reduce_42, + 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, + 1, 98, :_reduce_none, 1, 97, :_reduce_none, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 3, 98, :_reduce_48, - 4, 98, :_reduce_49, - 5, 99, :_reduce_50, - 1, 100, :_reduce_51, - 2, 100, :_reduce_52, - 1, 100, :_reduce_53, - 2, 100, :_reduce_54, - 1, 100, :_reduce_55, - 1, 100, :_reduce_56, - 2, 100, :_reduce_57, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 2, 102, :_reduce_60, - 4, 103, :_reduce_61, - 1, 105, :_reduce_none, + 1, 97, :_reduce_none, + 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_64, - 0, 93, :_reduce_none, - 3, 93, :_reduce_66, - 3, 107, :_reduce_67, - 1, 107, :_reduce_none, - 1, 108, :_reduce_none, + 2, 83, :_reduce_65, 0, 94, :_reduce_none, - 2, 94, :_reduce_71, - 1, 110, :_reduce_none, - 6, 111, :_reduce_73, - 5, 111, :_reduce_74, - 4, 113, :_reduce_75, - 3, 113, :_reduce_76, - 1, 114, :_reduce_none, - 3, 114, :_reduce_78, - 3, 88, :_reduce_79, - 1, 88, :_reduce_none, - 4, 115, :_reduce_81, - 3, 115, :_reduce_82, - 4, 116, :_reduce_83, - 3, 116, :_reduce_84, - 2, 117, :_reduce_85, - 1, 95, :_reduce_86, - 3, 106, :_reduce_87, - 1, 106, :_reduce_none, - 1, 104, :_reduce_none, - 3, 104, :_reduce_90, - 1, 118, :_reduce_none, - 3, 118, :_reduce_92, - 2, 119, :_reduce_93, + 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, + 6, 112, :_reduce_74, + 5, 112, :_reduce_75, + 4, 114, :_reduce_76, + 3, 114, :_reduce_77, + 1, 115, :_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, + 3, 105, :_reduce_91, 1, 119, :_reduce_none, + 3, 119, :_reduce_93, + 2, 120, :_reduce_94, 1, 120, :_reduce_none, 1, 121, :_reduce_none, - 3, 121, :_reduce_97, - 1, 122, :_reduce_none, - 1, 122, :_reduce_none, 1, 122, :_reduce_none, - 1, 122, :_reduce_none, - 1, 122, :_reduce_none, - 1, 122, :_reduce_none, - 3, 123, :_reduce_104, - 3, 123, :_reduce_105, - 3, 123, :_reduce_106, - 3, 123, :_reduce_107, - 3, 123, :_reduce_108, - 3, 123, :_reduce_109, - 1, 112, :_reduce_none, - 1, 112, :_reduce_none, - 1, 124, :_reduce_none, + 3, 122, :_reduce_98, + 1, 123, :_reduce_none, + 1, 123, :_reduce_none, + 1, 123, :_reduce_none, + 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, 1, 85, :_reduce_none, 1, 85, :_reduce_none, - 3, 125, :_reduce_115, - 3, 125, :_reduce_116, - 1, 125, :_reduce_none, - 3, 127, :_reduce_118, - 3, 127, :_reduce_119, - 1, 127, :_reduce_none, - 2, 128, :_reduce_121, + 3, 126, :_reduce_116, + 3, 126, :_reduce_117, + 1, 126, :_reduce_none, + 3, 128, :_reduce_119, + 3, 128, :_reduce_120, 1, 128, :_reduce_none, - 1, 130, :_reduce_none, - 1, 130, :_reduce_none, - 1, 130, :_reduce_none, - 3, 130, :_reduce_126, + 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, + 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, - 1, 133, :_reduce_none, - 1, 134, :_reduce_131, - 3, 109, :_reduce_132, - 1, 109, :_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, - 4, 132, :_reduce_135, - 1, 132, :_reduce_none, - 4, 137, :_reduce_137, - 4, 137, :_reduce_138, - 4, 137, :_reduce_139, - 4, 137, :_reduce_140, - 4, 137, :_reduce_141, - 1, 135, :_reduce_none, - 1, 135, :_reduce_none, - 3, 138, :_reduce_144, - 2, 138, :_reduce_145, - 2, 138, :_reduce_146, - 1, 138, :_reduce_147, - 3, 139, :_reduce_148, - 1, 140, :_reduce_none, + 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, - 2, 142, :_reduce_151, - 1, 142, :_reduce_152, - 1, 129, :_reduce_153, - 1, 129, :_reduce_154, - 1, 76, :_reduce_155, - 3, 126, :_reduce_156, - 2, 126, :_reduce_157, - 1, 126, :_reduce_none, - 1, 143, :_reduce_none, - 2, 144, :_reduce_160 ] + 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 = 161 +racc_reduce_n = 162 -racc_shift_n = 272 +racc_shift_n = 273 racc_token_table = { false => 0, @@ -682,6 +683,7 @@ def self.parse(sql) "where_clause", "update_column", "value_expression", + "update_column_sublist", "from_clause", "in_column_list", "in_value_list", @@ -868,117 +870,122 @@ def _reduce_23(val, _values, result) module_eval(<<'.,.,', 'parser.racc', 61) def _reduce_25(val, _values, result) - result = SQLParser::Statement::Delete.new(val[1], val[2]) + result = SQLParser::Statement::UpdateColumnList.new(val[0]) result end .,., module_eval(<<'.,.,', 'parser.racc', 64) def _reduce_26(val, _values, result) - result = SQLParser::Statement::InColumnList.new(val[1]) + result = SQLParser::Statement::Delete.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'parser.racc', 67) def _reduce_27(val, _values, result) - result = Array(val[0]) + Array(val[2]) + result = SQLParser::Statement::InColumnList.new(val[1]) result end .,., -# reduce 28 omitted - -module_eval(<<'.,.,', 'parser.racc', 71) - def _reduce_29(val, _values, result) - result = SQLParser::Statement::InValueList.new(val[2]) +module_eval(<<'.,.,', 'parser.racc', 70) + def _reduce_28(val, _values, result) + result = Array(val[0]) + Array(val[2]) result end .,., +# reduce 29 omitted + module_eval(<<'.,.,', 'parser.racc', 74) def _reduce_30(val, _values, result) - result = SQLParser::Statement::Select.new(val[1], val[2]) + result = SQLParser::Statement::InValueList.new(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 75) +module_eval(<<'.,.,', 'parser.racc', 77) def _reduce_31(val, _values, result) - result = SQLParser::Statement::Select.new(val[1]) + result = SQLParser::Statement::Select.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'parser.racc', 78) def _reduce_32(val, _values, result) - result = SQLParser::Statement::All.new + result = SQLParser::Statement::Select.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 79) +module_eval(<<'.,.,', 'parser.racc', 81) def _reduce_33(val, _values, result) - result = SQLParser::Statement::SelectList.new(val[0]) + result = SQLParser::Statement::All.new result end .,., module_eval(<<'.,.,', 'parser.racc', 82) def _reduce_34(val, _values, result) + result = SQLParser::Statement::SelectList.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.racc', 85) + def _reduce_35(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 35 omitted +# reduce 36 omitted -module_eval(<<'.,.,', 'parser.racc', 86) - def _reduce_36(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', 87) - def _reduce_37(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 38 omitted +# reduce 39 omitted -module_eval(<<'.,.,', 'parser.racc', 91) - def _reduce_39(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', 94) - def _reduce_40(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', 97) - def _reduce_41(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', 98) - def _reduce_42(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 43 omitted - # reduce 44 omitted # reduce 45 omitted @@ -987,273 +994,273 @@ def _reduce_42(val, _values, result) # reduce 47 omitted -module_eval(<<'.,.,', 'parser.racc', 110) - def _reduce_48(val, _values, result) +# reduce 48 omitted + +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', 111) - def _reduce_49(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', 114) - def _reduce_50(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', 117) - def _reduce_51(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 120) + def _reduce_52(val, _values, result) result = SQLParser::Statement::InnerJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 118) - def _reduce_52(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 121) + def _reduce_53(val, _values, result) result = SQLParser::Statement::LeftOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 119) - def _reduce_53(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 122) + def _reduce_54(val, _values, result) result = SQLParser::Statement::LeftJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 120) - def _reduce_54(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 123) + def _reduce_55(val, _values, result) result = SQLParser::Statement::RightOuterJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 121) - def _reduce_55(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 124) + def _reduce_56(val, _values, result) result = SQLParser::Statement::RightJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 122) - def _reduce_56(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 125) + def _reduce_57(val, _values, result) result = SQLParser::Statement::FullJoin result end .,., -module_eval(<<'.,.,', 'parser.racc', 123) - def _reduce_57(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 126) + def _reduce_58(val, _values, result) result = SQLParser::Statement::FullOuterJoin result end .,., -# reduce 58 omitted - # reduce 59 omitted -module_eval(<<'.,.,', 'parser.racc', 130) - def _reduce_60(val, _values, result) +# reduce 60 omitted + +module_eval(<<'.,.,', 'parser.racc', 133) + def _reduce_61(val, _values, result) result = SQLParser::Statement::On.new(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.racc', 133) - def _reduce_61(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 136) + def _reduce_62(val, _values, result) result = SQLParser::Statement::Using.new(val[2]) result end .,., -# reduce 62 omitted - # reduce 63 omitted -module_eval(<<'.,.,', 'parser.racc', 140) - def _reduce_64(val, _values, result) +# reduce 64 omitted + +module_eval(<<'.,.,', 'parser.racc', 143) + def _reduce_65(val, _values, result) result = SQLParser::Statement::WhereClause.new(val[1]) result end .,., -# reduce 65 omitted +# reduce 66 omitted -module_eval(<<'.,.,', 'parser.racc', 144) - def _reduce_66(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', 147) - def _reduce_67(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 150) + def _reduce_68(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 68 omitted - # reduce 69 omitted # reduce 70 omitted -module_eval(<<'.,.,', 'parser.racc', 155) - def _reduce_71(val, _values, result) +# reduce 71 omitted + +module_eval(<<'.,.,', 'parser.racc', 158) + def _reduce_72(val, _values, result) result = SQLParser::Statement::HavingClause.new(val[1]) result end .,., -# reduce 72 omitted +# reduce 73 omitted -module_eval(<<'.,.,', 'parser.racc', 162) - def _reduce_73(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', 163) - def _reduce_74(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', 166) - def _reduce_75(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', 167) - def _reduce_76(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 77 omitted +# reduce 78 omitted -module_eval(<<'.,.,', 'parser.racc', 171) - def _reduce_78(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', 174) - def _reduce_79(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 177) + def _reduce_80(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 80 omitted +# reduce 81 omitted -module_eval(<<'.,.,', 'parser.racc', 181) - def _reduce_81(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', 182) - def _reduce_82(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', 185) - def _reduce_83(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', 186) - def _reduce_84(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', 189) - def _reduce_85(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', 193) - def _reduce_86(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', 196) - def _reduce_87(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 199) + def _reduce_88(val, _values, result) result = Array(val[0]) + Array(val[2]) result end .,., -# reduce 88 omitted - # reduce 89 omitted -module_eval(<<'.,.,', 'parser.racc', 202) - def _reduce_90(val, _values, result) +# reduce 90 omitted + +module_eval(<<'.,.,', 'parser.racc', 205) + def _reduce_91(val, _values, result) result = SQLParser::Statement::Or.new(val[0], val[2]) result end .,., -# reduce 91 omitted +# reduce 92 omitted -module_eval(<<'.,.,', 'parser.racc', 206) - def _reduce_92(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', 209) - def _reduce_93(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 212) + def _reduce_94(val, _values, result) result = SQLParser::Statement::Not.new(val[1]) result end .,., -# reduce 94 omitted - # reduce 95 omitted # reduce 96 omitted -module_eval(<<'.,.,', 'parser.racc', 217) - def _reduce_97(val, _values, result) +# reduce 97 omitted + +module_eval(<<'.,.,', 'parser.racc', 220) + def _reduce_98(val, _values, result) result = val[1] result end .,., -# reduce 98 omitted - # reduce 99 omitted # reduce 100 omitted @@ -1264,50 +1271,50 @@ def _reduce_97(val, _values, result) # reduce 103 omitted -module_eval(<<'.,.,', 'parser.racc', 228) - def _reduce_104(val, _values, result) +# reduce 104 omitted + +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', 229) - def _reduce_105(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', 230) - def _reduce_106(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', 231) - def _reduce_107(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', 232) - def _reduce_108(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', 233) - def _reduce_109(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 110 omitted - # reduce 111 omitted # reduce 112 omitted @@ -1316,228 +1323,230 @@ def _reduce_109(val, _values, result) # reduce 114 omitted -module_eval(<<'.,.,', 'parser.racc', 247) - def _reduce_115(val, _values, result) +# reduce 115 omitted + +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', 248) - def _reduce_116(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 117 omitted +# reduce 118 omitted -module_eval(<<'.,.,', 'parser.racc', 252) - def _reduce_118(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', 253) - def _reduce_119(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 120 omitted +# reduce 121 omitted -module_eval(<<'.,.,', 'parser.racc', 257) - def _reduce_121(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 260) + def _reduce_122(val, _values, result) result = val[0].new(val[1]) result end .,., -# reduce 122 omitted - # reduce 123 omitted # reduce 124 omitted # reduce 125 omitted -module_eval(<<'.,.,', 'parser.racc', 264) - def _reduce_126(val, _values, result) +# reduce 126 omitted + +module_eval(<<'.,.,', 'parser.racc', 267) + def _reduce_127(val, _values, result) result = val[1] result end .,., -# reduce 127 omitted - # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted -module_eval(<<'.,.,', 'parser.racc', 275) - def _reduce_131(val, _values, result) +# reduce 131 omitted + +module_eval(<<'.,.,', 'parser.racc', 278) + def _reduce_132(val, _values, result) result = SQLParser::Statement::CurrentUser.new result end .,., -module_eval(<<'.,.,', 'parser.racc', 278) - def _reduce_132(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 133 omitted - # reduce 134 omitted -module_eval(<<'.,.,', 'parser.racc', 285) - def _reduce_135(val, _values, result) +# reduce 135 omitted + +module_eval(<<'.,.,', 'parser.racc', 288) + def _reduce_136(val, _values, result) result = SQLParser::Statement::Count.new(SQLParser::Statement::All.new) result end .,., -# reduce 136 omitted +# reduce 137 omitted -module_eval(<<'.,.,', 'parser.racc', 289) - def _reduce_137(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', 290) - def _reduce_138(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', 291) - def _reduce_139(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', 292) - def _reduce_140(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', 293) - def _reduce_141(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 296) + def _reduce_142(val, _values, result) result = SQLParser::Statement::Sum.new(val[2]) result end .,., -# reduce 142 omitted - # reduce 143 omitted -module_eval(<<'.,.,', 'parser.racc', 301) - def _reduce_144(val, _values, result) +# reduce 144 omitted + +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', 302) - def _reduce_145(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', 303) - def _reduce_146(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', 304) - def _reduce_147(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', 307) - def _reduce_148(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 149 omitted - # reduce 150 omitted -module_eval(<<'.,.,', 'parser.racc', 316) - def _reduce_151(val, _values, result) +# reduce 151 omitted + +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', 317) - def _reduce_152(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', 320) - def _reduce_153(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 323) + def _reduce_154(val, _values, result) result = SQLParser::Statement::UnaryPlus result end .,., -module_eval(<<'.,.,', 'parser.racc', 321) - def _reduce_154(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 324) + def _reduce_155(val, _values, result) result = SQLParser::Statement::UnaryMinus result end .,., -module_eval(<<'.,.,', 'parser.racc', 325) - def _reduce_155(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', 329) - def _reduce_156(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', 330) - def _reduce_157(val, _values, result) +module_eval(<<'.,.,', 'parser.racc', 333) + def _reduce_158(val, _values, result) result = SQLParser::Statement::String.new('') result end .,., -# reduce 158 omitted - # reduce 159 omitted -module_eval(<<'.,.,', 'parser.racc', 337) - def _reduce_160(val, _values, result) +# reduce 160 omitted + +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/sql_visitor.rb b/lib/sql-parser/sql_visitor.rb index cbcd169..9f4b878 100644 --- a/lib/sql-parser/sql_visitor.rb +++ b/lib/sql-parser/sql_visitor.rb @@ -28,6 +28,10 @@ def visit_UpdateColumn(o) 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) diff --git a/lib/sql-parser/statement.rb b/lib/sql-parser/statement.rb index b016cd8..b5b8855 100644 --- a/lib/sql-parser/statement.rb +++ b/lib/sql-parser/statement.rb @@ -53,6 +53,16 @@ def initialize(table_reference, update_column_list, where_clause) 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 diff --git a/test/test_parser.rb b/test/test_parser.rb index ccd4262..2bd229c 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -22,6 +22,10 @@ def test_delete_from_with_where 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)' From b8fe4c2c07745aaaab0a99e13e67a9851ef71cd6 Mon Sep 17 00:00:00 2001 From: Michael Mior Date: Mon, 16 Jan 2017 11:14:15 -0500 Subject: [PATCH 6/6] Add additional tests --- lib/sql-parser/statement.rb | 6 +++--- test/test_statement.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/sql-parser/statement.rb b/lib/sql-parser/statement.rb index b5b8855..95dacd5 100644 --- a/lib/sql-parser/statement.rb +++ b/lib/sql-parser/statement.rb @@ -42,7 +42,7 @@ def initialize(from_clause, where_clause = nil) class Update < Node - def initialize(table_reference, update_column_list, where_clause) + def initialize(table_reference, update_column_list, where_clause = nil) @table_reference = table_reference @update_column_list = update_column_list @where_clause = where_clause @@ -298,7 +298,7 @@ class In < ComparisonPredicate class InValueList < Node def initialize(values) - @values = values + @values = Array(values) end attr_reader :values @@ -308,7 +308,7 @@ def initialize(values) class InColumnList < Node def initialize(columns) - @columns = columns + @columns = Array(columns) end attr_reader :columns 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