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

Reply via email to