Changeset: cc51132c41b0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cc51132c41b0
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger.h
sql/backends/monet5/sql_scenario.c
sql/storage/bat/bat_logger.c
sql/storage/store.c
Branch: default
Log Message:
added upgrade code, ie for the recent changes in functions (var arg/res),
schema (system column) and argument inout column added.
Logger can now handle a much larger amount of changes (64 bits).
added upgrade code for this aswell.
updated the version number in sql, ie users of default should dump
restore.
diffs (285 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -108,7 +108,7 @@ static char *log_commands[] = {
typedef struct logformat_t {
char flag;
int tid;
- int nr;
+ lng nr;
} logformat;
#define LOGFILE "log"
@@ -138,10 +138,24 @@ logbat_new(int tt, BUN size)
}
static int
+log_read_format_old(logger *l, logformat *data)
+{
+ int nr = 0;
+ int ok = mnstr_read(l->log, &data->flag, 1, 1) == 1 &&
+ mnstr_readInt(l->log, &nr) == 1 &&
+ mnstr_readInt(l->log, &data->tid) == 1;
+ data->nr = nr;
+ return ok;
+}
+
+static int
log_read_format(logger *l, logformat *data)
{
+ if (l->postfuncp) /* we need to convert from the old logformat,
+ needs to be removed once we released
Aug2014 */
+ return log_read_format_old(l, data);
return mnstr_read(l->log, &data->flag, 1, 1) == 1 &&
- mnstr_readInt(l->log, &data->nr) == 1 &&
+ mnstr_readLng(l->log, &data->nr) == 1 &&
mnstr_readInt(l->log, &data->tid) == 1;
}
@@ -149,7 +163,7 @@ static int
log_write_format(logger *l, logformat *data)
{
if (mnstr_write(l->log, &data->flag, 1, 1) == 1 &&
- mnstr_writeInt(l->log, data->nr) &&
+ mnstr_writeLng(l->log, data->nr) &&
mnstr_writeInt(l->log, data->tid))
return LOG_OK;
fprintf(stderr, "!ERROR: log_write_format: write failed\n");
@@ -246,7 +260,7 @@ la_bat_clear(logger *lg, logaction *la)
static int
log_read_seq(logger *lg, logformat *l)
{
- int seq = l->nr;
+ lng seq = l->nr;
lng val;
BUN p;
@@ -273,7 +287,7 @@ log_read_updates(logger *lg, trans *tr,
int ht = -1, tt = -1, hseq = 0, tseq = 0;
if (lg->debug & 1)
- fprintf(stderr, "#logger found log_read_updates %s %s %d\n",
name, l->flag == LOG_INSERT ? "insert" : l->flag == LOG_DELETE ? "delete" :
"update", l->nr);
+ fprintf(stderr, "#logger found log_read_updates %s %s " LLFMT
"\n", name, l->flag == LOG_INSERT ? "insert" : l->flag == LOG_DELETE ? "delete"
: "update", l->nr);
if (b) {
ht = b->htype;
@@ -806,7 +820,7 @@ logger_readlog(logger *lg, char *filenam
fprintf(stderr, "%s", log_commands[(int)
l.flag]);
else
fprintf(stderr, "%d", l.flag);
- fprintf(stderr, " %d %d", l.tid, l.nr);
+ fprintf(stderr, " %d " LLFMT, l.tid, l.nr);
if (name)
fprintf(stderr, " %s", name);
fprintf(stderr, "\n");
@@ -1789,7 +1803,7 @@ log_delta(logger *lg, BAT *b, char *name
}
if (lg->debug & 1)
- fprintf(stderr, "#Logged %s %d inserts\n", name, l.nr);
+ fprintf(stderr, "#Logged %s " LLFMT " inserts\n", name,
l.nr);
}
if (ok == GDK_FAIL)
fprintf(stderr, "!ERROR: log_delta: write failed\n");
@@ -1840,7 +1854,7 @@ log_bat(logger *lg, BAT *b, char *name)
}
if (lg->debug & 1)
- fprintf(stderr, "#Logged %s %d inserts\n", name, l.nr);
+ fprintf(stderr, "#Logged %s " LLFMT " inserts\n", name,
l.nr);
}
l.nr = (int) (b->batFirst - b->batDeleted);
lg->changes += l.nr;
@@ -1864,7 +1878,7 @@ log_bat(logger *lg, BAT *b, char *name)
}
if (lg->debug & 1)
- fprintf(stderr, "#Logged %s %d deletes\n", name, l.nr);
+ fprintf(stderr, "#Logged %s " LLFMT " deletes\n", name,
l.nr);
}
if (ok == GDK_FAIL)
fprintf(stderr, "!ERROR: log_bat: write failed\n");
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -25,7 +25,7 @@
typedef struct logaction {
int type; /* type of change */
- int nr;
+ lng nr;
int ht; /* vid(-1),void etc */
int tt;
lng id;
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -600,11 +600,7 @@ sql_update_feb2013_sp3(Client c)
/*
* TODO
- * rewrite args table, ie add vararg and inout columns
* update all table functions, ie make them type F_UNION
- * update columns view, ie change storage_type-int into storage - varchar
- * remove table return types (#..), ie tt_generated from _tables
- * drop declared schema.
*/
static str
sql_update_jan2014(Client c)
@@ -617,8 +613,13 @@ sql_update_jan2014(Client c)
if (schvar)
schema = strdup(schvar->val.sval);
+
pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+ /* remove table return types (#..), ie tt_generated from
_tables/_columns */
+ pos += snprintf(buf + pos, bufsize - pos, "delete from _columns where
table_id in (select id from _tables where name like '#%%');\n");
+ pos += snprintf(buf + pos, bufsize - pos, "delete from _tables where
name like '#%%';\n");
+
/* replaced 15_history.sql by 15_querylog.sql */
pos += snprintf(buf + pos, bufsize - pos, "drop procedure
sys.resetHistory;\n");
pos += snprintf(buf + pos, bufsize - pos, "drop procedure
sys.keepCall;\n");
@@ -849,10 +850,13 @@ sql_update_default(Client c)
{
size_t bufsize = 8192, pos = 0;
char *buf = GDKmalloc(bufsize), *err = NULL;
- ValRecord *schvar = stack_get_var(((backend *) c->sqlcontext)->mvc,
"current_schema");
+ mvc *sql = ((backend*) c->sqlcontext)->mvc;
+ ValRecord *schvar = stack_get_var(sql, "current_schema");
char *schema = NULL;
char *fullname;
FILE *fp;
+ sql_table *t;
+ sql_schema *s;
if (schvar)
schema = strdup(schvar->val.sval);
@@ -891,6 +895,13 @@ sql_update_default(Client c)
}
/* change to 75_storage functions */
+ s = mvc_bind_schema(sql, "sys");
+ if (s && (t = mvc_bind_table(sql, s, "storage")) != NULL)
+ t->system = 0;
+ if (s && (t = mvc_bind_table(sql, s, "storagemodel")) != NULL)
+ t->system = 0;
+ if (s && (t = mvc_bind_table(sql, s, "tablestoragemodel")) != NULL)
+ t->system = 0;
pos += snprintf(buf + pos, bufsize - pos, "update sys._tables set
system = false where name in ('storage','storagemodel','tablestoragemodel') and
schema_id = (select id from sys.schemas where name = 'sys');\n");
pos += snprintf(buf + pos, bufsize - pos, "drop view sys.storage;\n");
pos += snprintf(buf + pos, bufsize - pos, "drop function
sys.storage();\n");
@@ -901,6 +912,11 @@ sql_update_default(Client c)
pos += snprintf(buf + pos, bufsize - pos, "create function
sys.storage() returns table (\"schema\" string, \"table\" string, \"column\"
string, \"type\" string, location string, \"count\" bigint, typewidth int,
columnsize bigint, heapsize bigint, hashes bigint, imprints bigint, sorted
boolean) external name sql.storage;\n");
pos += snprintf(buf + pos, bufsize - pos, "create view sys.storage as
select * from sys.storage();\n");
+
+ pos += snprintf(buf + pos, bufsize - pos, "create function
sys.hashsize(b boolean, i bigint) returns bigint begin if b = true then return
8 * i; end if; return 0; end;");
+
+ pos += snprintf(buf + pos, bufsize - pos, "create function
sys.imprintsize(i bigint, nme string) returns bigint begin if nme = 'boolean'
or nme = 'tinyint' or nme = 'smallint' or nme = 'int' or nme = 'bigint'
or nme = 'decimal' or nme = 'date' or nme = 'timestamp' or nme = 'real' or
nme = 'double' then return cast( i * 0.12 as bigint); end if ; return 0; end;");
+
pos += snprintf(buf + pos, bufsize - pos, "create function
sys.storagemodel() returns table ("
" \"schema\" string, \"table\" string, \"column\" string, \"type\" string,
\"count\" bigint,"
" columnsize bigint, heapsize bigint, hashes bigint, imprints bigint,
sorted boolean)"
@@ -920,7 +936,7 @@ sql_update_default(Client c)
" sum(hashes) as hashes,"
" sum(imprints) as imprints,"
" sum(case when sorted = false then 8 * count else 0 end) as auxillary"
-"from sys.storagemodel() group by \"schema\",\"table\";\n");
+" from sys.storagemodel() group by \"schema\",\"table\";\n");
pos += snprintf(buf + pos, bufsize - pos, "create view sys.storagemodel
as select * from sys.storagemodel();\n");
pos += snprintf(buf + pos, bufsize - pos, "update sys._tables set
system = true where name in ('storage','storagemodel','tablestoragemodel') and
schema_id = (select id from sys.schemas where name = 'sys');\n");
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -81,7 +81,7 @@ bl_postversion( void *lg)
(void)lg;
if (catalog_version == CATALOG_FEB2013) {
/* we need to add the new schemas.system column */
- BAT *b, *b1;
+ BAT *b, *b1, *b2;
BATiter bi;
char *s = "sys", n[64];
BUN p,q;
@@ -106,6 +106,57 @@ bl_postversion( void *lg)
logger_add_bat(lg, b1, N(n, NULL, s, "schemas_system"));
bat_destroy(b);
bat_destroy(b1);
+
+ /* add args.inout (default to ARG_IN) */
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"args_name")));
+ if (!b)
+ return;
+ bi = bat_iterator(b);
+ b1 = BATnew(TYPE_void, TYPE_bit, BATcount(b));
+ BATseqbase(b1, b->hseqbase);
+ if (!b1)
+ return;
+ /* default to ARG_IN, names starting with 'res' are ARG_OUT */
+ bi = bat_iterator(b);
+ for(p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
+ bte v = ARG_IN;
+ char *name = BUNtail(bi, p);
+ if (strncmp(name, "res", 3) == 0)
+ v = ARG_OUT;
+ BUNappend(b1, &v, TRUE);
+ }
+ b1 = BATsetaccess(b1, BAT_READ);
+ logger_add_bat(lg, b1, N(n, NULL, s, "args_inout"));
+ bat_destroy(b);
+ bat_destroy(b1);
+
+ /* add functions.vararg/varres */
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"functions_name")));
+ if (!b)
+ return;
+ bi = bat_iterator(b);
+ b1 = BATnew(TYPE_void, TYPE_bit, BATcount(b));
+ b2 = BATnew(TYPE_void, TYPE_bit, BATcount(b));
+ BATseqbase(b1, b->hseqbase);
+ BATseqbase(b2, b->hseqbase);
+ if (!b1 || !b2)
+ return;
+ /* default to no variaable arguments and results */
+ for(p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
+ bit v = FALSE;
+ /* TODO how about import ! */
+ BUNappend(b1, &v, TRUE);
+ BUNappend(b2, &v, TRUE);
+ }
+ b1 = BATsetaccess(b1, BAT_READ);
+ b2 = BATsetaccess(b2, BAT_READ);
+ logger_add_bat(lg, b1, N(n, NULL, s, "functions_vararg"));
+ logger_add_bat(lg, b2, N(n, NULL, s, "functions_varres"));
+ bat_destroy(b);
+ bat_destroy(b1);
+ bat_destroy(b2);
+
+ /* TODO rename columns.storage_type -> storage */
}
if (catalog_version == CATALOG_OCT2010) {
BAT *b, *b1;
@@ -182,7 +233,7 @@ bl_postversion( void *lg)
BUN bs;
BATiter iiname, itname, isname;
- /* TODO funcs.aggr (boolean) -> funcs.type (int) */
+ /* TODO functions.aggr (boolean) -> functions.type (int) */
fprintf(stdout, "# upgrading catalog from Apr2011\n");
fflush(stdout);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -29,8 +29,8 @@
#include <bat/bat_table.h>
#include <bat/bat_logger.h>
-/* version 05.20.02 of catalog */
-#define CATALOG_VERSION 52002
+/* version 05.21.00 of catalog */
+#define CATALOG_VERSION 52100
int catalog_version = 0;
static MT_Lock bs_lock MT_LOCK_INITIALIZER("bs_lock");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list