MonetDB: default - Got rid of the ht_lock field.
Changeset: eac76cdd246d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/eac76cdd246d Modified Files: gdk/gdk_system.h sql/common/sql_list.c sql/common/sql_types.c sql/include/sql_list.h sql/server/sql_semantic.c sql/storage/sql_catalog.c sql/storage/store.c Branch: default Log Message: Got rid of the ht_lock field. The one place where there was potentially a need for the lock has been changed so that no lock is needed anymore. diffs (truncated from 423 to 300 lines): diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h --- a/gdk/gdk_system.h +++ b/gdk/gdk_system.h @@ -230,51 +230,36 @@ gdk_export void MT_thread_set_qry_ctx(Qr TRC_DEBUG(TEM, "Locking %s complete\n", (l)->name); \ } while (0) -#define _DBG_LOCK_INIT(l) \ - do {\ - (l)->count = 0; \ - ATOMIC_INIT(&(l)->contention, 0); \ - ATOMIC_INIT(&(l)->sleep, 0);\ - (l)->locker = NULL; \ - (l)->thread = NULL; \ - /* if name starts with "sa_" don't link in GDKlocklist */ \ - /* since the lock is in memory that is governed by the */ \ - /* SQL storage allocator, and hence we have no control */ \ - /* over when the lock is destroyed and the memory freed */ \ - if (strncmp((l)->name, "sa_", 3) != 0) {\ - while (ATOMIC_TAS(&GDKlocklistlock) != 0) \ - ; \ - if (GDKlocklist)\ - GDKlocklist->prev = (l);\ - (l)->next = GDKlocklist;\ - (l)->prev = NULL; \ - GDKlocklist = (l); \ - ATOMIC_CLEAR(&GDKlocklistlock); \ - } else {\ - (l)->next = NULL; \ - (l)->prev = NULL; \ - } \ +#define _DBG_LOCK_INIT(l) \ + do {\ + (l)->count = 0; \ + ATOMIC_INIT(&(l)->contention, 0); \ + ATOMIC_INIT(&(l)->sleep, 0);\ + (l)->locker = NULL; \ + (l)->thread = NULL; \ + while (ATOMIC_TAS(&GDKlocklistlock) != 0) \ + ; \ + if (GDKlocklist)\ + GDKlocklist->prev = (l);\ + (l)->next = GDKlocklist;\ + (l)->prev = NULL; \ + GDKlocklist = (l); \ + ATOMIC_CLEAR(&GDKlocklistlock); \ } while (0) -#define _DBG_LOCK_DESTROY(l) \ - do {\ - /* if name starts with "sa_" don't link in GDKlocklist */ \ - /* since the lock is in memory that is governed by the */ \ - /* SQL storage allocator, and hence we have no control */ \ - /* over when the lock is destroyed and the memory freed */ \ - if (strncmp((l)->name, "sa_", 3) != 0) {\ - while (ATOMIC_TAS(&GDKlocklistlock) != 0) \ - ; \ - if ((l)->next) \ - (l)->next->prev = (l)->prev;\ - if ((l)->prev) \ - (l)->prev->next = (l)->next;\ - else if (GDKlocklist == (l))\ - GDKlocklist = (l)->next;\ - ATOMIC_CLEAR(&GDKlocklistlock); \ - ATOMIC_DESTROY(&(l)->contention); \ - ATOMIC_DESTROY(&(l)->sleep);\ - }
MonetDB: default - Check MAL recursive calls by tag at query que...
Changeset: 7567eee12001 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7567eee12001 Modified Files: monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_runtime.c sql/test/SQLancer/Tests/sqlancer19.SQL.py Branch: default Log Message: Check MAL recursive calls by tag at query queue, so it doesn't create issues when multiple complex function calls are done by multiple dataflow workers at the same time diffs (118 lines): diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -751,6 +751,8 @@ str runMALsequence(Client cntxt, MalBlkP nstk->stkdepth = nstk->stksize + stk->stkdepth; nstk->calldepth = stk->calldepth + 1; nstk->up = stk; + /* inherit tag, because it will be used when doing profiling */ + nstk->tag = stk->tag; if (nstk->calldepth > 256) { ret= createException(MAL, "mal.interpreter", MAL_CALLDEPTH_FAIL); GDKfree(nstk); diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c --- a/monetdb5/mal/mal_runtime.c +++ b/monetdb5/mal/mal_runtime.c @@ -222,16 +222,13 @@ runtimeProfileInit(Client cntxt, MalBlkP if (stk->up) { i = qtail; while (i != qhead) { - if (QRYqueue[i].mb && QRYqueue[i].stk == stk->up) { - QRYqueue[i].stk = stk; - mb->tag = stk->tag = qtag++; + if (QRYqueue[i].tag == stk->tag) { MT_lock_unset(&mal_delayLock); return; } if (++i >= qsize) i = 0; } -// assert(0); } i=qtail; while (i != qhead){ @@ -257,7 +254,7 @@ runtimeProfileInit(Client cntxt, MalBlkP // add new invocation cntxt->idle = 0; QRYqueue[qhead].mb = mb; - QRYqueue[qhead].tag = qtag++; + QRYqueue[qhead].tag = stk->tag = mb->tag = qtag++; QRYqueue[qhead].stk = stk; // for status pause 'p'/running '0'/ quiting 'q' QRYqueue[qhead].finished = 0; QRYqueue[qhead].start = time(0); @@ -273,7 +270,6 @@ runtimeProfileInit(Client cntxt, MalBlkP QRYqueue[qhead].status = "running"; QRYqueue[qhead].cntxt = cntxt; QRYqueue[qhead].ticks = GDKusec(); - stk->tag = mb->tag = QRYqueue[qhead].tag; advanceQRYqueue(); MT_lock_unset(&mal_delayLock); } @@ -292,13 +288,11 @@ runtimeProfileFinish(Client cntxt, MalBl MT_lock_set(&mal_delayLock); i=qtail; while (i != qhead){ - if ( QRYqueue[i].stk == stk){ - if( stk->up){ - // recursive call - QRYqueue[i].stk = stk->up; - mb->tag = stk->tag; - found = true; - break; + if (QRYqueue[i].tag == stk->tag) { + if (stk->up){ + // recursive call, just return + MT_lock_unset(&mal_delayLock); + return; } QRYqueue[i].status = "finished"; QRYqueue[i].finished = time(0); @@ -315,8 +309,7 @@ runtimeProfileFinish(Client cntxt, MalBl found = true; break; } - i++; - if ( i >= qsize) + if (++i >= qsize) i = 0; } @@ -324,6 +317,7 @@ runtimeProfileFinish(Client cntxt, MalBl // finished query is not found, we want to print some informational // messages for debugging. if (!found) { + assert(0); TRC_INFO_IF(MAL_SERVER) { TRC_INFO_ENDIF(MAL_SERVER, "runtimeProfilerFinish: stk (%p) not found in QRYqueue", stk); i = qtail; @@ -335,8 +329,7 @@ runtimeProfileFinish(Client cntxt, MalBl QRYqueue[i].username, QRYqueue[i].start, QRYqueue[i].status, QRYqueue[i].query); } - i++; - if ( i >= qsize) + if (++i >= qsize) i = 0; } } diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py b/sql/test/S
MonetDB: default - Use macro
Changeset: 2289647476dd for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2289647476dd Modified Files: sql/server/rel_unnest.c Branch: default Log Message: Use macro diffs (25 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2584,12 +2584,6 @@ rewrite_rank(visitor *v, sql_rel *rel, s return e; } -static bool -exp_is_values(sql_exp *e) -{ - return is_atom(e->type) && e->f; -} - static sql_rel * rel_union_exps(mvc *sql, sql_exp **l, list *vals, int is_tuple) { @@ -2627,7 +2621,7 @@ rel_union_exps(mvc *sql, sql_exp **l, li sq->nrcols = list_length(sq->exps); /* union a project[(values(a),..,(b),(c)] with freevars */ if (sq->card > CARD_ATOM && rel_has_freevar(sql, sq) && is_project(sq->op) && - !sq->l && sq->nrcols == 1 && exp_is_values(sq->exps->h->data)) { + !sq->l && sq->nrcols == 1 && is_values((sql_exp*)sq->exps->h->data)) { /* needs check on projection */ sql_exp *vals = sq->exps->h->data; if (!(sq = rel_union_exps(sql, l, exp_get_values(vals), is_tuple))) ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
mailing list software updated
I have updated the mailing list software on monetdb.org from mailman2 to mailman3. This means that the old accounts for managing list subscriptions do not work anymore. In order to manage your subscription using a web interface, you will need to create a new account at https://www.monetdb.org/lists/. You can associate multiple email addresses to this account and manage all your subscriptions at monetdb.org using a single account, even if they use different email addresses. Unlike in mailman2, in mailman3 the passwords are not saved in plaintext, and therefore they cannot be sent as a monthly reminder. The old web addresses (https://mail.monetdb.org/, https://www.monetdb.org/mailman/ and https://www.monetdb.org/pipermail/) now all get redirected to the new interface. -- Sjoerd Mullender ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: embedded_mapi - New branch: embedded_mapi.
Changeset: 20c8bc9c3f09 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/20c8bc9c3f09 Branch: embedded_mapi Log Message: New branch: embedded_mapi. ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: embedded_mapi - Whitespace.
Changeset: 3241e5edad88 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3241e5edad88 Modified Files: tools/monetdbe/monetdbe.c Branch: embedded_mapi Log Message: Whitespace. diffs (12 lines): diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -617,7 +617,7 @@ monetdbe_startup(monetdbe_database_inter goto cleanup; } -with_mapi_server = false; + with_mapi_server = false; if (monetdbe_embedded_initialized) { set_error(mdbe, createException(MAL, "monetdbe.monetdbe_startup", "MonetDBe is already initialized")); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: embedded_mapi - Don't do credential checks for embedded...
Changeset: 206951aa371c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/206951aa371c Modified Files: monetdb5/mal/mal_session.c Branch: embedded_mapi Log Message: Don't do credential checks for embedded mapi (for now). diffs (39 lines): diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c --- a/monetdb5/mal/mal_session.c +++ b/monetdb5/mal/mal_session.c @@ -273,21 +273,24 @@ MSscheduleClient(str command, str challe return; } else { str err; - oid uid; + oid uid = 0; sabdb *stats = NULL; - /* access control: verify the credentials supplied by the user, -* no need to check for database stuff, because that is done per -* database itself (one gets a redirect) */ - err = AUTHcheckCredentials(&uid, NULL, user, passwd, challenge, algo); - if (err != MAL_SUCCEED) { - mnstr_printf(fout, "!%s\n", err); - exit_streams(fin, fout); - freeException(err); - GDKfree(command); - return; + if (!GDKembedded()) { + /* access control: verify the credentials supplied by the user, + * no need to check for database stuff, because that is done per + * database itself (one gets a redirect) */ + err = AUTHcheckCredentials(&uid, NULL, user, passwd, challenge, algo); + if (err != MAL_SUCCEED) { + mnstr_printf(fout, "!%s\n", err); + exit_streams(fin, fout); + freeException(err); + GDKfree(command); + return; + } } + if (!GDKinmemory(0) && !GDKembedded()) { err = msab_getMyStatus(&stats); if (err != NULL) { ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Partly revert commit 7567eee12001 I can't fig...
Changeset: 2fd38e48c453 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2fd38e48c453 Modified Files: monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_runtime.c Branch: default Log Message: Partly revert commit 7567eee12001 I can't figure out the query queue with recursive calls when multiple dataflow workers are present, but it's broken for sure diffs (40 lines): diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -751,8 +751,6 @@ str runMALsequence(Client cntxt, MalBlkP nstk->stkdepth = nstk->stksize + stk->stkdepth; nstk->calldepth = stk->calldepth + 1; nstk->up = stk; - /* inherit tag, because it will be used when doing profiling */ - nstk->tag = stk->tag; if (nstk->calldepth > 256) { ret= createException(MAL, "mal.interpreter", MAL_CALLDEPTH_FAIL); GDKfree(nstk); diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c --- a/monetdb5/mal/mal_runtime.c +++ b/monetdb5/mal/mal_runtime.c @@ -222,7 +222,9 @@ runtimeProfileInit(Client cntxt, MalBlkP if (stk->up) { i = qtail; while (i != qhead) { - if (QRYqueue[i].tag == stk->tag) { + if (QRYqueue[i].mb && QRYqueue[i].stk == stk->up) { + QRYqueue[i].stk = stk; + mb->tag = stk->tag = qtag++; MT_lock_unset(&mal_delayLock); return; } @@ -288,9 +290,11 @@ runtimeProfileFinish(Client cntxt, MalBl MT_lock_set(&mal_delayLock); i=qtail; while (i != qhead){ - if (QRYqueue[i].tag == stk->tag) { + if (QRYqueue[i].stk == stk){ if (stk->up){ - // recursive call, just return + // recursive call + QRYqueue[i].stk = stk->up; + mb->tag = stk->tag; MT_lock_unset(&mal_delayLock); return; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
monetdb-java: default - Added recognition of 'xml' type.
Changeset: dd9b4fb14256 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/dd9b4fb14256 Modified Files: ChangeLog src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java src/main/java/org/monetdb/jdbc/MonetDriver.java.in src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java src/main/java/org/monetdb/jdbc/MonetResultSet.java tests/JDBC_API_Tester.java Branch: default Log Message: Added recognition of 'xml' type. Use default mapping to Types.VARCHAR for easy and fast (as java.lang.String) retrieval, display and setting data of columns of type 'xml'. diffs (136 lines): diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog file for monetdb-java # This file is updated with Maddlog +* Thu Feb 10 2022 Martin van Dinther +- Added recognition of 'xml' type. Use default mapping to Types.VARCHAR for + easy and fast (as java.lang.String) retrieval, display and setting data of + columns of type 'xml'. + * Thu Jan 27 2022 Martin van Dinther - Compiled and released new jar files: monetdb-jdbc-3.2.jre8.jar, monetdb-mcl-1.21.jre8.jar and jdbcclient.jre8.jar diff --git a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java --- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java +++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java @@ -2964,10 +2964,10 @@ public class MonetDatabaseMetaData "cast(").append(MonetDriver.getSQLTypeMap("\"sqlname\"")).append(" AS int) AS \"DATA_TYPE\", " + "\"digits\" AS \"PRECISION\", " + // note that when radix is 2 the precision shows the number of bits "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval') THEN " + - " WHEN \"sqlname\" IN ('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob') THEN \"sqlname\"||' '''" + + " WHEN \"sqlname\" IN ('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml') THEN \"sqlname\"||' '''" + " ELSE NULL END AS varchar(16)) AS \"LITERAL_PREFIX\", " + "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval'" + - ",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob') THEN " + + ",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml') THEN " + " ELSE NULL END AS varchar(2)) AS \"LITERAL_SUFFIX\", " + "CASE WHEN \"sqlname\" IN ('char','varchar') THEN 'max length'" + " WHEN \"sqlname\" = 'decimal' THEN 'precision, scale'" + @@ -2975,8 +2975,8 @@ public class MonetDatabaseMetaData " ELSE NULL END AS \"CREATE_PARAMS\", " + "cast(CASE WHEN \"systemname\" = 'oid' THEN ").append(DatabaseMetaData.typeNoNulls) .append(" ELSE ").append(DatabaseMetaData.typeNullable).append(" END AS smallint) AS \"NULLABLE\", " + - "CASE WHEN \"systemname\" IN ('str','json','url') THEN true ELSE false END AS \"CASE_SENSITIVE\", " + - "cast(CASE WHEN \"systemname\" IN ('str','inet','json','url','uuid') THEN ").append(DatabaseMetaData.typeSearchable) + "CASE WHEN \"systemname\" IN ('str','json','url','xml') THEN true ELSE false END AS \"CASE_SENSITIVE\", " + + "cast(CASE WHEN \"systemname\" IN ('str','inet','json','url','uuid','xml') THEN ").append(DatabaseMetaData.typeSearchable) .append(" ELSE ").append(DatabaseMetaData.typePredBasic).append(" END AS smallint) AS \"SEARCHABLE\", " + "CASE WHEN \"sqlname\" IN ('tinyint','smallint','int','bigint','hugeint','decimal','real','double'" + ",'day_interval','month_interval','sec_interval') THEN false ELSE true END AS \"UNSIGNED_ATTRIBUTE\", " + @@ -3261,8 +3261,10 @@ public class MonetDatabaseMetaData " WHEN 'json' THEN 'java.lang.String'" + " WHEN 'url' THEN 'org.monetdb.jdbc.types.URL'" + " WHEN 'uuid' THEN 'java.lang.String'" + + // next UDT only when "CREATE TYPE xml EXTERNAL NAME xml;" is executed + " WHEN 'xml' THEN 'java.lang.String'" + " ELSE 'java.lang.Object' END AS \"CLASS_NAME\", " + -
MonetDB: Jan2022 - when inserting complex rows, convert into a u...
Changeset: ea0b21aeaf5b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ea0b21aeaf5b Modified Files: sql/server/rel_updates.c Branch: Jan2022 Log Message: when inserting complex rows, convert into a union of rows. diffs (66 lines): diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -322,6 +322,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ sql_exp **inserts = insert_exp_array(sql, t, &len); list *exps = NULL; node *n, *m; + bool has_rel = false, all_values = true; if (r->exps) { if (!copy) { @@ -333,6 +334,8 @@ rel_inserts(mvc *sql, sql_table *t, sql_ return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' specified more than once", action, c->base.name); if (!(inserts[c->colnr] = exp_check_type(sql, &c->type, r, e, type_equal))) return NULL; + has_rel = (has_rel || exp_has_rel(e)); + all_values &= is_values(e); } } else { for (m = collist->h; m; m = m->next) { @@ -344,6 +347,8 @@ rel_inserts(mvc *sql, sql_table *t, sql_ if (inserts[c->colnr]) return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' specified more than once", action, c->base.name); inserts[c->colnr] = exp_ref(sql, e); + has_rel = has_rel || exp_has_rel(e); + all_values &= is_values(e); } } } @@ -384,10 +389,32 @@ rel_inserts(mvc *sql, sql_table *t, sql_ assert(inserts[c->colnr]); } } - /* now rewrite project exps in proper table order */ - exps = new_exp_list(sql->sa); - for (i = 0; isa, NULL, sa_list(sql->sa)); + for (m = ol_first_node(t->columns); m; m = m->next) { + sql_column *c = m->data; + sql_exp *e = inserts[c->colnr]; + assert(is_values(e)); + list *vals = e->f; + append(p->exps, list_fetch(vals, j)); + } + if (c) { + c = rel_setop(sql->sa, c, p, op_union); + rel_setop_set_exps(sql, c, rel_projections(sql, c->l, NULL, 1, 1), false); + } else + c = p; + } + r->l = c; + exps = rel_projections(sql, r->l, NULL, 1, 1); + } else { + /* now rewrite project exps in proper table order */ + exps = new_exp_list(sql->sa); + for (i = 0; i
MonetDB: Jan2022 - Fix some MAL instructions.
Changeset: a13b2b280255 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/a13b2b280255 Modified Files: monetdb5/mal/mal_instruction.c monetdb5/optimizer/opt_dict.c monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_multiplex.c monetdb5/optimizer/opt_pushselect.c sql/backends/monet5/sql_statement.c Branch: Jan2022 Log Message: Fix some MAL instructions. diffs (151 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -1265,10 +1265,10 @@ addArgument(MalBlkPtr mb, InstrPtr p, in if (p->argc == p->maxarg) { pn = extendInstruction(mb, p); #ifndef NDEBUG - if (p != pn) { - for (int i = mb->stop - 1; i >= 0; i--) - assert(mb->stmt[i] != p); - } + if (p != pn) { + for (int i = mb->stop - 1; i >= 0; i--) + assert(mb->stmt[i] != p); + } #endif p = pn; if (mb->errors) diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c --- a/monetdb5/optimizer/opt_dict.c +++ b/monetdb5/optimizer/opt_dict.c @@ -126,26 +126,26 @@ OPTdictImplementation(Client cntxt, MalB InstrPtr r = newInstructionArgs(mb, dictRef, thetaselectRef, 6); getArg(r, 0) = getArg(p, 0); - addArgument(mb, r, varisdict[k]); - addArgument(mb, r, getArg(p, 2)); /* cand */ - addArgument(mb, r, vardictvalue[k]); - addArgument(mb, r, getArg(p, 3)); /* val */ - addArgument(mb, r, getArg(p, 4)); /* op */ + r = addArgument(mb, r, varisdict[k]); + r = addArgument(mb, r, getArg(p, 2)); /* cand */ + r = addArgument(mb, r, vardictvalue[k]); + r = addArgument(mb, r, getArg(p, 3)); /* val */ + r = addArgument(mb, r, getArg(p, 4)); /* op */ pushInstruction(mb,r); } else if (getFunctionId(p) == selectRef && p->argc == 9) { /* select (c, s, l, h, li, hi, anti, unknown ) */ InstrPtr r = newInstructionArgs(mb, dictRef, selectRef, 10); getArg(r, 0) = getArg(p, 0); - addArgument(mb, r, varisdict[k]); - addArgument(mb, r, getArg(p, 2)); /* cand */ - addArgument(mb, r, vardictvalue[k]); - addArgument(mb, r, getArg(p, 3)); /* l */ - addArgument(mb, r, getArg(p, 4)); /* h */ - addArgument(mb, r, getArg(p, 5)); /* li */ - addArgument(mb, r, getArg(p, 6)); /* hi */ - addArgument(mb, r, getArg(p, 7)); /* anti */ - addArgument(mb, r, getArg(p, 8)); /* unknown */ + r = addArgument(mb, r, varisdict[k]); + r = addArgument(mb, r, getArg(p, 2)); /* cand */ + r = addArgument(mb, r, vardictvalue[k]); + r = addArgument(mb, r, getArg(p, 3)); /* l */ + r = addArgument(mb, r, getArg(p, 4)); /* h */ + r = addArgument(mb, r, getArg(p, 5)); /* li */ + r = addArgument(mb, r, getArg(p, 6)); /* hi */ + r = addArgument(mb, r, getArg(p, 7)); /* anti */ + r = addArgument(mb, r, getArg(p, 8)); /* unknown */ pushInstruction(mb,r); } else { /* pos = select(col, cand, l, h, ...) with col = dict.decompress(o,u) @@ -164,13 +164,13 @@ OPTdictImplementation(Client cntxt, MalB int tpe = getVarType(mb, varisdict
MonetDB: default - A relation replacement is needed when removin...
Changeset: cbd49a3e2b19 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/cbd49a3e2b19 Modified Files: sql/server/rel_unnest.c Branch: default Log Message: A relation replacement is needed when removing function expressions from grouping relations diffs (18 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2189,8 +2189,12 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel } n = next; } - if (!list_empty(projs)) - rel = rel_project(sql->sa, rel, list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL)); + if (!list_empty(projs)) { + /* the grouping relation may have more than 1 reference, a replacement is needed */ + list *nexps = list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL); + rel = rel_inplace_project(sql->sa, rel, rel_dup(rel->l), nexps); + rel->card = exps_card(nexps); + } } return rel; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Merged with Jan2022
Changeset: a686ed10439a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/a686ed10439a Modified Files: sql/backends/monet5/sql_statement.c sql/server/rel_updates.c Branch: default Log Message: Merged with Jan2022 diffs (217 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -1265,10 +1265,10 @@ addArgument(MalBlkPtr mb, InstrPtr p, in if (p->argc == p->maxarg) { pn = extendInstruction(mb, p); #ifndef NDEBUG - if (p != pn) { - for (int i = mb->stop - 1; i >= 0; i--) - assert(mb->stmt[i] != p); - } + if (p != pn) { + for (int i = mb->stop - 1; i >= 0; i--) + assert(mb->stmt[i] != p); + } #endif p = pn; if (mb->errors) diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c --- a/monetdb5/optimizer/opt_dict.c +++ b/monetdb5/optimizer/opt_dict.c @@ -126,26 +126,26 @@ OPTdictImplementation(Client cntxt, MalB InstrPtr r = newInstructionArgs(mb, dictRef, thetaselectRef, 6); getArg(r, 0) = getArg(p, 0); - addArgument(mb, r, varisdict[k]); - addArgument(mb, r, getArg(p, 2)); /* cand */ - addArgument(mb, r, vardictvalue[k]); - addArgument(mb, r, getArg(p, 3)); /* val */ - addArgument(mb, r, getArg(p, 4)); /* op */ + r = addArgument(mb, r, varisdict[k]); + r = addArgument(mb, r, getArg(p, 2)); /* cand */ + r = addArgument(mb, r, vardictvalue[k]); + r = addArgument(mb, r, getArg(p, 3)); /* val */ + r = addArgument(mb, r, getArg(p, 4)); /* op */ pushInstruction(mb,r); } else if (getFunctionId(p) == selectRef && p->argc == 9) { /* select (c, s, l, h, li, hi, anti, unknown ) */ InstrPtr r = newInstructionArgs(mb, dictRef, selectRef, 10); getArg(r, 0) = getArg(p, 0); - addArgument(mb, r, varisdict[k]); - addArgument(mb, r, getArg(p, 2)); /* cand */ - addArgument(mb, r, vardictvalue[k]); - addArgument(mb, r, getArg(p, 3)); /* l */ - addArgument(mb, r, getArg(p, 4)); /* h */ - addArgument(mb, r, getArg(p, 5)); /* li */ - addArgument(mb, r, getArg(p, 6)); /* hi */ - addArgument(mb, r, getArg(p, 7)); /* anti */ - addArgument(mb, r, getArg(p, 8)); /* unknown */ + r = addArgument(mb, r, varisdict[k]); + r = addArgument(mb, r, getArg(p, 2)); /* cand */ + r = addArgument(mb, r, vardictvalue[k]); + r = addArgument(mb, r, getArg(p, 3)); /* l */ + r = addArgument(mb, r, getArg(p, 4)); /* h */ + r = addArgument(mb, r, getArg(p, 5)); /* li */ + r = addArgument(mb, r, getArg(p, 6)); /* hi */ + r = addArgument(mb, r, getArg(p, 7)); /* anti */ + r = addArgument(mb, r, getArg(p, 8)); /* unknown */ pushInstruction(mb,r); } else { /* pos = select(col, cand, l, h, ...) with col = dict.decompress(o,u) @@ -164,13 +164,13 @@ OPTdictImplementation(Client cntxt, MalB int tpe = getVarType(mb, varisdict[k]); InstrPtr s = newInstructionArgs(mb, dictRef, putName("convert"), 3); getArg(s,
MonetDB: Jan2022 - Backport changeset cbd49a3e2b19 into Jan2022 ...
Changeset: 3193c9417d1f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3193c9417d1f Modified Files: sql/server/rel_unnest.c Branch: Jan2022 Log Message: Backport changeset cbd49a3e2b19 into Jan2022 (I added this rewrite there) diffs (18 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2113,8 +2113,12 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel } n = next; } - if (!list_empty(projs)) - rel = rel_project(sql->sa, rel, list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL)); + if (!list_empty(projs)) { + /* the grouping relation may have more than 1 reference, a replacement is needed */ + list *nexps = list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL); + rel = rel_inplace_project(sql->sa, rel, rel_dup(rel->l), nexps); + rel->card = exps_card(nexps); + } } return rel; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Jan2022 - Don't forget to set relation as processed
Changeset: 0d44229e63e7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0d44229e63e7 Modified Files: sql/server/rel_updates.c Branch: Jan2022 Log Message: Don't forget to set relation as processed diffs (11 lines): diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -404,6 +404,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ if (c) { c = rel_setop(sql->sa, c, p, op_union); rel_setop_set_exps(sql, c, rel_projections(sql, c->l, NULL, 1, 1), false); + set_processed(c); } else c = p; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - More missing processed flags
Changeset: 5be57f80534e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5be57f80534e Modified Files: sql/server/rel_dump.c sql/server/rel_optimizer.c sql/server/rel_unnest.c Branch: default Log Message: More missing processed flags diffs (145 lines): diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c --- a/sql/server/rel_dump.c +++ b/sql/server/rel_dump.c @@ -1945,6 +1945,7 @@ rel_read(mvc *sql, char *r, int *pos, li return sql_error(sql, -1, SQLSTATE(42000) "Table returning function: the number of output parameters don't match the table ones relation outputs: %d != function outputs: %d\n", list_length(outputs), list_length(sf->func->res)); rel = rel_table_func(sql->sa, lrel, tudf, outputs, TABLE_FROM_RELATION); + set_processed(rel); } else { if (r[*pos] != ')') sql_error(sql, -1, SQLSTATE(42000) "Table: missing ')'\n"); @@ -1994,6 +1995,7 @@ rel_read(mvc *sql, char *r, int *pos, li if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0, 1))) return NULL; rel = rel_topn(sql->sa, nrel, exps); + set_processed(rel); } break; case 'p': @@ -2015,12 +2017,11 @@ rel_read(mvc *sql, char *r, int *pos, li if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0, 1))) return NULL; rel = rel_project(sql->sa, nrel, exps); + set_processed(rel); /* order by ? */ - if (r[*pos] == '[') { - /* first projected expressions, then left relation projections */ - if (!(rel->r = read_exps(sql, rel, nrel, NULL, r, pos, '[', 0, 1))) - return NULL; - } + /* first projected expressions, then left relation projections */ + if (r[*pos] == '[' && !(rel->r = read_exps(sql, rel, nrel, NULL, r, pos, '[', 0, 1))) + return NULL; break; case 'g': *pos += (int) strlen("group by"); @@ -2068,6 +2069,7 @@ rel_read(mvc *sql, char *r, int *pos, li if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0, 1))) return NULL; rel = rel_sample(sql->sa, nrel, exps); + set_processed(rel); } else if (r[*pos+2] == 'l') { *pos += (int) strlen("select"); skipWS(r, pos); @@ -2086,6 +2088,7 @@ rel_read(mvc *sql, char *r, int *pos, li if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0, 1))) return NULL; rel = rel_select_copy(sql->sa, nrel, exps); + set_processed(rel); /* semijoin or antijoin */ } else if (r[*pos+1] == 'e' || r[*pos+1] == 'n') { if (r[*pos+1] == 'n') { @@ -2234,9 +2237,9 @@ rel_read(mvc *sql, char *r, int *pos, li return NULL; rel = rel_project(sql->sa, NULL, exps); /* order by ? */ - if (r[*pos] == '[') - if (!(rel->r = read_exps(sql, NULL, rel, NULL, r, pos, '[', 0, 1))) - return NULL; + if (r[*pos] == '[' && !(rel->r = read_exps(sql, NULL, rel, NULL, r, pos, '[', 0, 1))) + return NULL; + set_processed(rel); break; case 'd': /* 'ddl' not supported */ 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 @@ -1816,6 +1816,7 @@ rel_push_topn_and_sample_down(visitor *v x = x->l; if (x && x->op != rel->op) { /* only push topn once */ ul = func(v->sql->sa, ul, sum_limit_offset(v->sql, rel)); + set_processed(ul); u->l = ul; changed = true; } @@ -1825,6 +1826,7 @@ rel_push_topn_and_sample_down(visitor *v x = x->l; if (x && x->op != rel->op) { /* only push topn once */ ur = func(v->sql->sa, ur, sum_limit_offset(v->sql, rel)); + set_processed(ur); u->r = ur; changed = true; } @
monetdb-java: default - Forgot to cleanup created type xml. Now ...
Changeset: 1f444b5ad7d2 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/1f444b5ad7d2 Modified Files: tests/JDBC_API_Tester.java Branch: default Log Message: Forgot to cleanup created type xml. Now it will be dropped after use. Also added and improved some comments. diffs (69 lines): diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java --- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -616,7 +616,7 @@ final public class JDBC_API_Tester { Statement stmt = null; try { - // turn off auto commit + // turn on auto commit con.setAutoCommit(true); // >> false: we just disabled it sb.append("6. true\t").append(con.getAutoCommit()).append("\n"); @@ -802,15 +802,23 @@ final public class JDBC_API_Tester { sb.append("FAILED: ").append(e.getMessage()).append("\n"); } + // cleanup created db objects try { int response = stmt.executeUpdate("DROP TABLE nopk_twoucs"); if (response != Statement.SUCCESS_NO_INFO) sb.append("Dropping table nopk_twoucs failed to return -2!! It returned: " + response + "\n"); } catch (SQLException e) { - // this means we get what we expect sb.append("failed to drop table: ").append(e.getMessage()); } + try { + int response = stmt.executeUpdate("DROP TYPE xml"); + if (response != Statement.SUCCESS_NO_INFO) + sb.append("Dropping type xml failed to return -2!! It returned: " + response + "\n"); + } catch (SQLException e) { + sb.append("failed to drop type: ").append(e.getMessage()); + } + closeStmtResSet(stmt, null); compareExpectedOutput("Test_Dobjects", ""); @@ -973,6 +981,7 @@ final public class JDBC_API_Tester { compareExpectedOutput("Test_PlanExplainTraceDebugCmds: " + qry, "1\n"); sb.setLength(0);// clear the output log buffer + // plan statements are supported via JDBC qry = "plan SELECT 2;"; rs = stmt.executeQuery(qry); compareResultSet(rs, qry, @@ -985,6 +994,7 @@ final public class JDBC_API_Tester { rs = null; sb.setLength(0);// clear the output log buffer + // explain statements are supported via JDBC qry = "explain SELECT 3;"; rs = stmt.executeQuery(qry); while (rs.next()) { @@ -1001,6 +1011,7 @@ final public class JDBC_API_Tester { "end user.main;\n"); sb.setLength(0);// clear the output log buffer + // trace statements are supported via JDBC. Note that it returns two resultsets, one with the query result and next one with the trace result. qry = "trace SELECT 4;"; rs = stmt.executeQuery(qry); while (rs.next()) { @@ -1022,6 +1033,7 @@ final public class JDBC_API_Tester { "X_10=0:int := sql.resultSet(\".%2\":str, \"%2\":str, \"tinyint\":str, 3:int, 0:int, 7:int, 4:bte);\n"); sb.setLength(0);// clear the output log buffer + // debug statements are NOT supported via JDBC driver, so the execution should throw an SQLException qry = "debug SELECT 5;"; sb.append(qry).append("\n"); rs = stmt.executeQuery(qry); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Don't generate new statement if not used
Changeset: 6a6266f46722 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6a6266f46722 Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h Branch: default Log Message: Don't generate new statement if not used diffs (174 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 @@ -3945,7 +3945,7 @@ insert_check_ukey(backend *be, list *ins stmt *cs = list_fetch(inserts, c->c->colnr); /* foreach column add predicate */ - (void) stmt_column_predicate(be, c->c); + stmt_add_column_predicate(be, c->c); col = stmt_col(be, c->c, dels, dels->partition); if ((k->type == ukey) && stmt_has_null(col)) { @@ -3967,7 +3967,7 @@ insert_check_ukey(backend *be, list *ins stmt *cs = list_fetch(inserts, c->c->colnr); /* foreach column add predicate */ - (void) stmt_column_predicate(be, c->c); + stmt_add_column_predicate(be, c->c); col = stmt_col(be, c->c, dels, dels->partition); list_append(lje, col); @@ -4030,7 +4030,7 @@ insert_check_ukey(backend *be, list *ins stmt *s = list_fetch(inserts, c->c->colnr), *h = s; /* add predicate for this column */ - (void) stmt_column_predicate(be, c->c); + stmt_add_column_predicate(be, c->c); s = stmt_col(be, c->c, dels, dels->partition); if ((k->type == ukey) && stmt_has_null(s)) { @@ -4101,7 +4101,7 @@ insert_check_fkey(backend *be, list *ins sql_kc *c = m->data; /* foreach column add predicate */ - (void) stmt_column_predicate(be, c->c); + stmt_add_column_predicate(be, c->c); } if (pin && list_length(pin->op4.lval)) @@ -4372,7 +4372,7 @@ rel2bin_insert(backend *be, sql_rel *rel be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, ret->nr) : ret->nr; } if (t->s && isGlobal(t) && !isGlobalTemp(t)) - (void) stmt_dependency_change(be, t, ret); + stmt_add_dependency_change(be, t, ret); return ret; } } @@ -5233,7 +5233,7 @@ sql_update(backend *be, sql_table *t, st be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, cnt->nr) : cnt->nr; } if (t->s && isGlobal(t) && !isGlobalTemp(t)) - (void) stmt_dependency_change(be, t, cnt); + stmt_add_dependency_change(be, t, cnt); /* cascade ?? */ return l; } @@ -5357,7 +5357,7 @@ rel2bin_update(backend *be, sql_rel *rel be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, cnt->nr) : cnt->nr; } if (t->s && isGlobal(t) && !isGlobalTemp(t)) - (void) stmt_dependency_change(be, t, cnt); + stmt_add_dependency_change(be, t, cnt); } if (sql->cascade_action) @@ -5575,7 +5575,7 @@ sql_delete(backend *be, sql_table *t, st be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, s->nr) : s->nr; } if (t->s && isGlobal(t) && !isGlobalTemp(t)) - (void) stmt_dependency_change(be, t, s); + stmt_add_dependency_change(be, t, s); return s; } @@ -5745,7 +5745,7 @@ sql_truncate(backend *be, sql_table *t, be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, other->nr) : other->nr; } if (next->s && isGlobal(next) && !isGlobalTemp(next)) - (void) stmt_dependency_change(be, next, other); + stmt_add_dependency_change(be, next, other); } finalize: diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -3012,57 +3012,32 @@ stmt_claim(backend *be, sql_table *t, st return NULL; } -stmt * -stmt_dependency_change(backend *be, sql_table *t, stmt *cnt) +void +stmt_add_dependency_change(backend *be, sql_table *t, stmt *cnt) { MalBlkPtr mb = be->mb; InstrPtr q = NULL; if (!t || cnt->nr < 0) - return NULL; + return ; q = newStmtArgs(mb, sqlRef, dependRef, 4); q = pushSchema(mb, q, t); q = pushStr(mb, q, t->base.name); q = pushArgument(mb, q, cnt->nr); - if (q) { - stmt *s = stmt_create(
MonetDB: default - Fixing relation inplacements refcounts
Changeset: ee06bbe09cb2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ee06bbe09cb2 Modified Files: sql/server/rel_basetable.c sql/server/rel_basetable.h sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_rel.h sql/server/rel_unnest.c Branch: default Log Message: Fixing relation inplacements refcounts diffs (128 lines): diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c --- a/sql/server/rel_basetable.c +++ b/sql/server/rel_basetable.c @@ -554,24 +554,3 @@ rel_base_get_mergetable(sql_rel *rel) return ba ? ba->mt : NULL; } - -sql_rel * -rel_inplace_basetable(sql_rel *rel, sql_rel *bt) -{ - /* in order to not expose 'rel_destroy_', add a reference increment, - so 'rel' references stay the same */ - rel_dup(rel); - rel_destroy(rel); - assert(is_basetable(bt->op)); - - set_processed(rel); - rel->l = bt->l; - rel->r = bt->r; - rel->attr = NULL; - rel->op = op_basetable; - rel->exps = bt->exps; - rel->card = CARD_MULTI; - rel->flag = 0; - rel->nrcols = bt->nrcols; - return rel; -} diff --git a/sql/server/rel_basetable.h b/sql/server/rel_basetable.h --- a/sql/server/rel_basetable.h +++ b/sql/server/rel_basetable.h @@ -47,6 +47,5 @@ extern int rel_base_has_column_privilege extern void rel_base_set_mergetable( sql_rel *rel, sql_table *mt); /* keep parent merge table */ extern sql_table *rel_base_get_mergetable( sql_rel *rel); -extern sql_rel *rel_inplace_basetable(sql_rel *rel, sql_rel *bt); #endif /* _REL_BASETABLE_H_ */ 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 @@ -9074,6 +9074,10 @@ rel_merge_table_rewrite(visitor *v, sql_ if (!(nrel = merge_table_prune_and_unionize(v, bt, info))) return NULL; /* Always do relation inplace. If the mt relation has more than 1 reference, this is required */ + if (is_select(rel->op)) { /* for the selection case, increment the reference count of the table */ + assert(rel->l == bt && sel->l == bt); + rel_dup(bt); + } if (is_union(nrel->op)) { rel = rel_inplace_setop(v->sql, rel, nrel->l, nrel->r, op_union, nrel->exps); } else if (is_select(nrel->op)) { diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -457,6 +457,24 @@ rel_first_column(mvc *sql, sql_rel *r) } sql_rel * +rel_inplace_basetable(sql_rel *rel, sql_rel *bt) +{ + assert(is_basetable(bt->op)); + + rel_destroy_(rel); + set_processed(rel); + rel->l = bt->l; + rel->r = bt->r; + rel->attr = NULL; + rel->op = op_basetable; + rel->exps = bt->exps; + rel->card = CARD_MULTI; + rel->flag = 0; + rel->nrcols = bt->nrcols; + return rel; +} + +sql_rel * rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, operator_type setop, list *exps) { rel_destroy_(rel); diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h --- a/sql/server/rel_rel.h +++ b/sql/server/rel_rel.h @@ -69,6 +69,7 @@ extern sql_exp *rel_bind_column( mvc *sq extern sql_exp *rel_bind_column2( mvc *sql, sql_rel *rel, const char *tname, const char *cname, int f ); extern sql_exp *rel_first_column(mvc *sql, sql_rel *rel); +extern sql_rel *rel_inplace_basetable(sql_rel *rel, sql_rel *bt); extern sql_rel *rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, operator_type setop, list *exps); extern sql_rel *rel_inplace_project(sql_allocator *sa, sql_rel *rel, sql_rel *l, list *e); extern sql_rel *rel_inplace_select(sql_rel *rel, sql_rel *l, list *exps); diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -3538,7 +3538,7 @@ rewrite_groupings(visitor *v, sql_rel *r list *l = (list*) n->data, *exps = sa_list(v->sql->sa), *pexps = sa_list(v->sql->sa); l = list_flaten(l); - nrel = rel_groupby(v->sql, unions ? rel_dup(rel->l) : rel->l, l); + nrel = rel_groupby(v->sql, rel_dup(rel->l), l); for (node *m = rel->exps->h ; m ; m = m->next) { sql_exp *e = (sql_exp*) m->data, *ne = NULL; @@ -3637,7 +3637,6 @@ rewrite_groupings(visitor *v, sql_rel *r return unions; } /* always do relation inplace, so it will be fine when the input group has more than 1 reference */ - rel_dup(
MonetDB: Jul2021 - Update output to comply with newer geos library.
Changeset: d9e844d3ba1e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d9e844d3ba1e Modified Files: geom/sql/conformance/Tests/T48.test Branch: Jul2021 Log Message: Update output to comply with newer geos library. diffs (10 lines): diff --git a/geom/sql/conformance/Tests/T48.test b/geom/sql/conformance/Tests/T48.test --- a/geom/sql/conformance/Tests/T48.test +++ b/geom/sql/conformance/Tests/T48.test @@ -1,5 +1,5 @@ query T rowsort SELECT ST_AsText(ST_Difference(named_places.boundary, forests.boundary)) FROM named_places, forests WHERE named_places.name = 'Ashton' AND forests.name = 'Green Forest' -POLYGON ((62 48, 84 48, 84 42, 56 34, 62 48)) +POLYGON ((84 48, 84 42, 56 34, 62 48, 84 48)) ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Jul2021 - Implemented version check for geos library in...
Changeset: 650f413e080f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/650f413e080f Modified Files: geom/sql/conformance/Tests/All geom/sql/conformance/Tests/T49.test geom/sql/functions/Tests/All sql/test/pg_regress/Tests/All sql/test/pg_regress/Tests/polygon.test testing/Mtest.py.in testing/Mz.py.in Branch: Jul2021 Log Message: Implemented version check for geos library in testing. diffs (191 lines): diff --git a/geom/sql/conformance/Tests/All b/geom/sql/conformance/Tests/All --- a/geom/sql/conformance/Tests/All +++ b/geom/sql/conformance/Tests/All @@ -46,8 +46,8 @@ HAVE_GEOM?T44 HAVE_GEOM?T45 HAVE_GEOM?T46 HAVE_GEOM?T47 -HAVE_GEOM?T48 -#HAVE_GEOM?T49 # disabled because depends on geos library version +HAVE_GEOM&GEOS_VERSION>=3.9?T48 +HAVE_GEOM&GEOS_VERSION>=3.9?T49 HAVE_GEOM?T50 HAVE_GEOM?T51 HAVE_GEOM?T52 diff --git a/geom/sql/conformance/Tests/T49.test b/geom/sql/conformance/Tests/T49.test --- a/geom/sql/conformance/Tests/T49.test +++ b/geom/sql/conformance/Tests/T49.test @@ -1,5 +1,5 @@ query T rowsort SELECT ST_AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island' -POLYGON ((52 18, 66 23, 73 9, 48 6, 52 18)) +POLYGON ((66 23, 73 9, 48 6, 52 18, 66 23)) diff --git a/geom/sql/functions/Tests/All b/geom/sql/functions/Tests/All --- a/geom/sql/functions/Tests/All +++ b/geom/sql/functions/Tests/All @@ -20,7 +20,7 @@ HAVE_GEOM?ST_AsText HAVE_GEOM?ST_IsClosed HAVE_GEOM?ST_IsEmpty -HAVE_GEOM?ST_IsSimple +HAVE_GEOM&GEOS_VERSION>=3.8?ST_IsSimple HAVE_GEOM?ST_IsValid HAVE_GEOM?ST_IsRing diff --git a/sql/test/pg_regress/Tests/All b/sql/test/pg_regress/Tests/All --- a/sql/test/pg_regress/Tests/All +++ b/sql/test/pg_regress/Tests/All @@ -29,7 +29,7 @@ HAVE_GEOM?point #HAVE_GEOM?lseg # lseg is NOT supported in MonetDB. lseg (Line Segment) is also not part of OpenGIS standard so exclude this test HAVE_GEOM?box # box is not supported in MonetDB but it can be replaced with mbr (= minimum bounded rectangle) HAVE_GEOM?path# path is not supported in MonetDB but it can be replaced with linestring -HAVE_GEOM?polygon +HAVE_GEOM&GEOS_VERSION>=3.10?polygon #HAVE_GEOM?circle # circle is NOT supported in MonetDB. It is also not part of OpenGIS standard so exclude this test #HAVE_GEOM?geometry # tables CIRCLE_TBL and LSEG_TBL do not exist as they have been disabled above. All queries fail date diff --git a/sql/test/pg_regress/Tests/polygon.test b/sql/test/pg_regress/Tests/polygon.test --- a/sql/test/pg_regress/Tests/polygon.test +++ b/sql/test/pg_regress/Tests/polygon.test @@ -15,7 +15,7 @@ POLYGON ((3 1, 3 3, 1 0, 3 1)) statement error INSERT INTO POLYGON_TBL(f1) VALUES ('POLYGON((0.0 0.0, 0.0 0.0))') -statement error +statement ok INSERT INTO POLYGON_TBL(f1) VALUES ('POLYGON((0.0 1.0, 1.0 1.0, 0.0 1.0))') statement ok @@ -57,6 +57,8 @@ SELECT '' AS four, POLYGON_TBL.* FROM PO (empty) POLYGON ((0 1, 0 1, 0 1, 0 1)) (empty) +POLYGON ((0 1, 1 1, 0 1)) +(empty) POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2)) (empty) POLYGON ((2 0, 2 4, 0 0, 2 0)) @@ -71,6 +73,8 @@ SELECT * FROM POLYGON_TBL_VW POLYGON ((0 1, 0 1, 0 1, 0 1)) POLYGON ((0 1, 0 1, 0 1, 0 1)) +POLYGON ((0 1, 1 1, 0 1)) +POLYGON ((0 1, 1 1, 0 1)) POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2)) POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2)) POLYGON ((2 0, 2 4, 0 0, 2 0)) @@ -84,6 +88,9 @@ SELECT '' AS three, p.* WHERE p.f1 && 'POLYGON((3.0 1.0, 3.0 3.0, 1.0 0.0, 3.0 1.0))' (empty) +POLYGON ((0 1, 1 1, 0 1)) +POLYGON ((0 1, 1 1, 0 1)) +(empty) POLYGON ((2 0, 2 4, 0 0, 2 0)) POLYGON ((2 0, 2 4, 0 0, 2 0)) (empty) @@ -108,6 +115,9 @@ SELECT '' AS four, p.* POLYGON ((0 1, 0 1, 0 1, 0 1)) POLYGON ((0 1, 0 1, 0 1, 0 1)) (empty) +POLYGON ((0 1, 1 1, 0 1)) +POLYGON ((0 1, 1 1, 0 1)) +(empty) POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2)) POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2)) (empty) diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in --- a/testing/Mtest.py.in +++ b/testing/Mtest.py.in @@ -59,6 +59,8 @@ isatty = os.isatty(sys.stdout.fileno()) mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/') +geos_version = '@GEOS_VERSION@' + # default is no color (these three functions may get redefined) def prred(str, write = sys.stdout.write): write(str) @@ -2026,6 +2028,35 @@ def RunTest(env, TST, COND, oktests, len elem = SkipTest(env, TST, EXT, reason, length) break passwd = cond[7:] +elif cond.startswith('GEOS_VERSION>='): +if not geos_version: +reason = "no geos version information available" +elem = SkipTest(env, TST, EXT, reason, length) +break +req_vers = cond[14:].split('.') +act_vers = geos_version.split('.') +if not negate: +for i in range(len(act_vers)):
MonetDB: Jul2021 - Simplify.
Changeset: 3719df8a3963 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3719df8a3963 Modified Files: testing/Mtest.py.in testing/Mz.py.in Branch: Jul2021 Log Message: Simplify. diffs (96 lines): diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in --- a/testing/Mtest.py.in +++ b/testing/Mtest.py.in @@ -59,7 +59,7 @@ isatty = os.isatty(sys.stdout.fileno()) mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/') -geos_version = '@GEOS_VERSION@' +geos_version = '@GEOS_VERSION@'.split('.') # default is no color (these three functions may get redefined) def prred(str, write = sys.stdout.write): @@ -2029,29 +2029,28 @@ def RunTest(env, TST, COND, oktests, len break passwd = cond[7:] elif cond.startswith('GEOS_VERSION>='): -if not geos_version: +if not geos_version or not geos_version[0]: reason = "no geos version information available" elem = SkipTest(env, TST, EXT, reason, length) break req_vers = cond[14:].split('.') -act_vers = geos_version.split('.') if not negate: -for i in range(len(act_vers)): +for i in range(len(geos_version)): if i >= len(req_vers): break -if int(act_vers[i]) > int(req_vers[i]): +if int(geos_version[i]) > int(req_vers[i]): break -if int(act_vers[i]) < int(req_vers[i]): +if int(geos_version[i]) < int(req_vers[i]): reason = "geos version too low" elem = SkipTest(env, TST, EXT, reason, length) break else: -for i in range(len(act_vers)): +for i in range(len(geos_version)): if i >= len(req_vers): break -if int(act_vers[i]) < int(req_vers[i]): +if int(geos_version[i]) < int(req_vers[i]): break -if int(act_vers[i]) > int(req_vers[i]): +if int(geos_version[i]) > int(req_vers[i]): reason = "geos version too high" elem = SkipTest(env, TST, EXT, reason, length) break diff --git a/testing/Mz.py.in b/testing/Mz.py.in --- a/testing/Mz.py.in +++ b/testing/Mz.py.in @@ -57,7 +57,7 @@ isatty = os.isatty(sys.stdout.fileno()) mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/') -geos_version = '@GEOS_VERSION@' +geos_version = '@GEOS_VERSION@'.split('.') # default is no color (these three functions may get redefined) def prred(str, write = sys.stdout.write): @@ -1109,27 +1109,26 @@ def RunTest(env, test, oktests, pSrvr): break passwd = cond[7:] elif cond.startswith('GEOS_VERSION>='): -if not geos_version: +if not geos_version or not geos_version[0]: reason = "no geos version information available" break req_vers = cond[14:].split('.') -act_vers = geos_version.split('.') if not negate: -for i in range(len(act_vers)): +for i in range(len(geos_version)): if i >= len(req_vers): break -if int(act_vers[i]) > int(req_vers[i]): +if int(geos_version[i]) > int(req_vers[i]): break -if int(act_vers[i]) < int(req_vers[i]): +if int(geos_version[i]) < int(req_vers[i]): reason = "geos version too low" break else: -for i in range(len(act_vers)): +for i in range(len(geos_version)): if i >= len(req_vers): break -if int(act_vers[i]) < int(req_vers[i]): +if int(geos_version[i]) < int(req_vers[i]): break -if int(act_vers[i]) > int(req_vers[i]): +if int(geos_version[i]) > int(req_vers[i]): reason = "geos version too high" break if reason is not None: ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Jan2022 - Merge with Jul2021 branch.
Changeset: 594ac4cf16db for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/594ac4cf16db Modified Files: gdk/gdk_batop.c sql/test/pg_regress/Tests/polygon.test testing/Mtest.py.in testing/Mz.py.in Branch: Jan2022 Log Message: Merge with Jul2021 branch. ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - On the mergetable rewrite, the basetable rela...
Changeset: d319f308a9db for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d319f308a9db Modified Files: sql/server/rel_optimizer.c Branch: default Log Message: On the mergetable rewrite, the basetable relation also has to be destroyed. My apologies diffs (14 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 @@ -9074,10 +9074,6 @@ rel_merge_table_rewrite(visitor *v, sql_ if (!(nrel = merge_table_prune_and_unionize(v, bt, info))) return NULL; /* Always do relation inplace. If the mt relation has more than 1 reference, this is required */ - if (is_select(rel->op)) { /* for the selection case, increment the reference count of the table */ - assert(rel->l == bt && sel->l == bt); - rel_dup(bt); - } if (is_union(nrel->op)) { rel = rel_inplace_setop(v->sql, rel, nrel->l, nrel->r, op_union, nrel->exps); } else if (is_select(nrel->op)) { ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Jan2022 - I did another replacement wrong
Changeset: 348309e62616 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/348309e62616 Modified Files: sql/server/rel_unnest.c Branch: Jan2022 Log Message: I did another replacement wrong diffs (21 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2115,8 +2115,15 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel } if (!list_empty(projs)) { /* the grouping relation may have more than 1 reference, a replacement is needed */ - list *nexps = list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL); - rel = rel_inplace_project(sql->sa, rel, rel_dup(rel->l), nexps); + sql_rel *l = rel_create(sql->sa); + if (!l) + return NULL; + *l = *rel; + /* increment the refcount of the left relation */ + rel_dup(rel->l); + l->ref.refcnt = 1; + list *nexps = list_merge(rel_projections(sql, l, NULL, 1, 1), projs, NULL); + rel = rel_inplace_project(sql->sa, rel, l, nexps); rel->card = exps_card(nexps); } } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Merged with Jan2022
Changeset: e4c805b2af3d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e4c805b2af3d Modified Files: sql/server/rel_unnest.c sql/server/rel_updates.c Branch: default Log Message: Merged with Jan2022 diffs (32 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2192,8 +2192,15 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel } if (!list_empty(projs)) { /* the grouping relation may have more than 1 reference, a replacement is needed */ - list *nexps = list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL); - rel = rel_inplace_project(sql->sa, rel, rel_dup(rel->l), nexps); + sql_rel *l = rel_create(sql->sa); + if (!l) + return NULL; + *l = *rel; + /* increment the refcount of the left relation */ + rel_dup(rel->l); + l->ref.refcnt = 1; + list *nexps = list_merge(rel_projections(sql, l, NULL, 1, 1), projs, NULL); + rel = rel_inplace_project(sql->sa, rel, l, nexps); rel->card = exps_card(nexps); } } diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -405,6 +405,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ if (c) { c = rel_setop(sql->sa, c, p, op_union); rel_setop_set_exps(sql, c, rel_projections(sql, c->l, NULL, 1, 1), false); + set_processed(c); } else c = p; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Set more relations as processed
Changeset: 73ea7e3782f2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/73ea7e3782f2 Modified Files: sql/server/rel_optimizer.c sql/server/rel_propagate.c sql/server/rel_rel.c Branch: default Log Message: Set more relations as processed diffs (73 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 @@ -4016,6 +4016,7 @@ rel_push_aggr_down(visitor *v, sql_rel * ul->card = g->card; ul->exps = exps_copy(v->sql, g->exps); ul->nrcols = list_length(ul->exps); + set_processed(ul); ur = rel_groupby(v->sql, ur, NULL); ur->r = rgbe; @@ -4023,6 +4024,7 @@ rel_push_aggr_down(visitor *v, sql_rel * ur->card = g->card; ur->exps = exps_copy(v->sql, g->exps); ur->nrcols = list_length(ur->exps); + set_processed(ur); /* group by on primary keys which define the partioning scheme * don't need a finalizing group by */ @@ -9849,6 +9851,7 @@ rel_setjoins_2_joingroupby(visitor *v, s } else { rel = rel_groupby(v->sql, rel, list_append(sa_list(v->sql->sa), exp_ref(v->sql, lid))); rel->exps = aexps; + set_processed(rel); } } } diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c --- a/sql/server/rel_propagate.c +++ b/sql/server/rel_propagate.c @@ -217,6 +217,7 @@ create_range_partition_anti_rel(sql_quer anti_rel = rel_groupby(sql, anti_rel, NULL); aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0); (void) rel_groupby_add_aggr(sql, anti_rel, aggr); + set_processed(anti_rel); exp_label(sql->sa, aggr, ++sql->label); /* generate the exception */ @@ -259,6 +260,7 @@ create_list_partition_anti_rel(sql_query anti_rel = rel_groupby(sql, anti_rel, NULL); aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0); (void) rel_groupby_add_aggr(sql, anti_rel, aggr); + set_processed(anti_rel); exp_label(sql->sa, aggr, ++sql->label); /* generate the exception */ @@ -866,6 +868,7 @@ rel_generate_subinserts(sql_query *query anti_rel = rel_groupby(sql, anti_rel, NULL); aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0); (void) rel_groupby_add_aggr(sql, anti_rel, aggr); + set_processed(anti_rel); exp_label(sql->sa, aggr, ++sql->label); aggr = exp_ref(sql, aggr); @@ -1041,6 +1044,7 @@ rel_subtable_insert(sql_query *query, sq aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_dup->card, 0); (void) rel_groupby_add_aggr(sql, anti_dup, aggr); exp_label(sql->sa, aggr, ++sql->label); + set_processed(anti_dup); /* generate the exception */ aggr = exp_ref(sql, aggr); diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -1664,6 +1664,7 @@ rel_return_zero_or_one(mvc *sql, sql_rel e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, has_nil(e)); (void)rel_groupby_add_aggr(sql, rel, e); } + set_processed(rel); } return rel; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Now that inplacing relations is becoming more...
Changeset: 82365f63af25 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/82365f63af25 Modified Files: sql/server/rel_rel.c Branch: default Log Message: Now that inplacing relations is becoming more common, make sure some properties always get reset diffs (102 lines): diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -456,20 +456,27 @@ rel_first_column(mvc *sql, sql_rel *r) return NULL; } +static void +rel_inplace_reset_props(sql_rel *rel) +{ + rel->flag = 0; + rel->attr = NULL; + reset_dependent(rel); + set_processed(rel); +} + sql_rel * rel_inplace_basetable(sql_rel *rel, sql_rel *bt) { assert(is_basetable(bt->op)); rel_destroy_(rel); - set_processed(rel); + rel_inplace_reset_props(rel); rel->l = bt->l; rel->r = bt->r; - rel->attr = NULL; rel->op = op_basetable; rel->exps = bt->exps; rel->card = CARD_MULTI; - rel->flag = 0; rel->nrcols = bt->nrcols; return rel; } @@ -478,14 +485,12 @@ sql_rel * rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, operator_type setop, list *exps) { rel_destroy_(rel); + rel_inplace_reset_props(rel); rel->l = l; rel->r = r; - rel->attr = NULL; rel->op = setop; rel->card = CARD_MULTI; - rel->flag = 0; rel_setop_set_exps(sql, rel, exps, false); - set_processed(rel); return rel; } @@ -502,15 +507,12 @@ rel_inplace_project(sql_allocator *sa, s } else { rel_destroy_(rel); } - set_processed(rel); - + rel_inplace_reset_props(rel); rel->l = l; rel->r = NULL; - rel->attr = NULL; rel->op = op_project; rel->exps = e; rel->card = CARD_MULTI; - rel->flag = 0; if (l) { rel->nrcols = l->nrcols; assert (exps_card(rel->exps) <= rel->card); @@ -522,14 +524,12 @@ sql_rel * rel_inplace_select(sql_rel *rel, sql_rel *l, list *exps) { rel_destroy_(rel); - set_processed(rel); + rel_inplace_reset_props(rel); rel->l = l; rel->r = NULL; - rel->attr = NULL; rel->op = op_select; rel->exps = exps; rel->card = exps_card(exps); - rel->flag = 0; rel->card = CARD_ATOM; /* no relation */ if (l) { rel->card = l->card; @@ -544,17 +544,15 @@ sql_rel * rel_inplace_groupby(sql_rel *rel, sql_rel *l, list *groupbyexps, list *exps ) { rel_destroy_(rel); + rel_inplace_reset_props(rel); rel->card = CARD_ATOM; if (groupbyexps) rel->card = CARD_AGGR; rel->l = l; rel->r = groupbyexps; - rel->attr = NULL; rel->exps = exps; rel->nrcols = l->nrcols; rel->op = op_groupby; - rel->flag = 0; - set_processed(rel); return rel; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org