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