Changeset: 942216d46f3a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=942216d46f3a Added Files: sql/server/rel_rel.c sql/server/rel_rel.h Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_gencode.h sql/backends/monet5/sql_scenario.c sql/common/sql_changeset.c sql/include/sql_relation.h sql/server/Makefile.ag sql/server/rel_distribute.c sql/server/rel_distribute.h sql/server/rel_dump.c sql/server/rel_dump.h sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_optimizer.h sql/server/rel_planner.c sql/server/rel_planner.h sql/server/rel_prop.c sql/server/rel_psm.c sql/server/rel_psm.h sql/server/rel_remote.h sql/server/rel_schema.c sql/server/rel_select.c sql/server/rel_select.h sql/server/rel_semantic.c sql/server/rel_semantic.h sql/server/rel_sequence.c sql/server/rel_trans.c sql/server/rel_updates.c sql/server/rel_updates.h sql/server/sql_atom.c sql/server/sql_atom.h sql/server/sql_env.c sql/server/sql_env.h sql/server/sql_mvc.c sql/server/sql_mvc.h sql/server/sql_parser.h sql/server/sql_semantic.h sql/storage/sql_catalog.c Branch: default Log Message:
split relational operator creation code of into its own file(s) diffs (truncated from 3542 to 300 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -9,6 +9,7 @@ #include "monetdb_config.h" #include "rel_bin.h" +#include "rel_rel.h" #include "rel_exp.h" #include "rel_psm.h" #include "rel_prop.h" diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -26,6 +26,7 @@ #include <rel_optimizer.h> #include <rel_distribute.h> #include <rel_select.h> +#include <rel_rel.h> #include <rel_exp.h> #include <rel_dump.h> #include <rel_bin.h> @@ -349,7 +350,7 @@ SQLshutdown_wrap(Client cntxt, MalBlkPtr str msg; if ((msg = CLTshutdown(cntxt, mb, stk, pci)) == MAL_SUCCEED) { - // administer the shutdown + /* administer the shutdown */ mnstr_printf(GDKstdout, "#%s\n", *getArgReference_str(stk, pci, 0)); } return msg; @@ -2727,7 +2728,7 @@ mvc_result_set_wrap( Client cntxt, MalBl scale = BATdescriptor(scaleId); if( msg || tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale == NULL) goto wrapup_result_set; - // mimick the old rsColumn approach; + /* mimick the old rsColumn approach; */ itertbl = bat_iterator(tbl); iteratr = bat_iterator(atr); itertpe = bat_iterator(tpe); @@ -2747,7 +2748,7 @@ mvc_result_set_wrap( Client cntxt, MalBl if( b) BBPunfix(bid); } - // now sent it to the channel cntxt->fdout + /* now sent it to the channel cntxt->fdout */ if (mvc_export_result(cntxt->sqlcontext, cntxt->fdout, res)) msg = createException(SQL, "sql.resultset", "failed"); wrapup_result_set: @@ -2836,7 +2837,7 @@ mvc_export_table_wrap( Client cntxt, Mal scale = BATdescriptor(scaleId); if( msg || tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale == NULL) goto wrapup_result_set1; - // mimick the old rsColumn approach; + /* mimick the old rsColumn approach; */ itertbl = bat_iterator(tbl); iteratr = bat_iterator(atr); itertpe = bat_iterator(tpe); @@ -2856,7 +2857,7 @@ mvc_export_table_wrap( Client cntxt, Mal if( b) BBPunfix(bid); } - // now select the file channel + /* now select the file channel */ if ( strcmp(filename,"stdout") == 0 ) s= cntxt->fdout; else if ( (s = open_wastream(filename)) == NULL || mnstr_errnr(s)) { @@ -2897,7 +2898,6 @@ mvc_row_result_wrap( Client cntxt, MalBl oid o = 0; BATiter itertbl,iteratr,itertpe; mvc *m = NULL; -// res_table *t= NULL; ptr v; int mtype; BAT *tbl, *atr, *tpe,*len,*scale; @@ -2906,7 +2906,6 @@ mvc_row_result_wrap( Client cntxt, MalBl return msg; if ((msg = checkSQLContext(cntxt)) != NULL) return msg; -// m->results = t = res_table_create(m->session->tr, m->result_id++, pci->argc - (pci->retc+5), 1, m->results, NULL); res = *res_id = mvc_result_table(m, pci->argc - (pci->retc + 5), 1, NULL); tbl = BATdescriptor(tblId); @@ -2916,7 +2915,7 @@ mvc_row_result_wrap( Client cntxt, MalBl scale = BATdescriptor(scaleId); if( tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale == NULL) goto wrapup_result_set; - // mimick the old rsColumn approach; + /* mimick the old rsColumn approach; */ itertbl = bat_iterator(tbl); iteratr = bat_iterator(atr); itertpe = bat_iterator(tpe); @@ -2935,9 +2934,6 @@ mvc_row_result_wrap( Client cntxt, MalBl if (mvc_result_value(m, tblname, colname, tpename, *digits++, *scaledigits++, v, mtype)) throw(SQL, "sql.rsColumn", "failed"); } -// *res_id = t->id; - //if (*res_id < 0) - //msg = createException(SQL, "sql.resultSet", "failed"); if (mvc_export_result(cntxt->sqlcontext, cntxt->fdout, res)) msg = createException(SQL, "sql.resultset", "failed"); wrapup_result_set: @@ -3016,7 +3012,7 @@ mvc_export_row_wrap( Client cntxt, MalBl scale = BATdescriptor(scaleId); if( msg || tbl == NULL || atr == NULL || tpe == NULL || len == NULL || scale == NULL) goto wrapup_result_set; - // mimick the old rsColumn approach; + /* mimick the old rsColumn approach; */ itertbl = bat_iterator(tbl); iteratr = bat_iterator(atr); itertpe = bat_iterator(tpe); @@ -3035,7 +3031,7 @@ mvc_export_row_wrap( Client cntxt, MalBl if (mvc_result_value(m, tblname, colname, tpename, *digits++, *scaledigits++, v, mtype)) throw(SQL, "sql.rsColumn", "failed"); } - // now select the file channel + /* now select the file channel */ if ( strcmp(filename,"stdout") == 0 ) s= cntxt->fdout; else if ( (s = open_wastream(filename)) == NULL || mnstr_errnr(s)) { @@ -4862,7 +4858,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, sz = hashinfo(bn->T->hash); BUNappend(indices, &sz, FALSE); - bitval = 0; // HASHispersistent(bn); + bitval = 0; /* HASHispersistent(bn); */ BUNappend(phash, &bitval, FALSE); sz = IMPSimprintsize(bn); @@ -4937,10 +4933,10 @@ sql_storage(Client cntxt, MalBlkPtr mb, sz += bn->H->vheap ? bn->H->vheap->size : 0; BUNappend(heap, &sz, FALSE); - sz = bn->T->hash && bn->T->hash != (Hash *) 1 ? bn->T->hash->heap->size : 0; // HASHsize() - sz += bn->H->hash && bn->H->hash != (Hash *) 1 ? bn->H->hash->heap->size : 0; // HASHsize() + sz = bn->T->hash && bn->T->hash != (Hash *) 1 ? bn->T->hash->heap->size : 0; /* HASHsize() */ + sz += bn->H->hash && bn->H->hash != (Hash *) 1 ? bn->H->hash->heap->size : 0; /* HASHsize() */ BUNappend(indices, &sz, FALSE); - bitval = 0; // HASHispersistent(bn); + bitval = 0; /* HASHispersistent(bn); */ BUNappend(phash, &bitval, FALSE); sz = IMPSimprintsize(bn); @@ -5045,8 +5041,6 @@ RAstatement2(Client cntxt, MalBlkPtr mb, m->sa = sa_create(); ops = sa_list(m->sa); - //fprintf(stderr, "'%s' %s\n", *sig, *expr); - //fflush(stderr); snprintf(buf, BUFSIZ, "%s %s", *sig, *expr); while (c && *c && !isspace(*c)) { char *vnme = c, *tnme; @@ -5079,12 +5073,8 @@ RAstatement2(Client cntxt, MalBlkPtr mb, if (c) c++; } - //fprintf(stderr, "2: %d %s\n", list_length(ops), *expr); - //fflush(stderr); refs = sa_list(m->sa); rel = rel_read(m, *expr, &pos, refs); - //fprintf(stderr, "3: %d %s\n", list_length(ops), rel2str(m, rel)); - //fflush(stderr); if (!rel) throw(SQL, "sql.register", "Cannot register %s", buf); if (rel) { diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -39,6 +39,7 @@ #include <rel_select.h> #include <rel_optimizer.h> #include <rel_prop.h> +#include <rel_rel.h> #include <rel_exp.h> #include <rel_bin.h> #include <rel_dump.h> @@ -488,6 +489,24 @@ static int return 0; } +static str +rel2str( mvc *sql, sql_rel *rel) +{ + buffer *b; + stream *s = buffer_wastream(b = buffer_create(1024), "rel_dump"); + list *refs = sa_list(sql->sa); + char *res = NULL; + + rel_print_refs(sql, s, rel, 0, refs, 0); + rel_print_(sql, s, rel, 0, refs, 0); + mnstr_printf(s, "\n"); + res = buffer_get_buf(b); + buffer_destroy(b); + mnstr_destroy(s); + return res; +} + + /* stub and remote function */ static int _create_relational_remote(mvc *m, char *mod, char *name, sql_rel *rel, stmt *call, prop *prp) @@ -3109,3 +3128,62 @@ backend_create_subaggr(backend *be, sql_ { return backend_create_func(be, f->aggr, f->res, NULL); } + +void +_rel_print(mvc *sql, sql_rel *rel) +{ + list *refs = sa_list(sql->sa); + rel_print_refs(sql, GDKstdout, rel, 0, refs, 1); + rel_print_(sql, GDKstdout, rel, 0, refs, 1); + mnstr_printf(GDKstdout, "\n"); +} + +void +rel_print(mvc *sql, sql_rel *rel, int depth) +{ + list *refs = sa_list(sql->sa); + size_t pos; + size_t nl = 0; + size_t len = 0, lastpos = 0; + stream *fd = sql->scanner.ws; + stream *s; + buffer *b = buffer_create(16364); /* hopefully enough */ + if (!b) + return; /* signal somehow? */ + s = buffer_wastream(b, "SQL Plan"); + if (!s) { + buffer_destroy(b); + return; /* signal somehow? */ + } + + rel_print_refs(sql, s, rel, depth, refs, 1); + rel_print_(sql, s, rel, depth, refs, 1); + 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 */ + + /* craft a semi-professional header */ + mnstr_printf(fd, "&1 0 " SZFMT " 1 " SZFMT "\n", /* type id rows columns tuples */ + nl, nl); + mnstr_printf(fd, "%% .plan # table_name\n"); + mnstr_printf(fd, "%% rel # name\n"); + mnstr_printf(fd, "%% clob # type\n"); + mnstr_printf(fd, "%% " SZFMT " # length\n", len - 1 /* remove = */); + + /* output the data */ + mnstr_printf(fd, "%s\n", b->buf + 1 /* omit starting \n */); + + mnstr_close(s); + mnstr_destroy(s); + buffer_destroy(b); +} + diff --git a/sql/backends/monet5/sql_gencode.h b/sql/backends/monet5/sql_gencode.h --- a/sql/backends/monet5/sql_gencode.h +++ b/sql/backends/monet5/sql_gencode.h @@ -25,4 +25,7 @@ sql5_export int monet5_resolve_function( sql5_export int backend_create_func(backend *be, sql_func *f, list *restypes, list *ops); sql5_export int monet5_create_relational_function(mvc *m, char *mod, char *name, sql_rel *rel, stmt *call, int inline_func); +extern void rel_print(mvc *sql, sql_rel *rel, int depth); +extern void _rel_print(mvc *sql, sql_rel *rel); + #endif /* _SQL2MAL_H */ diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -1267,7 +1267,7 @@ recompilequery: trimMalBlk(mb); chkProgram(c->fdout, c->nspace, mb); - addOptimizers(c, mb, "default_pipe"); + addOptimizers(c, mb, "default_pipe"); // TODO change to active pipe! msg = optimizeMALBlock(c, mb); if (msg != MAL_SUCCEED) { sqlcleanup(m, err); diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c --- a/sql/common/sql_changeset.c +++ b/sql/common/sql_changeset.c @@ -9,12 +9,6 @@ #include "monetdb_config.h" #include "sql_catalog.h" -int -base_key( sql_base *b ) -{ - return hash_key(b->name); -} - _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list