Changeset: 7d276c89ad7d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d276c89ad7d Modified Files: sql/backends/monet5/sql_rdf_jgraph.c sql/server/rel_rdfscan.c Branch: rdf Log Message:
Start handling exception diffs (truncated from 622 to 300 lines): diff --git a/sql/backends/monet5/sql_rdf_jgraph.c b/sql/backends/monet5/sql_rdf_jgraph.c --- a/sql/backends/monet5/sql_rdf_jgraph.c +++ b/sql/backends/monet5/sql_rdf_jgraph.c @@ -202,6 +202,44 @@ sql_column* get_rdf_column(mvc *c, char } +#if HANDLING_EXCEPTION + +static +sql_table *create_dummy_table(mvc *c, str tblname, list *proj_exps){ + + sql_table *tbl = NULL; + str schema = "rdf"; + sql_schema *sch = NULL; + + node *en; + //sql_subtype tpe_oid; + + sch = mvc_bind_schema(c, schema); + assert(sch != NULL); + + if ((tbl = mvc_bind_table(c, sch, tblname)) == NULL){ + tbl = mvc_create_table(c, sch, tblname, tt_table, 0, SQL_PERSIST, 0, 3); + } + + //create columns + for (en = proj_exps->h; en; en = en->next){ + sql_exp *tmpexp = (sql_exp *) en->data; + sql_subtype *tpe; + char colname[100]; + + assert(tmpexp->type == e_column); + tpe = exp_subtype(tmpexp); + sprintf(colname, "dummy_%s_%s", tmpexp->rname, tmpexp->name); + if (mvc_bind_column(c, tbl, colname) == NULL){ + mvc_create_column(c, tbl, colname, tpe); + } + } + + + return tbl; +} + +#endif static str create_abstract_table(mvc *c){ @@ -274,48 +312,6 @@ int is_basic_pattern(sql_rel *r){ } -#if 0 -static -void exps_print_ext(mvc *sql, list *exps, int depth, char *prefix){ - - size_t pos; - size_t nl = 0; - size_t len = 0, lastpos = 0; - - stream *fd = sql->scanner.ws; - stream *s; - buffer *b = buffer_create(2000); /* hopefully enough */ - if (!b) - return; /* signal somehow? */ - s = buffer_wastream(b, "SQL Plan"); - if (!s) { - buffer_destroy(b); - return; /* signal somehow? */ - } - - exps_print(sql, s, exps, depth, 1, 0); - - mnstr_printf(s, "\n"); - - /* count the number of lines in the output, skip the leading \n */ - for (pos = 1; pos < b->pos; pos++) { - if (b->buf[pos] == '\n') { - nl++; - if (len < pos - lastpos) - len = pos - lastpos; - lastpos = pos + 1; - } - } - b->buf[b->pos - 1] = '\0'; /* should always end with a \n, can overwrite */ - - mnstr_printf(fd, "%s \n", b->buf + 1 /* omit starting \n */); - printf("%s %s\n", prefix, b->buf + 1 /* omit starting \n */); - mnstr_close(s); - mnstr_destroy(s); - buffer_destroy(b); -} -#endif - static void exps_print_ext(mvc *sql, list *exps, int depth, char *prefix){ (void) prefix; @@ -1135,7 +1131,7 @@ void get_col_name_from_p (char **col, ch * */ static -void modify_exp_col(mvc *c, sql_exp *m_exp, char *_rname, char *_name, char *_arname, char *_aname, int update_e_convert){ +void modify_exp_col(mvc *c, sql_exp *m_exp, char *_rname, char *_name, char *_arname, char *_aname, int update_e_convert, int dummy_exps){ sql_exp *tmpe = NULL; sql_exp *ne = NULL; sql_exp *le = NULL; //right expression, should be e_convert @@ -1156,7 +1152,10 @@ void modify_exp_col(mvc *c, sql_exp *m_e assert(tmpe->type == e_column); - ne = exp_column(c->sa, arname, aname, exp_subtype(tmpe), exp_card(tmpe), has_nil(tmpe), 0); + if (dummy_exps) + ne = exp_column(c->sa, rname, name, exp_subtype(tmpe), exp_card(tmpe), has_nil(tmpe), 0); + else + ne = exp_column(c->sa, arname, aname, exp_subtype(tmpe), exp_card(tmpe), has_nil(tmpe), 0); m_exp->l = ne; @@ -1287,6 +1286,91 @@ void verify_rel(sql_rel *r){ assert(select_s && select_p && select_o); } +static +void get_transform_select_exps(mvc *c, list *exps, list *trans_select_exps, str tblname, str colname, int *isConstrain_o){ + + node *en; + int num_o_cond = 0; + int num_s_cond = 0; + sql_allocator *sa = c->sa; + + for (en = exps->h; en; en = en->next){ + sql_exp *tmpexp = (sql_exp *) en->data; + sql_exp *e = (sql_exp *)tmpexp->l; + + assert(tmpexp->type == e_cmp); //TODO: Handle other exps for op_select + assert(e->type == e_convert); + + e = e->l; + + assert(e->type == e_column); + + if (strcmp(e->name, "p") == 0){ + continue; + + } else if (strcmp(e->name, "o") == 0){ + sql_exp *m_exp = exp_copy(sa, tmpexp); + modify_exp_col(c, m_exp, tblname, colname, e->rname, e->name, 1, 0); + + //append this exp to list + append(trans_select_exps, m_exp); + num_o_cond++; + *isConstrain_o = 1; + + } else if (strcmp(e->name, "s") == 0){ + char subj_colname[50] = "subject"; + sql_exp *m_exp = exp_copy(sa, tmpexp); + modify_exp_col(c, m_exp, tblname, subj_colname, e->rname, e->name, 1, 0); + + //append this exp to list + append(trans_select_exps, m_exp); + num_s_cond++; + } else{ + printf("The exp of other predicates (not s, p, o) is not handled\n"); + } + + + } +} + +#if HANDLING_EXCEPTION +static +void get_transform_dummy_select_exps(mvc *c, list *exps, list *trans_select_exps, str tblname){ + + node *en; + sql_allocator *sa = c->sa; + + for (en = exps->h; en; en = en->next){ + sql_exp *tmpexp = (sql_exp *) en->data; + sql_exp *e = (sql_exp *)tmpexp->l; + + assert(tmpexp->type == e_cmp); //TODO: Handle other exps for op_select + assert(e->type == e_convert); + + e = e->l; + + assert(e->type == e_column); + + if (strcmp(e->name, "p") == 0){ + continue; + + } else if (strcmp(e->name, "o") == 0 || strcmp(e->name, "s") == 0){ + sql_exp *m_exp = exp_copy(sa, tmpexp); + char dum_col[100]; + sprintf(dum_col,"dummy_%s_%s", e->rname, e->name); + modify_exp_col(c, m_exp, tblname, dum_col, e->rname, e->name, 1, 1); + + //append this exp to list + append(trans_select_exps, m_exp); + + } else{ + printf("The exp of other predicates (not s, p, o) is not handled\n"); + } + + + } +} +#endif static void tranforms_exps(mvc *c, sql_rel *r, list *trans_select_exps, list *trans_tbl_exps, str tblname, int colIdx, oid tmpPropId, str *atblname, str *asubjcolname, list *sp_prj_exps, list *base_column_exps, int isOptionalGroup){ @@ -1309,48 +1393,7 @@ void tranforms_exps(mvc *c, sql_rel *r, tmpexps = r->exps; if (tmpexps){ - node *en; - int num_o_cond = 0; - int num_s_cond = 0; - - for (en = tmpexps->h; en; en = en->next){ - sql_exp *tmpexp = (sql_exp *) en->data; - sql_exp *e = (sql_exp *)tmpexp->l; - - assert(tmpexp->type == e_cmp); //TODO: Handle other exps for op_select - assert(e->type == e_convert); - - e = e->l; - - assert(e->type == e_column); - - if (strcmp(e->name, "p") == 0){ - continue; - - } else if (strcmp(e->name, "o") == 0){ - sql_exp *m_exp = exp_copy(sa, tmpexp); - modify_exp_col(c, m_exp, tblname, tmpcolname, e->rname, e->name, 1); - - //append this exp to list - append(trans_select_exps, m_exp); - num_o_cond++; - isConstrain_o = 1; - - } else if (strcmp(e->name, "s") == 0){ - char subj_colname[50] = "subject"; - sql_exp *m_exp = exp_copy(sa, tmpexp); - modify_exp_col(c, m_exp, tblname, subj_colname, e->rname, e->name, 1); - - //append this exp to list - append(trans_select_exps, m_exp); - num_s_cond++; - } else{ - printf("The exp of other predicates (not s, p, o) is not handled\n"); - } - - - } - + get_transform_select_exps(c, tmpexps, trans_select_exps, tblname, tmpcolname, &isConstrain_o); } @@ -1466,7 +1509,7 @@ void tranforms_mvprop_exps(mvc *c, sql_r } else if (strcmp(e->name, "o") == 0){ sql_exp *m_exp = exp_copy(sa, tmpexp); - modify_exp_col(c, m_exp, mvtblname, tmpmvcolname, e->rname, e->name, 1); + modify_exp_col(c, m_exp, mvtblname, tmpmvcolname, e->rname, e->name, 1, 0); //append this exp to list append(trans_select_exps, m_exp); @@ -1474,7 +1517,7 @@ void tranforms_mvprop_exps(mvc *c, sql_r } else if (strcmp(e->name, "s") == 0){ char subj_colname[50] = "mvsubj"; sql_exp *m_exp = exp_copy(sa, tmpexp); - modify_exp_col(c, m_exp, mvtblname, subj_colname, e->rname, e->name, 1); + modify_exp_col(c, m_exp, mvtblname, subj_colname, e->rname, e->name, 1, 0); //append this exp to list append(trans_select_exps, m_exp); @@ -2028,6 +2071,31 @@ sql_rel* transform_inner_join_subjg (mvc } +#if HANDLING_EXCEPTION +static +void get_removed_tid_exps(mvc *c, list *trans_base_exps, sql_rel *r){ + list *tmpexps = NULL; + node *en; + + assert (r->op == op_basetable); + tmpexps = r->exps; + + assert(tmpexps); + + for (en = tmpexps->h; en; en = en->next){ + sql_exp *tmpexp = (sql_exp *) en->data; + assert (tmpexp->type == e_column); + + if (strcmp(tmpexp->name, "%TID%") == 0){ + continue; + } else { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list