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