MonetDB: default - Check whether search string is NULL.
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
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
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
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
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
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
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
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
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
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
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...
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
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...
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...
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