updated code generation for compound-columns, initial support for scratchspace
This commit is contained in:
+5
-7
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user