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 -- [email protected]
To unsubscribe send an email to [email protected]