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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list