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

Reply via email to