@@ -764,21 +764,24 @@ def _insert(self, node: ast.Insert):
764764 impl = getattr (table , 'insert' , None )
765765 if impl is None :
766766 raise CompilationError (f'table "{ node .table .name } " does not support insertion' , node .table )
767- if len (node .values ) != len (node .columns ):
768- raise CompilationError (
769- f'column names and values mismatch: '
770- f'expected { len (node .columns )} but { len (node .values )} values were supplied' , node )
771- values = [EvalConstant (None )] * len (table .columns )
772767 columns = {name : i for i , name in enumerate (table .columns .keys ())}
773- for column , value in zip (node .columns , node .values ):
774- index = columns .get (column .name )
775- if index is None :
776- raise CompilationError (f'column "{ column .name } " not found in table "{ node .table .name } "' , column )
777- expr = self ._compile (value )
778- if not expr .dtype == table .columns .get (column .name ).dtype :
779- raise CompilationError (f'expression has wrong type for column "{ column .name } "' , value )
780- values [index ] = expr
781- return EvalInsert (table , values )
768+ rows = []
769+ for row in node .values :
770+ if len (row ) != len (node .columns ):
771+ raise CompilationError (
772+ f'column names and values mismatch: '
773+ f'expected { len (node .columns )} but { len (row )} values were supplied' , node )
774+ values = [EvalConstant (None )] * len (table .columns )
775+ for column , value in zip (node .columns , row ):
776+ index = columns .get (column .name )
777+ if index is None :
778+ raise CompilationError (f'column "{ column .name } " not found in table "{ node .table .name } "' , column )
779+ expr = self ._compile (value )
780+ if not expr .dtype == table .columns .get (column .name ).dtype :
781+ raise CompilationError (f'expression has wrong type for column "{ column .name } "' , value )
782+ values [index ] = expr
783+ rows .append (values )
784+ return EvalInsert (table , rows )
782785
783786
784787def transform_journal (journal ):
0 commit comments