def p_TOK_SORT(p): '''TOK_SORT : LEFT_VALUE_EXPR | LEFT_VALUE_EXPR SORT_MODE''' if len(p) == 2: p[0] = ASTNode.Node(TK.TOK_SORT, None, [p[1]]) else: p[0] = ASTNode.Node(TK.TOK_SORT, None, [p[1], p[2]])
def p_TOK_TABLE_COLS(p): '''TOK_TABLE_COLS : "(" ")" | "(" TOK_COLUMNS_DEFINE ")"''' if len(p) == 3: p[0] = ASTNode.Node(TK.TOK_TABLE_COLUMNS, None, None) else: p[0] = ASTNode.Node(TK.TOK_TABLE_COLUMNS, None, p[2])
def p_TOK_COLUMN_DEFINE(p): '''TOK_COLUMN_DEFINE : WORD COLUMN_TYPE | WORD COLUMN_TYPE TOK_COLUMN_OPTIONS''' if len(p) == 3: p[0] = ASTNode.Node(TK.TOK_COLUMN_DEFINE, p[1], [p[2]]) else: p[0] = ASTNode.Node(TK.TOK_COLUMN_DEFINE, p[1], [p[2], p[3]])
def p_TOK_EXPRESSION(p): '''TOK_EXPRESSION : TOK_EXPRESSION_LEFT COMPARE_TYPE_EXPR TOK_EXPRESSION_RIGHT''' if p[2] == '!=': expression = ASTNode.Node(TK.TOK_COMPARE, '=', [p[1], p[3]]) p[0] = ASTNode.Node(TK.TOK_REVERSED, 'NOT'.lower(), [expression]) else: p[0] = ASTNode.Node(TK.TOK_COMPARE, p[2], [p[1], p[3]])
def p_TOK_TABLE_METAS(p): '''TOK_TABLE_METAS : "(" ")" | "(" TOK_METAS_DEF ")"''' if len(p) == 3: p[0] = ASTNode.Node(TK.TOK_TABLE_METAS, None, None) else: p[0] = ASTNode.Node(TK.TOK_TABLE_METAS, None, p[2])
def p_TOK_TUPLE_OBJECT(p): '''TOK_TUPLE_OBJECT : "(" VALUES_EXPR ")" | "(" ")"''' if len(p) == 4: p[0] = ASTNode.Node(TK.TOK_TUPLE, None, p[2]) else: p[0] = ASTNode.Node(TK.TOK_TUPLE, None, None)
def p_TOK_LIST_OBJECT(p): '''TOK_LIST_OBJECT : "[" VALUES_EXPR "]" | "[" "]"''' if len(p) == 4: p[0] = ASTNode.Node(TK.TOK_LIST, None, p[2]) else: p[0] = ASTNode.Node(TK.TOK_LIST, None, None)
def p_TOK_SELEXPR(p): '''TOK_SELEXPR : LEFT_VALUE_EXPR | LEFT_VALUE_EXPR AS VALUE_EXPR''' if len(p) == 2: p[0] = ASTNode.Node(TK.TOK_SELEXPR, None, [p[1]]) else: p[0] = ASTNode.Node(TK.TOK_SELEXPR, None, [p[1], p[3]])
def p_TOK_ISNULL(p): '''TOK_ISNULL : VALUE_EXPR IS NULL | VALUE_EXPR IS NOT NULL''' if len(p) == 4: p[0] = ASTNode.Node(TK.TOK_FUNCTION, 'ISNULL', [p[1]]) else: expression = ASTNode.Node(TK.TOK_FUNCTION, 'ISNULL', [p[1]]) p[0] = ASTNode.Node(TK.TOK_REVERSED, 'NOT'.lower(), [expression])
def p_TOK_VALUE(p): '''TOK_VALUE : WORD | QUOTE_STRING | NUMBER | DQUOTE_STRING | "*"''' p[0] = ASTNode.Node(TK.TOK_VALUE, p[1], None)
def p_TOK_DELETE(p): '''TOK_DELETE : DELETE FROM TOK_TABLE_NAME WHERE TOK_WHERE''' p[0] = ASTNode.Node(TK.TOK_DELETE,None,[p[3]] + [p[5]])
def p_TOK_UPDATE(p): '''TOK_UPDATE : UPDATE TOK_TABLE_NAME SET TOK_SET_COLUMNS_CLAUSE WHERE TOK_WHERE''' p[0] = ASTNode.Node(TK.TOK_UPDATE, None, [p[2]] + [p[4]] + [p[6]])
def p_TOK_SET_COLUMNS(p): '''TOK_SET_COLUMNS_CLAUSE : KV_ELEMENTS_EXPR''' p[0] = ASTNode.Node(TK.TOK_SET_COLUMNS_CLAUSE, None, p[1])
def p_TOK_INSERT_ROW(p): '''TOK_VALUE_ROW : "(" RIGHT_VALUES_EXPR ")" ''' p[0] = ASTNode.Node(TK.TOK_INSERT_ROW, None, p[2])
def p_TOK_BULK_INTO(p): '''TOK_BULK_INTO : BULK INTO TOK_TABLE_NAME TOK_INSERT_COLUMNS VALUES INSERT_ROWS_EXPR''' rows = ASTNode.Node(TK.TOK_INSERT_ROWS, None, p[6]) p[0] = ASTNode.Node(TK.TOK_BULK_INTO, None, [p[3]] + [p[4]] + [rows])
def p_TOK_INSERT_INTO(p): '''TOK_INSERT_INTO : INSERT INTO TOK_TABLE_NAME TOK_INSERT_COLUMNS VALUES TOK_VALUE_ROW''' p[0] = ASTNode.Node(TK.TOK_INSERT_INTO, None, [p[3]] + [p[4]] + [p[6]])
def p_TOK_INSERT_COLUMNS(p): '''TOK_INSERT_COLUMNS : TOK_TUPLE_OBJECT''' p[0] = ASTNode.Node(TK.TOK_INSERT_COLUMNS, None, p[1].get_children())
def p_TOK_FROM(p): '''TOK_FROM : TOK_TABLE_NAME''' p[0] = ASTNode.Node(TK.TOK_FROM, None, [p[1]])
def p_TOK_GROUPBY(p): '''TOK_GROUPBY : LEFT_VALUES_EXPR''' p[0] = ASTNode.Node(TK.TOK_GROUPBY, None, p[1])
def p_TOK_ORDERBY(p): '''TOK_ORDERBY : TOK_SORTS''' p[0] = ASTNode.Node(TK.TOK_ORDERBY, None, p[1])
def p_SORT_MODE(p): '''SORT_MODE : ASC | DESC''' p[0] = ASTNode.Node(TK.TOK_SORT_MODE, p[1], None)
def p_TOK_FROM_WITH_ROUTING(p): '''TOK_FROM : TOK_TABLE_NAME "@" TOK_VALUE''' p[0] = ASTNode.Node(TK.TOK_FROM, None, [p[1], p[3]])
def p_DESC_TABLE(p): '''TOK_DESC_TABLE : DESC TOK_TABLE_NAME''' p[0] = ASTNode.Node(TK.TOK_DESC_TABLE, None, [p[2]])
def p_TOK_UPSERT_INTO(p): '''TOK_UPSERT_INTO : UPSERT TOK_TABLE_NAME SET TOK_SET_COLUMNS_CLAUSE WHERE TOK_WHERE''' p[0] = ASTNode.Node(TK.TOK_UPSERT_INTO, None, [p[2]] + [p[4]] + [p[6]])
def p_TOK_SELECT(p): '''TOK_SELECT : TOK_SELEXPRS''' p[0] = ASTNode.Node(TK.TOK_SELECT, None, p[1])
def p_TOK_WHRER(p): '''TOK_WHERE : EXPRESSION_EXPR''' p[0] = ASTNode.Node(TK.TOK_WHERE, None, [p[1]])
def p_SHOW_TABLES(p): '''TOK_SHOW_TABLES : SHOW TABLES''' p[0] = ASTNode.Node(TK.TOK_SHOW_TABLES, None, None)
def p_TOK_LIMIT(p): '''TOK_LIMIT : LIMITS_EXPR''' p[0] = ASTNode.Node(TK.TOK_LIMIT, None, p[1])
def p_DROP_TABLE(p): '''TOK_DROP_TABLE : DROP TABLE TOK_TABLE_NAME''' p[0] = ASTNode.Node(TK.TOK_DROP_TABLE, None, [p[3]])
def p_LIMIT_EXPR(p): '''LIMIT_EXPR : NUMBER''' p[0] = ASTNode.Node(TK.TOK_VALUE, p[1], None)