Changeset: 1395d225bbe3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1395d225bbe3
Modified Files:
        monetdb5/mal/mal_client.c
        sql/storage/store.c
Branch: sql_profiler
Log Message:

Merge with default.


diffs (truncated from 2080 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
@@ -30533,16 +30533,6 @@ eval
 pattern batcapi.eval(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
 CUDFevalStd;
 Execute a simple CUDF script value
-batcapi
-eval_aggr
-pattern batcapi.eval_aggr(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
-CUDFevalAggr;
-grouped aggregates through CUDF
-batcapi
-subeval_aggr
-pattern batcapi.subeval_aggr(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
-CUDFevalAggr;
-grouped aggregates through CUDF
 batcolor
 blue
 command batcolor.blue(X_0:bat[:color]):bat[:int] 
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
@@ -21728,16 +21728,6 @@ eval
 pattern batcapi.eval(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
 CUDFevalStd;
 Execute a simple CUDF script value
-batcapi
-eval_aggr
-pattern batcapi.eval_aggr(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
-CUDFevalAggr;
-grouped aggregates through CUDF
-batcapi
-subeval_aggr
-pattern batcapi.subeval_aggr(X_0:ptr, X_1:bit, X_2:str, X_3:any...):any... 
-CUDFevalAggr;
-grouped aggregates through CUDF
 batcolor
 blue
 command batcolor.blue(X_0:bat[:color]):bat[:int] 
diff --git a/clients/odbc/ChangeLog b/clients/odbc/ChangeLog
--- a/clients/odbc/ChangeLog
+++ b/clients/odbc/ChangeLog
@@ -1,6 +1,13 @@
 # ChangeLog file for odbc
 # This file is updated with Maddlog
 
+* Thu Jul 14 2022 Martin van Dinther <[email protected]>
+- Removed the possibility to retrieve or set the CURRENT_CATALOG
+  via SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, ...) and
+  SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, ...) as MonetDB does
+  not support CATALOG objects (no SQL support for: CREATE CATALOG abc
+  or SET CATALOG abc) and therefore there is no CURRENT_CATALOG.
+
 * Thu Jun 23 2022 Martin van Dinther <[email protected]>
 - Corrected ODBC functions SQLTablePrivileges() and SQLColumnPrivileges()
   for local temporary tables located in schema tmp. They did not return
diff --git a/clients/odbc/driver/SQLGetConnectAttr.c 
b/clients/odbc/driver/SQLGetConnectAttr.c
--- a/clients/odbc/driver/SQLGetConnectAttr.c
+++ b/clients/odbc/driver/SQLGetConnectAttr.c
@@ -84,9 +84,16 @@ MNDBGetConnectAttr(ODBCDbc *dbc,
                break;
        case SQL_ATTR_CURRENT_CATALOG:          /* SQLCHAR* */
                /* SQL_CURRENT_QUALIFIER */
-               copyString(dbc->dbname, strlen(dbc->dbname), ValuePtr,
-                          BufferLength, StringLengthPtr, SQLINTEGER,
-                          addDbcError, dbc, return SQL_ERROR);
+               /* MonetDB does NOT support SQL catalog concept, return empty 
string */
+               if (BufferLength <= 0) {
+                       /* Invalid string or buffer length */
+                       addDbcError(dbc, "HY090", NULL, 0);
+                       return SQL_ERROR;
+               }
+               strcpy_len((char *) ValuePtr, "", BufferLength);
+               if (StringLengthPtr) {
+                       *(StringLengthPtr) = (SQLINTEGER) 0;
+               }
                break;
        case SQL_ATTR_TXN_ISOLATION:            /* SQLUINTEGER */
                /* SQL_TXN_ISOLATION */
diff --git a/clients/odbc/driver/SQLGetTypeInfo.c 
b/clients/odbc/driver/SQLGetTypeInfo.c
--- a/clients/odbc/driver/SQLGetTypeInfo.c
+++ b/clients/odbc/driver/SQLGetTypeInfo.c
@@ -1033,7 +1033,7 @@ MNDBGetTypeInfo(ODBCStmt *stmt,
 {
        const struct types *t;
        int i;
-       char query[4096];
+       char query[4352];
 
        switch (DataType) {
        case SQL_ALL_TYPES:
@@ -1220,29 +1220,30 @@ MNDBGetTypeInfo(ODBCStmt *stmt,
                }
        }
        i += snprintf(query+ i, sizeof(query) - i, ") as monetdb_types "
-                     "(type_name"
-                     ",data_type"
-                     ",column_size"
-                     ",literal_prefix"
-                     ",literal_suffix"
-                     ",create_params"
-                     ",nullable"
-                     ",case_sensitive"
-                     ",searchable"
-                     ",unsigned_attribute"
-                     ",fixed_prec_scale"
-                     ",auto_unique_value"
-                     ",local_type_name"
-                     ",minimum_scale"
-                     ",maximum_scale"
-                     ",sql_data_type"
-                     ",sql_datetime_sub"
-                     ",num_prec_radix"
-                     ",interval_precision)");
+                     "(\"TYPE_NAME\""
+                     ",\"DATA_TYPE\""
+                     ",\"COLUMN_SIZE\""
+                     ",\"LITERAL_PREFIX\""
+                     ",\"LITERAL_SUFFIX\""
+                     ",\"CREATE_PARAMS\""
+                     ",\"NULLABLE\""
+                     ",\"CASE_SENSITIVE\""
+                     ",\"SEARCHABLE\""
+                     ",\"UNSIGNED_ATTRIBUTE\""
+                     ",\"FIXED_PREC_SCALE\""
+                     ",\"AUTO_UNIQUE_VALUE\""
+                     ",\"LOCAL_TYPE_NAME\""
+                     ",\"MINIMUM_SCALE\""
+                     ",\"MAXIMUM_SCALE\""
+                     ",\"SQL_DATA_TYPE\""
+                     ",\"SQL_DATETIME_SUB\""
+                     ",\"NUM_PREC_RADIX\""
+                     ",\"INTERVAL_PRECISION\")");
        assert(i < (int) sizeof(query));
 
-       return MNDBExecDirect(stmt, (SQLCHAR *) query,
-                             (SQLINTEGER) i);
+       /* debug: fprintf(stdout, "SQLGetTypeInfo query (pos: %d, len: 
%zu):\n%s\n\n", i, strlen(query), query); */
+
+       return MNDBExecDirect(stmt, (SQLCHAR *) query, (SQLINTEGER) i);
 }
 
 #ifdef ODBCDEBUG
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
@@ -58,22 +58,9 @@ MNDBSetConnectAttr(ODBCDbc *dbc,
                }
                return SQL_SUCCESS;
        case SQL_ATTR_CURRENT_CATALOG:          /* SQLCHAR* */
-               fixODBCstring(ValuePtr, StringLength, SQLINTEGER,
-                             addDbcError, dbc, return SQL_ERROR);
-               if (dbc->Connected) {
-                       /* Driver does not support this functions */
-                       addDbcError(dbc, "IM001", NULL, 0);
-                       return SQL_ERROR;
-               }
-               if (dbc->dbname)
-                       free(dbc->dbname);
-               dbc->dbname = dupODBCstring(ValuePtr, StringLength);
-               if (dbc->dbname == NULL) {
-                       /* Memory allocation error */
-                       addDbcError(dbc, "HY001", NULL, 0);
-                       return SQL_ERROR;
-               }
-               break;
+               /* Driver does not support this function */
+               addDbcError(dbc, "IM001", NULL, 0);
+               return SQL_ERROR;
        case SQL_ATTR_CONNECTION_TIMEOUT:       /* SQLUINTEGER */
                dbc->sql_attr_connection_timeout = (SQLUINTEGER) (uintptr_t) 
ValuePtr;
                if (dbc->mid)
diff --git a/clients/odbc/tests/ODBCmetadata.c 
b/clients/odbc/tests/ODBCmetadata.c
--- a/clients/odbc/tests/ODBCmetadata.c
+++ b/clients/odbc/tests/ODBCmetadata.c
@@ -18,6 +18,7 @@
  * SQLColumnPrivileges()
  * SQLProcedures()
  * SQLProcedureColumns()
+ * SQLGetTypeInfo()
  */
 
 #ifdef _MSC_VER
@@ -30,10 +31,14 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <inttypes.h>
+#define ODBCVER 0x0352         /* Important: this must be defined before 
include of sql.h and sqlext.h */
 #include <sql.h>
 #include <sqlext.h>
 #include <string.h>
 
+#define SQL_HUGEINT    0x4000  /* as defined in ODBCGlobal.h */
+
 static void
 prerr(SQLSMALLINT tpe, SQLHANDLE hnd, const char *func, const char *pref)
 {
@@ -89,6 +94,53 @@ check(SQLRETURN ret, SQLSMALLINT tpe, SQ
        }
 }
 
+static char *
+nameofSQLtype(SQLSMALLINT dataType)
+{
+       /* 
https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/sql-data-types */
+       switch (dataType) {
+       case SQL_CHAR:          return "CHAR";
+       case SQL_VARCHAR:       return "VARCHAR";
+       case SQL_LONGVARCHAR:   return "LONG VARCHAR";
+       case SQL_WCHAR:         return "WCHAR";
+       case SQL_WVARCHAR:      return "WVARCHAR";
+       case SQL_WLONGVARCHAR:  return "WLONGVARCHAR";
+       case SQL_DECIMAL:       return "DECIMAL";
+       case SQL_NUMERIC:       return "NUMERIC";
+       case SQL_SMALLINT:      return "SMALLINT";
+       case SQL_INTEGER:       return "INTEGER";
+       case SQL_REAL:          return "REAL";
+       case SQL_FLOAT:         return "FLOAT";
+       case SQL_DOUBLE:        return "DOUBLE";
+       case SQL_BIT:           return "BOOLEAN";       /* MonetDB boolean type 
is mapped to SQL_BIT in ODBC (see msql_types[] in SQLExecute.c) */
+       case SQL_TINYINT:       return "TINYINT";
+       case SQL_BIGINT:        return "BIGINT";
+       case SQL_BINARY:        return "BINARY";
+       case SQL_VARBINARY:     return "VARBINARY";
+       case SQL_LONGVARBINARY: return "LONG VARBINARY";
+       case SQL_DATETIME:      return "DATETIME";
+       case SQL_TYPE_DATE:     return "DATE";
+       case SQL_TYPE_TIME:     return "TIME";
+       case SQL_TYPE_TIMESTAMP:        return "TIMESTAMP";
+       case SQL_INTERVAL_MONTH:        return "INTERVAL MONTH";
+       case SQL_INTERVAL_YEAR:         return "INTERVAL YEAR";
+       case SQL_INTERVAL_YEAR_TO_MONTH: return "INTERVAL YEAR TO MONTH";
+       case SQL_INTERVAL_DAY:          return "INTERVAL DAY";
+       case SQL_INTERVAL_HOUR:         return "INTERVAL HOUR";
+       case SQL_INTERVAL_MINUTE:       return "INTERVAL MINUTE";
+       case SQL_INTERVAL_SECOND:       return "INTERVAL SECOND";
+       case SQL_INTERVAL_DAY_TO_HOUR:  return "INTERVAL DAY TO HOUR";
+       case SQL_INTERVAL_DAY_TO_MINUTE:        return "INTERVAL DAY TO MINUTE";
+       case SQL_INTERVAL_DAY_TO_SECOND:        return "INTERVAL DAY TO SECOND";
+       case SQL_INTERVAL_HOUR_TO_MINUTE:       return "INTERVAL HOUR TO 
MINUTE";
+       case SQL_INTERVAL_HOUR_TO_SECOND:       return "INTERVAL HOUR TO 
SECOND";
+       case SQL_INTERVAL_MINUTE_TO_SECOND:     return "INTERVAL MINUTE TO 
SECOND";
+       case SQL_GUID:          return "GUID";
+       case SQL_HUGEINT:       return "HUGEINT";       /* 0x4000 (defined in 
ODBCGlobal.h) */
+       default:                return "Undefined";
+       }
+}
+
 static void
 compareResult(SQLHANDLE stmt, SQLRETURN retcode, const char * functionname, 
const char * expected)
 {
@@ -102,6 +154,9 @@ compareResult(SQLHANDLE stmt, SQLRETURN 
        SQLUSMALLINT col;
        SQLLEN indicator;
        char buf[2048];
+       SQLSMALLINT dataType = 0;
+       SQLULEN columnSize = 0;
+       SQLSMALLINT decimalDigits = 0;
        int replaceId = 0;      /* used to replace system id values in column 
SPECIFIC_NAME of getProcedures and getProcedureColumns */
 
        if (outp == NULL) {
@@ -119,17 +174,49 @@ compareResult(SQLHANDLE stmt, SQLRETURN 
        /* How many rows are there */
        ret = SQLRowCount(stmt, &rows);
        check(ret, SQL_HANDLE_STMT, stmt, "SQLRowCount()");
-       pos += snprintf(outp + pos, outp_len - pos, "Resultset with %ld 
rows\n", rows);
+       pos += snprintf(outp + pos, outp_len - pos, "Resultset with %"PRId64" 
rows\n", (int64_t) rows);
 
        /* get Result Column Names and print them */
        for (col = 1; col <= columns; col++) {
                ret = SQLDescribeCol(stmt, col, (SQLCHAR *) buf, sizeof(buf),
                        NULL, NULL, NULL, NULL, NULL);
-               check(ret, SQL_HANDLE_STMT, stmt, "SQLDescribeCol()");
+               check(ret, SQL_HANDLE_STMT, stmt, "SQLDescribeCol(colName)");
                pos += snprintf(outp + pos, outp_len - pos,
                                (col > 1) ? "\t%s" : "%s", buf);
        }
        pos += snprintf(outp + pos, outp_len - pos, "\n");
+       /* get Result Column Data Types and print them */
+       for (col = 1; col <= columns; col++) {
+               ret = SQLDescribeCol(stmt, col, (SQLCHAR *) buf, sizeof(buf),
+                       NULL, &dataType, &columnSize, &decimalDigits, NULL);
+               check(ret, SQL_HANDLE_STMT, stmt, "SQLDescribeCol(colType)");
+               pos += snprintf(outp + pos, outp_len - pos,
+                               (col > 1) ? "\t%s" : "%s", 
nameofSQLtype(dataType));
+               switch (dataType) {
+               case SQL_CHAR:
+               case SQL_VARCHAR:
+               case SQL_LONGVARCHAR:
+               case SQL_WCHAR:
+               case SQL_WVARCHAR:
+               case SQL_WLONGVARCHAR:
+               case SQL_DECIMAL:
+               case SQL_NUMERIC:
+               case SQL_BINARY:
+               case SQL_VARBINARY:
+               case SQL_LONGVARBINARY:
+                       if (columnSize != 0) {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to