Changeset: 78deaa9d5fe9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=78deaa9d5fe9
Modified Files:
        sql/server/rel_optimizer.c
Branch: DVframework
Log Message:

pmv: project only to columns of enumerated temp table.


diffs (76 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -71,7 +71,7 @@ int enumerate_pkey_space(str** ret, sel_
 int* enumerate_and_insert_into_temp_table(mvc *sql, sel_predicate** sps, int 
num_PERPAD);
 str SQLstatementIntern(Client c, str *expr, str nme, int execute, bit output);
 str VAL2str(ValRecord* valp);
-void check_if_required_derived_metadata_is_already_available(mvc* sql, list* 
list_of_PERPAD, int* is_pkey_to_be_enumerated, int num_pkeys_to_be_enumerated);
+void find_out_pkey_space_for_unavailable_required_derived_metadata(mvc* sql, 
list* list_of_PERPAD, int* is_pkey_to_be_enumerated, int 
num_pkeys_to_be_enumerated);
 
 list *discovered_table_pkeys;
 
@@ -1287,15 +1287,16 @@ str VAL2str(ValRecord* valp)
 /* form and run this kind of query:
  SELECT * FROM tt LEFT OUTER JOIN (SELECT d_st FROM days WHERE d_st >= 
'2013-01-08' AND d_st <= '2013-01-22') AS dd ON tt.d = dd.d_st;*
  */
-void check_if_required_derived_metadata_is_already_available(mvc* sql, list* 
list_of_PERPAD, int* is_pkey_to_be_enumerated, int num_pkeys_to_be_enumerated)
+void find_out_pkey_space_for_unavailable_required_derived_metadata(mvc* sql, 
list* list_of_PERPAD, int* is_pkey_to_be_enumerated, int 
num_pkeys_to_be_enumerated)
 {
        /* Form the sub-query. That has the PERPAD, but like in the original 
query */
        
        int i,j;
        node *n = NULL;
        int num_sp;
-       str s, table_name, buf2, q, schema_name;
-       char temp_column_name = 97;
+       str s, table_name, buf2, q, schema_name, r;
+       char temp_column_name;
+       char temp_column_name_start = 97;
        str temp_table_name = "tt";
        Client cntxt;
                
@@ -1399,8 +1400,33 @@ void check_if_required_derived_metadata_
        
        
        /* form the query */
-       q = "SELECT * FROM %s LEFT OUTER JOIN (%s) AS aa ON ";
+       q = "SELECT ";
        
+       temp_column_name = temp_column_name_start;
+       for (n = list_of_PERPAD->h, i = 0, j = 0; n; n = n->next, i++) 
+       {
+               if(is_pkey_to_be_enumerated[i])
+               {
+                       str buf = (str)GDKmalloc((BUFSIZ + 
num_pkeys_to_be_enumerated * 128)*sizeof(char));
+                       j++;
+                       if(j == num_pkeys_to_be_enumerated)
+                               sprintf(buf, "%s%c ", q, temp_column_name);
+                       else
+                               sprintf(buf, "%s%c, ", q, temp_column_name);
+                       q = GDKstrdup(buf);
+                       GDKfree(buf);
+                       temp_column_name++;
+                       
+               }
+       }
+       
+       r = "FROM %s LEFT OUTER JOIN (%s) AS aa ON ";
+       buf2 = (str)GDKmalloc((strlen(q) + strlen(r))*sizeof(char));
+       sprintf(buf2, "%s%s", q, r);
+       q = GDKstrdup(buf2);
+       GDKfree(buf2);
+       
+       temp_column_name = temp_column_name_start;
        for (n = list_of_PERPAD->h, i = 0, j = 0; n; n = n->next, i++) 
        {
                sel_predicate *sp = n->data;
@@ -6571,7 +6597,7 @@ rel_optimizer(mvc *sql, sql_rel *rel)
                                num_pkeys_to_be_enumerated++;
                }
                
-               check_if_required_derived_metadata_is_already_available(sql, 
list_PERPAD, is_pkey_to_be_enumerated, num_pkeys_to_be_enumerated);
+               
find_out_pkey_space_for_unavailable_required_derived_metadata(sql, list_PERPAD, 
is_pkey_to_be_enumerated, num_pkeys_to_be_enumerated);
                
                sql->q_in_q = 0;
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to