update structure, vis application
This commit is contained in:
+12
-11
@@ -3,8 +3,8 @@ from dataclasses import dataclass
|
||||
from enum import Enum, auto
|
||||
from typing import Dict, List, Optional, Set, Tuple, Union
|
||||
|
||||
from engine.types import *
|
||||
from engine.utils import (base62alp, base62uuid, enlist,
|
||||
from common.types import *
|
||||
from common.utils import (base62alp, base62uuid, enlist,
|
||||
get_innermost, get_legal_name)
|
||||
from reconstruct.storage import ColRef, Context, TableInfo
|
||||
|
||||
@@ -1096,7 +1096,7 @@ class create_trigger(ast_node):
|
||||
pass
|
||||
|
||||
def produce(self, node):
|
||||
from engine.utils import send_to_server, get_storedproc
|
||||
from common.utils import send_to_server, get_storedproc
|
||||
node = node['create_trigger']
|
||||
self.trigger_name = node['name']
|
||||
self.action_name = node['action']
|
||||
@@ -1134,11 +1134,11 @@ class create_trigger(ast_node):
|
||||
self.context.triggers_active.add(self)
|
||||
|
||||
def execute(self):
|
||||
from engine.utils import send_to_server
|
||||
from common.utils import send_to_server
|
||||
self.context.queries.append(f'TA{self.query_name}\0{self.action_name}')
|
||||
|
||||
def remove(self):
|
||||
from engine.utils import send_to_server
|
||||
from common.utils import send_to_server
|
||||
self.context.queries.append(f'TR{self.trigger_name}')
|
||||
|
||||
|
||||
@@ -1443,7 +1443,7 @@ class udf(ast_node):
|
||||
all = ('_builtin_len', '_builtin_ret')
|
||||
|
||||
def decltypecall(self, c_code = False, *args):
|
||||
from engine.types import fn_behavior
|
||||
from common.types import fn_behavior
|
||||
class dummy:
|
||||
def __init__(self, name):
|
||||
self.cname = name + '_gettype'
|
||||
@@ -1451,7 +1451,7 @@ class udf(ast_node):
|
||||
return fn_behavior(dummy(self.cname), c_code, *args)
|
||||
|
||||
def __call__(self, c_code = False, *args):
|
||||
from engine.types import fn_behavior
|
||||
from common.types import fn_behavior
|
||||
builtin_args = [f'{{{n}()}}' for n, v in self.builtin.items() if v.enabled]
|
||||
return fn_behavior(self, c_code, *args, *builtin_args)
|
||||
|
||||
@@ -1465,6 +1465,7 @@ class udf(ast_node):
|
||||
255, name = 'generic_ref', cname = 'auto&'
|
||||
))
|
||||
}
|
||||
self.ccode = ''
|
||||
self.var_table = {}
|
||||
self.args = []
|
||||
udf.try_init_udf(self.context)
|
||||
@@ -1486,7 +1487,7 @@ class udf(ast_node):
|
||||
|
||||
|
||||
def produce(self, node):
|
||||
from engine.utils import check_legal_name, get_legal_name
|
||||
from common.utils import check_legal_name, get_legal_name
|
||||
node = node[self.name]
|
||||
# register udf
|
||||
self.agg = 'Agg' in node
|
||||
@@ -1581,7 +1582,7 @@ class udf(ast_node):
|
||||
|
||||
|
||||
def consume(self, node):
|
||||
from engine.utils import check_legal_name, get_legal_name
|
||||
from common.utils import check_legal_name, get_legal_name
|
||||
node = node[self.name]
|
||||
|
||||
if 'params' in node:
|
||||
@@ -1669,14 +1670,14 @@ class udf(ast_node):
|
||||
process_recursion(front)
|
||||
ccode += builtin_argstr + ') {\n'
|
||||
process_recursion(self.code_list)
|
||||
self.context.udf += ccode + '\n'
|
||||
self.ccode += ccode + '\n'
|
||||
ccode = ''
|
||||
if self.return_pattern == udf.ReturnPattern.elemental_return:
|
||||
ccode += f'auto {self.cname}_gettype = []('
|
||||
process_recursion(front[1:], True)
|
||||
ccode += ') {\n\tuint32_t _builtin_len = 0;\n'
|
||||
process_recursion(self.code_list, True)
|
||||
self.context.udf += ccode + '\n'
|
||||
self.ccode += ccode + '\n'
|
||||
|
||||
class ReturnPattern(Enum):
|
||||
bulk_return = auto()
|
||||
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
from typing import Optional, Set
|
||||
|
||||
from engine.types import *
|
||||
from common.types import *
|
||||
from reconstruct.ast import ast_node
|
||||
from reconstruct.storage import ColRef, Context
|
||||
|
||||
@@ -95,7 +95,7 @@ class expr(ast_node):
|
||||
'stddev']
|
||||
|
||||
def produce(self, node):
|
||||
from engine.utils import enlist
|
||||
from common.utils import enlist
|
||||
from reconstruct.ast import udf, projection
|
||||
|
||||
if type(node) is dict:
|
||||
@@ -412,7 +412,7 @@ class expr(ast_node):
|
||||
exec(f'loc["{b}"] = lambda : "{b}"')
|
||||
|
||||
x = self.c_code if c_code is None else c_code
|
||||
from engine.utils import escape_qoutes
|
||||
from common.utils import escape_qoutes
|
||||
if decltypestr:
|
||||
return eval('f\'' + escape_qoutes(self.udf_decltypecall) + '\'')
|
||||
self.sql.replace("'", "\\'")
|
||||
@@ -447,7 +447,7 @@ class fastscan(expr):
|
||||
self.requested_lens.add(segs[0])
|
||||
|
||||
def produce(self, node):
|
||||
from engine.utils import enlist
|
||||
from common.utils import enlist
|
||||
if type(node) is dict:
|
||||
for key, val in node.items():
|
||||
if key in self.operators:
|
||||
@@ -468,7 +468,7 @@ class getrefs(expr):
|
||||
self.rec = None
|
||||
|
||||
def produce(self, node):
|
||||
from engine.utils import enlist
|
||||
from common.utils import enlist
|
||||
if type(node) is dict:
|
||||
for key, val in node.items():
|
||||
if key in self.operators:
|
||||
|
||||
@@ -2,8 +2,8 @@ import abc
|
||||
from reconstruct.ast import ast_node
|
||||
from typing import Optional
|
||||
from reconstruct.storage import Context, ColRef
|
||||
from engine.utils import enlist
|
||||
from engine.types import builtin_func, user_module_func, builtin_operators
|
||||
from common.utils import enlist
|
||||
from common.types import builtin_func, user_module_func, builtin_operators
|
||||
|
||||
|
||||
class expr_base(ast_node, metaclass = abc.ABCMeta):
|
||||
|
||||
+11
-5
@@ -1,7 +1,7 @@
|
||||
from typing import Dict, List, Set
|
||||
|
||||
from engine.types import *
|
||||
from engine.utils import CaseInsensitiveDict, base62uuid, enlist
|
||||
from common.types import *
|
||||
from common.utils import CaseInsensitiveDict, base62uuid, enlist
|
||||
|
||||
|
||||
class ColRef:
|
||||
@@ -152,6 +152,7 @@ class Context:
|
||||
self.sql = ''
|
||||
self.finalized = False
|
||||
self.udf = None
|
||||
self.module_stubs = ''
|
||||
self.scans = []
|
||||
self.procs = []
|
||||
self.queries = []
|
||||
@@ -167,7 +168,6 @@ class Context:
|
||||
self.tables : Set[TableInfo] = set()
|
||||
self.cols = []
|
||||
self.datasource = None
|
||||
self.module_stubs = ''
|
||||
self.module_map = {}
|
||||
self.udf_map = dict()
|
||||
self.udf_agg_map = dict()
|
||||
@@ -281,8 +281,14 @@ class Context:
|
||||
self.finalize_query()
|
||||
|
||||
def finalize_udf(self):
|
||||
if self.udf is not None:
|
||||
return (Context.udf_head
|
||||
if self.udf:
|
||||
self.udf += '\n'.join([
|
||||
u.ccode for u in self.udf_map.values()
|
||||
])
|
||||
self.module_stubs = '\n'.join(
|
||||
[m for m in self.module_map.values()
|
||||
])
|
||||
return (Context.udf_head
|
||||
+ self.module_stubs
|
||||
+ self.get_init_func()
|
||||
+ self.udf
|
||||
|
||||
Reference in New Issue
Block a user