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