Skip to content

Commit 93e50f3

Browse files
authored
Merge pull request #39 from pankaj-bind/issue-fix-parameterized-queries
Added support for Parameterized Queries
2 parents 559c6be + d716146 commit 93e50f3

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

mindsdb_sql_parser/ast/insert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,4 @@ def get_string(self, *args, **kwargs):
9797
else:
9898
from_select_str = ''
9999

100-
return f'INSERT INTO {str(self.table)}{columns_str} {values_str}{from_select_str}'
100+
return f'INSERT INTO {str(self.table)}{columns_str} {values_str}{from_select_str}'
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
from mindsdb_sql_parser.ast.base import ASTNode
2+
from mindsdb_sql_parser.utils import indent
23

34

45
class Parameter(ASTNode):
56
def __init__(self, value, *args, **kwargs):
67
super().__init__(*args, **kwargs)
78
self.value = value
89

9-
def __repr__(self):
10-
return f'Parameter({self.value})'
11-
1210
def to_tree(self, *args, level=0, **kwargs):
13-
return '\t' * level + f'Parameter({repr(self.value)})'
11+
alias_str = f', alias={self.alias.to_tree()}' if self.alias else ''
12+
return indent(level) + f'Parameter(value={repr(self.value)}{alias_str})'
1413

1514
def get_string(self, *args, **kwargs):
15+
if self.value == '?':
16+
return self.value
1617
return ':' + str(self.value)
18+
19+
def __repr__(self):
20+
return f'Parameter({repr(self.value)})'
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
assert str(ast) == sql
9+
10+
def test_select_multiple_parameters(self):
11+
sql = "SELECT * FROM tbl WHERE col1 > ? AND col2 = ?"
12+
ast = parse_sql(sql)
13+
assert str(ast) == sql
14+
15+
def test_insert_with_parameters(self):
16+
sql = "INSERT INTO tbl_name(a, c) VALUES (?, ?)"
17+
ast = parse_sql(sql)
18+
assert str(ast) == sql
19+
20+
def test_insert_with_multiple_parameter_rows(self):
21+
sql = "INSERT INTO tbl_name VALUES (?, ?), (?, ?)"
22+
ast = parse_sql(sql)
23+
assert str(ast) == sql
24+
25+
def test_select_parameter_as_target(self):
26+
sql = "SELECT ?"
27+
ast = parse_sql(sql)
28+
assert str(ast) == sql

0 commit comments

Comments
 (0)