Changeset: cf2d921d6104 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cf2d921d6104
Branch: default
Log Message:

Merge with Mar2025 branch.


diffs (231 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
@@ -365,7 +365,7 @@ gdk_return MT_alloc_tls(MT_TLS_t *newkey
 int MT_check_nr_cores(void);
 void MT_cond_broadcast(MT_Cond *cond);
 void MT_cond_destroy(MT_Cond *cond);
-void MT_cond_init(MT_Cond *cond);
+void MT_cond_init(MT_Cond *cond, const char *name);
 void MT_cond_signal(MT_Cond *cond);
 void MT_cond_wait(MT_Cond *cond, MT_Lock *lock);
 int MT_create_thread(MT_Id *t, void (*function)(void *), void *arg, enum 
MT_thr_detach d, const char *threadname);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2221,16 +2221,18 @@ BBPdir_first(bool subcommit, lng logno, 
 
 static bat
 BBPdir_step(bat bid, BUN size, int n, char *buf, size_t bufsize,
-           FILE **obbpfp, FILE *nbbpf, BATiter *bi)
+           FILE **obbpfp, FILE *nbbpf, BATiter *bi, int *nbatp)
 {
        if (n < -1)             /* safety catch */
                return n;
+       int nbat = 0;
        while (n >= 0 && n < bid) {
                if (n > 0) {
                        if (fputs(buf, nbbpf) == EOF) {
                                GDKerror("Writing BBP.dir file failed.\n");
                                goto bailout;
                        }
+                       nbat++;
                }
                if (fgets(buf, (int) bufsize, *obbpfp) == NULL) {
                        if (ferror(*obbpfp)) {
@@ -2254,7 +2256,9 @@ BBPdir_step(bat bid, BUN size, int n, ch
                assert(BBP_status(bid) & BBPPERSISTENT);
                if (new_bbpentry(nbbpf, bid, size, bi) != GDK_SUCCEED)
                        goto bailout;
+               nbat++;
        }
+       *nbatp += nbat;
        return n == -1 ? -1 : n == bid ? 0 : n;
 
   bailout:
@@ -3790,6 +3794,7 @@ BBPsync(int cnt, bat *restrict subcommit
        char buf[3000];
        int n = subcommit ? 0 : -1;
        FILE *obbpf, *nbbpf;
+       int nbats = 0;
 
        TRC_INFO(TM, "Committing %d bats\n", cnt - 1);
 
@@ -3927,7 +3932,7 @@ BBPsync(int cnt, bat *restrict subcommit
                        bip = NULL;
                }
                if (ret == GDK_SUCCEED) {
-                       n = BBPdir_step(i, size, n, buf, sizeof(buf), &obbpf, 
nbbpf, bip);
+                       n = BBPdir_step(i, size, n, buf, sizeof(buf), &obbpf, 
nbbpf, bip, &nbats);
                        if (n < -1)
                                ret = GDK_FAIL;
                }
@@ -3959,6 +3964,7 @@ BBPsync(int cnt, bat *restrict subcommit
                if (ret != GDK_SUCCEED)
                        GDKsyserror("rename(%s,%s) failed\n", bakdir, deldir);
                TRC_DEBUG(IO_, "rename %s %s = %d\n", bakdir, deldir, (int) 
ret);
+               TRC_INFO(TM, "%d bats written to BBP.dir\n", nbats);
        }
 
        /* AFTERMATH */
diff --git a/gdk/gdk_bbp.h b/gdk/gdk_bbp.h
--- a/gdk/gdk_bbp.h
+++ b/gdk/gdk_bbp.h
@@ -58,8 +58,6 @@
 #define BBPUNSTABLE    (BBPUNLOADING|BBPDELETING)      /* set while we are 
unloading */
 #define BBPWAITING      
(BBPUNLOADING|BBPLOADING|BBPSAVING|BBPDELETING|BBPSYNCING)
 
-#define BBPTRIM_ALL    (((size_t)1) << (sizeof(size_t)*8 - 2)) /* very large 
positive size_t */
-
 gdk_export bat getBBPsize(void); /* current occupied size of BBP array */
 gdk_export unsigned BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, 
bool allow_hge_upgrade);
 gdk_export int BBPreadBBPline(FILE *fp, unsigned bbpversion, int *lineno, BAT 
*bn,
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2478,7 +2478,7 @@ log_new(int debug, const char *fn, const
        MT_lock_init(&lg->lock, fn);
        MT_lock_init(&lg->rotation_lock, "rotation_lock");
        MT_lock_init(&lg->flush_lock, "flush_lock");
-       MT_cond_init(&lg->excl_flush_cv);
+       MT_cond_init(&lg->excl_flush_cv, "flush_cond");
 
        if (log_load(fn, lg, filename) == GDK_SUCCEED) {
                return lg;
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -1214,13 +1214,14 @@ MT_check_nr_cores(void)
 
 
 void
-MT_cond_init(MT_Cond *cond)
+MT_cond_init(MT_Cond *cond, const char *name)
 {
 #if !defined(HAVE_PTHREAD_H) && defined(WIN32)
        InitializeConditionVariable(&cond->cv);
 #else
        pthread_cond_init(&cond->cv, NULL);
 #endif
+       strcpy_len(cond->name, name, sizeof(cond->name));
 }
 
 
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -843,7 +843,7 @@ typedef struct MT_Cond {
 #  define MT_COND_INITIALIZER(N) { .cv = PTHREAD_COND_INITIALIZER, .name = #N }
 #endif
 
-gdk_export void MT_cond_init(MT_Cond *cond);
+gdk_export void MT_cond_init(MT_Cond *cond, const char *name);
 gdk_export void MT_cond_destroy(MT_Cond *cond);
 gdk_export void MT_cond_wait(MT_Cond *cond, MT_Lock *lock);
 gdk_export void MT_cond_signal(MT_Cond *cond);
diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c
--- a/monetdb5/mal/mal_listing.c
+++ b/monetdb5/mal/mal_listing.c
@@ -137,6 +137,7 @@ renderTerm(MalBlkPtr mb, MalStkPtr stk, 
                }
                GDKfree(cv);
        }
+       *bufend = 0;
        // show the type when required or frozen by the user
        // special care should be taken with constants, they may have been 
casted
        if ((flg & LIST_MAL_TYPE) || (idx < p->retc) || isVarTypedef(mb, varid)
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
@@ -241,7 +241,7 @@ static str
 odbc_query(mvc *sql, sql_subfunc *f, char *url, list *res_exps, sql_exp *topn, 
int caller)
 {
        (void) topn;
-       bool trace_enabled = true;      /* used for development only */
+       bool trace_enabled = false;     /* used for development only */
 
        /* check received url and extract the ODBC connection string and yhe 
SQL query */
        if (!url || (url && strncasecmp("odbc:", url, 5) != 0))
@@ -351,7 +351,7 @@ odbc_query(mvc *sql, sql_subfunc *f, cha
                        if (trace_enabled)
                                printf("ResCol %d, name: %s, type %d (%s), size 
%d, decdigits %d\n",
                                        col, cname, (int)dataType, 
nameofSQLtype(dataType), (int)columnSize, (int)decimalDigits);
-                       list_append(nameslist, cname);
+                       list_append(nameslist, sa_strdup(sql->sa, cname));
                        sql_mtype = map_rescol_type(dataType, columnSize, 
decimalDigits, sql);
                        list_append(typelist, sql_mtype);
 
@@ -360,13 +360,13 @@ odbc_query(mvc *sql, sql_subfunc *f, cha
                        if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) 
{
                                strcpy(tname, "");
                        }
-                       sql_exp *ne = exp_column(sql->sa, tname, cname, 
sql_mtype, CARD_MULTI, 1, 0, 0);
+                       sql_exp *ne = exp_column(sql->sa, sa_strdup(sql->sa, 
tname), sa_strdup(sql->sa, cname), sql_mtype, CARD_MULTI, 1, 0, 0);
                        set_basecol(ne);
                        ne->alias.label = -(sql->nid++);
                        list_append(res_exps, ne);
                }
 
-               /* f->tname = sa_strdup(sql->sa, aname); */
+               f->tname = sa_strdup(sql->sa, tname);
                f->res = typelist;
                f->coltypes = typelist;
                f->colnames = nameslist;
@@ -376,25 +376,52 @@ odbc_query(mvc *sql, sql_subfunc *f, cha
                r->dbc = dbc;
                r->stmt = stmt;
                r->nr_cols = nr_cols;
-               f->sname = (char*)r; /* pass odbc_loader */
+               f->sname = (char *)r; /* pass odbc_loader */
 
                goto finish;
        }
 
        /* when called from odbc_load() we can now fetch the data */
        if (caller == 2 && stmt != SQL_NULL_HSTMT) {
-               // TODO create an internal transient table to store fetched data
-               // if (mvc_create_table(&t, be->mvc, be->mvc->session->tr->tmp 
/* misuse tmp schema */, r->tname /*gettable name*/, tt_remote, false, 
SQL_DECLARED_TABLE, 0, 0, false) != LOG_OK)
+               //odbc_loader_t *r = (odbc_loader_t *)f->sname;
+               sql_table *t;
+
+               if (trace_enabled)
+                       printf("Before mvc_create_table(%s)\n", f->tname);
+               // create an internal transient table to store fetched data
+               if (mvc_create_table(&t, sql, sql->session->tr->tmp /* misuse 
tmp schema */,
+                               f->tname /*gettable name*/, tt_table, false, 
SQL_DECLARED_TABLE, 0, 0, false) != LOG_OK)
+                       /* alloc error */
+                       return NULL;
+               if (trace_enabled)
+                       printf("After mvc_create_table()\n");
+
+               node *n, *nn = f->colnames->h, *tn = f->coltypes->h;
+               for (n = f->res->h; n; n = n->next, nn = nn->next, tn = 
tn->next) {
+                       const char *name = nn->data;
+                       sql_subtype *tp = tn->data;
+                       sql_column *c = NULL;
+
+                       if (trace_enabled)
+                               printf("Before mvc_create_column(%s)\n", name);
+                       if (!tp || mvc_create_column(&c, sql, t, name, tp) != 
LOG_OK) {
+                               return NULL;
+                       }
+               }
 
                for (SQLUSMALLINT col = 1; col <= (SQLUSMALLINT) nr_cols; 
col++) {
-                       // TODO for each result column create a buffer and bind 
it. Also create a BAT column.
+                       // TODO for each result column create a buffer and bind 
it.
                        // ret = SQLBindCol(stmt, 1, );
-                       // if (!tp || mvc_create_column(&c, be->mvc, t, name, 
tp) != LOG_OK) {
                }
 
                // repeat fetching data, adding data work table
+               long rows = 0;
                ret = SQLFetch(stmt);
                while (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
+                       rows++;
+                       if (trace_enabled)
+                               printf("Fetched row %ld\n", rows);
+
                        // TODO for each result column append to created 
transient table
                        for (SQLUSMALLINT col = 1; col <= (SQLUSMALLINT) 
nr_cols; col++) {
                                // ret = SQLGetData(stmt, col, ...);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to