Changeset: 140e3c717245 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=140e3c717245 Modified Files: sql/backends/monet5/sql_upgrades.c sql/storage/bat/bat_logger.c sql/storage/store.c Branch: out2in Log Message:
Add upgrade code for sys.functions.semantics column. diffs (142 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2771,6 +2771,19 @@ sql_update_jun2020_bam(Client c, mvc *m, } static str +sql_update_semantics(Client c) +{ + char* update_query = + "update sys.functions set semantics = false where type <> 6 and func not ilike '%CREATE FUNCTION%' and name in ('length','octet_length','>','>=','<','<=','min','max','sql_min','sql_max','least','greatest','sum','prod','mod','and',\n" + "'or','xor','not','sql_mul','sql_div','sql_sub','sql_add','bit_and','bit_or','bit_xor','bit_not','left_shift','right_shift','abs','sign','scale_up','scale_down','round','power','floor','ceil','ceiling','sin','cos','tan','asin',\n" + "'acos','atan','sinh','cot','cosh','tanh','sqrt','exp','log','ln','log10','log2','pi','curdate','current_date','curtime','current_time','current_timestamp','localtime','localtimestamp','local_timezone','century','decade','year',\n" + "'quarter','month','day','dayofyear','weekofyear','dayofweek','dayofmonth','week','hour','minute','second','strings','locate','charindex','splitpart','substring','substr','truncate','concat','ascii','code','right','left','upper',\n" + "'ucase','lower','lcase','trim','ltrim','rtrim','lpad','rpad','insert','replace','repeat','space','char_length','character_length','soundex','qgramnormalize');"; + + return SQLstatementIntern(c, &update_query, "update", true, false, NULL); +} + +static str sql_update_default(Client c, mvc *sql, const char *prev_schema) { size_t bufsize = 1024, pos = 0; @@ -2839,6 +2852,12 @@ sql_update_default(Client c, mvc *sql, c } res_table_destroy(output); GDKfree(buf); + + if (err) + return err; + + err = sql_update_semantics(c); + return err; /* usually MAL_SUCCEED */ } 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 @@ -16,6 +16,7 @@ #define CATALOG_MAR2018 52201 #define CATALOG_AUG2018 52202 #define CATALOG_NOV2019 52203 +#define CATALOG_JUN2020 52204 logger *bat_logger = NULL; @@ -50,12 +51,20 @@ bl_preversion(int oldversion, int newver } #endif +#ifdef CATALOG_JUN2020 + if (oldversion == CATALOG_JUN2020) { + /* upgrade to default releases */ + catalog_version = oldversion; + return GDK_SUCCEED; + } +#endif + return GDK_FAIL; } #define N(schema, table, column) schema "_" table "_" column -#ifdef CATALOG_AUG2018 +#if defined CATALOG_AUG2018 || defined CATALOG_JUN2020 static int find_table_id(logger *lg, const char *val, int *sid) { @@ -804,6 +813,58 @@ bl_postversion(void *lg) } #endif +#ifdef CATALOG_JUN2020 + if (catalog_version <= CATALOG_JUN2020) { + int id; + lng lid; + BAT *fid = temp_descriptor(logger_find_bat(lg, N("sys", "functions", "id"), 0, 0)); + if (logger_sequence(lg, OBJ_SID, &lid) == 0 || + fid == NULL) { + bat_destroy(fid); + return GDK_FAIL; + } + id = (int) lid; + BAT *sem = COLnew(fid->hseqbase, TYPE_bit, BATcount(fid), PERSISTENT); + if (sem == NULL) { + bat_destroy(fid); + return GDK_FAIL; + } + bit *fsys = (bit *) Tloc(sem, 0); + for (BUN p = 0, q = BATcount(fid); p < q; p++) { + fsys[p] = 1; + } + + sem->tkey = false; + sem->tsorted = sem->trevsorted = true; + sem->tnonil = true; + sem->tnil = false; + BATsetcount(sem, BATcount(fid)); + bat_destroy(fid); + if (BATsetaccess(sem, BAT_READ) != GDK_SUCCEED || + logger_add_bat(lg, sem, N("sys", "functions", "semantics"), 0, 0) != GDK_SUCCEED) { + + bat_destroy(sem); + return GDK_FAIL; + } + bat_destroy(sem); + int sid; + int tid = find_table_id(lg, "functions", &sid); + if (tabins(lg, true, -1, NULL, "sys", "_columns", + "id", &id, + "name", "semantics", + "type", "boolean", + "type_digits", &((const int) {1}), + "type_scale", &((const int) {0}), + "table_id", &tid, + "default", str_nil, + "null", &((const bit) {TRUE}), + "number", &((const int) {10}), + "storage", str_nil, + NULL) != GDK_SUCCEED) + return GDK_FAIL; + } +#endif + return GDK_SUCCEED; } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -17,8 +17,8 @@ #include "bat/bat_table.h" #include "bat/bat_logger.h" -/* version 05.22.04 of catalog */ -#define CATALOG_VERSION 52204 +/* version 05.22.05 of catalog */ +#define CATALOG_VERSION 52205 int catalog_version = 0; static MT_Lock bs_lock = MT_LOCK_INITIALIZER("bs_lock"); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list