@@ -70,6 +70,7 @@ class MindsDBParser(Parser):
7070 'drop_dataset' ,
7171 'select' ,
7272 'insert' ,
73+ 'union' ,
7374 'update' ,
7475 'delete' ,
7576 'evaluate' ,
@@ -614,10 +615,13 @@ def update(self, p):
614615
615616 # INSERT
616617 @_ ('INSERT INTO identifier LPAREN column_list RPAREN select' ,
617- 'INSERT INTO identifier select' )
618+ 'INSERT INTO identifier LPAREN column_list RPAREN union' ,
619+ 'INSERT INTO identifier select' ,
620+ 'INSERT INTO identifier union' )
618621 def insert (self , p ):
619622 columns = getattr (p , 'column_list' , None )
620- return Insert (table = p .identifier , columns = columns , from_select = p .select )
623+ query = p .select if hasattr (p , 'select' ) else p .union
624+ return Insert (table = p .identifier , columns = columns , from_select = query )
621625
622626 @_ ('INSERT INTO identifier LPAREN column_list RPAREN VALUES expr_list_set' ,
623627 'INSERT INTO identifier VALUES expr_list_set' )
@@ -999,20 +1003,28 @@ def database_engine(self, p):
9991003 return {'identifier' :p .identifier , 'engine' :engine , 'if_not_exists' :p .if_not_exists_or_empty }
10001004
10011005 # Combining
1002- @_ ('select UNION select' )
1003- @_ ('select UNION ALL select' )
1004- def select (self , p ):
1005- return Union (left = p .select0 , right = p .select1 , unique = not hasattr (p , 'ALL' ))
1006-
1007- @_ ('select INTERSECT select' )
1008- @_ ('select INTERSECT ALL select' )
1009- def select (self , p ):
1010- return Intersect (left = p .select0 , right = p .select1 , unique = not hasattr (p , 'ALL' ))
1011-
1012- @_ ('select EXCEPT select' )
1013- @_ ('select EXCEPT ALL select' )
1014- def select (self , p ):
1015- return Except (left = p .select0 , right = p .select1 , unique = not hasattr (p , 'ALL' ))
1006+ @_ ('select UNION select' ,
1007+ 'union UNION select' ,
1008+ 'select UNION ALL select' ,
1009+ 'union UNION ALL select' )
1010+ def union (self , p ):
1011+ unique = not hasattr (p , 'ALL' )
1012+ return Union (left = p [0 ], right = p [2 ] if unique else p [3 ], unique = unique )
1013+
1014+ @_ ('select INTERSECT select' ,
1015+ 'union INTERSECT select' ,
1016+ 'select INTERSECT ALL select' ,
1017+ 'union INTERSECT ALL select' )
1018+ def union (self , p ):
1019+ unique = not hasattr (p , 'ALL' )
1020+ return Intersect (left = p [0 ], right = p [2 ] if unique else p [3 ], unique = unique )
1021+ @_ ('select EXCEPT select' ,
1022+ 'union EXCEPT select' ,
1023+ 'select EXCEPT ALL select' ,
1024+ 'union EXCEPT ALL select' )
1025+ def union (self , p ):
1026+ unique = not hasattr (p , 'ALL' )
1027+ return Except (left = p [0 ], right = p [2 ] if unique else p [3 ], unique = unique )
10161028
10171029 # tableau
10181030 @_ ('LPAREN select RPAREN' )
0 commit comments