minor bug fixes

dev
Bill Sun 3 years ago
parent ee2dc88f06
commit 137d670da2

@ -16,18 +16,6 @@ from aquery_parser.types import get_column_type, time_functions
from aquery_parser.utils import * from aquery_parser.utils import *
from aquery_parser.windows import window from aquery_parser.windows import window
def no_dashes(tokens, start, string):
if "-" in tokens[0]:
index = tokens[0].find("-")
raise ParseException(
tokens.type,
start + index + 1, # +1 TO ENSURE THIS MESSAGE HAS PRIORITY
string,
"""Ambiguity: Use backticks (``) around identifiers with dashes, or add space around subtraction operator.""",
)
digit = Char("0123456789") digit = Char("0123456789")
simple_ident = ( simple_ident = (
Char(FIRST_IDENT_CHAR) Char(FIRST_IDENT_CHAR)

BIN
csv.so

Binary file not shown.

@ -1,6 +1,12 @@
from typing import List from typing import List
import uuid
# replace column info with this later.
class ColRef:
def __init__(self, k9name, type, cobj, cnt):
self.k9name = k9name
self.type = type
self.cobj = cobj
self.cnt = cnt
class TableInfo: class TableInfo:
def __init__(self, table_name, cols, cxt:'Context'): def __init__(self, table_name, cols, cxt:'Context'):

@ -4,12 +4,23 @@ from engine.ast import ast_node
class expr(ast_node): class expr(ast_node):
name='expr' name='expr'
builtin_func_maps = { builtin_func_maps = {
'max': 'max', 'max': 'max',
'min': 'min', 'min': 'min',
'avg':'avg',
'sum':'sum',
} }
binary_ops = {'sub':'-', 'plus':'+'} binary_ops = {
unary_ops = [] 'sub':'-',
'add':'+',
'mul':'*',
'div':'%',
}
unary_ops = {
'neg' : '-',
}
def __init__(self, parent, node): def __init__(self, parent, node):
from engine.projection import projection from engine.projection import projection
if type(parent) in [projection, expr]: if type(parent) in [projection, expr]:
@ -29,18 +40,19 @@ class expr(ast_node):
# if type(val) in [dict, str]: # if type(val) in [dict, str]:
self.k9expr += expr(self, val).k9expr self.k9expr += expr(self, val).k9expr
self.k9expr+=')' self.k9expr += ')'
elif key in self.binary_ops: elif key in self.binary_ops:
l = expr(self, val[0]).k9expr l = expr(self, val[0]).k9expr
r = expr(self, val[1]).k9expr r = expr(self, val[1]).k9expr
self.k9expr += f'({l}{self.binary_ops[key]}{r})' self.k9expr += f'({l}{self.binary_ops[key]}{r})'
print(f'binary{key}')
elif key in self.unary_ops: elif key in self.unary_ops:
print(f'unary{key}') self.k9expr += f'({expr(self, val).k9expr}{self.unary_ops[key]})'
else: else:
print(key) print(f'Undefined expr: {key}{val}')
elif type(node) is str: elif type(node) is str:
self.k9expr = self.datasource.parse_tablenames(node) self.k9expr = self.datasource.parse_tablenames(node)
else:
self.k9expr = f'{node}'
def __str__(self): def __str__(self):
return self.k9expr return self.k9expr

@ -47,7 +47,9 @@ class projection(ast_node):
if self.datasource is None: if self.datasource is None:
raise ValueError('spawn error: from clause') raise ValueError('spawn error: from clause')
if 'where' in node:
# apply filter
pass
def consume(self, node): def consume(self, node):

@ -1,6 +1,6 @@
Month sales Month,sales
1 100 1,100
2 120 2,120
4 140 4,140
3 140 3,140
5 130 5,130

1 Month sales
2 1 100
3 2 120
4 4 140
5 3 140
6 5 130

@ -1,3 +1,4 @@
from multiprocessing.sharedctypes import Value
import re import re
import aquery_parser as parser import aquery_parser as parser
import engine import engine
@ -18,11 +19,18 @@ while test_parser:
q = input() q = input()
if q == 'exec': if q == 'exec':
cxt = engine.initialize() cxt = engine.initialize()
for s in stmts['stmts']: stmts_stmts = stmts['stmts']
engine.generate(s, cxt) if type(stmts_stmts) is list:
for s in stmts_stmts:
engine.generate(s, cxt)
else:
engine.generate(stmts_stmts, cxt)
print(cxt.k9code) print(cxt.k9code)
with open('out.k', 'wb') as outfile: with open('out.k', 'wb') as outfile:
outfile.write(cxt.k9code) outfile.write(cxt.k9code.encode('utf-8'))
continue
elif q == 'print':
print(stmts)
continue continue
trimed = ws.sub(' ', q.lower()).split(' ') trimed = ws.sub(' ', q.lower()).split(' ')
if trimed[0] == 'file': if trimed[0] == 'file':
@ -35,6 +43,6 @@ while test_parser:
continue continue
stmts = parser.parse(q) stmts = parser.parse(q)
print(stmts) print(stmts)
except Exception as e: except ValueError as e:
print(type(e), e) print(type(e), e)

Loading…
Cancel
Save