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

Reply via email to