MonetDB: Jul2017 - Properly respect DEFAULT values in the Python...

2017-11-13 Thread Mark Raasveldt
Changeset: 4303f7489624 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4303f7489624
Modified Files:
sql/backends/monet5/Tests/pyloader01.sql
sql/backends/monet5/Tests/pyloader01.stable.out
sql/backends/monet5/UDF/pyapi/emit.c
sql/backends/monet5/UDF/pyapi/pyloader.c
sql/include/sql_catalog.h
sql/server/rel_updates.c
Branch: Jul2017
Log Message:

Properly respect DEFAULT values in the Python loader.


diffs (145 lines):

diff --git a/sql/backends/monet5/Tests/pyloader01.sql 
b/sql/backends/monet5/Tests/pyloader01.sql
--- a/sql/backends/monet5/Tests/pyloader01.sql
+++ b/sql/backends/monet5/Tests/pyloader01.sql
@@ -1,7 +1,7 @@
 
 START TRANSACTION;
 
-CREATE TABLE mytable(a DOUBLE, d int, s STRING);
+CREATE TABLE mytable(a DOUBLE, d int, s STRING DEFAULT 'hello');
 
 CREATE LOADER myfunc() LANGUAGE PYTHON {
_emit.emit({'a':42,'d':1})
@@ -23,10 +23,10 @@ SELECT name,func,mod,language,type,side_
 
 
 -- there is a reason for this, functions with 0, 1, 2 and 3+ arguments are 
handled differently.
+COPY LOADER INTO mytable FROM myfunc();
 COPY LOADER INTO mytable FROM myfunc3(46, 'asdf', 3.2);
 COPY LOADER INTO mytable FROM myfunc2(45, 'asdf');
 COPY LOADER INTO mytable FROM myfunc1(44);
-COPY LOADER INTO mytable FROM myfunc();
 
 SELECT * FROM mytable;
 
diff --git a/sql/backends/monet5/Tests/pyloader01.stable.out 
b/sql/backends/monet5/Tests/pyloader01.stable.out
--- a/sql/backends/monet5/Tests/pyloader01.stable.out
+++ b/sql/backends/monet5/Tests/pyloader01.stable.out
@@ -56,11 +56,11 @@ Ready.
 % sys.mytable, sys.mytable,sys.mytable # table_name
 % a,   d,  s # name
 % double,  int,clob # type
-% 24,  1,  5 # length
+% 24,  1,  7 # length
+[ 42,  1,  "'hello'"   ]
 [ 46,  4,  "hello" ]
-[ 45,  3,  NULL]
-[ 44,  2,  NULL]
-[ 42,  1,  NULL]
+[ 45,  3,  "'hello'"   ]
+[ 44,  2,  "'hello'"   ]
 #DROP TABLE mytable;
 #DROP ALL LOADER myfunc;
 #CREATE LOADER myfunc() LANGUAGE PYTHON {
diff --git a/sql/backends/monet5/UDF/pyapi/emit.c 
b/sql/backends/monet5/UDF/pyapi/emit.c
--- a/sql/backends/monet5/UDF/pyapi/emit.c
+++ b/sql/backends/monet5/UDF/pyapi/emit.c
@@ -199,6 +199,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self
 
self->cols[self->ncols].b = COLnew(0, bat_type, 
0, TRANSIENT);
self->cols[self->ncols].name = GDKstrdup(val);
+   self->cols[self->ncols].def = NULL;
if (self->nvals > 0) {
// insert NULL values up until the 
current entry
for (ai = 0; ai < self->nvals; ai++) {
@@ -209,9 +210,9 @@ PyObject *PyEmit_Emit(PyEmitObject *self
goto wrapup;
}
}
-   self->cols[i].b->tnil = 1;
-   self->cols[i].b->tnonil = 0;
-   BATsetcount(self->cols[i].b, 
self->nvals);
+   self->cols[self->ncols].b->tnil = 1;
+   self->cols[self->ncols].b->tnonil = 0;
+   BATsetcount(self->cols[self->ncols].b, 
self->nvals);
}
self->ncols++;
}
@@ -337,14 +338,21 @@ PyObject *PyEmit_Emit(PyEmitObject *self
self->cols[i].b->tnonil = 1 - 
self->cols[i].b->tnil;
}
} else {
+   void* nill_value = ATOMnil(self->cols[i].b->ttype);
+   void* default_value = self->cols[i].def ?
+   
self->cols[i].def :
+   nill_value;
for (ai = 0; ai < (size_t)el_count; ai++) {
-   if (BUNappend(self->cols[i].b, 
ATOMnil(self->cols[i].b->ttype),
+   if (BUNappend(self->cols[i].b,
+ default_value,
  0) != GDK_SUCCEED) {
goto wrapup;
}
}
-   self->cols[i].b->tnil = 1;
-   self->cols[i].b->tnonil = 0;
+   if 
(BATatoms[self->cols[i].b->ttype].atomCmp(default_value, nill_value) == 0) {
+   self->cols[i].b->tnil = 1;
+   self->cols[i].b->tnonil = 0;
+   }
}
BATsetcount(self->cols[i].b, self->nvals + 

MonetDB: default - Approve test error output

2017-11-13 Thread Pedro Ferreira
Changeset: 5d237f1d0a3f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d237f1d0a3f
Modified Files:
monetdb5/mal/Tests/tst1002.stable.out
Branch: default
Log Message:

Approve test error output


diffs (12 lines):

diff --git a/monetdb5/mal/Tests/tst1002.stable.out 
b/monetdb5/mal/Tests/tst1002.stable.out
--- a/monetdb5/mal/Tests/tst1002.stable.out
+++ b/monetdb5/mal/Tests/tst1002.stable.out
@@ -19,7 +19,7 @@ catch MALException:str; 
 io.printf("%s\n":str, MALException:str);   #[4] (0) IOprintf 5 <- 6 4 
 exit MALException:str; #[5] (0)  4 
 end user.foo;  #[6] (0)  
-MALException:bbp.bind:Object not found
+MALException:bbp.bind:HY002!Object not found
 
 # 15:35:45 >  
 # 15:35:45 >  "Done."
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Handle should be closed in case of malloc fai...

2017-11-13 Thread Pedro Ferreira
Changeset: e3ebf40c1553 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e3ebf40c1553
Modified Files:
monetdb5/mal/mal_linker.c
Branch: default
Log Message:

Handle should be closed in case of malloc failure


diffs (21 lines):

diff --git a/monetdb5/mal/mal_linker.c b/monetdb5/mal/mal_linker.c
--- a/monetdb5/mal/mal_linker.c
+++ b/monetdb5/mal/mal_linker.c
@@ -240,12 +240,16 @@ loadLibrary(str filename, int flag)
filesLoaded[lastfile].modname = GDKstrdup(filename);
if(filesLoaded[lastfile].modname == NULL) {
MT_lock_unset(_contextLock);
+   if (handle)
+   dlclose(handle);
throw(LOADER, "loadLibrary", RUNTIME_LOAD_ERROR " could 
not allocate space");
}
filesLoaded[lastfile].fullname = GDKstrdup(handle ? nme : "");
if(filesLoaded[lastfile].fullname == NULL) {
+   MT_lock_unset(_contextLock);
GDKfree(filesLoaded[lastfile].modname);
-   MT_lock_unset(_contextLock);
+   if (handle)
+   dlclose(handle);
throw(LOADER, "loadLibrary", RUNTIME_LOAD_ERROR " could 
not allocate space");
}
filesLoaded[lastfile].handle = handle ? handle : 
filesLoaded[0].handle;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Added some missing SQL error codes

2017-11-13 Thread Pedro Ferreira
Changeset: 4d5e564c08c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4d5e564c08c6
Modified Files:
monetdb5/mal/mal_factory.c
monetdb5/mal/mal_import.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_parser.c
monetdb5/modules/atoms/batxml.c
monetdb5/modules/atoms/json.c
monetdb5/modules/atoms/mtime.c
monetdb5/modules/kernel/aggr.c
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/bat5.c
monetdb5/modules/kernel/batcolor.c
monetdb5/modules/kernel/batmmath.c
monetdb5/modules/kernel/batstr.c
monetdb5/modules/kernel/group.c
monetdb5/modules/kernel/microbenchmark.c
monetdb5/modules/mal/batcalc.c
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/calc.c
monetdb5/modules/mal/factories.c
monetdb5/modules/mal/language.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/mat.c
monetdb5/modules/mal/mkey.c
monetdb5/modules/mal/orderidx.c
monetdb5/modules/mal/pcre.c
monetdb5/modules/mal/profiler.c
monetdb5/modules/mal/remote.c
monetdb5/modules/mal/transaction.c
monetdb5/modules/mal/txtsim.c
monetdb5/modules/mal/wlc.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_multiplex.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_upgrades.c
Branch: default
Log Message:

Added some missing SQL error codes


diffs (truncated from 2248 to 300 lines):

diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -306,7 +306,7 @@ yieldFactory(MalBlkPtr mb, InstrPtr p, i
pl->env = NULL;
return MAL_SUCCEED;
}
-   throw(MAL, "factory.yield", RUNTIME_OBJECT_MISSING);
+   throw(MAL, "factory.yield", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
 }
 
 /*
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -320,7 +320,7 @@ compileString(Symbol *fcn, Client cntxt,
b = (buffer *) GDKzalloc(sizeof(buffer));
if (b == NULL) {
GDKfree(qry);
-   return MAL_MALLOC_FAIL;
+   throw(MAL,"mal.eval",SQLSTATE(HY001) MAL_MALLOC_FAIL);
}
 
buffer_init(b, qry, len);
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
@@ -815,7 +815,7 @@ str runMALsequence(Client cntxt, MalBlkP
b = 
BBPquickdesc(stk->stk[getArg(pci, i)].val.bval, FALSE);
if (b == NULL) {
if (ret == MAL_SUCCEED)
-   ret = 
createException(MAL, "mal.propertyCheck", RUNTIME_OBJECT_MISSING);
+   ret = 
createException(MAL, "mal.propertyCheck", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
continue;
}
b = 
BATdescriptor(stk->stk[getArg(pci, i)].val.bval);
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -1115,7 +1115,7 @@ fcnHeader(Client cntxt, int kind)
cntxt->backup = cntxt->curprg;
cntxt->curprg = newFunction( modnme, fnme, kind);
if(cntxt->curprg == NULL) {
-   parseError(cntxt, MAL_MALLOC_FAIL);
+   parseError(cntxt, SQLSTATE(HY001) MAL_MALLOC_FAIL);
cntxt->curprg = cntxt->backup;
return 0;
}
@@ -1374,7 +1374,7 @@ parseFunction(Client cntxt, int kind)
}
nme = idCopy(cntxt, i);
if (nme == NULL) {
-   parseError(cntxt, MAL_MALLOC_FAIL);
+   parseError(cntxt, SQLSTATE(HY001) MAL_MALLOC_FAIL);
return 0;
}
curInstr->fcn = getAddress(nme);
@@ -1529,7 +1529,7 @@ parseAssign(Client cntxt, int cntrl)
curPrg = cntxt->curprg;
curBlk = curPrg->def;
if((curInstr = newInstruction(curBlk, NULL, NULL)) == NULL) {
-   parseError(cntxt, MAL_MALLOC_FAIL);
+   parseError(cntxt, SQLSTATE(HY001) MAL_MALLOC_FAIL);
return;
}
 
@@ -1776,7 +1776,7 @@ parseMAL(Client cntxt, Symbol curPrg, in
if (! skipcomments && e > start 

MonetDB: sqlextra - Merge with default

2017-11-13 Thread Pedro Ferreira
Changeset: bb6b1c7f6700 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb6b1c7f6700
Added Files:
sql/jdbc/tests/Tests/Bug_PrepStmtSetString_6382.SQL.bat
sql/jdbc/tests/Tests/Bug_PrepStmtSetString_6382.SQL.sh
sql/jdbc/tests/Tests/Bug_PrepStmtSetString_6382.stable.err
sql/jdbc/tests/Tests/Bug_PrepStmtSetString_6382.stable.out
sql/test/BugTracker-2009/Tests/AVG_of_SQRT.SF-2757642.sql

sql/test/BugTracker-2016/Tests/min-max-uuid-column-wrong-results.Bug-3953.sql
sql/test/BugTracker-2017/Tests/check_system_schema.Bug-6437.sql
sql/test/BugTracker-2017/Tests/check_system_schema.Bug-6437.stable.err
sql/test/BugTracker-2017/Tests/check_system_schema.Bug-6437.stable.out
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.sql
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.err
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.out
sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.sql
sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.err
sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.out
sql/test/BugTracker-2017/Tests/double-groupby-column.Bug-6207.sql
sql/test/BugTracker-2017/Tests/double-groupby-column.Bug-6207.stable.err
sql/test/BugTracker-2017/Tests/double-groupby-column.Bug-6207.stable.out
sql/test/BugTracker-2017/Tests/drop_schema_restrict.Bug-6438.sql
sql/test/BugTracker-2017/Tests/drop_schema_restrict.Bug-6438.stable.err
sql/test/BugTracker-2017/Tests/drop_schema_restrict.Bug-6438.stable.out
sql/test/BugTracker-2017/Tests/drop_system_schema.Bug-6437.sql
sql/test/BugTracker-2017/Tests/drop_system_schema.Bug-6437.stable.err
sql/test/BugTracker-2017/Tests/drop_system_schema.Bug-6437.stable.out

sql/test/BugTracker-2017/Tests/insert_into_multiple_subqueries.Bug-6448.sql

sql/test/BugTracker-2017/Tests/insert_into_multiple_subqueries.Bug-6448.stable.err

sql/test/BugTracker-2017/Tests/insert_into_multiple_subqueries.Bug-6448.stable.out
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.sql
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.err
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.out
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.err
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-not-in.Bug-6416.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-not-in.Bug-6416.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-not-in.Bug-6416.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-select-in.Bug-6433.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-select-in.Bug-6433.stable.err

sql/test/BugTracker-2017/Tests/sqlitelogictest-select-in.Bug-6433.stable.out

sql/test/BugTracker-2017/Tests/sqlitelogictest-select-not-in.Bug-6435.sql

sql/test/BugTracker-2017/Tests/sqlitelogictest-select-not-in.Bug-6435.stable.err