Changeset: 257116830be5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/257116830be5
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Merged with Jan2022


diffs (truncated from 2310 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9293,7 +9293,7 @@
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) 
",     "mvc_bind_idxbat_wrap;",        "Bind the 'schema.table.index' BAT with 
access kind:\n0 - base table\n1 - inserts\n2 - updates" ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int):bat[:any_1] ",  
"mvc_bind_idxbat_wrap;",        "Bind the 'schema.table.index' BAT with access 
kind:\n0 - base table\n1 - inserts\n2 - updates" ]
 [ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng) (X_4:oid, X_5:bat[:oid]) ",       "mvc_claim_wrap;",      
"Claims slots for appending rows."      ]
-[ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str):lng ",        "mvc_clear_table_wrap;",        "Clear the table 
sname.tname."  ]
+[ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str, X_2:int):lng ",       "mvc_clear_table_wrap;",        "Clear the table 
sname.tname."  ]
 [ "sql",       "copy_from",    "unsafe pattern sql.copy_from(X_0:ptr, X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:lng, X_7:lng, X_8:int, X_9:str, 
X_10:int, X_11:int):bat[:any]... ",     "mvc_import_table_wrap;",       "Import 
a table from bstream s with the \ngiven tuple and seperators (sep/rsep)"        
]
 [ "sql",       "copy_rejects", "pattern sql.copy_rejects() (X_0:bat[:lng], 
X_1:bat[:int], X_2:bat[:str], X_3:bat[:str]) ",     "COPYrejects;", ""      ]
 [ "sql",       "copy_rejects_clear",   "unsafe pattern 
sql.copy_rejects_clear():void ",        "COPYrejects_clear;",   ""      ]
@@ -9680,7 +9680,7 @@
 [ "wlc",       "alter_user",   "pattern wlc.alter_user(X_0:str, X_1:str, 
X_2:int, X_3:str, X_4:str):void ",    "WLCgeneric;",  "Catalog operation 
alter_user"  ]
 [ "wlc",       "append",       "pattern wlc.append(X_0:str, X_1:str, X_2:str, 
X_3:any):int ",  "WLCappend;",   "Keep the insertions in the 
workload-capture-replay list"       ]
 [ "wlc",       "catalog",      "pattern wlc.catalog(X_0:str):void ",   
"WLCcatalog;",  "Keep the catalog changing queries for replay. "        ]
-[ "wlc",       "clear_table",  "pattern wlc.clear_table(X_0:str, X_1:str):int 
",       "WLCclear_table;",      "Keep the deletions in the 
workload-capture-replay list"        ]
+[ "wlc",       "clear_table",  "pattern wlc.clear_table(X_0:str, X_1:str, 
X_2:int):int ",      "WLCclear_table;",      "Keep the deletions in the 
workload-capture-replay list"        ]
 [ "wlc",       "comment_on",   "pattern wlc.comment_on(X_0:int, X_1:str):void 
",       "WLCgeneric;",  "Catalog operation comment_on"  ]
 [ "wlc",       "commit",       "pattern wlc.commit():void ",   
"WLCcommitCmd;",        "Commit the workload-capture-replay record"     ]
 [ "wlc",       "commit",       "pattern wlc.commit():void ",   
"WLCcommitCmd;",        "Mark the end of the work unit" ]
@@ -9750,7 +9750,7 @@
 [ "wlr",       "alter_user",   "pattern wlr.alter_user(X_0:str, X_1:str, 
X_2:int, X_3:str, X_4:str):void ",    "WLRgeneric;",  "Catalog operation 
alter_user"  ]
 [ "wlr",       "append",       "pattern wlr.append(X_0:str, X_1:str, X_2:str, 
X_3:oid, X_4:bat[:oid], X_5:any...):int ",       "WLRappend;",   "Apply the 
insertions in the workload-capture-replay list"      ]
 [ "wlr",       "catalog",      "pattern wlr.catalog(X_0:str):void ",   
"WLRcatalog;",  "A catalog changing query"      ]
-[ "wlr",       "clear_table",  "pattern wlr.clear_table(X_0:str, X_1:str):int 
",       "WLRclear_table;",      "Destroy the tuples in the table"       ]
+[ "wlr",       "clear_table",  "pattern wlr.clear_table(X_0:str, X_1:str, 
X_2:int):int ",      "WLRclear_table;",      "Destroy the tuples in the table"  
     ]
 [ "wlr",       "comment_on",   "pattern wlr.comment_on(X_0:int, X_1:str):void 
",       "WLRgeneric;",  "Catalog operation comment_on"  ]
 [ "wlr",       "commit",       "pattern wlr.commit():void ",   "WLRcommit;",   
"Mark the end of the work unit" ]
 [ "wlr",       "create_function",      "pattern wlr.create_function(X_0:str, 
X_1:str, X_2:int):void ", "WLRgeneric;",  "Catalog operation create_function"   
  ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12595,7 +12595,7 @@
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) 
",     "mvc_bind_idxbat_wrap;",        "Bind the 'schema.table.index' BAT with 
access kind:\n0 - base table\n1 - inserts\n2 - updates" ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int):bat[:any_1] ",  
"mvc_bind_idxbat_wrap;",        "Bind the 'schema.table.index' BAT with access 
kind:\n0 - base table\n1 - inserts\n2 - updates" ]
 [ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng) (X_4:oid, X_5:bat[:oid]) ",       "mvc_claim_wrap;",      
"Claims slots for appending rows."      ]
-[ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str):lng ",        "mvc_clear_table_wrap;",        "Clear the table 
sname.tname."  ]
+[ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str, X_2:int):lng ",       "mvc_clear_table_wrap;",        "Clear the table 
sname.tname."  ]
 [ "sql",       "copy_from",    "unsafe pattern sql.copy_from(X_0:ptr, X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:lng, X_7:lng, X_8:int, X_9:str, 
X_10:int, X_11:int):bat[:any]... ",     "mvc_import_table_wrap;",       "Import 
a table from bstream s with the \ngiven tuple and seperators (sep/rsep)"        
]
 [ "sql",       "copy_rejects", "pattern sql.copy_rejects() (X_0:bat[:lng], 
X_1:bat[:int], X_2:bat[:str], X_3:bat[:str]) ",     "COPYrejects;", ""      ]
 [ "sql",       "copy_rejects_clear",   "unsafe pattern 
sql.copy_rejects_clear():void ",        "COPYrejects_clear;",   ""      ]
@@ -13001,7 +13001,7 @@
 [ "wlc",       "alter_user",   "pattern wlc.alter_user(X_0:str, X_1:str, 
X_2:int, X_3:str, X_4:str):void ",    "WLCgeneric;",  "Catalog operation 
alter_user"  ]
 [ "wlc",       "append",       "pattern wlc.append(X_0:str, X_1:str, X_2:str, 
X_3:any):int ",  "WLCappend;",   "Keep the insertions in the 
workload-capture-replay list"       ]
 [ "wlc",       "catalog",      "pattern wlc.catalog(X_0:str):void ",   
"WLCcatalog;",  "Keep the catalog changing queries for replay. "        ]
-[ "wlc",       "clear_table",  "pattern wlc.clear_table(X_0:str, X_1:str):int 
",       "WLCclear_table;",      "Keep the deletions in the 
workload-capture-replay list"        ]
+[ "wlc",       "clear_table",  "pattern wlc.clear_table(X_0:str, X_1:str, 
X_2:int):int ",      "WLCclear_table;",      "Keep the deletions in the 
workload-capture-replay list"        ]
 [ "wlc",       "comment_on",   "pattern wlc.comment_on(X_0:int, X_1:str):void 
",       "WLCgeneric;",  "Catalog operation comment_on"  ]
 [ "wlc",       "commit",       "pattern wlc.commit():void ",   
"WLCcommitCmd;",        "Commit the workload-capture-replay record"     ]
 [ "wlc",       "commit",       "pattern wlc.commit():void ",   
"WLCcommitCmd;",        "Mark the end of the work unit" ]
@@ -13071,7 +13071,7 @@
 [ "wlr",       "alter_user",   "pattern wlr.alter_user(X_0:str, X_1:str, 
X_2:int, X_3:str, X_4:str):void ",    "WLRgeneric;",  "Catalog operation 
alter_user"  ]
 [ "wlr",       "append",       "pattern wlr.append(X_0:str, X_1:str, X_2:str, 
X_3:oid, X_4:bat[:oid], X_5:any...):int ",       "WLRappend;",   "Apply the 
insertions in the workload-capture-replay list"      ]
 [ "wlr",       "catalog",      "pattern wlr.catalog(X_0:str):void ",   
"WLRcatalog;",  "A catalog changing query"      ]
-[ "wlr",       "clear_table",  "pattern wlr.clear_table(X_0:str, X_1:str):int 
",       "WLRclear_table;",      "Destroy the tuples in the table"       ]
+[ "wlr",       "clear_table",  "pattern wlr.clear_table(X_0:str, X_1:str, 
X_2:int):int ",      "WLRclear_table;",      "Destroy the tuples in the table"  
     ]
 [ "wlr",       "comment_on",   "pattern wlr.comment_on(X_0:int, X_1:str):void 
",       "WLRgeneric;",  "Catalog operation comment_on"  ]
 [ "wlr",       "commit",       "pattern wlr.commit():void ",   "WLRcommit;",   
"Mark the end of the work unit" ]
 [ "wlr",       "create_function",      "pattern wlr.create_function(X_0:str, 
X_1:str, X_2:int):void ", "WLRgeneric;",  "Catalog operation create_function"   
  ]
diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c
--- a/monetdb5/modules/mal/wlc.c
+++ b/monetdb5/modules/mal/wlc.c
@@ -1014,6 +1014,7 @@ WLCclear_table(Client cntxt, MalBlkPtr m
        p = newStmt(cntxt->wlc, "wlr","clear_table");
        p = pushStr(cntxt->wlc, p, getVarConstant(mb, getArg(pci,1)).val.sval);
        p = pushStr(cntxt->wlc, p, getVarConstant(mb, getArg(pci,2)).val.sval);
+       p = pushInt(cntxt->wlc, p, getVarConstant(mb, getArg(pci,3)).val.ival);
        if( cntxt->wlc_kind < WLC_UPDATE)
                cntxt->wlc_kind = WLC_UPDATE;
 
@@ -1086,7 +1087,7 @@ mel_func wlc_init_funcs[] = {
  pattern("wlc", "append", WLCappend, false, "Keep the insertions in the 
workload-capture-replay list", args(1,5, 
arg("",int),arg("sname",str),arg("tname",str),arg("cname",str),argany("ins",0))),
  pattern("wlc", "update", WLCupdate, false, "Keep the update in the 
workload-capture-replay list", args(1,6, 
arg("",int),arg("sname",str),arg("tname",str),arg("cname",str),argany("tid",0),argany("val",0))),
  pattern("wlc", "delete", WLCdelete, false, "Keep the deletions in the 
workload-capture-replay list", args(1,4, 
arg("",int),arg("sname",str),arg("tname",str),argany("b",0))),
- pattern("wlc", "clear_table", WLCclear_table, false, "Keep the deletions in 
the workload-capture-replay list", args(1,3, 
arg("",int),arg("sname",str),arg("tname",str))),
+ pattern("wlc", "clear_table", WLCclear_table, false, "Keep the deletions in 
the workload-capture-replay list", args(1,4, 
arg("",int),arg("sname",str),arg("tname",str),arg("restart_sequences",int))),
  pattern("wlc", "commit", WLCcommitCmd, false, "Commit the 
workload-capture-replay record", noargs),
  pattern("wlc", "rollback", WLCcommitCmd, false, "Rollback the 
workload-capture-replay record", noargs),
  pattern("wlc", "create_seq", WLCgeneric, false, "Catalog operation 
create_seq", args(0,3, arg("sname",str),arg("seqname",str),arg("action",int))),
diff --git a/sql/backends/monet5/UDF/pyapi3/conversion3.c 
b/sql/backends/monet5/UDF/pyapi3/conversion3.c
--- a/sql/backends/monet5/UDF/pyapi3/conversion3.c
+++ b/sql/backends/monet5/UDF/pyapi3/conversion3.c
@@ -612,6 +612,8 @@ PyObject *PyObject_CheckForConversion(Py
                        if (PyType_IsNumpyArray(data)) {
                                if (PyArray_NDIM((PyArrayObject *)data) != 1) {
                                        IsSingleArray = FALSE;
+                               } else if (PyArray_SIZE((PyArrayObject *)data) 
== 0) {
+                                       IsSingleArray = TRUE;
                                } else {
                                        pColO = PyArray_GETITEM(
                                                (PyArrayObject *)data,
@@ -619,8 +621,12 @@ PyObject *PyObject_CheckForConversion(Py
                                        IsSingleArray = 
PyType_IsPyScalar(pColO);
                                }
                        } else if (PyList_Check(data)) {
-                               pColO = PyList_GetItem(data, 0);
-                               IsSingleArray = PyType_IsPyScalar(pColO);
+                               if (PyList_Size(data) == 0) {
+                                       IsSingleArray = TRUE;
+                               } else {
+                                       pColO = PyList_GetItem(data, 0);
+                                       IsSingleArray = 
PyType_IsPyScalar(pColO);
+                               }
                        } else if (!PyType_IsNumpyMaskedArray(data)) {
                                // it is neither a python array, numpy array or 
numpy masked
                                // array, thus the result is unsupported! Throw 
an exception!
diff --git a/sql/backends/monet5/mal_backend.c 
b/sql/backends/monet5/mal_backend.c
--- a/sql/backends/monet5/mal_backend.c
+++ b/sql/backends/monet5/mal_backend.c
@@ -50,3 +50,14 @@ backend_destroy(backend *b)
                b->subbackend->destroy(b->subbackend);
        _DELETE(b);
 }
+
+/* for recursive functions, if the implementation is not set yet, take it from 
the current compilation */
+str
+backend_function_imp(backend *b, sql_func *f)
+{
+       str res = sql_func_imp(f);
+
+       if (b->mvc->forward && strcmp(res, "") == 0 && b->mvc->forward->base.id 
== f->base.id)
+               res = b->fimp;
+       return res;
+}
diff --git a/sql/backends/monet5/mal_backend.h 
b/sql/backends/monet5/mal_backend.h
--- a/sql/backends/monet5/mal_backend.h
+++ b/sql/backends/monet5/mal_backend.h
@@ -63,10 +63,12 @@ typedef struct backend {
        lng last_id;
        lng rowcnt;
        subbackend *subbackend;
+       str fimp; /* for recurisve functions keep the to be generated MAL 
function name here */
 } backend;
 
 extern backend *backend_reset(backend *b);
 extern backend *backend_create(mvc *m, Client c);
 extern void backend_destroy(backend *b);
+extern str backend_function_imp(backend *b, sql_func *f);
 
 #endif /*MAL_BACKEND_H*/
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
@@ -1110,7 +1110,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
        mvc *sql = be->mvc;
        stmt *s = NULL;
 
-       if (THRhighwater())
+       if (mvc_highwater(sql))
                return sql_error(be->mvc, 10, SQLSTATE(42000) "Query too 
complex: running out of stack space");
 
        if (!e) {
@@ -1249,7 +1249,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                if (f->func->lang == FUNC_LANG_MAL && 
backend_create_mal_func(be->mvc, f->func) < 0)
                        return NULL;
                mod = sql_func_mod(f->func);
-               fimp = sql_func_imp(f->func);
+               fimp = backend_function_imp(be, f->func);
 
                if (f->func->side_effect && left && left->nrcols > 0 && 
f->func->type != F_LOADER && exps_card(exps) < CARD_MULTI) {
                        rows = bin_find_smallest_column(be, left);
@@ -1641,7 +1641,7 @@ check_types(backend *be, sql_subtype *t,
                }
        }
        if (err) {
-               stmt *res = sql_error(sql, 03, SQLSTATE(42000) "types %s(%u,%u) 
(%s) and %s(%u,%u) (%s) are not equal",
+               stmt *res = sql_error(sql, 10, SQLSTATE(42000) "types %s(%u,%u) 
(%s) and %s(%u,%u) (%s) are not equal",
                        fromtype->type->base.name,
                        fromtype->digits,
                        fromtype->scale,
@@ -1868,7 +1868,7 @@ exp2bin_args(backend *be, sql_exp *e, li
 {
        mvc *sql = be->mvc;
 
-       if (THRhighwater())
+       if (mvc_highwater(sql))
                return sql_error(sql, 10, SQLSTATE(42000) "Query too complex: 
running out of stack space");
 
        if (!e || !args)
@@ -1948,7 +1948,7 @@ exps2bin_args(backend *be, list *exps, l
 static list *
 rel2bin_args(backend *be, sql_rel *rel, list *args)
 {
-       if (THRhighwater())
+       if (mvc_highwater(be->mvc))
                return sql_error(be->mvc, 10, SQLSTATE(42000) "Query too 
complex: running out of stack space");
 
        if (!rel || !args)
@@ -2130,7 +2130,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                                        if (backend_create_subfunc(be, f, ops) 
< 0)
                                                return NULL;
                                        str mod = sql_func_mod(f->func);
-                                       str fcn = sql_func_imp(f->func);
+                                       str fcn = backend_function_imp(be, 
f->func);
                                        q = pushStr(be->mb, q, mod);
                                        q = pushStr(be->mb, q, fcn);
                                        psub = stmt_direct_func(be, q);
@@ -3924,7 +3924,7 @@ insert_check_ukey(backend *be, list *ins
 
                                /* foreach column add predicate */
                                if (add_column_predicate(be, c->c) != LOG_OK)
-                                       return sql_error(sql, 02, 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                                       return sql_error(sql, 10, 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
                                col = stmt_col(be, c->c, dels, dels->partition);
                                if ((k->type == ukey) && stmt_has_null(col)) {
@@ -3947,7 +3947,7 @@ insert_check_ukey(backend *be, list *ins
 
                                /* foreach column add predicate */
                                if (add_column_predicate(be, c->c) != LOG_OK)
-                                       return sql_error(sql, 02, 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                                       return sql_error(sql, 10, 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
                                col = stmt_col(be, c->c, dels, dels->partition);
                                list_append(lje, col);
@@ -4011,7 +4011,7 @@ insert_check_ukey(backend *be, list *ins
 
                /* add predicate for this column */
                if (add_column_predicate(be, c->c) != LOG_OK)
-                       return sql_error(sql, 02, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       return sql_error(sql, 10, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
 
                s = stmt_col(be, c->c, dels, dels->partition);
                if ((k->type == ukey) && stmt_has_null(s)) {
@@ -4083,7 +4083,7 @@ insert_check_fkey(backend *be, list *ins
 
                /* foreach column add predicate */
                if (add_column_predicate(be, c->c) != LOG_OK)
-                       return sql_error(sql, 02, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       return sql_error(sql, 10, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
        if (pin && list_length(pin->op4.lval))
@@ -4201,7 +4201,7 @@ sql_insert_check_null(backend *be, sql_t
 
                        /* foreach column add predicate */
                        if (add_column_predicate(be, c) != LOG_OK)
-                               return sql_error(sql, 02, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                               return sql_error(sql, 10, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
 
                        if (!(s->key && s->nrcols == 0)) {
                                s = stmt_selectnil(be, column(be, i));
@@ -4279,7 +4279,7 @@ rel2bin_insert(backend *be, sql_rel *rel
 
 /* before */
        if (!sql_insert_triggers(be, t, updates, 0))
-               return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: 
triggers failed for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(27000) "INSERT INTO: 
triggers failed for table '%s'", t->base.name);
 
        insert = inserts->op4.lval->h->data;
        if (insert->nrcols == 0) {
@@ -4343,12 +4343,12 @@ rel2bin_insert(backend *be, sql_rel *rel
                return NULL;
 
        if (!sql_insert_triggers(be, t, updates, 1))
-               return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: 
triggers failed for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(27000) "INSERT INTO: 
triggers failed for table '%s'", t->base.name);
        /* update predicate list */
        if (rel->r && !rel_predicates(be, rel->r))
                return NULL;
        if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(be->mvc->session->tr, t->base.id, dml) != 
LOG_OK)
-               return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+               return sql_error(sql, 10, SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
        if (ddl) {
                ret = ddl;
@@ -5191,26 +5191,26 @@ sql_update(backend *be, sql_table *t, st
        idx_updates = update_idxs_and_check_keys(be, t, rows, updates, l, NULL);
        if (!idx_updates) {
                assert(0);
-               return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: failed to 
update indexes for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(42000) "UPDATE: failed to 
update indexes for table '%s'", t->base.name);
        }
 
 /* before */
        if (!sql_update_triggers(be, t, rows, updates, 0))
-               return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers 
failed for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(27000) "UPDATE: triggers 
failed for table '%s'", t->base.name);
 
 /* apply updates */
        for (i = 0, n = ol_first_node(t->columns); i < nr_cols && n; i++, n = 
n->next) {
                sql_column *c = n->data;
 
                if (updates[i])
-                       append(l, stmt_update_col(be, c, rows, updates[i]));
+                       append(l, stmt_update_col(be, c, rows, updates[i]));
        }
        if (cascade_updates(be, t, rows, updates))
-               return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: cascade 
failed for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(42000) "UPDATE: cascade 
failed for table '%s'", t->base.name);
 
 /* after */
        if (!sql_update_triggers(be, t, rows, updates, 1))
-               return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers 
failed for table '%s'", t->base.name);
+               return sql_error(sql, 10, SQLSTATE(27000) "UPDATE: triggers 
failed for table '%s'", t->base.name);
 
 /* cascade ?? */
        return l;
@@ -5300,7 +5300,7 @@ rel2bin_update(backend *be, sql_rel *rel
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to