updated code generation for compound-columns, initial support for scratchspace

This commit is contained in:
2023-01-16 23:02:52 +08:00
parent aaef489029
commit 540672cdc4
8 changed files with 359 additions and 98 deletions
+5 -7
View File
@@ -604,9 +604,10 @@ class groupby_c(ast_node):
self.arr_len = 'arrlen_' + base62uuid(3)
self.arr_values = 'arrvals_' + base62uuid(3)
self.context.emitc(f'auto {self.arr_len} = {self.group}.size();')
self.context.emitc(f'auto {self.arr_values} = {self.group}.values();')
if len(tovec_columns):
self.context.emitc(f'auto {self.arr_len} = {self.group}.size();')
self.context.emitc(f'auto {self.arr_values} = {self.group}.values();')
preproc_scanner = scan(self, self.arr_len)
preproc_scanner_it = preproc_scanner.it_var
for c in tovec_columns:
@@ -674,11 +675,8 @@ class groupby_c(ast_node):
gscanner.add(f'{ex.eval(c_code = True, y=get_var_names, materialize_builtin = materialize_builtin)};\n')
continue
if col_tovec[i]:
if ex.opname == 'avgs':
patch_expr = get_var_names_ex(ex)
patch_expr = patch_expr[:patch_expr.rindex(')')]
patch_expr += ', ' + f'{ce[0]}[{gscanner.it_var}]' + ')'
gscanner.add(f'{patch_expr};\n')
if ex.remake_binary(f'{ce[0]}[{gscanner.it_var}]'):
gscanner.add(f'{get_var_names_ex(ex)};\n')
else:
gscanner.add(f'{ce[0]}[{gscanner.it_var}] = {get_var_names_ex(ex)};\n')
else:
+13
View File
@@ -367,6 +367,19 @@ class expr(ast_node):
self.curr_code += c.codegen(delegate)
return self.curr_code
def remake_binary(self, ret_expr):
if self.root:
self.oldsql = self.sql
if (self.opname in builtin_binary_ops):
patched_opname = 'aqop_' + self.opname
self.sql = (f'{patched_opname}({self.children[0].sql}, '
f'{self.children[1].sql}, {ret_expr})')
return True
elif self.opname in builtin_vecfunc:
self.sql = self.sql[:self.sql.rindex(')')]
self.sql += ', ' + ret_expr + ')'
return True
return False
def __str__(self):
return self.sql
def __repr__(self):