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.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")
simple_ident = (
Char(FIRST_IDENT_CHAR)

BIN
csv.so

Binary file not shown.

@ -1,6 +1,12 @@
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:
def __init__(self, table_name, cols, cxt:'Context'):

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

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

@ -1,6 +1,6 @@
Month sales
1 100
2 120
4 140
3 140
5 130
Month,sales
1,100
2,120
4,140
3,140
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 aquery_parser as parser
import engine
@ -18,11 +19,18 @@ while test_parser:
q = input()
if q == 'exec':
cxt = engine.initialize()
for s in stmts['stmts']:
engine.generate(s, cxt)
stmts_stmts = stmts['stmts']
if type(stmts_stmts) is list:
for s in stmts_stmts:
engine.generate(s, cxt)
else:
engine.generate(stmts_stmts, cxt)
print(cxt.k9code)
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
trimed = ws.sub(' ', q.lower()).split(' ')
if trimed[0] == 'file':
@ -35,6 +43,6 @@ while test_parser:
continue
stmts = parser.parse(q)
print(stmts)
except Exception as e:
except ValueError as e:
print(type(e), e)

Loading…
Cancel
Save