diff --git a/util.c b/util.c index 6b1f1567b93e8e636b054100d6669a1bbd209fc6..ddb1ec2928e0b755ca1e332a9948b49c88100bf0 100644 --- a/util.c +++ b/util.c @@ -59,6 +59,42 @@ cons_cell* create_union_operator(cons_cell* ra1, cons_cell* ra2) { return operator_cons; } +cons_cell* create_cross_operator(cons_cell* ra1, cons_cell* ra2) { + cons_cell* ra2_cons = create_cons_cell(ra2, NULL); + cons_cell* ra1_cons = create_cons_cell(ra1, ra2_cons); + char operator[5] = "CROSS"; + cons_cell* operator_cons = create_cons_cell_w_atom(operator, ra1_cons); + return operator_cons; +} + +// For when you want to assign column names to another name +cons_cell* create_assign_operator(char* col1, char* col2) { + cons_cell* col2_cons = create_cons_cell_w_atom(col2, NULL); + cons_cell* col1_cons = create_cons_cell_w_atom(col1, col2_cons); + char operator[2] = "AS"; + cons_cell* operator_cons = create_cons_cell_w_atom(operator, col1_cons); + return operator_cons; +} + +cons_cell* create_proj_operator(cons_cell* assign1, cons_cell* assign2, cons_cell* ra) { + cons_cell* ra_cons = create_cons_cell(ra, NULL); + cons_cell* assign2_cons = create_cons_cell(assign2, NULL); + cons_cell* assign1_cons = create_cons_cell(assign1, assign2_cons); + cons_cell* assign_cons = create_cons_cell(assign1_cons, ra_cons); + char operator[4] = "PROJ"; + cons_cell* operator_cons = create_cons_cell_w_atom(operator, assign_cons); + return operator_cons; +} + +cons_cell* create_not_operator(cons_cell* ra1, cons_cell* ra2) { + cons_cell* ra2_cons = create_cons_cell(ra2, NULL); + cons_cell* ra1_cons = create_cons_cell(ra1, ra2_cons); + char operator[3] = "NOT"; + cons_cell* operator_cons = create_cons_cell_w_atom(operator, ra1_cons); + return operator_cons; +} + + const char *node_types[] = {"program", "id", "query", "select_query", "body", "table path", "union_query", "select list", "attrpath", "operator", "bool", "pred"};