Changeset: 93ce59c311c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/93ce59c311c4
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/mal/mal_stack.c
        monetdb5/modules/atoms/batxml.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_rank.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_optimize_others.c
        sql/server/rel_select.c
        sql/server/rel_statistics.c
        sql/server/rel_unnest.c
        sql/server/rel_updates.c
        sql/server/sql_parser.y
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
        testing/Mtest.py.in
Branch: resource_management
Log Message:

merge with default


diffs (truncated from 22672 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
@@ -2554,6 +2554,16 @@ command aggr.subvariancep(X_0:bat[:sht],
 AGGRsubvariancepcand_dbl
 Grouped variance (population/biased) aggregate with candidates list
 aggr
+subxmlaggr
+command aggr.subxmlaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bit):bat[:xml]
+AGGRsubxml
+Grouped aggregation of XML values.
+aggr
+subxmlaggr
+command aggr.subxmlaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit):bat[:xml]
+AGGRsubxmlcand
+Grouped aggregation of XML values with candidates list.
+aggr
 subzero_or_one
 command aggr.subzero_or_one(X_0:bat[:any_1], X_1:bat[:oid], X_2:bat[:oid], 
X_3:bit):bat[:any_1]
 SQLsubzero_or_one
@@ -3329,6 +3339,11 @@ command aggr.variancep(X_0:bat[:any_2]):
 ALGvariancep
 Gives the variance of all tail values
 aggr
+xmlaggr
+command aggr.xmlaggr(X_0:bat[:xml]):xml
+BATXMLgroup
+Aggregate the XML values.
+aggr
 zero_or_one
 command aggr.zero_or_one(X_0:bat[:any_1]):any_1
 zero_or_one
@@ -50809,11 +50824,6 @@ command uuid.uuid(X_0:str):uuid
 UUIDstr2uuid
 Coerce a string to a uuid, validating its format
 xml
-aggr
-command xml.aggr(X_0:bat[:xml]):xml
-BATXMLgroup
-Aggregate the XML values.
-xml
 attribute
 command xml.attribute(X_0:str, X_1:str):xml
 XMLattribute
@@ -50884,16 +50894,6 @@ command xml.str(X_0:xml):str
 XMLxml2str
 Cast the string to an xml compliant string
 xml
-subaggr
-command xml.subaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bit):bat[:xml]
-AGGRsubxml
-Grouped aggregation of XML values.
-xml
-subaggr
-command xml.subaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit):bat[:xml]
-AGGRsubxmlcand
-Grouped aggregation of XML values with candidates list.
-xml
 text
 command xml.text(X_0:xml):str
 XMLxmltext
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
@@ -2164,6 +2164,16 @@ command aggr.subvariancep(X_0:bat[:sht],
 AGGRsubvariancepcand_dbl
 Grouped variance (population/biased) aggregate with candidates list
 aggr
+subxmlaggr
+command aggr.subxmlaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bit):bat[:xml]
+AGGRsubxml
+Grouped aggregation of XML values.
+aggr
+subxmlaggr
+command aggr.subxmlaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit):bat[:xml]
+AGGRsubxmlcand
+Grouped aggregation of XML values with candidates list.
+aggr
 subzero_or_one
 command aggr.subzero_or_one(X_0:bat[:any_1], X_1:bat[:oid], X_2:bat[:oid], 
X_3:bit):bat[:any_1]
 SQLsubzero_or_one
@@ -2764,6 +2774,11 @@ command aggr.variancep(X_0:bat[:any_2]):
 ALGvariancep
 Gives the variance of all tail values
 aggr
+xmlaggr
+command aggr.xmlaggr(X_0:bat[:xml]):xml
+BATXMLgroup
+Aggregate the XML values.
+aggr
 zero_or_one
 command aggr.zero_or_one(X_0:bat[:any_1]):any_1
 zero_or_one
@@ -39184,11 +39199,6 @@ command uuid.uuid(X_0:str):uuid
 UUIDstr2uuid
 Coerce a string to a uuid, validating its format
 xml
-aggr
-command xml.aggr(X_0:bat[:xml]):xml
-BATXMLgroup
-Aggregate the XML values.
-xml
 attribute
 command xml.attribute(X_0:str, X_1:str):xml
 XMLattribute
@@ -39259,16 +39269,6 @@ command xml.str(X_0:xml):str
 XMLxml2str
 Cast the string to an xml compliant string
 xml
-subaggr
-command xml.subaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bit):bat[:xml]
-AGGRsubxml
-Grouped aggregation of XML values.
-xml
-subaggr
-command xml.subaggr(X_0:bat[:xml], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit):bat[:xml]
-AGGRsubxmlcand
-Grouped aggregation of XML values with candidates list.
-xml
 text
 command xml.text(X_0:xml):str
 XMLxmltext
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
@@ -545,7 +545,7 @@ gdk_return log_bat_group_start(logger *l
 gdk_return log_bat_persists(logger *lg, BAT *b, log_id id);
 gdk_return log_bat_transient(logger *lg, log_id id);
 lng log_changes(logger *lg);
-gdk_return log_constant(logger *lg, int type, const void *val, log_id id, lng 
offset, lng cnt);
+gdk_return log_constant(logger *lg, int type, const void *val, log_id id, lng 
offset, lng cnt, lng total_cnt);
 logger *log_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata);
 gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id);
 void log_destroy(logger *lg);
diff --git a/clients/odbc/ChangeLog b/clients/odbc/ChangeLog
--- a/clients/odbc/ChangeLog
+++ b/clients/odbc/ChangeLog
@@ -1,3 +1,9 @@
 # ChangeLog file for odbc
 # This file is updated with Maddlog
 
+* Wed Jul  9 2025 Martin van Dinther <[email protected]>
+- Corrected SQLColAttribute() and SQLGetDescField() for when
+  FieldIdentifier is SQL_DESC_LITERAL_PREFIX or SQL_DESC_LITERAL_SUFFIX.
+  They will now return the correct literal prefix or suffix string
+  instead of an empty string depending on the datatype of the column.
+
diff --git a/clients/odbc/driver/ODBCDesc.c b/clients/odbc/driver/ODBCDesc.c
--- a/clients/odbc/driver/ODBCDesc.c
+++ b/clients/odbc/driver/ODBCDesc.c
@@ -460,3 +460,154 @@ ODBCLength(ODBCDescRec *rec, int lengtht
        }
        return SQL_NO_TOTAL;
 }
+
+/* the literal prefix and suffix strings depend on the sql_desc_concise_type
+   and for specific MonetDB types (inet, url, json, timetz, timestamptz)
+   on the sql_desc_type_name.
+ */
+void
+fillLiteralPrefixSuffix(ODBCDescRec *rec)
+{
+       switch (rec->sql_desc_concise_type) {
+       case SQL_CHAR:
+       case SQL_VARCHAR:
+       case SQL_LONGVARCHAR:
+       case SQL_WCHAR:
+       case SQL_WVARCHAR:
+       case SQL_WLONGVARCHAR:
+               if (rec->sql_desc_literal_prefix == NULL) {
+                       if (strcmp("inet", (char *)rec->sql_desc_type_name) == 
0) {
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("inet '");
+                       } else
+                       if (strcmp("url", (char *)rec->sql_desc_type_name) == 
0) {
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("url '");
+                       } else
+                       if (strcmp("json", (char *)rec->sql_desc_type_name) == 
0) {
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("json '");
+                       } else {
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("'");
+                       }
+               }
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
+               break;
+       case SQL_TYPE_DATE:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) strdup("date 
'");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
+               break;
+       case SQL_TYPE_TIME:
+               if (rec->sql_desc_literal_prefix == NULL) {
+                       if (strcmp("timetz", (char *)rec->sql_desc_type_name) 
== 0)
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("timetz '");
+                       else
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("time '");
+               }
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
+               break;
+       case SQL_TYPE_TIMESTAMP:
+               if (rec->sql_desc_literal_prefix == NULL) {
+                       if (strcmp("timestamptz", (char 
*)rec->sql_desc_type_name) == 0)
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("timestamptz '");
+                       else
+                               rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("timestamp '");
+               }
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
+               break;
+       case SQL_INTERVAL_YEAR:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
year");
+               break;
+       case SQL_INTERVAL_YEAR_TO_MONTH:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
year to month");
+               break;
+       case SQL_INTERVAL_MONTH:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
month");
+               break;
+       case SQL_INTERVAL_DAY:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
day");
+               break;
+       case SQL_INTERVAL_DAY_TO_HOUR:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
day to hour");
+               break;
+       case SQL_INTERVAL_DAY_TO_MINUTE:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
day to minute");
+               break;
+       case SQL_INTERVAL_DAY_TO_SECOND:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
day to second");
+               break;
+       case SQL_INTERVAL_HOUR:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
hour");
+               break;
+       case SQL_INTERVAL_HOUR_TO_MINUTE:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
hour to minute");
+               break;
+       case SQL_INTERVAL_HOUR_TO_SECOND:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
hour to second");
+               break;
+       case SQL_INTERVAL_MINUTE:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
minute");
+               break;
+       case SQL_INTERVAL_MINUTE_TO_SECOND:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
minute to second");
+               break;
+       case SQL_INTERVAL_SECOND:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) 
strdup("interval '");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("' 
second");
+               break;
+       case SQL_GUID:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) strdup("uuid 
'");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
+               break;
+       case SQL_LONGVARBINARY:
+               if (rec->sql_desc_literal_prefix == NULL)
+                       rec->sql_desc_literal_prefix = (SQLCHAR *) strdup("blob 
'");
+               if (rec->sql_desc_literal_suffix == NULL)
+                       rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("'");
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to