Changeset: 663b2cc328ef for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/663b2cc328ef Branch: extract_types Log Message:
Merge with default. diffs (truncated from 9029 to 300 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 @@ -321,7 +321,7 @@ void GDKreset(int status); void GDKsetdebug(int debug); gdk_return GDKsetenv(const char *name, const char *value); void GDKsetmallocsuccesscount(lng count); -ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len); +ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len, char quote); str GDKstrdup(const char *s) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level); diff --git a/clients/odbc/ChangeLog.Sep2022 b/clients/odbc/ChangeLog.Sep2022 --- a/clients/odbc/ChangeLog.Sep2022 +++ b/clients/odbc/ChangeLog.Sep2022 @@ -1,3 +1,7 @@ # ChangeLog file for odbc # This file is updated with Maddlog +* Thu Oct 13 2022 Martin van Dinther <[email protected]> +- Fixed issue with generated raw strings prefix when ODBC driver is used + against a server older than Jun2020 (11.37). + diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c --- a/clients/odbc/driver/ODBCUtil.c +++ b/clients/odbc/driver/ODBCUtil.c @@ -1074,6 +1074,7 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL * ESCAPE '\\' */ char esc; + const char *s; p += 7; while (*p == ' ') p++; @@ -1106,7 +1107,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL length = (size_t) snprintf(q, length, "%.*s ESCAPE '''' %s", n, nquery, p); break; case '\\': - length = (size_t) snprintf(q, length, "%.*s ESCAPE r'\\' %s", n, nquery, p); + /* raw strings prefix syntax is only supported by servers since Jun2020 (11.37) */ + if (dbc->major == 11 && dbc->minor >= 37) { + s = "%.*s ESCAPE r'\\'"; + } else { + s = "%.*s ESCAPE '\\\\'"; + } + length = (size_t) snprintf(q, length, s, n, nquery, p); break; default: length = (size_t) snprintf(q, length, "%.*s ESCAPE '%c' %s", n, nquery, esc, p); @@ -1256,7 +1263,8 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL for (r = func->repl; *r; r++) { if (*r == '\1' || *r == '\2' || *r == '\3' || *r == '\4') { assert(*r <= func->nargs); - if (args[*r - 1].argstart[0] == '\'') + /* raw strings prefix syntax is only supported by servers since Jun2020 (11.37) */ + if (args[*r - 1].argstart[0] == '\'' && dbc->major == 11 && dbc->minor >= 37) q[pr++] = 'r'; strncpy(q + pr, args[*r - 1].argstart, args[*r - 1].arglen); pr += (int) args[*r - 1].arglen; @@ -1350,7 +1358,7 @@ ODBCParseOA(const char *tab, const char } char * -ODBCParsePV(const char *tab, const char *col, const char *arg, size_t len) +ODBCParsePV(const char *tab, const char *col, const char *arg, size_t len, const ODBCDbc *dbc) { size_t i; char *res; @@ -1371,7 +1379,13 @@ ODBCParsePV(const char *tab, const char res[i++] = *s; res[i++] = *s; } - for (s = "' escape r'\\'"; *s; s++) + /* raw strings prefix syntax is only supported by servers since Jun2020 (11.37) */ + if (dbc->major == 11 && dbc->minor >= 37) { + s = "' escape r'\\'"; + } else { + s = "' escape '\\\\'"; + } + for (; *s; s++) res[i++] = *s; res[i] = 0; return res; diff --git a/clients/odbc/driver/ODBCUtil.h b/clients/odbc/driver/ODBCUtil.h --- a/clients/odbc/driver/ODBCUtil.h +++ b/clients/odbc/driver/ODBCUtil.h @@ -31,6 +31,7 @@ #define _H_ODBCUTIL #include "ODBCGlobal.h" +#include "ODBCDbc.h" /* @@ -145,7 +146,7 @@ extern const char *ODBCutf82wchar(const #endif char *ODBCParseOA(const char *tab, const char *col, const char *arg, size_t len); -char *ODBCParsePV(const char *tab, const char *col, const char *arg, size_t len); +char *ODBCParsePV(const char *tab, const char *col, const char *arg, size_t len, const ODBCDbc *dbc); char *ODBCParseID(const char *tab, const char *col, const char *arg, size_t len); /* SQL_DESC_CONCISE_TYPE, SQL_DESC_DATETIME_INTERVAL_CODE, and diff --git a/clients/odbc/driver/SQLColumnPrivileges.c b/clients/odbc/driver/SQLColumnPrivileges.c --- a/clients/odbc/driver/SQLColumnPrivileges.c +++ b/clients/odbc/driver/SQLColumnPrivileges.c @@ -81,7 +81,8 @@ MNDBColumnPrivileges(ODBCStmt *stmt, if (NameLength4 > 0) { col = ODBCParsePV("tc", "cname", (const char *) ColumnName, - (size_t) NameLength4); + (size_t) NameLength4, + stmt->Dbc); if (col == NULL) goto nomem; } diff --git a/clients/odbc/driver/SQLColumns.c b/clients/odbc/driver/SQLColumns.c --- a/clients/odbc/driver/SQLColumns.c +++ b/clients/odbc/driver/SQLColumns.c @@ -79,21 +79,24 @@ MNDBColumns(ODBCStmt *stmt, if (NameLength2 > 0) { sch = ODBCParsePV("s", "name", (const char *) SchemaName, - (size_t) NameLength2); + (size_t) NameLength2, + stmt->Dbc); if (sch == NULL) goto nomem; } if (NameLength3 > 0) { tab = ODBCParsePV("t", "name", (const char *) TableName, - (size_t) NameLength3); + (size_t) NameLength3, + stmt->Dbc); if (tab == NULL) goto nomem; } if (NameLength4 > 0) { col = ODBCParsePV("c", "name", (const char *) ColumnName, - (size_t) NameLength4); + (size_t) NameLength4, + stmt->Dbc); if (col == NULL) goto nomem; } diff --git a/clients/odbc/driver/SQLProcedureColumns.c b/clients/odbc/driver/SQLProcedureColumns.c --- a/clients/odbc/driver/SQLProcedureColumns.c +++ b/clients/odbc/driver/SQLProcedureColumns.c @@ -71,21 +71,24 @@ MNDBProcedureColumns(ODBCStmt *stmt, if (NameLength2 > 0) { sch = ODBCParsePV("s", "name", (const char *) SchemaName, - (size_t) NameLength2); + (size_t) NameLength2, + stmt->Dbc); if (sch == NULL) goto nomem; } if (NameLength3 > 0) { prc = ODBCParsePV("p", "name", (const char *) ProcName, - (size_t) NameLength3); + (size_t) NameLength3, + stmt->Dbc); if (prc == NULL) goto nomem; } if (NameLength4 > 0) { col = ODBCParsePV("a", "name", (const char *) ColumnName, - (size_t) NameLength4); + (size_t) NameLength4, + stmt->Dbc); if (col == NULL) goto nomem; } diff --git a/clients/odbc/driver/SQLProcedures.c b/clients/odbc/driver/SQLProcedures.c --- a/clients/odbc/driver/SQLProcedures.c +++ b/clients/odbc/driver/SQLProcedures.c @@ -79,14 +79,16 @@ MNDBProcedures(ODBCStmt *stmt, if (NameLength2 > 0) { sch = ODBCParsePV("s", "name", (const char *) SchemaName, - (size_t) NameLength2); + (size_t) NameLength2, + stmt->Dbc); if (sch == NULL) goto nomem; } if (NameLength3 > 0) { pro = ODBCParsePV("p", "name", (const char *) ProcName, - (size_t) NameLength3); + (size_t) NameLength3, + stmt->Dbc); if (pro == NULL) goto nomem; } diff --git a/clients/odbc/driver/SQLTablePrivileges.c b/clients/odbc/driver/SQLTablePrivileges.c --- a/clients/odbc/driver/SQLTablePrivileges.c +++ b/clients/odbc/driver/SQLTablePrivileges.c @@ -66,14 +66,16 @@ MNDBTablePrivileges(ODBCStmt *stmt, if (NameLength2 > 0) { sch = ODBCParsePV("s", "name", (const char *) SchemaName, - (size_t) NameLength2); + (size_t) NameLength2, + stmt->Dbc); if (sch == NULL) goto nomem; } if (NameLength3 > 0) { tab = ODBCParsePV("t", "name", (const char *) TableName, - (size_t) NameLength3); + (size_t) NameLength3, + stmt->Dbc); if (tab == NULL) goto nomem; } diff --git a/clients/odbc/driver/SQLTables.c b/clients/odbc/driver/SQLTables.c --- a/clients/odbc/driver/SQLTables.c +++ b/clients/odbc/driver/SQLTables.c @@ -125,14 +125,16 @@ MNDBTables(ODBCStmt *stmt, if (NameLength2 > 0) { sch = ODBCParsePV("s", "name", (const char *) SchemaName, - (size_t) NameLength2); + (size_t) NameLength2, + stmt->Dbc); if (sch == NULL) goto nomem; } if (NameLength3 > 0) { tab = ODBCParsePV("t", "name", (const char *) TableName, - (size_t) NameLength3); + (size_t) NameLength3, + stmt->Dbc); if (tab == NULL) goto nomem; } diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h --- a/gdk/gdk_atoms.h +++ b/gdk/gdk_atoms.h @@ -132,7 +132,7 @@ gdk_export ssize_t fltFromStr(const char gdk_export ssize_t fltToStr(str *dst, size_t *len, const flt *src, bool external); gdk_export ssize_t dblFromStr(const char *src, size_t *len, dbl **dst, bool external); gdk_export ssize_t dblToStr(str *dst, size_t *len, const dbl *src, bool external); -gdk_export ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len); +gdk_export ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len, char quote); gdk_export ssize_t strFromStr(const char *restrict src, size_t *restrict len, str *restrict dst, bool external); gdk_export size_t escapedStrlen(const char *restrict src, const char *sep1, const char *sep2, int quote); gdk_export size_t escapedStr(char *restrict dst, const char *restrict src, size_t dstlen, const char *sep1, const char *sep2, int quote); diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c --- a/gdk/gdk_string.c +++ b/gdk/gdk_string.c @@ -333,7 +333,7 @@ strPut(BAT *b, var_t *dst, const void *V #endif ssize_t -GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len) +GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len, char quote) { unsigned char *p = dst; const unsigned char *cur = src, *end = src + len; @@ -470,7 +470,6 @@ GDKstrFromStr(unsigned char *restrict ds } else if ((c = *cur) == '\\') { escaped = true; continue; -#if 0 } else if (c == quote && cur[1] == quote) { assert(c != 0); if (unlikely(n > 0)) @@ -478,7 +477,6 @@ GDKstrFromStr(unsigned char *restrict ds *p++ = quote; cur++; continue; -#endif } if (n > 0) { @@ -598,7 +596,8 @@ strFromStr(const char *restrict src, siz return GDKstrFromStr((unsigned char *) *dst, (const unsigned char *) start, - (ssize_t) (cur - start)); + (ssize_t) (cur - start), + '\0'); } /* diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c --- a/monetdb5/modules/mal/tablet.c +++ b/monetdb5/modules/mal/tablet.c @@ -821,7 +821,7 @@ SQLinsert_val(READERtask *task, int col, size_t slen = strlen(s) + 1; char *data = slen <= sizeof(buf) ? buf : GDKmalloc(strlen(s) + 1); _______________________________________________ checkin-list mailing list -- [email protected] To unsubscribe send an email to [email protected]
