Changeset: 19801b4a1170 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19801b4a1170 Modified Files: gdk/gdk_logger.c gdk/gdk_logger.h gdk/gdk_logger_internals.h sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_orderidx.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statistics.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/sql_user.c sql/backends/monet5/vaults/fits/fits.c sql/backends/monet5/vaults/netcdf/netcdf.c sql/backends/monet5/vaults/shp/shp.c sql/backends/monet5/wlr.c sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_optimizer.c sql/server/rel_partition.c sql/server/rel_planner.c sql/server/rel_psm.c sql/server/rel_schema.c sql/server/rel_sequence.c sql/server/rel_updates.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/server/sql_privileges.c sql/storage/bat/bat_logger.c sql/storage/bat/bat_logger.h sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c sql/storage/sql_storage.h sql/storage/store.c sql/storage/store_dependency.c sql/storage/store_sequence.c sql/storage/store_sequence.h tools/monetdbe/monetdbe.c Branch: nospare Log Message:
large step towards no-globals diffs (truncated from 8701 to 300 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1433,7 +1433,7 @@ check_version(logger *lg, FILE *fp) } if (version != lg->version) { if (lg->prefuncp == NULL || - (*lg->prefuncp)(version, lg->version) != GDK_SUCCEED) { + (*lg->prefuncp)(lg->funcdata, version, lg->version) != GDK_SUCCEED) { GDKerror("Incompatible database version %06d, " "this server supports version %06d.\n%s", version, lg->version, @@ -2293,7 +2293,7 @@ logger_load(int debug, const char *fn, c lg->convert_date = false; } #endif - if (lg->postfuncp && (*lg->postfuncp)(lg) != GDK_SUCCEED) + if (lg->postfuncp && (*lg->postfuncp)(lg->funcdata, lg) != GDK_SUCCEED) goto error; /* done reading the log, revert to "normal" behavior */ @@ -2328,7 +2328,7 @@ logger_load(int debug, const char *fn, c /* Initialize a new logger * It will load any data in the logdir and persist it in the BATs*/ static logger * -logger_new(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp) +logger_new(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata) { int len; logger *lg; @@ -2383,6 +2383,7 @@ logger_new(int debug, const char *fn, co lg->prefuncp = prefuncp; lg->postfuncp = postfuncp; + lg->funcdata = funcdata; lg->log = NULL; lg->end = 0; lg->catalog_bid = NULL; @@ -2411,10 +2412,10 @@ logger_restart(logger *lg) /* Create a new logger */ logger * -logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp) +logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata) { logger *lg; - lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp); + lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, funcdata); if (lg == NULL) return NULL; if (lg->debug & 1) { diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h --- a/gdk/gdk_logger.h +++ b/gdk/gdk_logger.h @@ -11,8 +11,8 @@ #define LOGFILE "log" -typedef gdk_return (*preversionfix_fptr)(int oldversion, int newversion); -typedef gdk_return (*postversionfix_fptr)(void *lg); +typedef gdk_return (*preversionfix_fptr)(void *data, int oldversion, int newversion); +typedef gdk_return (*postversionfix_fptr)(void *data, void *lg); typedef struct logger logger; @@ -38,7 +38,7 @@ typedef int log_bid; #define LOG_COL 2 #define LOG_IDX 3 -gdk_export logger *logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp); +gdk_export logger *logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *prefuncdata); gdk_export void logger_destroy(logger *lg); gdk_export gdk_return logger_flush(logger *lg, lng save_id); gdk_export gdk_return logger_cleanup(logger *lg); diff --git a/gdk/gdk_logger_internals.h b/gdk/gdk_logger_internals.h --- a/gdk/gdk_logger_internals.h +++ b/gdk/gdk_logger_internals.h @@ -26,6 +26,7 @@ struct logger { char *local_dir; /* the directory in which the log is written */ preversionfix_fptr prefuncp; postversionfix_fptr postfuncp; + void *funcdata; stream *log; lng end; /* end of pre-allocated blocks for faster f(data)sync */ /* Store log_bids (int) to circumvent trouble with reference counting */ diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -5263,6 +5263,7 @@ check_for_foreign_key_references(mvc *sq if (*error) return; + sqlstore *store = sql->session->tr->store; if (t->keys.set) { /* Check for foreign key references */ for (n = t->keys.set->h; n; n = n->next) { sql_key *k = n->data; @@ -5279,8 +5280,8 @@ check_for_foreign_key_references(mvc *sq if (k->t != t && !cascade) { node *n = t->columns.set->h; sql_column *c = n->data; - size_t n_rows = store_funcs.count_col(sql->session->tr, c, 1); - size_t n_deletes = store_funcs.count_del(sql->session->tr, c->t); + size_t n_rows = store->storage_api.count_col(sql->session->tr, c, 1); + size_t n_deletes = store->storage_api.count_del(sql->session->tr, c->t); assert (n_rows >= n_deletes); if (n_rows - n_deletes > 0) { sql_error(sql, 02, SQLSTATE(23000) "TRUNCATE: FOREIGN KEY %s.%s depends on %s", k->t->base.name, k->base.name, t->base.name); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -147,10 +147,10 @@ sqlcleanup(backend *be, int err) sql_trans_commit(be->mvc->session->tr); /* write changes to disk */ sql_trans_end(be->mvc->session, 1); - store_apply_deltas(true); + store_apply_deltas(be->mvc->session->tr->store, true); sql_trans_begin(be->mvc->session); } - store_unlock(); + store_unlock(be->mvc->session->tr->store); be->mvc->emod = 0; } /* some statements dynamically disable caching */ @@ -314,7 +314,7 @@ create_table_or_view(mvc *sql, char* sna int check = 0; const char *action = (temp == SQL_DECLARED_TABLE) ? "DECLARE" : "CREATE"; - if (STORE_READONLY) + if (store_readonly(sql->session->tr->store)) return sql_error(sql, 06, SQLSTATE(25006) "schema statements cannot be executed on a readonly database."); if (!s) @@ -562,7 +562,8 @@ mvc_bind(mvc *m, const char *sname, cons if (c == NULL) return NULL; - b = store_funcs.bind_col(tr, c, access); + sqlstore *store = tr->store; + b = store->storage_api.bind_col(tr, c, access); return b; } @@ -790,7 +791,7 @@ mvc_next_value(Client cntxt, MalBlkPtr m if (!(seq = find_sql_sequence(s, seqname))) throw(SQL, "sql.next_value", SQLSTATE(HY050) "Cannot find the sequence %s.%s", sname, seqname); - if (seq_next_value(seq, res)) { + if (seq_next_value(be->mvc->session->tr->store, seq, res)) { be->last_id = *res; sqlvar_set_number(find_global_var(be->mvc, mvc_bind_schema(be->mvc, "sys"), "last_id"), be->last_id); return MAL_SUCCEED; @@ -819,7 +820,7 @@ mvc_get_value(Client cntxt, MalBlkPtr mb if (!(seq = find_sql_sequence(s, seqname))) throw(SQL, "sql.get_value", SQLSTATE(HY050) "Cannot find the sequence %s.%s", sname, seqname); - if (seq_get_value(seq, res)) + if (seq_get_value(m->session->tr->store, seq, res)) return MAL_SUCCEED; throw(SQL, "sql.get_value", SQLSTATE(HY050) "Cannot get sequence value %s.%s", sname, seqname); } @@ -851,6 +852,7 @@ mvc_bat_next_get_value(Client cntxt, Mal return msg; if ((msg = checkSQLContext(cntxt)) != NULL) return msg; + sqlstore *store = m->session->tr->store; if (schid && !(b = BATdescriptor(schid))) { msg = createException(SQL, call, SQLSTATE(HY005) "Cannot access column descriptor"); @@ -891,7 +893,7 @@ mvc_bat_next_get_value(Client cntxt, Mal if (!s || strcmp(s->base.name, nsname) != 0 || !seq || strcmp(seq->base.name, nseqname) != 0) { if (sb) { - seqbulk_destroy(sb); + seqbulk_destroy(store, sb); sb = NULL; } seq = NULL; @@ -903,7 +905,7 @@ mvc_bat_next_get_value(Client cntxt, Mal msg = createException(SQL, call, SQLSTATE(42000) "Access denied for %s to schema '%s'", get_string_global_var(m, "current_user"), s->base.name); goto bailout; } - if (!(seq = find_sql_sequence(s, nseqname)) || !(sb = seqbulk_create(seq, BATcount(it)))) { + if (!(seq = find_sql_sequence(s, nseqname)) || !(sb = seqbulk_create(store, seq, BATcount(it)))) { msg = createException(SQL, call, SQLSTATE(HY050) "Cannot find the sequence %s.%s", nsname, nseqname); goto bailout; } @@ -920,7 +922,7 @@ mvc_bat_next_get_value(Client cntxt, Mal bailout: if (sb) - seqbulk_destroy(sb); + seqbulk_destroy(store, sb); if (b) BBPunfix(b->batCacheid); if (c) @@ -1030,6 +1032,7 @@ mvc_bat_restart_seq(Client cntxt, MalBlk if ((msg = checkSQLContext(cntxt)) != NULL) return msg; + sqlstore *store = m->session->tr->store; if (schid && !(b = BATdescriptor(schid))) { msg = createException(SQL, "sql.restart", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; @@ -1079,7 +1082,7 @@ mvc_bat_restart_seq(Client cntxt, MalBlk if (!s || strcmp(s->base.name, nsname) != 0 || !seq || strcmp(seq->base.name, nseqname) != 0) { if (sb) { - seqbulk_destroy(sb); + seqbulk_destroy(store, sb); sb = NULL; } seq = NULL; @@ -1091,7 +1094,7 @@ mvc_bat_restart_seq(Client cntxt, MalBlk msg = createException(SQL, "sql.restart", SQLSTATE(42000) "Access denied for %s to schema '%s'", get_string_global_var(m, "current_user"), s->base.name); goto bailout; } - if (!(seq = find_sql_sequence(s, nseqname)) || !(sb = seqbulk_create(seq, BATcount(it)))) { + if (!(seq = find_sql_sequence(s, nseqname)) || !(sb = seqbulk_create(store, seq, BATcount(it)))) { msg = createException(SQL, "sql.restart", SQLSTATE(HY050) "Cannot find the sequence %s.%s", nsname, nseqname); goto bailout; } @@ -1120,7 +1123,7 @@ mvc_bat_restart_seq(Client cntxt, MalBlk bailout: if (sb) - seqbulk_destroy(sb); + seqbulk_destroy(store, sb); if (b) BBPunfix(b->batCacheid); if (c) @@ -1149,7 +1152,8 @@ mvc_bind_dbat(mvc *m, const char *sname, if (t == NULL) return NULL; - b = store_funcs.bind_del(tr, t, access); + sqlstore *store = tr->store; + b = store->storage_api.bind_del(tr, t, access); return b; } @@ -1169,7 +1173,8 @@ mvc_bind_idxbat(mvc *m, const char *snam return NULL; (void) tname; - b = store_funcs.bind_idx(tr, i, access); + sqlstore *store = tr->store; + b = store->storage_api.bind_idx(tr, i, access); return b; } @@ -1317,10 +1322,11 @@ static str mvc_insert_delta_values(mvc *m, BAT *col1, BAT *col2, BAT *col3, BAT *col4, BAT *col5, BAT *col6, BAT *col7, sql_column *c, bit cleared, lng deletes) { int level = 0; - - lng inserted = (lng) store_funcs.count_col(m->session->tr, c, 0); - lng all = (lng) store_funcs.count_col(m->session->tr, c, 1); - lng updates = (lng) store_funcs.count_col_upd(m->session->tr, c); + sqlstore *store = m->session->tr->store; + + lng inserted = (lng) store->storage_api.count_col(m->session->tr, c, 0); + lng all = (lng) store->storage_api.count_col(m->session->tr, c, 1); + lng updates = (lng) store->storage_api.count_col_upd(m->session->tr, c); lng readonly = all - inserted; assert(all >= inserted); @@ -1383,7 +1389,8 @@ mvc_delta_values(Client cntxt, MalBlkPtr lng deletes; if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) - goto cleanup; + return msg; + sqlstore *store = m->session->tr->store; if ((msg = checkSQLContext(cntxt)) != NULL) goto cleanup; @@ -1442,7 +1449,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr if (nrows) { if (tname) { cleared = (t->cleared != 0); - deletes = (lng) store_funcs.count_del(m->session->tr, t); + deletes = (lng) store->storage_api.count_del(m->session->tr, t); if (cname) { if ((msg=mvc_insert_delta_values(m, col1, col2, col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL) goto cleanup; @@ -1458,7 +1465,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr t = (sql_table *) n->data; if (isTable(t)) { cleared = (t->cleared != 0); - deletes = (lng) store_funcs.count_del(m->session->tr, t); + deletes = (lng) store->storage_api.count_del(m->session->tr, t); for (node *nn = t->columns.set->h; nn ; nn = nn->next) { c = (sql_column*) nn->data; @@ -1613,7 +1620,8 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl str mvc_append_column(sql_trans *t, sql_column *c, BAT *ins) { - int res = store_funcs.append_col(t, c, ins, TYPE_bat); + sqlstore *store = t->store; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list