Changeset: 39a107a83ec8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39a107a83ec8 Modified Files: sql/server/rel_optimizer.c Branch: DVframework Log Message:
pmv: find the pkey bound to dataview independence of the order of predicates. diffs (88 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 @@ -73,7 +73,7 @@ str SQLstatementIntern(Client c, str *ex str VAL2str(ValRecord* valp); int 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); void compute_and_insert_unavailable_required_derived_metadata(mvc* sql, sel_predicate** sps, int num_PERPAD, int* is_pkey_to_be_enumerated, int num_pkeys_to_be_enumerated); -str* get_pkey_bound_to_dataview(str schema_name, str dmdt_name); +str* get_pkey_bound_to_dataview(str schema_name, str dmdt_name, sel_predicate** sps, int num_PERPAD); str form_pkey_select_str(sel_predicate** sps, int num_PERPAD, str* pkey_bound_to_dataview, str* select_str_per_pkey); str get_non_pkey_select_str(str schema_name, str dmdt_name); void prepare_pmv(mvc* sql, sql_rel* ret); @@ -1661,27 +1661,47 @@ int find_out_pkey_space_for_unavailable_ return 1; } -str* get_pkey_bound_to_dataview(str schema_name, str dmdt_name) +str* get_pkey_bound_to_dataview(str schema_name, str dmdt_name, sel_predicate** sps, int num_PERPAD) { str* ret; + int i; if(strcmp(schema_name, "mseed") == 0 && strcmp(dmdt_name, "windowmetadata") == 0) { ret = (str*)GDKmalloc(3*sizeof(str)); - ret[0] = "station"; - ret[1] = "channel"; - ret[2] = "1"; + for(i = 0; i < num_PERPAD; i++) + { + if(strcmp(sps[i]->column->base.name, "window_station") == 0) + ret[i] = "station"; + else if(strcmp(sps[i]->column->base.name, "window_channel") == 0) + ret[i] = "channel"; + else if(strcmp(sps[i]->column->base.name, "window_start_ts") == 0) + ret[i] = "1"; + else if(strcmp(sps[i]->column->base.name, "window_unit") == 0) + ret[i] = NULL; + else ret[i] = NULL; + } return ret; } if(strcmp(schema_name, "mseed") == 0 && strcmp(dmdt_name, "psdmetadata") == 0) { - ret = (str*)GDKmalloc(6*sizeof(str)); - ret[0] = "network"; - ret[1] = "station"; - ret[2] = "location"; - ret[3] = "channel"; - ret[4] = "1"; - ret[5] = NULL; + ret = (str*)GDKmalloc(5*sizeof(str)); + for(i = 0; i < num_PERPAD; i++) + { + if(strcmp(sps[i]->column->base.name, "psd_network") == 0) + ret[i] = "network"; + else if(strcmp(sps[i]->column->base.name, "psd_station") == 0) + ret[i] = "station"; + else if(strcmp(sps[i]->column->base.name, "psd_location") == 0) + ret[i] = "location"; + else if(strcmp(sps[i]->column->base.name, "psd_channel") == 0) + ret[i] = "channel"; + else if(strcmp(sps[i]->column->base.name, "psd_start_ts") == 0) + ret[i] = "1"; + else if(strcmp(sps[i]->column->base.name, "psd_freq") == 0) + ret[i] = NULL; + else ret[i] = NULL; + } return ret; } return NULL; @@ -1773,7 +1793,7 @@ void compute_and_insert_unavailable_requ pkey_predicates_equal_to = (str*)GDKmalloc(num_PERPAD*sizeof(str)); select_str_per_pkey = (str*)GDKmalloc(num_PERPAD*sizeof(str)); - pkey_bound_to_dataview = get_pkey_bound_to_dataview(schema_name, dmdt_name); + pkey_bound_to_dataview = get_pkey_bound_to_dataview(schema_name, dmdt_name, sps, num_PERPAD); temp_column_name = temp_column_name_start; for(i = 0; i < num_PERPAD; i++) @@ -1824,7 +1844,6 @@ void compute_and_insert_unavailable_requ pkey_predicates_equal_to[i] = GDKstrdup(VAL2str(sps[i]->values[0])); } } - } /* preparing the non_time_pkey_predicates_str */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list