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]
