Changeset: a6ec18daf0b8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a6ec18daf0b8
Branch: default
Log Message:

Merge branch odbc_loader into default.


diffs (truncated from 3977 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -47373,6 +47373,16 @@ tanh
 command mmath.tanh(X_0:flt):flt
 MATHunary_TANHflt
 (empty)
+monetdb
+epilogue
+command monetdb.epilogue():void
+MONETDBepilogue
+(empty)
+monetdb
+prelude
+pattern monetdb.prelude():void
+MONETDBprelude
+(empty)
 mtime
 addmonths
 command mtime.addmonths(X_0:date, X_1:int):date
@@ -49199,6 +49209,11 @@ unsafe pattern sql.next_value(X_0:str, X
 mvc_next_value
 return the next value of the sequence
 sql
+normalize_monetdb_url
+pattern sql.normalize_monetdb_url(X_0:str):str
+SQLnormalize_monetdb_url
+Normalize mapi:monetdb://, monetdb:// or monetdbs:// URL
+sql
 nth_value
 pattern sql.nth_value(X_0:any_1, X_1:lng, X_2:bit, X_3:bit, X_4:int, X_5:oid, 
X_6:oid):any_1
 SQLnth_value
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -35853,6 +35853,16 @@ tanh
 command mmath.tanh(X_0:flt):flt
 MATHunary_TANHflt
 (empty)
+monetdb
+epilogue
+command monetdb.epilogue():void
+MONETDBepilogue
+(empty)
+monetdb
+prelude
+pattern monetdb.prelude():void
+MONETDBprelude
+(empty)
 mtime
 addmonths
 command mtime.addmonths(X_0:date, X_1:int):date
@@ -37654,6 +37664,11 @@ unsafe pattern sql.next_value(X_0:str, X
 mvc_next_value
 return the next value of the sequence
 sql
+normalize_monetdb_url
+pattern sql.normalize_monetdb_url(X_0:str):str
+SQLnormalize_monetdb_url
+Normalize mapi:monetdb://, monetdb:// or monetdbs:// URL
+sql
 nth_value
 pattern sql.nth_value(X_0:any_1, X_1:lng, X_2:bit, X_3:bit, X_4:int, X_5:oid, 
X_6:oid):any_1
 SQLnth_value
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
@@ -745,19 +745,19 @@ mparm mparm_enumerate(int i);
 bool mparm_is_core(mparm parm);
 const char *mparm_name(mparm parm);
 mparm mparm_parse(const char *name);
-char *msetting_as_string(const msettings *mp, mparm parm);
+const char *msetting_as_string(const msettings *mp, mparm parm, char *scratch, 
size_t scratch_size);
 bool msetting_bool(const msettings *mp, mparm parm);
 long msetting_long(const msettings *mp, mparm parm);
 const char *msetting_parm_name(const msettings *mp, mparm parm);
 msettings_error msetting_parse(msettings *mp, mparm parm, const char *text);
 int msetting_parse_bool(const char *text);
 msettings_error msetting_set_bool(msettings *mp, mparm parm, bool value);
-msettings_error msetting_set_ignored(msettings *mp, const char *key, const 
char *value);
 msettings_error msetting_set_long(msettings *mp, mparm parm, long value);
 msettings_error msetting_set_named(msettings *mp, bool allow_core, const char 
*key, const char *value);
 msettings_error msetting_set_string(msettings *mp, mparm parm, const char 
*value) __attribute__((__nonnull__(3)));
 const char *msetting_string(const msettings *mp, mparm parm);
 msettings *msettings_clone(const msettings *mp);
+msettings *msettings_clone_with(msettings_allocator alloc, void *alloc_state, 
const msettings *mp);
 long msettings_connect_binary(const msettings *mp);
 const char *msettings_connect_certhash_digits(const msettings *mp);
 const char *msettings_connect_clientcert(const msettings *mp);
@@ -768,13 +768,16 @@ const char *msettings_connect_tcp(const 
 enum msetting_tls_verify msettings_connect_tls_verify(const msettings *mp);
 const char *msettings_connect_unix(const msettings *mp);
 msettings *msettings_create(void);
+msettings *msettings_create_with(msettings_allocator alloc, void *alloc_state);
 const msettings *msettings_default;
 msettings *msettings_destroy(msettings *mp);
+msettings_allocator msettings_get_allocator(const msettings *mp, void 
**put_alloc_state_here);
 bool msettings_malloc_failed(msettings_error err);
-bool msettings_parse_url(msettings *mp, const char *url, char **error_buffer);
+msettings_error msettings_parse_url(msettings *mp, const char *url);
 void msettings_reset(msettings *mp);
 void msettings_set_localizer(msettings *mp, const char *(*localizer)(const 
void *data, mparm parm), void *data);
-bool msettings_validate(msettings *mp, char **errmsg);
+msettings_error msettings_validate(msettings *mp);
+size_t msettings_write_url(const msettings *mp, char *buffer, size_t);
 const char *wsaerror(int);
 
 # monetdb5
@@ -1624,6 +1627,8 @@ str lng_num2dec_flt(flt *res, const lng 
 str lng_num2dec_int(int *res, const lng *v, const int *d2, const int *s2);
 str lng_num2dec_lng(lng *res, const lng *v, const int *d2, const int *s2);
 str lng_num2dec_sht(sht *res, const lng *v, const int *d2, const int *s2);
+const char *mapiuri_uri(const char *uri, allocator *sa);
+int mapiuri_valid(const char *uri, allocator *sa);
 sql_schema *mvc_bind_schema(mvc *c, const char *sname);
 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);
@@ -1636,13 +1641,21 @@ str mvc_rollback(mvc *c, int chain, cons
 str number2name(str s, int len, int i);
 bool option_disable_fork;
 sql_part *partition_find_part(sql_trans *tr, sql_table *pt, sql_part *pp);
+int pl_register(const char *name, pl_add_types_fptr add_types, pl_load_fptr 
pl_load);
+void pl_unregister(const char *name);
+prop *prop_create(allocator *sa, rel_prop kind, prop *pre);
 void qc_delete(qc *cache, cq *q);
 cq *qc_find(qc *cache, int id);
 cq *qc_insert(qc *cache, allocator *sa, sql_rel *r, symbol *s, list *params, 
mapi_query_t type, char *codedstr, int no_mitosis);
+void rel_base_use_all(mvc *sql, sql_rel *rel);
+sql_rel *rel_basetable(mvc *sql, sql_table *t, const char *tname);
 sql_rel *rel_project(allocator *sa, sql_rel *l, list *e);
+list *rel_projections(mvc *sql, sql_rel *rel, const char *tname, int settname, 
int intern);
 void res_tables_destroy(res_table *results);
 list *sa_list(allocator *sa);
 char *sa_message(allocator *sa, _In_z_ _Printf_format_string_ const char 
*format, ...) __attribute__((__format__(__printf__, 2, 3)));
+msettings *sa_msettings_create(allocator *sa);
+char *sa_msettings_to_string(const msettings *mp, allocator *sa, size_t 
size_hint);
 str sht_dec2_bte(bte *res, const int *s1, const sht *v);
 str sht_dec2_dbl(dbl *res, const int *s1, const sht *v);
 str sht_dec2_flt(flt *res, const int *s1, const sht *v);
@@ -1668,6 +1681,7 @@ void sql_init_subtype(sql_subtype *res, 
 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);
 int sql_trans_create_table(sql_table **tres, sql_trans *tr, sql_schema *s, 
const char *name, const char *sql, int tt, bit system, int persistence, int 
commit_action, int sz, bte properties);
+stmt *stmt_func(backend *be, stmt *ops, const char *name, sql_rel *imp, int 
f_union);
 
 # stream
 stream *block_stream(stream *s);
diff --git a/clients/examples/C/murltest.c b/clients/examples/C/murltest.c
--- a/clients/examples/C/murltest.c
+++ b/clients/examples/C/murltest.c
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-char *USAGE = "Usage: murltest TESTFILES..";
+char *USAGE = "Usage: murltest [-c] [-v[v[v]]] TESTFILES..";
 
 static bool
 run_file(const char *filename, int verbose)
@@ -71,7 +71,9 @@ main(int argc, char **argv)
                        *next_slot++ = arg;
                        continue;
                }
-               if (arg[1] == 'v') {
+               if (strcmp(arg, "-c") == 0) {
+                       use_custom_allocator();
+               }else if (arg[1] == 'v') {
                        char *p = &arg[1];
                        while (*p == 'v') {
                                p++;
diff --git a/clients/examples/C/murltest.h b/clients/examples/C/murltest.h
--- a/clients/examples/C/murltest.h
+++ b/clients/examples/C/murltest.h
@@ -11,7 +11,10 @@
  */
 
 #include "monetdb_config.h"
+#include "stream.h"
+#include "msettings.h"
 
-#include "stream.h"
+
+void use_custom_allocator(void);
 
 bool run_tests(stream *s, int verbose);
diff --git a/clients/examples/C/testsfile.c b/clients/examples/C/testsfile.c
--- a/clients/examples/C/testsfile.c
+++ b/clients/examples/C/testsfile.c
@@ -27,52 +27,145 @@
 static int start_line = -1;
 static int nstarted = 0;
 static msettings *mp = NULL;
+static msettings_allocator allocator = NULL;
+
+static
+bool verify_roundtrip(const char *location)
+{
+       const char ch = '*';
+       char buffer[1000 + 1];  // + 1 canary byte
+       memset(buffer, ch, sizeof(buffer));
+       const size_t buffer_size = sizeof(buffer) - 1;
+
+       size_t length = msettings_write_url(mp, buffer, buffer_size);
+       if (length == 0) {
+               fprintf(stderr, "%s: msettings_write_url returned 0\n", 
location);
+               return false;
+       }
+       if (length > buffer_size - 1) {
+               fprintf(stderr, "%s: Reconstructed the URL unexpectedly large: 
%zu\n", location, length);
+               return false;
+       }
+       if (memchr(buffer, '\0', buffer_size) == NULL) {
+               fprintf(stderr, "%s: msettings_write_url didn't NUL terminate 
the result\n", location);
+               return false;
+       }
+       if (buffer[buffer_size] != ch) {
+               fprintf(stderr, "%s: msettting_write_url wrote beyond the end 
of the buffer\n", location);
+               return false;
+       }
+
+       msettings *tmp = msettings_create_with(allocator, NULL);
+       if (tmp == NULL) {
+               fprintf(stderr, "malloc failed\n");
+               return false;
+       }
+       msettings_error err = msettings_parse_url(tmp, buffer);
+       if (err) {
+               fprintf(stderr, "%s: Reconstructed URL <%s> couldn't be parsed: 
%s", location, buffer, err);
+               msettings_destroy(tmp);
+               return false;
+       }
+
+       mparm parm;
+       bool ok = true;
+       for (int i = 0; (parm = mparm_enumerate(i)) != MP_UNKNOWN; i++) {
+               if (parm == MP_IGNORE)
+                       continue;
+               char scratch1[100], scratch2[100];
+               const char *mp_val = msetting_as_string(mp, parm, scratch1, 
sizeof(scratch1));
+               const char *tmp_val = msetting_as_string(tmp, parm, scratch2, 
sizeof(scratch2));
+               if (strcmp(mp_val, tmp_val) != 0) {
+                       fprintf(
+                               stderr,
+                               "%s: setting %s: reconstructed value <%s> != 
<%s>\n",
+                               location, mparm_name(parm), tmp_val, mp_val);
+                       ok = false;
+               }
+       }
+       msettings_destroy(tmp);
+       if (!ok)
+               return false;
+
+       // check if rendering to a smaller buffer returns the same length
+       // and writes a prefix of the original.
+
+       assert(length > 0); // we checked this above
+
+       char buffer2[sizeof(buffer)];
+       for (size_t shorter = length; shorter > 0; shorter--) {
+               memset(buffer2, ch, sizeof(buffer));
+               size_t n = msettings_write_url(mp, buffer2, shorter);
+               if (n != length) {
+                       fprintf(
+                               stderr,\
+                               "%s: writing to buffer of size %zu returns %zu, 
expected %zu\n",
+                               location, shorter, n, length);
+                       return false;
+               }
+               char *first_nul = memchr(buffer2, '\0', shorter);
+               if (first_nul == NULL) {
+                       fprintf(stderr, "%s: truncated <%zu> 
msettings_write_url didn't NUL terminate\n", location, shorter);
+                       return false;
+               } else if (strncmp(buffer2, buffer, shorter - 1) != 0) {
+                       fprintf(stderr,
+                       "%s: truncated <%zu> msettings_write_url wrote <%s> 
which isn't a prefix of <%s>",
+                       location, shorter,
+                       buffer2, buffer
+                       );
+                       return false;
+               }
+               for (size_t i = shorter + 1; i < sizeof(buffer); i++) {
+                       if (buffer2[i] != ch) {
+                               fprintf(
+                                       stderr,
+                                       "%s: truncated <%zu> 
wsettings_write_url wrote beyond end of buffer (pos %zu)\n",
+                                       location, shorter, i);
+                               return false;
+                       }
+               }
+       }
+
+       return true;
+}
 
 static bool
 handle_parse_command(const char *location, char *url)
 {
-       char *errmsg = NULL;
-       bool ok = msettings_parse_url(mp, url, &errmsg);
-       if (!ok) {
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to