MonetDB: default - Check whether search string is NULL.

2024-05-24 Thread Sjoerd Mullender via checkin-list
Changeset: d0bb7d4a703b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d0bb7d4a703b
Modified Files:
monetdb5/modules/atoms/str.c
Branch: default
Log Message:

Check whether search string is NULL.
Fixes #7523.


diffs (118 lines):

diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -1910,60 +1910,62 @@ STRselect(MalStkPtr stk, InstrPtr pci,
throw(MAL, fname, SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
 
-   BATiter bi = bat_iterator(b);
-   QryCtx *qry_ctx = MT_thread_get_qry_ctx();
-   if (icase)
-   str_cmp = str_icmp;
-   oid *vals = Tloc(bn, 0);
-   const int klen = str_strlen(key);
-   if (ci.tpe == cand_dense) {
-   if (with_strimps_anti)
-   scanloop(strNil(v) || str_cmp(v, key, klen) == 0, 
canditer_next_dense);
-   else if (anti)
-   scanloop(!strNil(v) && str_cmp(v, key, klen) != 0, 
canditer_next_dense);
-   else
-   scanloop(!strNil(v) && str_cmp(v, key, klen) == 0, 
canditer_next_dense);
-   } else {
-   if (with_strimps_anti)
-   scanloop(strNil(v) || str_cmp(v, key, klen) == 0, 
canditer_next);
-   else if (anti)
-   scanloop(!strNil(v) && str_cmp(v, key, klen) != 0, 
canditer_next);
-   else
-   scanloop(!strNil(v) && str_cmp(v, key, klen) == 0, 
canditer_next);
-   }
-   bat_iterator_end(&bi);
-   TIMEOUT_CHECK(qry_ctx, HANDLE_TIMEOUT(qry_ctx));
-
-   if (!msg) {
-   BATsetcount(bn, rcnt);
-   bn->tsorted = true;
-   bn->trevsorted = bn->batCount <= 1;
-   bn->tkey = true;
-   bn->tnil = false;
-   bn->tnonil = true;
-   bn->tseqbase = rcnt == 0 ?
-   0 : rcnt == 1 ?
-   *(const oid *) Tloc(bn, 0) : rcnt == ci.ncand && ci.tpe 
== cand_dense ? ci.hseq : oid_nil;
-
-   if (with_strimps_anti) {
-   BAT *rev;
-   if (old_s) {
-   rev = BATdiffcand(old_s, bn);
+   if (!strNil(key)) {
+   BATiter bi = bat_iterator(b);
+   QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+   if (icase)
+   str_cmp = str_icmp;
+   oid *vals = Tloc(bn, 0);
+   const int klen = str_strlen(key);
+   if (ci.tpe == cand_dense) {
+   if (with_strimps_anti)
+   scanloop(strNil(v) || str_cmp(v, key, klen) == 
0, canditer_next_dense);
+   else if (anti)
+   scanloop(!strNil(v) && str_cmp(v, key, klen) != 
0, canditer_next_dense);
+   else
+   scanloop(!strNil(v) && str_cmp(v, key, klen) == 
0, canditer_next_dense);
+   } else {
+   if (with_strimps_anti)
+   scanloop(strNil(v) || str_cmp(v, key, klen) == 
0, canditer_next);
+   else if (anti)
+   scanloop(!strNil(v) && str_cmp(v, key, klen) != 
0, canditer_next);
+   else
+   scanloop(!strNil(v) && str_cmp(v, key, klen) == 
0, canditer_next);
+   }
+   bat_iterator_end(&bi);
+   TIMEOUT_CHECK(qry_ctx, HANDLE_TIMEOUT(qry_ctx));
+
+   if (!msg) {
+   BATsetcount(bn, rcnt);
+   bn->tsorted = true;
+   bn->trevsorted = bn->batCount <= 1;
+   bn->tkey = true;
+   bn->tnil = false;
+   bn->tnonil = true;
+   bn->tseqbase = rcnt == 0 ?
+   0 : rcnt == 1 ?
+   *(const oid *) Tloc(bn, 0) : rcnt == ci.ncand 
&& ci.tpe == cand_dense ? ci.hseq : oid_nil;
+
+   if (with_strimps_anti) {
+   BAT *rev;
+   if (old_s) {
+   rev = BATdiffcand(old_s, bn);
 #ifndef NDEBUG
-   BAT *is = BATintersectcand(old_s, bn);
-   if (is) {
-   assert(is->batCount == bn->batCount);
-   BBPreclaim(is);
-   }
-   assert(rev->batCount == old_s->batCount - 
bn->batCount);
+   BAT *is = BATintersectcand(old_s, bn);
+   if (is) {
+   assert(is->batCount == 
bn->batCount);
+ 

MonetDB: odbc-tls - Minor tweaks

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: c47c2f306dfe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c47c2f306dfe
Modified Files:
clients/mapilib/connect.c
clients/odbc/driver/ODBCDbc.c
clients/odbc/driver/SQLConnect.c
clients/odbc/driver/SQLSetConnectAttr.c
Branch: odbc-tls
Log Message:

Minor tweaks


diffs (65 lines):

diff --git a/clients/mapilib/connect.c b/clients/mapilib/connect.c
--- a/clients/mapilib/connect.c
+++ b/clients/mapilib/connect.c
@@ -330,7 +330,7 @@ connect_socket_tcp_addr(Mapi mid, struct
port = -1;
addrtext = NULL;
}
-   mapi_log_record(mid, "CONN", "Trying IP %s port %d", addrtext ? 
addrtext : "", port);
+   mapi_log_record(mid, "CONN", "Trying IP %s port %d wih timeout 
%ld", addrtext ? addrtext : "", port, timeout);
}
 
 
diff --git a/clients/odbc/driver/ODBCDbc.c b/clients/odbc/driver/ODBCDbc.c
--- a/clients/odbc/driver/ODBCDbc.c
+++ b/clients/odbc/driver/ODBCDbc.c
@@ -39,7 +39,7 @@
 #define ODBC_DBC_MAGIC_NR  1365/* for internal sanity check only */
 
 static const char*
-parm_localizer(const void *data, mparm parm)
+odbc_parm_localizer(const void *data, mparm parm)
 {
(void)data;
for (int i = 0; i < attr_setting_count; i++) {
@@ -75,7 +75,7 @@ newODBCDbc(ODBCEnv *env)
return NULL;
}
 
-   msettings_set_localizer(settings, parm_localizer, NULL);
+   msettings_set_localizer(settings, odbc_parm_localizer, NULL);
 
*dbc = (ODBCDbc) {
.Env = env,
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -203,7 +203,7 @@ buildConnectionString(const char *dsn, c
if (!value)
goto end;
 
-   bool show_this = true;
+   bool show_this;  // intentionally uninitialized
if (parm == MP_USER || parm == MP_PASSWORD) {
show_this = true;
} else if (parm == MP_PORT && msetting_long(settings, MP_PORT) 
<= 0) {
diff --git a/clients/odbc/driver/SQLSetConnectAttr.c 
b/clients/odbc/driver/SQLSetConnectAttr.c
--- a/clients/odbc/driver/SQLSetConnectAttr.c
+++ b/clients/odbc/driver/SQLSetConnectAttr.c
@@ -41,7 +41,6 @@ MNDBSetConnectAttr(ODBCDbc *dbc,
   SQLINTEGER StringLength)
 {
(void) StringLength;/* Stefan: unused!? */
-   long timeout;
 
switch (Attribute) {
case SQL_ATTR_AUTOCOMMIT:   /* SQLUINTEGER */
@@ -67,7 +66,7 @@ MNDBSetConnectAttr(ODBCDbc *dbc,
addDbcError(dbc, "IM001", NULL, 0);
return SQL_ERROR;
case SQL_ATTR_CONNECTION_TIMEOUT:   /* SQLUINTEGER */
-   timeout = 1000 * (long)(uintptr_t) ValuePtr;
+   long timeout = 1000 * (long)(uintptr_t) ValuePtr;
msetting_set_long(dbc->settings, MP_CONNECT_TIMEOUT, timeout);
if (dbc->mid)
mapi_timeout(dbc->mid, timeout);
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Valgrind

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: af5ad4b5e3f2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/af5ad4b5e3f2
Modified Files:
clients/odbc/driver/SQLConnect.c
clients/odbc/samples/odbcconnect.c
Branch: odbc-tls
Log Message:

Valgrind


diffs (31 lines):

diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -530,6 +530,7 @@ MNDBConnectSettings(ODBCDbc *dbc, const 
const char *error_state = "08001";
const char *error_explanation = mid ? mapi_error_str(mid) : 
NULL;
addDbcError(dbc, error_state, error_explanation, 0);
+   msettings_destroy(clone);
return SQL_ERROR;
}
 
@@ -543,7 +544,7 @@ MNDBConnectSettings(ODBCDbc *dbc, const 
msettings_destroy(dbc->settings);
dbc->settings = clone;
 
-   dbc->mapToLongVarchar = msetting_long(settings, MP_MAPTOLONGVARCHAR);
+   dbc->mapToLongVarchar = msetting_long(dbc->settings, 
MP_MAPTOLONGVARCHAR);
 
dbc->Connected = true;
 
diff --git a/clients/odbc/samples/odbcconnect.c 
b/clients/odbc/samples/odbcconnect.c
--- a/clients/odbc/samples/odbcconnect.c
+++ b/clients/odbc/samples/odbcconnect.c
@@ -111,6 +111,7 @@ main(int argc, char **argv)
SQLDisconnect(conn);
SQLFreeHandle(SQL_HANDLE_DBC, conn);
SQLFreeHandle(SQL_HANDLE_DBC, env);
+   free(targets);
 
return ret;
 }
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - More valgrind

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 093d9a60f588 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/093d9a60f588
Modified Files:
clients/odbc/driver/ODBCDbc.h
clients/odbc/driver/SQLConnect.c
clients/odbc/driver/SQLDriverConnect.c
clients/odbc/samples/odbcconnect.c
Branch: odbc-tls
Log Message:

More valgrind


diffs (112 lines):

diff --git a/clients/odbc/driver/ODBCDbc.h b/clients/odbc/driver/ODBCDbc.h
--- a/clients/odbc/driver/ODBCDbc.h
+++ b/clients/odbc/driver/ODBCDbc.h
@@ -164,6 +164,7 @@ SQLRETURN MNDBSetConnectAttr(ODBCDbc *db
  */
 extern char *ODBCTranslateSQL(ODBCDbc *dbc, const SQLCHAR *query, size_t 
length, SQLULEN noscan);
 
+// consumes 'settings'!
 extern SQLRETURN MNDBConnectSettings(ODBCDbc *dbc, const char *dsn, msettings 
*settings);
 extern SQLRETURN MNDBDriverConnect(ODBCDbc *dbc, SQLHWND WindowHandle, const 
SQLCHAR *InConnectionString, SQLSMALLINT StringLength1, SQLCHAR 
*OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength2Ptr, 
SQLUSMALLINT DriverCompletion, int tryOnly);
 
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -482,9 +482,7 @@ MNDBConnect(ODBCDbc *dbc,
SQLRETURN ret;
 
ret = MNDBConnectSettings(dbc, dsn, settings);
-   if (SQL_SUCCEEDED(ret)) {
-   settings = NULL; // must not be free'd now
-   }
+   settings = NULL; // must not be free'd now
 
goto end;
 
@@ -522,6 +520,7 @@ MNDBConnectSettings(ODBCDbc *dbc, const 
 
Mapi mid = mapi_settings(settings);
if (mid) {
+   settings = NULL; // will be free'd as part of 'mid' now
mapi_setAutocommit(mid, dbc->sql_attr_autocommit == 
SQL_AUTOCOMMIT_ON);
mapi_set_size_header(mid, true);
mapi_reconnect(mid);
@@ -530,6 +529,9 @@ MNDBConnectSettings(ODBCDbc *dbc, const 
const char *error_state = "08001";
const char *error_explanation = mid ? mapi_error_str(mid) : 
NULL;
addDbcError(dbc, error_state, error_explanation, 0);
+   if (mid)
+   mapi_destroy(mid);
+   msettings_destroy(settings);
msettings_destroy(clone);
return SQL_ERROR;
}
diff --git a/clients/odbc/driver/SQLDriverConnect.c 
b/clients/odbc/driver/SQLDriverConnect.c
--- a/clients/odbc/driver/SQLDriverConnect.c
+++ b/clients/odbc/driver/SQLDriverConnect.c
@@ -370,10 +370,10 @@ MNDBDriverConnect(ODBCDbc *dbc,
setODBCdebug(scratch_no_alloc, false);
 
rc = MNDBConnectSettings(dbc, dsn, settings);
+   settings = NULL; // do not free now
if (!SQL_SUCCEEDED(rc))
goto end; // not to 'failure', all errors have already been 
logged
 
-   settings = NULL; // do not free now
 
// Build a connect string for the current connection
// and put it in the buffer.
diff --git a/clients/odbc/samples/odbcconnect.c 
b/clients/odbc/samples/odbcconnect.c
--- a/clients/odbc/samples/odbcconnect.c
+++ b/clients/odbc/samples/odbcconnect.c
@@ -50,6 +50,17 @@ SQLHANDLE conn = NULL;
 
 SQLCHAR outbuf[4096];
 
+static void
+cleanup(void)
+{
+   if (conn) {
+   SQLDisconnect(conn);
+   SQLFreeHandle(SQL_HANDLE_DBC, conn);
+   }
+   if (env)
+   SQLFreeHandle(SQL_HANDLE_DBC, env);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -108,10 +119,8 @@ main(int argc, char **argv)
break;
}
 
-   SQLDisconnect(conn);
-   SQLFreeHandle(SQL_HANDLE_DBC, conn);
-   SQLFreeHandle(SQL_HANDLE_DBC, env);
free(targets);
+   cleanup();
 
return ret;
 }
@@ -137,7 +146,7 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
break;
default:
fprintf(stderr, "Internal error: %s: unknown SQLRETURN 
%d", message, ret);
-   exit(1);
+   break;
}
 
SQLCHAR state[6];
@@ -157,6 +166,11 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
}
fprintf(stderr, "- %s: %s\n", state, explanation);
}
+
+   if (!SQL_SUCCEEDED(ret)) {
+   cleanup();
+   exit(1);
+   }
 }
 
 
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Do not clear errors in SQLBrowseConnect

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: f41788206b9d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f41788206b9d
Modified Files:
clients/odbc/driver/SQLBrowseConnect.c
Branch: odbc-tls
Log Message:

Do not clear errors in SQLBrowseConnect

Caller may find them very useful.


diffs (11 lines):

diff --git a/clients/odbc/driver/SQLBrowseConnect.c 
b/clients/odbc/driver/SQLBrowseConnect.c
--- a/clients/odbc/driver/SQLBrowseConnect.c
+++ b/clients/odbc/driver/SQLBrowseConnect.c
@@ -117,7 +117,6 @@ MNDBBrowseConnect(ODBCDbc *dbc,
}
 
free(buf);
-   clearDbcErrors(dbc);
return SQL_NEED_DATA;
 }
 
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Tweak abort condition

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 07df76314751 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/07df76314751
Modified Files:
clients/odbc/samples/odbcconnect.c
Branch: odbc-tls
Log Message:

Tweak abort condition


diffs (12 lines):

diff --git a/clients/odbc/samples/odbcconnect.c 
b/clients/odbc/samples/odbcconnect.c
--- a/clients/odbc/samples/odbcconnect.c
+++ b/clients/odbc/samples/odbcconnect.c
@@ -167,7 +167,7 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
fprintf(stderr, "- %s: %s\n", state, explanation);
}
 
-   if (!SQL_SUCCEEDED(ret)) {
+   if (!SQL_SUCCEEDED(ret) && ret != SQL_NEED_DATA) {
cleanup();
exit(1);
}
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Send ODBC errors to stdout

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: b083c5775dfe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b083c5775dfe
Modified Files:
clients/odbc/samples/odbcconnect.c
Branch: odbc-tls
Log Message:

Send ODBC errors to stdout

'odbcconnect' is intended to test odbc calls. If they fail, that's
regular output that the user or test script want to see in the
context of the other output.

Command line errors still go to stderr.


diffs (43 lines):

diff --git a/clients/odbc/samples/odbcconnect.c 
b/clients/odbc/samples/odbcconnect.c
--- a/clients/odbc/samples/odbcconnect.c
+++ b/clients/odbc/samples/odbcconnect.c
@@ -112,7 +112,7 @@ main(int argc, char **argv)
for (int i = 0; i < ntargets; i++) {
SQLCHAR *t = targets[i];
if (verbose)
-   fprintf(stderr, "\nTarget: %s\n", t);
+   printf("\nTarget: %s\n", t);
outbuf[0] = '\0';
int ret = action(t);
if (ret)
@@ -135,7 +135,7 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
case SQL_SUCCESS:
case SQL_NEED_DATA:
if (verbose)
-   fprintf(stderr, "Succeeded: %s\n", message);
+   printf("Succeeded: %s\n", message);
class = "Info";
break;
case SQL_SUCCESS_WITH_INFO:
@@ -145,7 +145,7 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
class = "Error";
break;
default:
-   fprintf(stderr, "Internal error: %s: unknown SQLRETURN 
%d", message, ret);
+   printf("Internal error: %s: unknown SQLRETURN %d", 
message, ret);
break;
}
 
@@ -161,10 +161,10 @@ ensure_ok(SQLSMALLINT type, SQLHANDLE ha
if (!SQL_SUCCEEDED(diag_ret))
break;
if (class) {
-   fprintf(stderr, "%s: %s\n", class, message);
+   printf("%s: %s\n", class, message);
class = NULL;
}
-   fprintf(stderr, "- %s: %s\n", state, explanation);
+   printf("- %s: %s\n", state, explanation);
}
 
if (!SQL_SUCCEEDED(ret) && ret != SQL_NEED_DATA) {
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Add msettings_reset function

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 93501b1cb37f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/93501b1cb37f
Modified Files:
clients/Tests/exports.stable.out
clients/mapilib/msettings.c
clients/mapilib/msettings.h
Branch: odbc-tls
Log Message:

Add msettings_reset function


diffs (71 lines):

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
@@ -776,6 +776,7 @@ const msettings *msettings_default;
 msettings *msettings_destroy(msettings *mp);
 bool msettings_malloc_failed(msettings_error err);
 bool msettings_parse_url(msettings *mp, const char *url, char **error_buffer);
+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);
 const char *wsaerror(int);
diff --git a/clients/mapilib/msettings.c b/clients/mapilib/msettings.c
--- a/clients/mapilib/msettings.c
+++ b/clients/mapilib/msettings.c
@@ -264,7 +264,6 @@ msettings *msettings_create(void)
 {
msettings *mp = malloc(sizeof(*mp));
if (!mp) {
-   free(mp);
return NULL;
}
*mp = msettings_default_values;
@@ -323,6 +322,37 @@ bailout:
return NULL;
 }
 
+void
+msettings_reset(msettings *mp)
+{
+   // free modified string settings
+   struct string *start = &mp->dummy_start_string;
+   struct string *end = &mp->dummy_end_string;
+   for (struct string *p = start; p < end; p++) {
+   if (p->must_free)
+   free(p->str);
+   }
+
+   // free unknown parameters
+   if (mp->nr_unknown) {
+   for (size_t i = 0; i < 2 * mp->nr_unknown; i++)
+   free(mp->unknown_parameters[i]);
+   free(mp->unknown_parameters);
+   }
+
+   // free the buffer
+   free(mp->unix_sock_name_buffer);
+
+   // keep the localizer
+   void *localizer = mp->localizer;
+   void *localizer_data = mp->localizer_data;
+
+   // now overwrite the whole thing
+   *mp = *msettings_default;
+   mp->localizer = localizer;
+   mp->localizer_data = localizer_data;
+}
+
 msettings *
 msettings_destroy(msettings *mp)
 {
diff --git a/clients/mapilib/msettings.h b/clients/mapilib/msettings.h
--- a/clients/mapilib/msettings.h
+++ b/clients/mapilib/msettings.h
@@ -126,6 +126,7 @@ mapi_export bool msettings_malloc_failed
 /* returns NULL if could not allocate */
 mapi_export msettings *msettings_create(void);
 mapi_export msettings *msettings_clone(const msettings *mp);
+mapi_export void msettings_reset(msettings *mp);
 mapi_export const msettings *msettings_default;
 
 /* always returns NULL */
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Reset msettings on SQLDisconnect

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 722a23e4322e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/722a23e4322e
Modified Files:
clients/odbc/driver/SQLDisconnect.c
Branch: odbc-tls
Log Message:

Reset msettings on SQLDisconnect


diffs (11 lines):

diff --git a/clients/odbc/driver/SQLDisconnect.c 
b/clients/odbc/driver/SQLDisconnect.c
--- a/clients/odbc/driver/SQLDisconnect.c
+++ b/clients/odbc/driver/SQLDisconnect.c
@@ -64,6 +64,7 @@ SQLDisconnect(SQLHDBC ConnectionHandle)
 
dbc->mid = NULL;
dbc->Connected = false;
+   msettings_reset(dbc->settings);
memset(dbc->setting_touched, 0, sizeof(dbc->setting_touched));
dbc->cachelimit = 0;
dbc->Mdebug = 0;
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Fix uninitialized use

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 69b9231f60a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/69b9231f60a7
Modified Files:
clients/odbc/samples/odbcconnect.c
Branch: odbc-tls
Log Message:

Fix uninitialized use


diffs (18 lines):

diff --git a/clients/odbc/samples/odbcconnect.c 
b/clients/odbc/samples/odbcconnect.c
--- a/clients/odbc/samples/odbcconnect.c
+++ b/clients/odbc/samples/odbcconnect.c
@@ -130,13 +130,12 @@ static void
 ensure_ok(SQLSMALLINT type, SQLHANDLE handle, const char *message, SQLRETURN 
ret)
 {
 
-   char *class;
+   char *class = "Info";
switch (ret) {
case SQL_SUCCESS:
case SQL_NEED_DATA:
if (verbose)
printf("Succeeded: %s\n", message);
-   class = "Info";
break;
case SQL_SUCCESS_WITH_INFO:
class = "Warning";
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Move attr_settings to their own file

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 8173493d7ea1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8173493d7ea1
Added Files:
clients/odbc/driver/ODBCAttrs.c
Modified Files:
clients/odbc/driver/CMakeLists.txt
clients/odbc/driver/SQLConnect.c
Branch: odbc-tls
Log Message:

Move attr_settings to their own file


diffs (124 lines):

diff --git a/clients/odbc/driver/CMakeLists.txt 
b/clients/odbc/driver/CMakeLists.txt
--- a/clients/odbc/driver/CMakeLists.txt
+++ b/clients/odbc/driver/CMakeLists.txt
@@ -20,6 +20,7 @@ add_library(MonetODBC
 target_sources(MonetODBC
   PRIVATE
   ODBCAttrs.h
+  ODBCAttrs.c
   ODBCConvert.c
   ODBCDbc.c
   ODBCDbc.h
diff --git a/clients/odbc/driver/ODBCAttrs.c b/clients/odbc/driver/ODBCAttrs.c
new file mode 100644
--- /dev/null
+++ b/clients/odbc/driver/ODBCAttrs.c
@@ -0,0 +1,58 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2024 MonetDB Foundation;
+ * Copyright August 2008 - 2023 MonetDB B.V.;
+ * Copyright 1997 - July 2008 CWI.
+ */
+
+#include "ODBCGlobal.h"
+#include "ODBCAttrs.h"
+
+#ifdef HAVE_ODBCINST_H
+#include 
+#endif
+
+
+#define SUGGEST_BOOLEAN "{True,False}"
+
+const struct attr_setting attr_settings[] = {
+   { "UID", "User", MP_USER },
+   { "PWD", "Password", MP_PASSWORD },
+   { "DATABASE", "Database", MP_DATABASE },
+   { "PORT", "Port", MP_PORT },
+   { "HOST", "Server", MP_HOST },
+   { "SOCK", "Unix Socket", MP_SOCK },
+   { "TLS", "Encrypt", MP_TLS, .suggest_values = SUGGEST_BOOLEAN },
+   { "CERT", "Server Certificate", MP_CERT },
+   { "CERTHASH", "Server Certificate Hash", MP_CERTHASH },
+   { "CLIENTKEY", "Client Key", MP_CLIENTKEY },
+   { "CLIENTCERT", "Client Certificate", MP_CLIENTCERT },
+   { "AUTOCOMMIT", "Autocommit", MP_AUTOCOMMIT, .suggest_values = 
SUGGEST_BOOLEAN },
+   { "SCHEMA", "Schema", MP_SCHEMA },
+   { "TIMEZONE", "Time Zone", MP_TIMEZONE },
+   { "REPLYSIZE", "Reply Size", MP_REPLYSIZE },
+   { "LOGFILE", "Log File", MP_LOGFILE },
+   { "LOGINTIMEOUT", "Login Timeout", MP_CONNECT_TIMEOUT},
+   { "CONNECTIONTIMEOUT", "Connection Timeout", MP_REPLY_TIMEOUT},
+};
+
+const int attr_setting_count = sizeof(attr_settings) / 
sizeof(attr_settings[0]);
+
+int
+attr_setting_lookup(const char *attr_name, bool allow_alt_name)
+{
+   for (int i = 0; i < attr_setting_count; i++) {
+   const struct attr_setting *entry = &attr_settings[i];
+   if (strcasecmp(attr_name, entry->name) == 0)
+   return i;
+   if (allow_alt_name && entry->alt_name && strcasecmp(attr_name, 
entry->alt_name) == 0)
+   return i;
+   }
+   return -1;
+}
+
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -45,46 +45,6 @@
 #define 
SQLGetPrivateProfileString(section,entry,default,buffer,bufferlen,filename)
((int) strcpy_len(buffer,default,bufferlen))
 #endif
 
-#define SUGGEST_BOOLEAN "{True,False}"
-
-const struct attr_setting attr_settings[] = {
-   { "UID", "User", MP_USER },
-   { "PWD", "Password", MP_PASSWORD },
-   { "DATABASE", "Database", MP_DATABASE },
-   { "PORT", "Port", MP_PORT },
-   { "HOST", "Server", MP_HOST },
-   { "SOCK", "Unix Socket", MP_SOCK },
-   { "TLS", "Encrypt", MP_TLS, .suggest_values = SUGGEST_BOOLEAN },
-   { "CERT", "Server Certificate", MP_CERT },
-   { "CERTHASH", "Server Certificate Hash", MP_CERTHASH },
-   { "CLIENTKEY", "Client Key", MP_CLIENTKEY },
-   { "CLIENTCERT", "Client Certificate", MP_CLIENTCERT },
-   { "AUTOCOMMIT", "Autocommit", MP_AUTOCOMMIT, .suggest_values = 
SUGGEST_BOOLEAN },
-   { "SCHEMA", "Schema", MP_SCHEMA },
-   { "TIMEZONE", "Time Zone", MP_TIMEZONE },
-   { "REPLYSIZE", "Reply Size", MP_REPLYSIZE },
-   { "LOGFILE", "Log File", MP_LOGFILE },
-   { "LOGINTIMEOUT", "Login Timeout", MP_CONNECT_TIMEOUT},
-   { "CONNECTIONTIMEOUT", "Connection Timeout", MP_REPLY_TIMEOUT},
-};
-
-const int attr_setting_count = sizeof(attr_settings) / 
sizeof(attr_settings[0]);
-
-
-int
-attr_setting_lookup(const char *attr_name, bool allow_alt_name)
-{
-   for (int i = 0; i < attr_setting_count; i++) {
-   const struct attr_setting *entry = &attr_settings[i];
-   if (strcasecmp(attr_name, entry->name) == 0)
-   return i;
-   if (allow_alt_name && entry->alt_name && strcasecmp(attr_name, 
entry->alt_name) == 0)
-   return i;
-   }
-   return -1;
-}
-
-
 static SQLRETURN
 get_serverinfo(ODBCDbc *dbc)
 {
___
checkin-list mailing list -- check

MonetDB: odbc-tls - Split attr_setting suggest_values into separ...

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 6eaf46a85e68 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6eaf46a85e68
Modified Files:
clients/odbc/driver/ODBCAttrs.c
clients/odbc/driver/ODBCAttrs.h
clients/odbc/driver/SQLBrowseConnect.c
Branch: odbc-tls
Log Message:

Split attr_setting suggest_values into separate option strings

So drvcfg.c can display them in a combobox


diffs (87 lines):

diff --git a/clients/odbc/driver/ODBCAttrs.c b/clients/odbc/driver/ODBCAttrs.c
--- a/clients/odbc/driver/ODBCAttrs.c
+++ b/clients/odbc/driver/ODBCAttrs.c
@@ -17,22 +17,30 @@
 #include 
 #endif
 
+static const char *suggest_on_off[] = {
+   "On",
+   "Off",
+   NULL,
+};
 
-#define SUGGEST_BOOLEAN "{True,False}"
+static const char *suggest_monetdb[] = {
+   "monetdb",
+   NULL,
+};
 
 const struct attr_setting attr_settings[] = {
-   { "UID", "User", MP_USER },
-   { "PWD", "Password", MP_PASSWORD },
+   { "UID", "User", MP_USER, .is_enum = false, .values = suggest_monetdb },
+   { "PWD", "Password", MP_PASSWORD, .is_enum = false, .values = 
suggest_monetdb },
{ "DATABASE", "Database", MP_DATABASE },
{ "PORT", "Port", MP_PORT },
-   { "HOST", "Server", MP_HOST },
+   { "HOST", "Server", MP_HOST, },
{ "SOCK", "Unix Socket", MP_SOCK },
-   { "TLS", "Encrypt", MP_TLS, .suggest_values = SUGGEST_BOOLEAN },
+   { "TLS", "Encrypt", MP_TLS, .is_enum = true, .values = suggest_on_off },
{ "CERT", "Server Certificate", MP_CERT },
{ "CERTHASH", "Server Certificate Hash", MP_CERTHASH },
{ "CLIENTKEY", "Client Key", MP_CLIENTKEY },
{ "CLIENTCERT", "Client Certificate", MP_CLIENTCERT },
-   { "AUTOCOMMIT", "Autocommit", MP_AUTOCOMMIT, .suggest_values = 
SUGGEST_BOOLEAN },
+   { "AUTOCOMMIT", "Autocommit", MP_AUTOCOMMIT, .is_enum = true, .values = 
suggest_on_off },
{ "SCHEMA", "Schema", MP_SCHEMA },
{ "TIMEZONE", "Time Zone", MP_TIMEZONE },
{ "REPLYSIZE", "Reply Size", MP_REPLYSIZE },
diff --git a/clients/odbc/driver/ODBCAttrs.h b/clients/odbc/driver/ODBCAttrs.h
--- a/clients/odbc/driver/ODBCAttrs.h
+++ b/clients/odbc/driver/ODBCAttrs.h
@@ -21,11 +21,11 @@
 #include "msettings.h"
 
 struct attr_setting {
-   const char *name;// canonical attribute name
-   const char *alt_name;// user-facing attribute name
-   mparm parm;
-   // optional
-   const char *suggest_values;  // SQLBrowseConnect suggestion, or 
NULL for "?"
+   const char *name;  // canonical attribute name
+   const char *alt_name;  // user-facing attribute name
+   mparm parm;// the corresponding msetting parameter
+   bool is_enum;  // fixed set of values
+   const char **values;   // NULL or NULL-terminated array of options
 };
 
 // defined in SQLConnect.c, also used in SQLBrowseConnect.c
diff --git a/clients/odbc/driver/SQLBrowseConnect.c 
b/clients/odbc/driver/SQLBrowseConnect.c
--- a/clients/odbc/driver/SQLBrowseConnect.c
+++ b/clients/odbc/driver/SQLBrowseConnect.c
@@ -53,11 +53,18 @@ suggest_settings(ODBCDbc *dbc, char **bu
mparm parm = entry->parm;
if (dbc->setting_touched[(int)parm] == touched_as) {
const char *sep = *pos > 0 ? ";" : "";
-   const char *values = entry->suggest_values ? 
entry->suggest_values : "?";
-   reallocprintf(
-   buf, pos, cap,
-   "%s%s%s:%s=%s",
-   sep, prefix, entry->name, entry->alt_name, 
values);
+   reallocprintf(buf, pos, cap, "%s%s%s:%s=?", sep, 
prefix, entry->name, entry->alt_name);
+   if (entry->is_enum) {
+   assert(entry->values != NULL);
+   *pos -= 1;  // eat the '?'
+   sep = "{";
+   for (const char **p = entry->values; *p; p++) {
+   const char *item = *p;
+   reallocprintf(buf, pos, cap, "%s%s", 
sep, item);
+   sep = ",";
+   }
+   reallocprintf(buf, pos, cap, "}");
+   }
}
}
 }
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - Add ChangeLog.odbc-tls

2024-05-24 Thread Joeri van Ruth via checkin-list
Changeset: 693641a60d02 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/693641a60d02
Added Files:
clients/odbc/ChangeLog.odbc-tls
Branch: odbc-tls
Log Message:

Add ChangeLog.odbc-tls


diffs (29 lines):

diff --git a/clients/odbc/ChangeLog.odbc-tls b/clients/odbc/ChangeLog.odbc-tls
new file mode 100644
--- /dev/null
+++ b/clients/odbc/ChangeLog.odbc-tls
@@ -0,0 +1,24 @@
+# ChangeLog file for odbc
+# This file is updated with Maddlog
+
+* Fri May 24 2024 Joeri van Ruth 
+- ODBC now supports TLS. It can be configured through the following
+  DSN- or Connection String attributes (canonical name / user friendly name):
+TLS / Encrypt = ON/OFF
+CERT / Server Certificate = PATH
+CERTHASH / Server Certificate Hash = sha256:HEXDIGITS
+CLIENTKEY / Client Key = PATH
+CLIENTCERT / Client Certificate = PATH
+AUTOCOMMIT / Autocommit = ON/OFF
+- Several more connection properties have been made configurable:
+SCHEMA / Schema = NAME
+TIMEZONE / Time Zone = Minutes East Of UTC
+REPLYSIZE / Reply Size = NUMBER
+LOGFILE / Log File = PATH
+LOGINTIMEOUT / Login Timeout = MILLISECONDS
+CONNECTIONTIMEOUT / Connection Timeout = MILLISECONDS
+SOCK / Unix Socket = PATH (unix only)
+- SQLBrowseConnect adds On/Off suggestions to boolean settings
+  and prioritizes the DATABASE attribute if it notices monetdbd
+  requires one. Apart from that only UID/User and PWD/Password
+  are required, all others have sensible defaults.
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: odbc-tls - small compilation issue (ie start a block wi...

2024-05-24 Thread Niels Nes via checkin-list
Changeset: 49981ac16809 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/49981ac16809
Modified Files:
clients/odbc/driver/SQLSetConnectAttr.c
Branch: odbc-tls
Log Message:

small compilation issue (ie start a block with {}, if you need local variables 
in a switch case label)


diffs (18 lines):

diff --git a/clients/odbc/driver/SQLSetConnectAttr.c 
b/clients/odbc/driver/SQLSetConnectAttr.c
--- a/clients/odbc/driver/SQLSetConnectAttr.c
+++ b/clients/odbc/driver/SQLSetConnectAttr.c
@@ -65,12 +65,12 @@ MNDBSetConnectAttr(ODBCDbc *dbc,
/* Driver does not support this function */
addDbcError(dbc, "IM001", NULL, 0);
return SQL_ERROR;
-   case SQL_ATTR_CONNECTION_TIMEOUT:   /* SQLUINTEGER */
+   case SQL_ATTR_CONNECTION_TIMEOUT: { /* SQLUINTEGER */
long timeout = 1000 * (long)(uintptr_t) ValuePtr;
msetting_set_long(dbc->settings, MP_CONNECT_TIMEOUT, timeout);
if (dbc->mid)
mapi_timeout(dbc->mid, timeout);
-   break;
+   }break;
case SQL_ATTR_LOGIN_TIMEOUT:/* SQLUINTEGER */
/* currently only value 0 (no timeout) is accepted
 * as mapilib currently does not provide a way to set login 
timeout */
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Dec2023 - Remove some superfluous locking and an incorr...

2024-05-24 Thread Sjoerd Mullender via checkin-list
Changeset: 1cfea0d64831 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1cfea0d64831
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: Dec2023
Log Message:

Remove some superfluous locking and an incorrect unlock.


diffs (23 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -3485,7 +3485,6 @@ log_segments(sql_trans *tr, segments *se
unlock_table(tr->store, id);
if (seg->ts == tr->tid && seg->end-seg->start) {
if (log_segment(tr, seg, id) != LOG_OK) {
-   unlock_table(tr->store, id);
return LOG_ERR;
}
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3798,8 +3798,6 @@ sql_trans_destroy(sql_trans *tr)
sql_trans_rollback(tr, false);
sqlstore *store = tr->store;
os_destroy(tr->localtmps, store);
-   store_lock(store);
-   store_unlock(store);
MT_lock_destroy(&tr->lock);
if (!list_empty(tr->dropped))
list_destroy(tr->dropped);
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org