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