update structure, vis application

This commit is contained in:
2023-03-20 08:16:12 +08:00
parent 726ef535ea
commit d98b4817b3
87 changed files with 8200 additions and 137 deletions
+12 -11
View File
@@ -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
View File
@@ -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 -2
View File
@@ -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
View File
@@ -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