Skip to content

Commit 1c4d3ef

Browse files
authored
Merge pull request #63 from mindsdb/array-ops
Array operators supports
2 parents 872b096 + a9aa538 commit 1c4d3ef

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

mindsdb_sql_parser/__about__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
__title__ = 'mindsdb_sql_parser'
22
__package_name__ = 'mindsdb_sql_parser'
3-
__version__ = '0.11.3'
3+
__version__ = '0.11.4'
44
__description__ = "Mindsdb SQL parser"
55
__email__ = "[email protected]"
66
__author__ = 'MindsDB Inc'

mindsdb_sql_parser/lexer.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class MindsDBLexer(Lexer):
7676
AND, OR, NOT, IS, IS_NOT, TYPECAST,
7777
IN, NOT_IN, LIKE, NOT_LIKE, CONCAT, BETWEEN, WINDOW, OVER, PARTITION_BY,
7878
VECT_L2, VECT_L1, VECT_INNER, VECT_COS, VECT_HAMM, VECT_JACC,
79+
ARR_CONTAINS, ARR_CONTAINED, ARR_OVERLAP,
7980
JSON_GET, JSON_GET_STR, INTERVAL,
8081

8182
# Data types
@@ -291,6 +292,10 @@ class MindsDBLexer(Lexer):
291292
VECT_HAMM = r'<~>'
292293
VECT_JACC = r'<%>'
293294

295+
ARR_CONTAINS = r'@>'
296+
ARR_CONTAINED = r'<@'
297+
ARR_OVERLAP = r'&&'
298+
294299
JSON_GET_STR = r'->>'
295300
JSON_GET = r'->'
296301
PLUS = r'\+'

mindsdb_sql_parser/parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,6 +1664,9 @@ def star(self, p):
16641664
'expr JSON_GET constant',
16651665
'expr JSON_GET_STR constant',
16661666
'expr NOT_IN expr',
1667+
'expr ARR_CONTAINS expr',
1668+
'expr ARR_CONTAINED expr',
1669+
'expr ARR_OVERLAP expr',
16671670
'expr IN expr',)
16681671
def expr(self, p):
16691672
if p[1] == ':=':

tests/test_mindsdb/test_selects.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,22 @@ def test_match(self):
225225
assert ast.to_tree() == expected_ast.to_tree()
226226
assert str(ast) == str(expected_ast)
227227

228+
def test_array(self):
229+
for op in ['@>', '<@', '&&']:
230+
sql = f"SELECT * from TAB1 WHERE a {op} b"
231+
232+
ast = parse_sql(sql)
233+
expected_ast = Select(
234+
targets=[Star()],
235+
where=BinaryOperation(
236+
op=op,
237+
args=[
238+
Identifier('a'),
239+
Identifier('b')
240+
]
241+
),
242+
from_table=Identifier(parts=['TAB1']),
243+
)
244+
245+
assert ast.to_tree() == expected_ast.to_tree()
246+
assert str(ast) == str(expected_ast)

0 commit comments

Comments
 (0)