Skip to content

Commit d718ebf

Browse files
committed
add :=
1 parent 14f860c commit d718ebf

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

mindsdb_sql_parser/lexer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class MindsDBLexer(Lexer):
7272

7373
# Operators
7474
PLUS, MINUS, MATCH, NOT_MATCH, DIVIDE, MODULO,
75-
RIGHT_SHIFT, LEFT_SHIFT, EQUALS, NEQUALS, GREATER, GEQ, LESS, LEQ,
75+
ASSIGN_COLON, RIGHT_SHIFT, LEFT_SHIFT, EQUALS, NEQUALS, GREATER, GEQ, LESS, LEQ,
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,
@@ -296,6 +296,7 @@ class MindsDBLexer(Lexer):
296296
NOT_MATCH = r'!~'
297297
DIVIDE = r'/'
298298
MODULO = r'%'
299+
ASSIGN_COLON = r':='
299300
RIGHT_SHIFT = r'>>'
300301
LEFT_SHIFT = r'<<'
301302
EQUALS = r'='

mindsdb_sql_parser/parser.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class MindsDBParser(Parser):
4646
('left', OR),
4747
('left', AND),
4848
('right', UNOT),
49-
('left', EQUALS, NEQUALS),
50-
('nonassoc', LESS, LEQ, GREATER, GEQ, IN, NOT_IN, BETWEEN, IS, IS_NOT, NOT_LIKE, LIKE),
49+
('left', EQUALS, NEQUALS, ASSIGN_COLON),
50+
('nonassoc', LESS, LEQ, GREATER, GEQ, IN, NOT_IN, BETWEEN, IS, IS_NOT, NOT_LIKE, LIKE, RIGHT_SHIFT, LEFT_SHIFT),
5151
('left', JSON_GET),
5252
('left', PLUS, MINUS),
5353
('left', STAR, DIVIDE, TYPECAST, MODULO),
@@ -1631,6 +1631,7 @@ def star(self, p):
16311631
'expr STAR expr',
16321632
'expr DIVIDE expr',
16331633
'expr MODULO expr',
1634+
'expr ASSIGN_COLON expr',
16341635
'expr EQUALS expr',
16351636
'expr NEQUALS expr',
16361637
'expr RIGHT_SHIFT expr',
@@ -1659,6 +1660,10 @@ def star(self, p):
16591660
'expr NOT_IN expr',
16601661
'expr IN expr',)
16611662
def expr(self, p):
1663+
if p[1] == ':=':
1664+
# allow 'assign' only for variables
1665+
if not isinstance(p[0], Variable):
1666+
raise ParsingException("Assignment `:=` allowed only to variables (@var := ...)")
16621667
if hasattr(p, 'LAST'):
16631668
arg1 = Last()
16641669
else:

0 commit comments

Comments
 (0)