Changeset: cffe5ff7bdad for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/cffe5ff7bdad Modified Files: gdk/gdk.h gdk/gdk_private.h Branch: string_imprints Log Message:
Merge with default diffs (truncated from 125754 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 @@ -5752,7 +5752,7 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_0:bat[:timestamp], X_1:bat[:oid], X_2:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "uuid", "command batcalc.uuid(X_0:bat[:str], X_1:bat[:oid]):bat[:uuid] ", "UUIDstr2uuid_bulk;", "" ] [ "batcalc", "uuid", "command batcalc.uuid(X_0:bat[:uuid], X_1:bat[:oid]):bat[:uuid] ", "UUIDuuid2uuid_bulk;", "" ] -[ "batcalc", "wkb", "command batcalc.wkb(X_0:bat[:wkb], X_1:int, X_2:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] +[ "batcalc", "wkb", "command batcalc.wkb(X_0:bat[:wkb], X_1:bat[:oid], X_2:int, X_3:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] [ "batcalc", "xml", "command batcalc.xml(X_0:bat[:str]):bat[:xml] ", "BATXMLstr2xml;", "" ] [ "batcalc", "xor", "pattern batcalc.xor(X_0:bat[:bit], X_1:bat[:bit]):bat[:bit] ", "CMDbatXOR;", "" ] [ "batcalc", "xor", "pattern batcalc.xor(X_0:bat[:bit], X_1:bat[:bit], X_2:bat[:oid], X_3:bat[:oid]):bat[:bit] ", "CMDbatXOR;", "" ] @@ -9208,7 +9208,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "analyze", "unsafe pattern sql.analyze(X_0:int, X_1:lng, X_2:str, X_3:str):void ", "sql_analyze;", "" ] [ "sql", "analyze", "unsafe pattern sql.analyze(X_0:int, X_1:lng, X_2:str, X_3:str, X_4:str):void ", "sql_analyze;", "" ] [ "sql", "any", "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ", "SQLany_cmp;", "" ] -[ "sql", "append", "pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:lng, X_5:any):int ", "mvc_append_wrap;", "" ] +[ "sql", "append", "pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:bat[:oid], X_5:any):int ", "mvc_append_wrap;", "" ] [ "sql", "argRecord", "pattern sql.argRecord():str ", "SQLargRecord;", "" ] [ "sql", "argRecord", "pattern sql.argRecord(X_0:any...):str ", "SQLargRecord;", "" ] [ "sql", "assert", "pattern sql.assert(X_0:bit, X_1:str):void ", "SQLassert;", "" ] @@ -9232,7 +9232,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "bind_idxbat", "pattern sql.bind_idxbat(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_idxbat_wrap;", "" ] [ "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;", "" ] [ "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;", "" ] -[ "sql", "claim", "unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng):lng ", "mvc_claim_wrap;", "" ] +[ "sql", "claim", "unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng):bat[:oid] ", "mvc_claim_wrap;", "" ] [ "sql", "clear_table", "unsafe pattern sql.clear_table(X_0:str, X_1:str):lng ", "mvc_clear_table_wrap;", "" ] [ "sql", "commit", "unsafe pattern sql.commit():void ", "SQLcommit;", "" ] [ "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;", "" ] @@ -9244,6 +9244,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "corr", "pattern sql.corr(X_0:int, X_1:int, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] [ "sql", "corr", "pattern sql.corr(X_0:lng, X_1:lng, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] [ "sql", "corr", "pattern sql.corr(X_0:sht, X_1:sht, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] +[ "sql", "count", "pattern sql.count(X_0:str, X_1:str):lng ", "SQLbasecount;", "" ] [ "sql", "count", "pattern sql.count(X_0:any_1, X_1:bit, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):lng ", "SQLcount;", "" ] [ "sql", "covariance", "pattern sql.covariance(X_0:bte, X_1:bte, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcovar_samp;", "" ] [ "sql", "covariance", "pattern sql.covariance(X_0:dbl, X_1:dbl, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcovar_samp;", "" ] 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 @@ -8276,7 +8276,7 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_0:bat[:timestamp], X_1:bat[:oid], X_2:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "uuid", "command batcalc.uuid(X_0:bat[:str], X_1:bat[:oid]):bat[:uuid] ", "UUIDstr2uuid_bulk;", "" ] [ "batcalc", "uuid", "command batcalc.uuid(X_0:bat[:uuid], X_1:bat[:oid]):bat[:uuid] ", "UUIDuuid2uuid_bulk;", "" ] -[ "batcalc", "wkb", "command batcalc.wkb(X_0:bat[:wkb], X_1:int, X_2:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] +[ "batcalc", "wkb", "command batcalc.wkb(X_0:bat[:wkb], X_1:bat[:oid], X_2:int, X_3:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] [ "batcalc", "xml", "command batcalc.xml(X_0:bat[:str]):bat[:xml] ", "BATXMLstr2xml;", "" ] [ "batcalc", "xor", "pattern batcalc.xor(X_0:bat[:bit], X_1:bat[:bit]):bat[:bit] ", "CMDbatXOR;", "" ] [ "batcalc", "xor", "pattern batcalc.xor(X_0:bat[:bit], X_1:bat[:bit], X_2:bat[:oid], X_3:bat[:oid]):bat[:bit] ", "CMDbatXOR;", "" ] @@ -12509,7 +12509,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "analyze", "unsafe pattern sql.analyze(X_0:int, X_1:lng, X_2:str, X_3:str):void ", "sql_analyze;", "" ] [ "sql", "analyze", "unsafe pattern sql.analyze(X_0:int, X_1:lng, X_2:str, X_3:str, X_4:str):void ", "sql_analyze;", "" ] [ "sql", "any", "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ", "SQLany_cmp;", "" ] -[ "sql", "append", "pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:lng, X_5:any):int ", "mvc_append_wrap;", "" ] +[ "sql", "append", "pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:bat[:oid], X_5:any):int ", "mvc_append_wrap;", "" ] [ "sql", "argRecord", "pattern sql.argRecord():str ", "SQLargRecord;", "" ] [ "sql", "argRecord", "pattern sql.argRecord(X_0:any...):str ", "SQLargRecord;", "" ] [ "sql", "assert", "pattern sql.assert(X_0:bit, X_1:str):void ", "SQLassert;", "" ] @@ -12535,7 +12535,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "bind_idxbat", "pattern sql.bind_idxbat(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_idxbat_wrap;", "" ] [ "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;", "" ] [ "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;", "" ] -[ "sql", "claim", "unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng):lng ", "mvc_claim_wrap;", "" ] +[ "sql", "claim", "unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng):bat[:oid] ", "mvc_claim_wrap;", "" ] [ "sql", "clear_table", "unsafe pattern sql.clear_table(X_0:str, X_1:str):lng ", "mvc_clear_table_wrap;", "" ] [ "sql", "commit", "unsafe pattern sql.commit():void ", "SQLcommit;", "" ] [ "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;", "" ] @@ -12548,6 +12548,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "corr", "pattern sql.corr(X_0:int, X_1:int, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] [ "sql", "corr", "pattern sql.corr(X_0:lng, X_1:lng, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] [ "sql", "corr", "pattern sql.corr(X_0:sht, X_1:sht, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;", "" ] +[ "sql", "count", "pattern sql.count(X_0:str, X_1:str):lng ", "SQLbasecount;", "" ] [ "sql", "count", "pattern sql.count(X_0:any_1, X_1:bit, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):lng ", "SQLcount;", "" ] [ "sql", "covariance", "pattern sql.covariance(X_0:bte, X_1:bte, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcovar_samp;", "" ] [ "sql", "covariance", "pattern sql.covariance(X_0:dbl, X_1:dbl, X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcovar_samp;", "" ] diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -203,6 +203,7 @@ void BATtseqbase(BAT *b, oid o); void BATundo(BAT *b); BAT *BATunique(BAT *b, BAT *s); BAT *BATunmask(BAT *b); +gdk_return BATupdate(BAT *b, BAT *p, BAT *n, bool force) __attribute__((__warn_unused_result__)); BBPrec *BBP[N_BBPINIT]; gdk_return BBPaddfarm(const char *dirname, uint32_t rolemask, bool logerror); void BBPclear(bat bid); @@ -330,6 +331,7 @@ gdk_return GDKtracer_set_adapter(const c gdk_return GDKtracer_set_component_level(const char *comp, const char *lvl); gdk_return GDKtracer_set_flush_level(const char *lvl); gdk_return GDKtracer_set_layer_level(const char *layer, const char *lvl); +gdk_return GDKtracer_set_tracefile(const char *tracefile); gdk_return GDKtracer_stop(void); size_t GDKuniqueid(size_t offset); gdk_return GDKupgradevarheap(BAT *b, var_t v, BUN cap, bool copyall) __attribute__((__warn_unused_result__)); @@ -894,6 +896,7 @@ const char *columnRef; const char *comment_onRef; const char *commitRef; str compileString(Symbol *fcn, Client c, str s); +char *concatErrors(char *err1, const char *err2) __attribute__((__nonnull__(1, 2))) __attribute__((__returns_nonnull__)); const char *connectRef; const char *contextRef; str convertConstant(malType type, ValPtr vr); diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -394,15 +394,15 @@ dump_foreign_keys(Mapi mid, const char * goto bailout; } snprintf(query, maxquerylen, - "SELECT ps.name, " /* 0 */ + "SELECT ps.name, " /* 0 */ "pkt.name, " /* 1 */ - "pkkc.name, " /* 2 */ - "fkkc.name, " /* 3 */ - "fkkc.nr, " /* 4 */ - "fkk.name, " /* 5 */ - "fkk.\"action\", " /* 6 */ - "fs.name, " /* 7 */ - "fkt.name " /* 8 */ + "pkkc.name, " /* 2 */ + "fkkc.name, " /* 3 */ + "fkkc.nr, " /* 4 */ + "fkk.name, " /* 5 */ + "fkk.\"action\", " /* 6 */ + "fs.name, " /* 7 */ + "fkt.name " /* 8 */ "FROM sys._tables fkt, " "sys.objects fkkc, " "sys.keys fkk, " @@ -430,15 +430,15 @@ dump_foreign_keys(Mapi mid, const char * if (query == NULL) goto bailout; snprintf(query, maxquerylen, - "SELECT ps.name, " /* 0 */ + "SELECT ps.name, " /* 0 */ "pkt.name, " /* 1 */ - "pkkc.name, " /* 2 */ - "fkkc.name, " /* 3 */ - "fkkc.nr, " /* 4 */ - "fkk.name, " /* 5 */ - "fkk.\"action\", " /* 6 */ - "0, " /* 7 */ - "fkt.name " /* 8 */ + "pkkc.name, " /* 2 */ + "fkkc.name, " /* 3 */ + "fkkc.nr, " /* 4 */ + "fkk.name, " /* 5 */ + "fkk.\"action\", " /* 6 */ + "0, " /* 7 */ + "fkt.name " /* 8 */ "FROM sys._tables fkt, " "sys.objects fkkc, " "sys.keys fkk, " @@ -457,14 +457,14 @@ dump_foreign_keys(Mapi mid, const char * "ORDER BY fkk.name, fkkc.nr", tid); } else { query = "SELECT ps.name, " /* 0 */ - "pkt.name, " /* 1 */ + "pkt.name, " /* 1 */ "pkkc.name, " /* 2 */ "fkkc.name, " /* 3 */ - "fkkc.nr, " /* 4 */ - "fkk.name, " /* 5 */ + "fkkc.nr, " /* 4 */ + "fkk.name, " /* 5 */ "fkk.\"action\", " /* 6 */ - "fs.name, " /* 7 */ - "fkt.name " /* 8 */ + "fs.name, " /* 7 */ + "fkt.name " /* 8 */ "FROM sys._tables fkt, " "sys.objects fkkc, " "sys.keys fkk, " @@ -494,40 +494,56 @@ dump_foreign_keys(Mapi mid, const char * cnt = mapi_fetch_row(hdl); while (cnt != 0) { - char *nc_psname = mapi_fetch_field(hdl, 0), *c_psname = nc_psname ? strdup(nc_psname) : NULL; - char *nc_ptname = mapi_fetch_field(hdl, 1), *c_ptname = nc_ptname ? strdup(nc_ptname) : NULL; - char *nc_pcolumn = mapi_fetch_field(hdl, 2), *c_pcolumn = nc_pcolumn ? strdup(nc_pcolumn) : NULL; - char *nc_fcolumn = mapi_fetch_field(hdl, 3), *c_fcolumn = nc_fcolumn ? strdup(nc_fcolumn) : NULL; - char *c_nr = mapi_fetch_field(hdl, 4); /* no need to strdup, because it's not used */ - char *nc_fkname = mapi_fetch_field(hdl, 5), *c_fkname = nc_fkname ? strdup(nc_fkname) : NULL; - char *nc_faction = mapi_fetch_field(hdl, 6), *c_faction = nc_faction ? strdup(nc_faction) : NULL; - char *nc_fsname = mapi_fetch_field(hdl, 7), *c_fsname = nc_fsname ? strdup(nc_fsname) : NULL; - char *nc_ftname = mapi_fetch_field(hdl, 8), *c_ftname = nc_ftname ? strdup(nc_ftname) : NULL; - char **fkeys, **pkeys, *npkey, *nfkey; - int nkeys = 0; + char *c_psname = mapi_fetch_field(hdl, 0); + char *c_ptname = mapi_fetch_field(hdl, 1); + char *c_pcolumn = mapi_fetch_field(hdl, 2); + char *c_fcolumn = mapi_fetch_field(hdl, 3); + char *c_nr = mapi_fetch_field(hdl, 4); + char *c_fkname = mapi_fetch_field(hdl, 5); + char *c_faction = mapi_fetch_field(hdl, 6); + char *c_fsname = mapi_fetch_field(hdl, 7); + char *c_ftname = mapi_fetch_field(hdl, 8); + char **fkeys, **pkeys; + int nkeys = 1; - if (mapi_error(mid) || (nc_psname && !c_psname) || (nc_ptname && !c_ptname) || (nc_pcolumn && !c_pcolumn) || (nc_fcolumn && !c_fcolumn) || - (nc_fkname && !c_fkname) || (nc_faction && !c_faction) || (nc_fsname && !c_fsname) || (nc_ftname && !c_ftname)) { - free(c_psname); - free(c_ptname); - free(c_pcolumn); - free(c_fcolumn); - free(c_fkname); - free(c_faction); - free(c_fsname); - free(c_ftname); + if (mapi_error(mid) || c_psname == NULL || c_ptname == NULL || + c_pcolumn == NULL || c_fcolumn == NULL || c_nr == NULL || + c_fkname == NULL || c_faction == NULL || c_fsname == NULL || + c_ftname == NULL) { + /* none of the columns should be NULL */ goto bailout; } assert(strcmp(c_nr, "0") == 0); (void) c_nr; /* pacify compilers in case assertions are disabled */ - nkeys = 1; fkeys = malloc(nkeys * sizeof(*fkeys)); pkeys = malloc(nkeys * sizeof(*pkeys)); - npkey = c_pcolumn ? strdup(c_pcolumn) : NULL; - nfkey = c_fcolumn ? strdup(c_fcolumn) : NULL; - if (!fkeys || !pkeys || (c_pcolumn && !npkey) || (c_fcolumn && !nfkey)) { - free(nfkey); - free(npkey); + if (fkeys == NULL || pkeys == NULL) { + free(fkeys); + free(pkeys); + goto bailout; + } + pkeys[0] = strdup(c_pcolumn); + fkeys[0] = strdup(c_fcolumn); + c_psname = strdup(c_psname); + c_ptname = strdup(c_ptname); + c_pcolumn = strdup(c_pcolumn); + c_fcolumn = strdup(c_fcolumn); + c_fkname = strdup(c_fkname); + c_faction = strdup(c_faction); + c_fsname = strdup(c_fsname); + c_ftname = strdup(c_ftname); + if (c_psname == NULL || c_ptname == NULL || c_pcolumn == NULL || + c_fcolumn == NULL || c_nr == NULL || c_fkname == NULL || + c_faction == NULL || c_fsname == NULL || c_ftname == NULL || + fkeys[0] == NULL || pkeys[0] == NULL) { + freeall_bailout: + /* free all temporarily allocated data, then bailout */ + while (nkeys-- > 0) { + if (pkeys) + free(pkeys[nkeys]); + if (fkeys) + free(fkeys[nkeys]); + } free(fkeys); free(pkeys); free(c_psname); @@ -540,40 +556,29 @@ dump_foreign_keys(Mapi mid, const char * free(c_ftname); goto bailout; } - pkeys[nkeys - 1] = npkey; - fkeys[nkeys - 1] = nfkey; while ((cnt = mapi_fetch_row(hdl)) != 0 && strcmp(mapi_fetch_field(hdl, 4), "0") != 0) { - char *npkey = mapi_fetch_field(hdl, 2), *pkey = npkey ? strdup(npkey) : NULL; - char *nfkey = mapi_fetch_field(hdl, 3), *fkey = nfkey ? strdup(nfkey) : NULL; + char *pkey = mapi_fetch_field(hdl, 2); + char *fkey = mapi_fetch_field(hdl, 3); char **tkeys; - nkeys++; - tkeys = realloc(pkeys, nkeys * sizeof(*pkeys)); + if (pkey == NULL || fkey == NULL) { + /* we're not expecting NULL values */ + goto freeall_bailout; + } + tkeys = realloc(pkeys, (nkeys + 1) * sizeof(*pkeys)); + if (tkeys == NULL) + goto freeall_bailout; pkeys = tkeys; - tkeys = realloc(fkeys, nkeys * sizeof(*fkeys)); + tkeys = realloc(fkeys, (nkeys + 1) * sizeof(*fkeys)); + if (tkeys == NULL) + goto freeall_bailout; fkeys = tkeys; - if (!tkeys || !fkeys || (npkey && !pkey) || (nfkey && !fkey)) { - nkeys--; - for (int i = 0 ; i < nkeys; i++) { - free(pkeys[i]); - free(fkeys[i]); - } - free(pkey); - free(fkey); - free(pkeys); - free(fkeys); - free(c_psname); - free(c_ptname); - free(c_pcolumn); - free(c_fcolumn); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list