Changeset: ce7f6e841c59 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ce7f6e841c59
Modified Files:
        gdk/gdk_bbp.c
Branch: default
Log Message:

Merge with Mar2025 branch.


diffs (truncated from 1546 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1382,7 +1382,8 @@ SQLrenderer(MapiHdl hdl)
                             strcmp(s, "clob") != 0 &&
                             strcmp(s, "char") != 0 &&
                             strcmp(s, "str") != 0 &&
-                            strcmp(s, "json") != 0)) {
+                            strcmp(s, "json") != 0 &&
+                            strcmp(s, "uuid") != 0)) {
                                /* no table width known, use maximum,
                                 * rely on squeezing later on to fix
                                 * it to whatever is available; note
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -16,7 +16,6 @@ set(gdk_public_headers
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_posix.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_atoms.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_tracer.h>
-  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_delta.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_hash.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_bbp.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_utils.h>
@@ -28,7 +27,6 @@ set(gdk_public_headers
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_posix.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_atoms.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_tracer.h>
-  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_delta.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_hash.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_bbp.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_utils.h>
@@ -71,7 +69,7 @@ target_sources(bat
   gdk_rsort.c
   gdk_storage.c
   gdk_bat.c
-  gdk_delta.c gdk_delta.h
+  gdk_delta.c
   gdk_cross.c
   gdk_system.c
   gdk_value.c
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1890,7 +1890,8 @@ gdk_export gdk_return BATorderidx(BAT *b
 gdk_export gdk_return GDKmergeidx(BAT *b, BAT**a, int n_ar);
 gdk_export bool BATcheckorderidx(BAT *b);
 
-#include "gdk_delta.h"
+#define DELTAdirty(b)  ((b)->batInserted < BATcount(b))
+
 #include "gdk_hash.h"
 #include "gdk_bbp.h"
 #include "gdk_utils.h"
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -276,7 +276,6 @@ COLnew2(oid hseq, int tt, BUN cap, role_
                HEAPfree(bn->theap, true);
                goto bailout;
        }
-       DELTAinit(bn);
        if (BBPcacheit(bn, true) != GDK_SUCCEED) {
                /* cannot happen, function always returns success */
                goto bailout;
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2995,19 +2995,6 @@ decref(bat i, bool logical, bool lock, c
                        MT_lock_set(&b->theaplock);
                        locked = true;
                }
-#if 0
-               if (b->batCount > b->batInserted && !isVIEW(b)) {
-                       /* if batCount is larger than batInserted and
-                        * the dirty bits are off, it may be that a
-                        * (sub)commit happened in parallel to an
-                        * update; we must undo the turning off of the
-                        * dirty bits */
-                       if (b->theap && b->theap->parentid == i)
-                               b->theap->dirty = true;
-                       if (b->tvheap && b->tvheap->parentid == i)
-                               b->tvheap->dirty = true;
-               }
-#endif
                if (b->theap)
                        farmid = b->theap->farmid;
        }
diff --git a/gdk/gdk_delta.h b/gdk/gdk_delta.h
deleted file mode 100644
--- a/gdk/gdk_delta.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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, 2025 MonetDB Foundation;
- * Copyright August 2008 - 2023 MonetDB B.V.;
- * Copyright 1997 - July 2008 CWI.
- */
-
-#ifndef _GDK_DELTA_H_
-#define _GDK_DELTA_H_
-
-/*
- * We make sure here that the BUNs section of a BAT at least starts 4
- * bytes from the BUN start.  This ensures that the first data item of
- * e.g. a BAT[void,bit] is (at least) integer aligned.  This optimizes
- * processing on such BATs (DDBENCH).
- */
-static inline void
-DELTAinit(BAT *b)
-{
-       BATsetcount(b, 0);
-       b->theap->free = 0;
-       b->batInserted = 0;
-       b->tshift = ATOMelmshift(b->twidth);
-       TRC_DEBUG(DELTA,
-                 "%s free %zu ins " BUNFMT " base %p\n",
-                 BBP_logical(b->batCacheid),
-                 b->theap->free,
-                 b->batInserted,
-                 b->theap->base);
-}
-
-/*
- * Upon saving a BAT, we should convert the delta marker BUN pointers
- * into indexes and convert them back into pointers upon reload.
- *
- * The BATdirty(b) tells you whether a BAT's main memory
- * representation differs from its saved image on stable storage. But
- * *not* whether it has changed since last transaction commit (it can
- * be storage-clean, but transaction-dirty). For this we have
- * DELTAdirty(b).
- */
-#define DELTAdirty(b)  ((b)->batInserted < BATcount(b))
-
-#endif /* _GDK_DELTA_H_ */
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2976,9 +2976,8 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
                b = BATdescriptor(VIEWtparent(r));
                if (b == NULL)
                        goto bailout;
-               TRC_DEBUG(ALGO, "%s(%s): using "
+               TRC_DEBUG(ALGO, "%s: using "
                          "parent(" ALGOBATFMT ") for hash%s\n",
-                         __func__,
                          BATgetId(r), ALGOBATPAR(b),
                          swapped ? " (swapped)" : "");
                roff = r->tbaseoff - b->tbaseoff;
diff --git a/sql/backends/monet5/vaults/monetdb/monetdb.c 
b/sql/backends/monet5/vaults/monetdb/monetdb.c
--- a/sql/backends/monet5/vaults/monetdb/monetdb.c
+++ b/sql/backends/monet5/vaults/monetdb/monetdb.c
@@ -107,7 +107,16 @@ monetdb_relation(mvc *sql, sql_subfunc *
        });
 
        if ((hdl = mapi_query(dbh, query)) == NULL || mapi_error(dbh)) {
-               ret = sa_strdup(sql->sa, mapi_error_str(dbh));
+               const char *err = mapi_error_str(dbh);
+               if (err)
+                       ret = sa_strdup(sql->sa, err);
+               else
+                       ret = sa_message(sql->sa, "Failed to access remote 
server");
+               goto end;
+       }
+
+       if (mapi_get_row_count(hdl) == 0) { /* non existing table */
+               ret = sa_message(sql->sa, "Table %s.%s is missing on remote 
server", sname, tname);
                goto end;
        }
 
diff --git a/sql/backends/monet5/vaults/odbc/odbc_loader.c 
b/sql/backends/monet5/vaults/odbc/odbc_loader.c
--- a/sql/backends/monet5/vaults/odbc/odbc_loader.c
+++ b/sql/backends/monet5/vaults/odbc/odbc_loader.c
@@ -13,7 +13,8 @@
 #include "monetdb_config.h"
 #include "rel_proto_loader.h"
 #include "rel_exp.h"
-
+#include "gdk.h"       // COLnew(), BUNappend()
+#include "gdk_time.h"  // date_create(), daytime_create(), timestamp_create()
 #include "mal_exception.h"
 #include "mal_builder.h"
 #include "mal_client.h"
@@ -30,6 +31,15 @@
 #include <sql.h>
 #include <sqlext.h>
 
+
+#define ODBC_RELATION 1
+#define ODBC_LOADER   2
+
+#define QUERY_MAX_COLUMNS 4096
+#define MAX_COL_NAME_LEN  1024
+#define MAX_TBL_NAME_LEN  1024
+
+
 /* map ODBC SQL datatype to MonetDB SQL datatype */
 static sql_subtype *
 map_rescol_type(SQLSMALLINT dataType, SQLULEN columnSize, SQLSMALLINT 
decimalDigits, mvc * sql)
@@ -163,6 +173,72 @@ map_rescol_type(SQLSMALLINT dataType, SQ
        return sql_bind_subtype(sql->sa, typenm, interval_type, 0);
 }
 
+/* return atom type for ODBC SQL datatype. */
+/* atom types are defined in gdk/gdh.h enum */
+static int
+map_rescol_mtype(SQLSMALLINT dataType, SQLULEN columnSize)
+{
+       switch (dataType) {
+       case SQL_CHAR:
+       case SQL_VARCHAR:
+       case SQL_LONGVARCHAR:
+       case SQL_WCHAR:
+       case SQL_WVARCHAR:
+       case SQL_WLONGVARCHAR:
+               return TYPE_str;
+       case SQL_BIT:
+               return TYPE_bit;
+       case SQL_TINYINT:
+               return TYPE_bte;
+       case SQL_SMALLINT:
+               return TYPE_sht;
+       case SQL_INTEGER:
+               return TYPE_int;
+       case SQL_BIGINT:
+               return TYPE_lng;
+       case SQL_REAL:
+               return TYPE_flt;
+       case SQL_FLOAT:
+               return (columnSize == 7) ? TYPE_flt : TYPE_dbl;
+       case SQL_DOUBLE:
+               return TYPE_dbl;
+       case SQL_BINARY:
+       case SQL_VARBINARY:
+       case SQL_LONGVARBINARY:
+               return TYPE_blob;
+       case SQL_TYPE_DATE:
+               return TYPE_date;
+       case SQL_TYPE_TIME:
+               return TYPE_daytime;
+       case SQL_DATETIME:
+       case SQL_TYPE_TIMESTAMP:
+               return TYPE_timestamp;
+       case SQL_GUID:
+               return TYPE_uuid;
+       case SQL_INTERVAL_MONTH:
+       case SQL_INTERVAL_YEAR:
+       case SQL_INTERVAL_YEAR_TO_MONTH:
+               return TYPE_int;
+       case SQL_INTERVAL_DAY:
+       case SQL_INTERVAL_HOUR:
+       case SQL_INTERVAL_MINUTE:
+       case SQL_INTERVAL_SECOND:
+       case SQL_INTERVAL_DAY_TO_HOUR:
+       case SQL_INTERVAL_DAY_TO_MINUTE:
+       case SQL_INTERVAL_DAY_TO_SECOND:
+       case SQL_INTERVAL_HOUR_TO_MINUTE:
+       case SQL_INTERVAL_HOUR_TO_SECOND:
+       case SQL_INTERVAL_MINUTE_TO_SECOND:
+               return TYPE_lng;
+
+       case SQL_DECIMAL:
+       case SQL_NUMERIC:
+               // we will fetch decimals as string data
+       default:
+               return TYPE_str;
+       }
+}
+
 /* return name for ODBC SQL datatype */
 static char *
 nameofSQLtype(SQLSMALLINT dataType)
@@ -211,7 +287,7 @@ nameofSQLtype(SQLSMALLINT dataType)
        }
 }
 
-/* utility function to nicely close all opened ODBC resources */
+/* utility function to safely close all opened ODBC resources */
 static void
 odbc_cleanup(SQLHANDLE env, SQLHANDLE dbc, SQLHANDLE stmt) {
        SQLRETURN ret = SQL_SUCCESS;
@@ -231,23 +307,45 @@ odbc_cleanup(SQLHANDLE env, SQLHANDLE db
        }
 }
 
-typedef struct odbc_loader_t {
-       SQLHANDLE env;
-       SQLHANDLE dbc;
-       SQLHANDLE stmt;
-       SQLSMALLINT nr_cols;
-} odbc_loader_t;
+/* copied from monetdb5/modules/mal/tablet.c */
+static BAT *
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to