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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list