Changeset: a4df1be85e4e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a4df1be85e4e
Modified Files:
        sql/backends/monet5/sql_rdf.h
        sql/backends/monet5/sql_rdf_jgraph.c
Branch: rdf
Log Message:

Minor code reallocation


diffs (truncated from 327 to 300 lines):

diff --git a/sql/backends/monet5/sql_rdf.h b/sql/backends/monet5/sql_rdf.h
--- a/sql/backends/monet5/sql_rdf.h
+++ b/sql/backends/monet5/sql_rdf.h
@@ -56,4 +56,6 @@ extern BATiter global_mapi;
 #define APPLY_OPTIMIZATION_FOR_OPTIONAL        1       /* Instead of using 
left join, we use a project with ifthenelse */
                                                /* on the set of optional 
columns */
 
+#define HANDLING_EXCEPTION 1
+
 #endif /*_SQL_RDF_H */
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
@@ -2530,6 +2530,153 @@ void generate_ijpatternId(jgraph *jg, in
        
        printf("Number of ijgroup is: %d\n", (ijpId + 1)); 
 }
+
+static 
+sql_rel* _group_star_pattern_for_single_table(mvc *c, jgraph *jg, int *group, 
int nnode, int tId, list **sp_proj_exps, list **sp_rdfscan_proj_exps, 
+               int *contain_mv_col){
+
+       int i, j; 
+       int *nnodes_per_ijgroup; 
+       int nijgroup = 0;
+       int **ijgroup; 
+       sql_rel **ijrels;    //rel for inner join groups
+       sql_rel **edge_ijrels;  //sql_rel connecting each pair of ijrels
+       int is_contain_mv = 0; 
+       sql_rel *rel_rdfscan = NULL;
+       sql_rel *tbl_m_rel = NULL; 
+
+       int *ingroup_contain_mv = NULL; sql_rel *tmprel_rdfscan = NULL; 
+
+       *sp_proj_exps = new_exp_list(c->sa);
+       *sp_rdfscan_proj_exps = new_exp_list(c->sa);
+
+       ijgroup = get_inner_join_groups_in_sp_group(jg, group, nnode, 
&nijgroup, &nnodes_per_ijgroup);                          
+
+       printf("Number of inner join group is: %d\n", nijgroup);
+
+       rel_rdfscan = build_rdfscan(c, jg, tId, nnode, nijgroup, ijgroup, 
nnodes_per_ijgroup);
+
+       for (i = 0; i < nijgroup; i++){
+               printf("Group %d: ", i);
+               for (j = 0; j < nnodes_per_ijgroup[i]; j++){
+                       printf(" %d",ijgroup[i][j]);
+               }
+               printf("\n"); 
+               
+       }
+
+       ijrels = (sql_rel **) malloc(sizeof(sql_rel*) * nijgroup);
+       edge_ijrels = (sql_rel **) malloc(sizeof(sql_rel*) * (nijgroup - 1));
+       ingroup_contain_mv  = (int *) malloc(sizeof(int) * nijgroup); 
+       
+       for (i = 0; i < nijgroup; i++){
+               int isOptionalGroup = 0;
+               if (i > 0) isOptionalGroup = 1;
+               ingroup_contain_mv[i] = 0;
+               ijrels[i] = transform_inner_join_subjg (c, jg, tId, ijgroup[i], 
nnodes_per_ijgroup[i], *sp_proj_exps, *sp_rdfscan_proj_exps, &is_contain_mv, 
isOptionalGroup);
+               ingroup_contain_mv[i] = is_contain_mv; 
+
+       }
+
+       *contain_mv_col = is_contain_mv;
+       if (is_contain_mv) printf("Contain MV cols \n"); 
+       printf("Original Projection of all columns (w/o considering mv col): 
\n"); 
+       exps_print_ext(c, *sp_proj_exps, 0, NULL); 
+
+       printf("RDFscan expression for table matching %d\n",tId);
+       exps_print_ext(c, *sp_rdfscan_proj_exps, 0, NULL); 
+
+       if (nijgroup > 1){
+               #if (APPLY_OPTIMIZATION_FOR_OPTIONAL == 0)      
+               //Always use left outer join for connecting ijgroup
+               printf("APPLY_OPTIMIZATION_FOR_OPTIONAL \n"); 
+               //Connect these ijrels by outer joins
+               for (i = 0; i < (nijgroup - 1); i++){
+                       edge_ijrels[i] = _group_edge_between_two_groups(c, jg, 
i, ijgroup[i], nnodes_per_ijgroup[i], 
+                                               ijgroup[i+1], 
nnodes_per_ijgroup[i+1], ijrels[i], ijrels[i+1], 1);
+               }
+               connect_groups(nijgroup, ijrels, edge_ijrels);
+
+               tbl_m_rel = edge_ijrels[0];     
+
+               #else
+               //if the inner group does not have mv prop, then use the 
IFTHENELSE approach
+               //First: Connect all non-mv prop groups into single rel (with 
the first rel)
+               sql_rel *non_mv_rep_rel = NULL; //Represent all non-mv props. 
+               int     n_mv_groups = 1;        //Number of groups with mv prop
+                                               //Start from 1 (the first is 
the combination of 
+                                               //all non-mv groups)
+               int     n_non_mv_groups = 0;
+               int     *old_idx_map = (int *) malloc(sizeof(int) * nijgroup); 
+
+               sql_rel **newijrels = (sql_rel **) malloc(sizeof(sql_rel*) * 
nijgroup);
+
+               non_mv_rep_rel = ijrels[0]; 
+               for (i = 1; i < nijgroup; i++){
+                       if (ingroup_contain_mv[i] == 0){
+                               n_non_mv_groups++;
+                               non_mv_rep_rel =  
rdf_rel_simple_combine_with_optional_cols(c->sa, non_mv_rep_rel, ijrels[i]);
+                       }
+                       else {
+                               old_idx_map[n_mv_groups] = i; 
+                               newijrels[n_mv_groups] = ijrels[i]; 
+                               n_mv_groups++; 
+                       }
+               }
+
+               newijrels[0] = non_mv_rep_rel; 
+               old_idx_map[0] = 0;     
+               
+               if (n_mv_groups > 1){
+                       //Then, connect with groups having mv props
+                       for (i = 0; i < (n_mv_groups - 1); i++){
+                               int id1 = old_idx_map[i];
+                               int id2 = old_idx_map[i+1];
+
+                               edge_ijrels[i] = 
_group_edge_between_two_groups(c, jg, i, ijgroup[id1], nnodes_per_ijgroup[id1],
+                                                       ijgroup[id2], 
nnodes_per_ijgroup[id2], newijrels[i], newijrels[i+1], 1);
+                       }
+
+                       connect_groups(n_mv_groups, newijrels, edge_ijrels);    
+                       tmprel_rdfscan = edge_ijrels[0];
+               }
+               else{
+                       tmprel_rdfscan = newijrels[0];
+               }
+               if (n_non_mv_groups > 0){       //Add IFTHENELSE project
+                       sql_rel *tmp_proj_rel = rel_project(c->sa, 
tmprel_rdfscan, *sp_rdfscan_proj_exps);
+                       tbl_m_rel = tmp_proj_rel; 
+               }
+               else{
+                       tbl_m_rel = tmprel_rdfscan;                     
+               }
+               #endif
+       }
+       else{   //nijgroup = 1
+               tbl_m_rel = ijrels[0]; 
+       }
+
+       #if USINGRDFSCAN
+       tbl_m_rel = rel_rdfscan; 
+       #else
+       rel_destroy(rel_rdfscan);
+       #endif
+
+       //Free
+       for (i = 0; i < nijgroup; i++){
+               free(ijgroup[i]);
+       }
+
+       free(ijgroup); 
+       free(nnodes_per_ijgroup);
+       free(edge_ijrels);
+       free(ijrels);
+
+
+       return tbl_m_rel; 
+}
+
+
 /*
  * Create a select sql_rel from a star pattern
  * */
@@ -2537,14 +2684,13 @@ void generate_ijpatternId(jgraph *jg, in
 static         
 sql_rel* _group_star_pattern(mvc *c, jgraph *jg, int *group, int nnode, int 
pId){
        sql_rel *rel = NULL; 
-       int i, j, tblIdx; 
+       int i, tblIdx; 
        char is_all_select = 1; 
        char is_only_basetable = 1;
        spProps *spprops = NULL; 
        int *tmptbId = NULL; 
        int num_match_tbl = 0;
 
-
        //This transformed exps list contain exps list from op_select
         //on the object
 
@@ -2609,141 +2755,8 @@ sql_rel* _group_star_pattern(mvc *c, jgr
                sp_rdfscan_proj_exps = (list **) malloc(sizeof(list *) * 
num_match_tbl);
 
                for (tblIdx = 0; tblIdx < num_match_tbl; tblIdx++){
-                       int tId = tmptbId[tblIdx];
-                       int *nnodes_per_ijgroup; 
-                       int nijgroup = 0;
-                       int **ijgroup; 
-                       sql_rel **ijrels;    //rel for inner join groups
-                       sql_rel **edge_ijrels;  //sql_rel connecting each pair 
of ijrels
-                       int is_contain_mv = 0; 
-                       sql_rel *rel_rdfscan = NULL; 
-
-                       int *ingroup_contain_mv = NULL; sql_rel *tmprel_rdfscan 
= NULL; 
-
-                       sp_proj_exps[tblIdx] = new_exp_list(c->sa);
-                       sp_rdfscan_proj_exps[tblIdx] = new_exp_list(c->sa);
-
-                       ijgroup = get_inner_join_groups_in_sp_group(jg, group, 
nnode, &nijgroup, &nnodes_per_ijgroup);                          
-
-                       printf("Number of inner join group is: %d\n", nijgroup);
-
-                       rel_rdfscan = build_rdfscan(c, jg, tId, nnode, 
nijgroup, ijgroup, nnodes_per_ijgroup);
-
-                       for (i = 0; i < nijgroup; i++){
-                               printf("Group %d: ", i);
-                               for (j = 0; j < nnodes_per_ijgroup[i]; j++){
-                                       printf(" %d",ijgroup[i][j]);
-                               }
-                               printf("\n"); 
-                               
-                       }
-
-                       ijrels = (sql_rel **) malloc(sizeof(sql_rel*) * 
nijgroup);
-                       edge_ijrels = (sql_rel **) malloc(sizeof(sql_rel*) * 
(nijgroup - 1));
-                       ingroup_contain_mv  = (int *) malloc(sizeof(int) * 
nijgroup); 
-                       
-                       for (i = 0; i < nijgroup; i++){
-                               int isOptionalGroup = 0;
-                               if (i > 0) isOptionalGroup = 1;
-                               ingroup_contain_mv[i] = 0;
-                               ijrels[i] = transform_inner_join_subjg (c, jg, 
tId, ijgroup[i], nnodes_per_ijgroup[i], sp_proj_exps[tblIdx], 
sp_rdfscan_proj_exps[tblIdx], &is_contain_mv, isOptionalGroup);
-                               ingroup_contain_mv[i] = is_contain_mv; 
-
-                       }
-       
-                       contain_mv_col[tblIdx] = is_contain_mv;
-                       if (is_contain_mv) printf("Contain MV cols \n"); 
-                       printf("Original Projection of all columns (w/o 
considering mv col): \n"); 
-                       exps_print_ext(c, sp_proj_exps[tblIdx], 0, NULL); 
-
-                       printf("RDFscan expression for table matching 
%d\n",tblIdx);
-                       exps_print_ext(c, sp_rdfscan_proj_exps[tblIdx], 0, 
NULL); 
-
-                       if (nijgroup > 1){
-                               #if (APPLY_OPTIMIZATION_FOR_OPTIONAL == 0)      
-                               //Always use left outer join for connecting 
ijgroup
-                               printf("APPLY_OPTIMIZATION_FOR_OPTIONAL \n"); 
-                               //Connect these ijrels by outer joins
-                               for (i = 0; i < (nijgroup - 1); i++){
-                                       edge_ijrels[i] = 
_group_edge_between_two_groups(c, jg, i, ijgroup[i], nnodes_per_ijgroup[i], 
-                                                               ijgroup[i+1], 
nnodes_per_ijgroup[i+1], ijrels[i], ijrels[i+1], 1);
-                               }
-                               connect_groups(nijgroup, ijrels, edge_ijrels);
-
-                               tbl_m_rels[tblIdx] = edge_ijrels[0];    
-
-                               #else
-                               //if the inner group does not have mv prop, 
then use the IFTHENELSE approach
-                               //First: Connect all non-mv prop groups into 
single rel (with the first rel)
-                               sql_rel *non_mv_rep_rel = NULL; //Represent all 
non-mv props. 
-                               int     n_mv_groups = 1;        //Number of 
groups with mv prop
-                                                               //Start from 1 
(the first is the combination of 
-                                                               //all non-mv 
groups)
-                               int     n_non_mv_groups = 0;
-                               int     *old_idx_map = (int *) 
malloc(sizeof(int) * nijgroup); 
-
-                               sql_rel **newijrels = (sql_rel **) 
malloc(sizeof(sql_rel*) * nijgroup);
-
-                               non_mv_rep_rel = ijrels[0]; 
-                               for (i = 1; i < nijgroup; i++){
-                                       if (ingroup_contain_mv[i] == 0){
-                                               n_non_mv_groups++;
-                                               non_mv_rep_rel =  
rdf_rel_simple_combine_with_optional_cols(c->sa, non_mv_rep_rel, ijrels[i]);
-                                       }
-                                       else {
-                                               old_idx_map[n_mv_groups] = i; 
-                                               newijrels[n_mv_groups] = 
ijrels[i]; 
-                                               n_mv_groups++; 
-                                       }
-                               }
-
-                               newijrels[0] = non_mv_rep_rel; 
-                               old_idx_map[0] = 0;     
-                               
-                               if (n_mv_groups > 1){
-                                       //Then, connect with groups having mv 
props
-                                       for (i = 0; i < (n_mv_groups - 1); i++){
-                                               int id1 = old_idx_map[i];
-                                               int id2 = old_idx_map[i+1];
-
-                                               edge_ijrels[i] = 
_group_edge_between_two_groups(c, jg, i, ijgroup[id1], nnodes_per_ijgroup[id1],
-                                                                       
ijgroup[id2], nnodes_per_ijgroup[id2], newijrels[i], newijrels[i+1], 1);
-                                       }
-
-                                       connect_groups(n_mv_groups, newijrels, 
edge_ijrels);    
-                                       tmprel_rdfscan = edge_ijrels[0];
-                               }
-                               else{
-                                       tmprel_rdfscan = newijrels[0];
-                               }
-                               if (n_non_mv_groups > 0){       //Add 
IFTHENELSE project
-                                       sql_rel *tmp_proj_rel = 
rel_project(c->sa, tmprel_rdfscan, sp_rdfscan_proj_exps[tblIdx]);
-                                       tbl_m_rels[tblIdx] = tmp_proj_rel; 
-                               }
-                               else{
-                                       tbl_m_rels[tblIdx] = tmprel_rdfscan;    
                
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to