Changeset: 18af8da9899a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/18af8da9899a Branch: default Log Message:
Merge heads. diffs (truncated from 682 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -806,3 +806,4 @@ 8b736d6dcfd63d0560c99fc5427b504c116b74b0 8b736d6dcfd63d0560c99fc5427b504c116b74b0 Sep2022_SP3_release aba8c31c60480148cd388a09ac99b42679406258 Jun2023_1 79dbf838f04483a2d9ccce8332090ff91b18caec Jun2023_3 +79dbf838f04483a2d9ccce8332090ff91b18caec Jun2023_release 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 @@ -1505,8 +1505,15 @@ str dbl_num2dec_bte(bte *res, const dbl str dbl_num2dec_int(int *res, const dbl *v, const int *d2, const int *s2); str dbl_num2dec_lng(lng *res, const dbl *v, const int *d2, const int *s2); str dbl_num2dec_sht(sht *res, const dbl *v, const int *d2, const int *s2); +sql_exp *exp_atom_int(sql_allocator *sa, int i); +sql_exp *exp_atom_lng(sql_allocator *sa, lng l); +sql_exp *exp_atom_ptr(sql_allocator *sa, void *s); +sql_exp *exp_atom_str(sql_allocator *sa, const char *s, sql_subtype *st); +stmt *exp_bin(backend *be, sql_exp *e, stmt *left, stmt *right, stmt *grp, stmt *ext, stmt *cnt, stmt *sel, int depth, int reduce, int push); sql_exp *exp_column(sql_allocator *sa, const char *rname, const char *name, sql_subtype *t, unsigned int card, int has_nils, int unique, int intern); +sql_exp *exp_op(sql_allocator *sa, list *l, sql_subfunc *f); sql_table *find_table_or_view_on_scope(mvc *sql, sql_schema *s, const char *sname, const char *tname, const char *error, bool isView); +int fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr fl_load); str flt_num2dec_bte(bte *res, const flt *v, const int *d2, const int *s2); str flt_num2dec_int(int *res, const flt *v, const int *d2, const int *s2); str flt_num2dec_lng(lng *res, const flt *v, const int *d2, const int *s2); @@ -1575,6 +1582,7 @@ sql_schema *mvc_bind_schema(mvc *c, cons sql_table *mvc_bind_table(mvc *c, sql_schema *s, const char *tname); str mvc_commit(mvc *c, int chain, const char *name, bool enabling_auto_commit); int mvc_create_column(sql_column **col, mvc *m, sql_table *t, const char *name, sql_subtype *tpe); +int mvc_create_table(sql_table **t, mvc *m, sql_schema *s, const char *name, int tt, bit system, int persistence, int commit_action, int sz, bit properties); int mvc_result_column(backend *be, const char *tn, const char *name, const char *typename, int digits, int scale, BAT *b); int mvc_result_table(backend *be, oid query_id, int nr_cols, mapi_query_t type); str mvc_rollback(mvc *c, int chain, const char *name, bool disabling_auto_commit); @@ -1586,8 +1594,10 @@ cq *qc_find(qc *cache, int id); cq *qc_insert(qc *cache, sql_allocator *sa, sql_rel *r, symbol *s, list *params, mapi_query_t type, char *codedstr, int no_mitosis); sql_rel *rel_project(sql_allocator *sa, sql_rel *l, list *e); void res_tables_destroy(res_table *results); +void *sa_alloc(sql_allocator *sa, size_t sz); sql_allocator *sa_create(sql_allocator *pa); list *sa_list(sql_allocator *sa); +char *sa_message(sql_allocator *sa, _In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 2, 3))); sql_allocator *sa_reset(sql_allocator *sa); char *sa_strdup(sql_allocator *sa, const char *s); void *sa_zalloc(sql_allocator *sa, size_t sz); @@ -1610,6 +1620,9 @@ str sht_num2dec_flt(flt *res, const sht str sht_num2dec_int(int *res, const sht *v, const int *d2, const int *s2); str sht_num2dec_lng(lng *res, const sht *v, const int *d2, const int *s2); str sht_num2dec_sht(sht *res, const sht *v, const int *d2, const int *s2); +sql_subtype *sql_bind_subtype(sql_allocator *sa, const char *name, unsigned int digits, unsigned int scale); +sql_subfunc *sql_find_func(mvc *sql, const char *sname, const char *fname, int nrargs, sql_ftype type, bool private, sql_subfunc *prev); +int sql_find_subtype(sql_subtype *res, const char *name, unsigned int digits, unsigned int scale); void sql_init_subtype(sql_subtype *res, sql_type *t, unsigned int digits, unsigned int scale); void sql_register(const char *name, const unsigned char *code); int sql_trans_add_dependency_change(sql_trans *tr, sqlid id, sql_dependency_change_type tp); diff --git a/common/stream/CMakeLists.txt b/common/stream/CMakeLists.txt --- a/common/stream/CMakeLists.txt +++ b/common/stream/CMakeLists.txt @@ -117,6 +117,7 @@ endif() install(TARGETS stream + COMPONENT stream EXPORT streamTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt --- a/gdk/CMakeLists.txt +++ b/gdk/CMakeLists.txt @@ -141,6 +141,7 @@ endif() install(TARGETS bat + COMPONENT monetdb EXPORT gdkTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/gdk/gdk_strimps.c b/gdk/gdk_strimps.c --- a/gdk/gdk_strimps.c +++ b/gdk/gdk_strimps.c @@ -212,6 +212,10 @@ STRMPmakebitstring(const char *s, Strimp pi.pos = 0; pi.lim = strlen(s); + if (pi.lim < 2) { + return ret; + } + while(pair_at(&pi, &cp)) { pair_idx = STRMPpairLookup(r, &cp); if (pair_idx >= 0) @@ -324,6 +328,9 @@ STRMPbuildHeader(BAT *b, BAT *s, CharPai pi.s = cs; pi.pos = 0; pi.lim = strlen(pi.s); + if (pi.lim < 2) { + continue; + } while (pair_at(pip, cpp)) { if(ignored(cpp, 1)) { /* Skip this AND the next pair diff --git a/monetdb5/mal/CMakeLists.txt b/monetdb5/mal/CMakeLists.txt --- a/monetdb5/mal/CMakeLists.txt +++ b/monetdb5/mal/CMakeLists.txt @@ -17,6 +17,7 @@ set(mal_public_headers ${CMAKE_CURRENT_SOURCE_DIR}/mal_function.h ${CMAKE_CURRENT_SOURCE_DIR}/mal_import.h ${CMAKE_CURRENT_SOURCE_DIR}/mal_instruction.h + ${CMAKE_CURRENT_SOURCE_DIR}/mal_builder.h ${CMAKE_CURRENT_SOURCE_DIR}/mal_linker.h ${CMAKE_CURRENT_SOURCE_DIR}/mal_listing.h ${CMAKE_CURRENT_SOURCE_DIR}/mal_module.h @@ -34,7 +35,7 @@ target_sources(mal mal.c mal_atom.c mal_atom.h mal_authorize.c - mal_builder.c mal_builder.h + mal_builder.c mal_client.c mal_exception.c mal_function.c mal_function.h diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c --- a/monetdb5/mal/mal_embedded.c +++ b/monetdb5/mal/mal_embedded.c @@ -117,7 +117,7 @@ malEmbeddedBoot(int workerlimit, int mem MT_thread_set_qry_ctx(qc_old); return msg; } - char *modules[5] = { "embedded", "sql", "generator", "udf", "csv" }; + char *modules[6] = { "embedded", "sql", "generator", "udf", "csv" }; if ((msg = malIncludeModules(c, modules, 0, !with_mapi_server, NULL)) != MAL_SUCCEED) { MCcloseClient(c); MT_thread_set_qry_ctx(qc_old); diff --git a/sql/backends/monet5/CMakeLists.txt b/sql/backends/monet5/CMakeLists.txt --- a/sql/backends/monet5/CMakeLists.txt +++ b/sql/backends/monet5/CMakeLists.txt @@ -44,6 +44,8 @@ set(sql_public_headers $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_semantic.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_dump.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/opt_backend.h> + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/mal_backend.h> + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/sql_statement.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_import.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_mem.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_list.h> @@ -76,7 +78,10 @@ set(sql_public_headers $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_basetable.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_semantic.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_dump.h> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/opt_backend.h>) + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/opt_backend.h> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/mal_backend.h> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_statement.h> +) #add_library(sql MODULE) add_library(sql SHARED) @@ -126,7 +131,7 @@ create_include_object( target_sources(sql PRIVATE sql.c sql.h - mal_backend.c mal_backend.h + mal_backend.c sql_user.c sql_user.h sql_scenario.c sql_scenario.h sql_execute.c sql_execute.h @@ -137,7 +142,7 @@ target_sources(sql rel_predicates.c rel_predicates.h sql_cat.c sql_cat.h sql_transaction.c sql_transaction.h - sql_statement.c sql_statement.h + sql_statement.c sql_statistics.c sql_statistics.h sql_gencode.c sql_gencode.h sql_optimizer.c sql_optimizer.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 @@ -1293,6 +1293,8 @@ exp2bin_file_loader(backend *be, sql_exp else return NULL; file_loader_t *fl = fl_find(ext); + if (!fl) + return NULL; return (stmt*)fl->load(be, f, filename); } diff --git a/sql/backends/monet5/rel_bin.h b/sql/backends/monet5/rel_bin.h --- a/sql/backends/monet5/rel_bin.h +++ b/sql/backends/monet5/rel_bin.h @@ -15,7 +15,7 @@ #include "sql_statement.h" #include "mal_backend.h" -extern stmt * exp_bin(backend *be, sql_exp *e, stmt *left, stmt *right, stmt *grp, stmt *ext, stmt *cnt, stmt *sel, int depth, int reduce, int push); +sql_export stmt * exp_bin(backend *be, sql_exp *e, stmt *left, stmt *right, stmt *grp, stmt *ext, stmt *cnt, stmt *sel, int depth, int reduce, int push); extern stmt *output_rel_bin(backend *be, sql_rel *rel, int top); #endif /*_REL_BIN_H_*/ diff --git a/sql/backends/monet5/vaults/csv/CMakeLists.txt b/sql/backends/monet5/vaults/csv/CMakeLists.txt --- a/sql/backends/monet5/vaults/csv/CMakeLists.txt +++ b/sql/backends/monet5/vaults/csv/CMakeLists.txt @@ -20,9 +20,11 @@ target_include_directories(csv target_link_libraries(csv PRIVATE monetdb_config_header + sqlinclude + sql monetdb5 bat - sqlinclude) + ) set_target_properties(csv PROPERTIES diff --git a/sql/backends/monet5/vaults/csv/csv.c b/sql/backends/monet5/vaults/csv/csv.c --- a/sql/backends/monet5/vaults/csv/csv.c +++ b/sql/backends/monet5/vaults/csv/csv.c @@ -159,7 +159,7 @@ detect_decimal(const char *s, const char while(s < e) { if (!dotseen && *s == '.') - dotseen = (e-(s+1)); + dotseen = (int)(e-(s+1)); else if (!isdigit(*s)) break; s++; @@ -299,7 +299,7 @@ get_name(sql_allocator *sa, const char * { if (!has_header) { char buff[25]; - snprintf(buff, 100, "name_%i", col); + snprintf(buff, 25, "name_%i", col); return SA_STRDUP(sa, buff); } else { const char *e = next_delim(s, es, delim, quote); @@ -348,6 +348,15 @@ typedef struct csv_t { bool has_header; } csv_t; +/* + * returns an error string (static or via tmp sa_allocator allocated), NULL on success + * + * Extend the subfunc f with result columns, ie. + f->res = typelist; + f->coltypes = typelist; + f->colnames = nameslist; use tname if passed, for the relation name + * Fill the list res_exps, with one result expressions per resulting column. + */ static str csv_relation(mvc *sql, sql_subfunc *f, char *filename, list *res_exps, char *tname) { @@ -355,7 +364,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c char buf[8196+1]; if(file == NULL) - throw(SQL, SQLSTATE(42000), "csv" RUNTIME_FILE_NOT_FOUND); + return RUNTIME_FILE_NOT_FOUND; /* * detect delimiter ;|,\t using quote \" or \' or none TODO escape \"\'\\ or none @@ -365,9 +374,9 @@ csv_relation(mvc *sql, sql_subfunc *f, c ssize_t l = fread(buf, 1, 8196, file); fclose(file); if (l<0) - throw(SQL, SQLSTATE(42000), "csv" RUNTIME_LOAD_ERROR); + return RUNTIME_LOAD_ERROR; buf[l] = 0; - bool has_header; + bool has_header = false; int nr_fields = 0; char q = detect_quote(buf); char d = detect_delimiter(buf, q, &nr_fields); @@ -394,8 +403,9 @@ csv_relation(mvc *sql, sql_subfunc *f, c list_append(typelist, t); list_append(res_exps, exp_column(sql->sa, NULL, name, t, CARD_MULTI, 1, 0, 0)); } else { + /* shouldn't be possible, we fallback to strings */ GDKfree(types); - throw(SQL, SQLSTATE(42000), "csv" RUNTIME_LOAD_ERROR); // TODO: this should throw a 'unsupported column type' error. + assert(0); } } GDKfree(types); diff --git a/sql/common/sql_string.h b/sql/common/sql_string.h --- a/sql/common/sql_string.h +++ b/sql/common/sql_string.h @@ -25,7 +25,7 @@ extern char *sql_strdup(char *s); extern const char *sql_escape_ident(sql_allocator *sa, const char *s); extern char *sql_message(_In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 1, 2))); -extern char *sa_message(sql_allocator *sa, _In_z_ _Printf_format_string_ const char *format, ...) +sql_export char *sa_message(sql_allocator *sa, _In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 2, 3))); #endif /*_SQL_STRING_H_*/ diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h --- a/sql/common/sql_types.h +++ b/sql/common/sql_types.h _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org