1+ from mindsdb_sql_parser import parse_sql
2+ from mindsdb_sql_parser .ast import *
3+
4+ class TestParameters :
5+ def test_select_with_parameter_in_where (self ):
6+ sql = "SELECT * FROM tbl WHERE col = ?"
7+ ast = parse_sql (sql )
8+ expected_ast = Select (
9+ targets = [Star ()],
10+ from_table = Identifier ('tbl' ),
11+ where = BinaryOperation (op = '=' , args = [
12+ Identifier ('col' ),
13+ Parameter ('?' )
14+ ])
15+ )
16+ assert ast .to_tree () == expected_ast .to_tree ()
17+ assert str (ast ) == str (expected_ast )
18+
19+ def test_select_multiple_parameters (self ):
20+ sql = "SELECT * FROM tbl WHERE col1 > ? AND col2 = ?"
21+ ast = parse_sql (sql )
22+ expected_ast = Select (
23+ targets = [Star ()],
24+ from_table = Identifier ('tbl' ),
25+ where = BinaryOperation (op = 'and' , args = [
26+ BinaryOperation (op = '>' , args = [
27+ Identifier ('col1' ),
28+ Parameter ('?' )
29+ ]),
30+ BinaryOperation (op = '=' , args = [
31+ Identifier ('col2' ),
32+ Parameter ('?' )
33+ ])
34+ ])
35+ )
36+ assert ast .to_tree () == expected_ast .to_tree ()
37+ assert str (ast ) == str (expected_ast )
38+
39+ def test_insert_with_parameters (self ):
40+ sql = "INSERT INTO tbl_name(a, c) VALUES (?, ?)"
41+ ast = parse_sql (sql )
42+ expected_ast = Insert (
43+ table = Identifier ('tbl_name' ),
44+ columns = [Identifier ('a' ), Identifier ('c' )],
45+ values = [
46+ [Parameter ('?' ), Parameter ('?' )]
47+ ]
48+ )
49+ assert ast .to_tree () == expected_ast .to_tree ()
50+ assert str (ast ) == str (expected_ast )
51+
52+ def test_insert_with_multiple_parameter_rows (self ):
53+ sql = "INSERT INTO tbl_name VALUES (?, ?), (?, ?)"
54+ ast = parse_sql (sql )
55+ expected_ast = Insert (
56+ table = Identifier ('tbl_name' ),
57+ values = [
58+ [Parameter ('?' ), Parameter ('?' )],
59+ [Parameter ('?' ), Parameter ('?' )]
60+ ]
61+ )
62+ assert ast .to_tree () == expected_ast .to_tree ()
63+ assert str (ast ) == str (expected_ast )
64+
65+ def test_select_parameter_as_target (self ):
66+ sql = "SELECT ?"
67+ ast = parse_sql (sql )
68+ expected_ast = Select (
69+ targets = [Parameter ('?' )]
70+ )
71+ assert ast .to_tree () == expected_ast .to_tree ()
72+ assert str (ast ) == str (expected_ast )
0 commit comments