|
1 | 1 | from textwrap import dedent |
| 2 | + |
| 3 | +import pytest |
| 4 | + |
2 | 5 | from mindsdb_sql_parser import parse_sql |
| 6 | +from mindsdb_sql_parser.exceptions import ParsingException |
3 | 7 |
|
4 | 8 | from mindsdb_sql_parser.ast import * |
5 | 9 |
|
@@ -86,3 +90,45 @@ def test_quotes_identifier(self): |
86 | 90 |
|
87 | 91 | assert str(ast).lower() == str(expected_ast).lower() |
88 | 92 | assert ast.to_tree() == expected_ast.to_tree() |
| 93 | + |
| 94 | + def test_multy_statement(self): |
| 95 | + sql = """ |
| 96 | + select 1; |
| 97 | + select 2 |
| 98 | + """ |
| 99 | + |
| 100 | + with pytest.raises(ParsingException) as excinfo: |
| 101 | + parse_sql(sql) |
| 102 | + |
| 103 | + assert "Only a single sql statement is expected" in str(excinfo.value) |
| 104 | + |
| 105 | + def test_trailing_semicolon(self): |
| 106 | + query = parse_sql("select 1;") |
| 107 | + assert query == Select(targets=[Constant(1)]) |
| 108 | + |
| 109 | + def test_comment_after_semicolon(self): |
| 110 | + sql = """ |
| 111 | + select 1; -- my query |
| 112 | + """ |
| 113 | + |
| 114 | + query = parse_sql(sql) |
| 115 | + assert query == Select(targets=[Constant(1)]) |
| 116 | + |
| 117 | + def test_comment_symbols_in_string(self): |
| 118 | + expected_query = Select(targets=[Constant('--x')]) |
| 119 | + |
| 120 | + query = parse_sql("select '--x'") |
| 121 | + assert query == expected_query |
| 122 | + |
| 123 | + query = parse_sql('select "--x"') |
| 124 | + assert query == expected_query |
| 125 | + |
| 126 | + # multiline |
| 127 | + expected_query = Select(targets=[Constant('/* x */')]) |
| 128 | + |
| 129 | + query = parse_sql("select '/* x */'") |
| 130 | + assert query == expected_query |
| 131 | + |
| 132 | + query = parse_sql('select "/* x */"') |
| 133 | + assert query == expected_query |
| 134 | + |
0 commit comments