Changeset: be8f91e3a55a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=be8f91e3a55a
Modified Files:
gdk/gdk_search.c
gdk/gdk_storage.c
monetdb5/modules/mal/tablet.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_upgrades.c
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/server/rel_select.h
sql/storage/store.c
sql/test/BugTracker-2016/Tests/LEFT-JOIN_with_OR_conditions_triggers_assertion.Bug-3908.stable.out
sql/test/BugTracker-2016/Tests/incorrect_column_name_in_OR_condition_of_LEFT-JOIN_crashes_mserver.Bug-3909.stable.err
Branch: geo
Log Message:
Merge with default branch.
diffs (truncated from 875 to 300 lines):
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -317,17 +317,25 @@ BATcheckhash(BAT *b)
}
#ifdef PERSISTENTHASH
+struct hashsync {
+ Heap *hp;
+ bat id;
+};
+
static void
BAThashsync(void *arg)
{
- Heap *hp = arg;
+ struct hashsync *hs = arg;
+ Heap *hp = hs->hp;
int fd;
lng t0 = GDKusec();
- if (HEAPsave(hp, hp->filename, NULL) != GDK_SUCCEED)
+ if (HEAPsave(hp, hp->filename, NULL) != GDK_SUCCEED ||
+ (fd = GDKfdlocate(hp->farmid, hp->filename, "rb+", NULL)) < 0) {
+ BBPunfix(hs->id);
+ GDKfree(arg);
return;
- if ((fd = GDKfdlocate(hp->farmid, hp->filename, "rb+", NULL)) < 0)
- return;
+ }
((size_t *) hp->base)[0] |= 1 << 24;
if (write(fd, hp->base, SIZEOF_SIZE_T) < 0)
perror("write hash");
@@ -341,6 +349,8 @@ BAThashsync(void *arg)
#endif
}
close(fd);
+ BBPunfix(hs->id);
+ GDKfree(arg);
ALGODEBUG fprintf(stderr, "#BAThash: persisting hash %s (" LLFMT "
usec)\n", hp->filename, GDKusec() - t0);
}
#endif
@@ -544,7 +554,13 @@ BAThash(BAT *b, BUN masksize)
#ifdef PERSISTENTHASH
if (BBP_status(b->batCacheid) & BBPEXISTING) {
MT_Id tid;
- MT_create_thread(&tid, BAThashsync, hp,
MT_THR_DETACHED);
+ struct hashsync *hs = GDKmalloc(sizeof(*hs));
+ if (hs != NULL) {
+ BBPfix(b->batCacheid);
+ hs->id = b->batCacheid;
+ hs->hp = hp;
+ MT_create_thread(&tid, BAThashsync, hs,
MT_THR_DETACHED);
+ }
} else
ALGODEBUG fprintf(stderr, "#BAThash: NOT persisting
hash %d\n", b->batCacheid);
#endif
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -711,7 +711,13 @@ BATsave(BAT *bd)
BAT *b = bd;
BATcheck(b, "BATsave", GDK_FAIL);
- CHECKDEBUG BATassertProps(b);
+ /* there is a possibility that BATsave gets called with a
+ * pointer to a BAT that has *no* fixes (refs == 0), and so
+ * the heaps may not be in core, in which case BATmirror()
+ * would not find the mirror (this can happen when BATsave
+ * gets called during a (sub)commit after the BAT had been
+ * trimmed) */
+ CHECKDEBUG if (BATmirror(b)) BATassertProps(b);
/* views cannot be saved, but make an exception for
* force-remapped views */
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1256,7 +1256,7 @@ SQLproducer(void *p)
base = end = s = task->input[cur];
*s = 0;
task->cur = cur;
- if (task->b == task->cntxt->fdin) {
+ if (task->as->filename == NULL) {
consoleinput = 1;
goto parseSTDIN;
}
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -805,7 +805,7 @@ mvc_import_table(Client cntxt, BAT ***ba
as.error = NULL;
as.tryall = 0;
as.complaints = NULL;
- as.filename = "";
+ as.filename = m->scanner.rs == bs ? NULL : "";
fmt = as.format = (Column *) GDKzalloc(sizeof(Column) *
(as.nr_attrs + 1));
if (fmt == NULL) {
sql_error(m, 500, "failed to allocate memory ");
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -18,505 +18,6 @@
#include <unistd.h>
#include "sql_upgrades.h"
-static str
-sql_update_feb2013(Client c)
-{
- char *buf = GDKmalloc(4096), *err = NULL;
- size_t bufsize = 4096, pos = 0;
-
- /* sys.stddev_samp functions */
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.stddev_samp(val TINYINT) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val SMALLINT) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val INTEGER) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val BIGINT) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val REAL) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val DOUBLE) returns
DOUBLE external name \"aggr\".\"stdev\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.stddev_samp(val DATE) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val TIME) returns
DOUBLE external name \"aggr\".\"stdev\";\n"
- "create aggregate sys.stddev_samp(val TIMESTAMP)
returns DOUBLE external name \"aggr\".\"stdev\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.stddev_pop(val TINYINT) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val SMALLINT) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val INTEGER) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val BIGINT) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val REAL) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val DOUBLE) returns
DOUBLE external name \"aggr\".\"stdevp\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.stddev_pop(val DATE) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val TIME) returns
DOUBLE external name \"aggr\".\"stdevp\";\n"
- "create aggregate sys.stddev_pop(val TIMESTAMP) returns
DOUBLE external name \"aggr\".\"stdevp\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.var_samp(val TINYINT) returns
DOUBLE external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val SMALLINT) returns
DOUBLE external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val INTEGER) returns
DOUBLE external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val BIGINT) returns
DOUBLE external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val REAL) returns DOUBLE
external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val DOUBLE) returns
DOUBLE external name \"aggr\".\"variance\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.var_samp(val DATE) returns DOUBLE
external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val TIME) returns DOUBLE
external name \"aggr\".\"variance\";\n"
- "create aggregate sys.var_samp(val TIMESTAMP) returns
DOUBLE external name \"aggr\".\"variance\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.var_pop(val TINYINT) returns
DOUBLE external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val SMALLINT) returns
DOUBLE external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val INTEGER) returns
DOUBLE external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val BIGINT) returns
DOUBLE external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val REAL) returns DOUBLE
external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val DOUBLE) returns
DOUBLE external name \"aggr\".\"variancep\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "create aggregate sys.var_pop(val DATE) returns DOUBLE
external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val TIME) returns DOUBLE
external name \"aggr\".\"variancep\";\n"
- "create aggregate sys.var_pop(val TIMESTAMP) returns
DOUBLE external name \"aggr\".\"variancep\";\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "insert into sys.systemfunctions (select f.id from
sys.functions f, sys.schemas s where f.name in ('stddev_samp', 'stddev_pop',
'var_samp', 'var_pop') and f.type = %d and f.schema_id = s.id and s.name =
'sys');\n", F_AGGR);
-
- assert(pos < 4096);
-
- printf("Running database upgrade commands:\n%s\n", buf);
- err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
- GDKfree(buf);
- return err; /* usually MAL_SUCCEED */
-}
-
-
-static str
-sql_update_feb2013_sp1(Client c)
-{
- size_t bufsize = 10240, pos = 0;
- char *buf = GDKmalloc(bufsize), *err = NULL;
-
- /* sys.stddev functions */
- pos += snprintf(buf + pos, bufsize - pos,
- "drop filter function sys.\"like\"(string, string,
string);\n"
- "drop filter function sys.\"ilike\"(string, string,
string);\n"
- "create filter function sys.\"like\"(val string, pat
string, esc string) external name algebra.likesubselect;\n"
- "create filter function sys.\"ilike\"(val string, pat
string, esc string) external name algebra.ilikesubselect;\n");
-
- pos += snprintf(buf + pos, bufsize - pos,
- "drop function sys.storage;\n");
-
- /* 75_storagemodel.sql */
- pos += snprintf(buf + pos, bufsize - pos,
- "create function sys.storage()\n"
- "returns table (\"schema\" string, \"table\" string,
\"column\" string, \"type\" string, location string, \"count\" bigint,
typewidth int, columnsize bigint, heapsize bigint, indices bigint, sorted
boolean)\n"
- "external name sql.storage;\n"
-
- "create table sys.storagemodelinput(\n"
- " \"schema\" string,\n"
- " \"table\" string,\n"
- " \"column\" string,\n"
- " \"type\" string,\n"
- " \"typewidth\" int,\n"
- " \"count\" bigint,\n"
- " \"distinct\" bigint,\n"
- " \"atomwidth\" int,\n"
- " \"reference\" boolean,\n"
- " \"sorted\" boolean\n"
- ");\n"
- "update sys._tables\n"
- " set system = true\n"
- " where name = 'storagemodelinput'\n"
- " and schema_id = (select id from sys.schemas where
name = 'sys');\n"
-
- "create procedure sys.storagemodelinit()\n"
- "begin\n"
- " delete from sys.storagemodelinput;\n"
- " insert into sys.storagemodelinput\n"
- " select X.\"schema\", X.\"table\", X.\"column\",
X.\"type\", X.typewidth, X.count, 0, X.typewidth, false, X.sorted from
sys.storage() X;\n"
- " update sys.storagemodelinput\n"
- " set reference = true\n"
- " where concat(concat(\"schema\",\"table\"),
\"column\") in (\n"
- " SELECT concat( concat(\"fkschema\".\"name\",
\"fktable\".\"name\"), \"fkkeycol\".\"name\" )\n"
- " FROM \"sys\".\"keys\" AS \"fkkey\",\n"
- " \"sys\".\"objects\" AS \"fkkeycol\",\n"
- " \"sys\".\"tables\" AS \"fktable\",\n"
- " \"sys\".\"schemas\" AS \"fkschema\"\n"
- " WHERE \"fktable\".\"id\" =
\"fkkey\".\"table_id\"\n"
- " AND \"fkkey\".\"id\" = \"fkkeycol\".\"id\"\n"
- " AND \"fkschema\".\"id\" =
\"fktable\".\"schema_id\"\n"
- " AND \"fkkey\".\"rkey\" > -1);\n"
- " update sys.storagemodelinput\n"
- " set \"distinct\" = \"count\"\n"
- " where \"type\" = 'varchar' or \"type\"='clob';\n"
- "end;\n"
-
- "create function sys.columnsize(nme string, i bigint, d
bigint)\n"
- "returns bigint\n"
- "begin\n"
- " case\n"
- " when nme = 'boolean' then return i;\n"
- " when nme = 'char' then return 2*i;\n"
- " when nme = 'smallint' then return 2 * i;\n"
- " when nme = 'int' then return 4 * i;\n"
- " when nme = 'bigint' then return 8 * i;\n"
- " when nme = 'timestamp' then return 8 * i;\n"
- " when nme = 'varchar' then\n"
- " case\n"
- " when cast(d as bigint) << 8 then return i;\n"
- " when cast(d as bigint) << 16 then return 2 * i;\n"
- " when cast(d as bigint) << 32 then return 4 * i;\n"
- " else return 8 * i;\n"
- " end case;\n"
- " else return 8 * i;\n"
- " end case;\n"
- "end;\n"
-
- "create function sys.heapsize(tpe string, i bigint, w
int)\n"
- "returns bigint\n"
- "begin\n"
- " if tpe <> 'varchar' and tpe <> 'clob'\n"
- " then\n"
- " return 0;\n"
- " end if;\n"
- " return 10240 + i * w;\n"
- "end;\n"
-
- "create function sys.indexsize(b boolean, i bigint)\n"
- "returns bigint\n"
- "begin\n"
-
- " if b = true\n"
- " then\n"
- " return 8 * i;\n"
- " end if;\n"
- " return 0;\n"
- "end;\n"
-
- "create function sys.storagemodel()\n"
- "returns table (\n"
- " \"schema\" string,\n"
- " \"table\" string,\n"
- " \"column\" string,\n"
- " \"type\" string,\n"
- " \"count\" bigint,\n"
- " columnsize bigint,\n"
- " heapsize bigint,\n"
- " indices bigint,\n"
- " sorted boolean)\n"
- "begin\n"
- " return select I.\"schema\", I.\"table\",
I.\"column\", I.\"type\", I.\"count\",\n"
- " columnsize(I.\"type\", I.count, I.\"distinct\"),\n"
- " heapsize(I.\"type\", I.\"distinct\",
I.\"atomwidth\"),\n"
- " indexsize(I.\"reference\", I.\"count\"),\n"
- " I.sorted\n"
- " from sys.storagemodelinput I;\n"
- "end;\n"
-
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list