Changeset: 3ed18b503bce for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3ed18b503bce
Modified Files:
        gdk/gdk_utils.c
        sql/backends/monet5/sql_upgrades.c
        sql/common/sql_types.c
        sql/common/sql_types.h
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_propagate.c
        sql/server/sql_atom.c
        sql/server/sql_atom.h
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: default
Log Message:

Merged with oscar


diffs (truncated from 128069 to 300 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1360,7 +1360,10 @@ GDKusec(void)
        return (lng) (f.QuadPart / 10);
 #elif defined(HAVE_CLOCK_GETTIME)
        struct timespec ts;
-       clock_gettime(CLOCK_REALTIME, &ts);
+#ifdef CLOCK_REALTIME_COARSE
+       if (clock_gettime(CLOCK_REALTIME_COARSE, &ts) < 0)
+#endif
+               (void) clock_gettime(CLOCK_REALTIME, &ts);
        return (lng) (ts.tv_sec * LL_CONSTANT(1000000) + ts.tv_nsec / 1000);
 #elif defined(HAVE_GETTIMEOFDAY)
        struct timeval tv;
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
@@ -2153,7 +2153,7 @@ sql_update_default_lidar(Client c)
 }
 
 static str
-sql_update_default(Client c, mvc *sql, const char *prev_schema)
+sql_update_default(Client c, mvc *sql, const char *prev_schema, bool 
*systabfixed)
 {
        size_t bufsize = 8192, pos = 0;
        char *err = NULL, *buf = GDKmalloc(bufsize);
@@ -2176,6 +2176,11 @@ sql_update_default(Client c, mvc *sql, c
        if (b) {
                BATiter bi = bat_iterator(b);
                if (BATcount(b) > 0 && strcmp(BUNtail(bi, 0), "progress") == 0) 
{
+                       if (!*systabfixed &&
+                               (err = sql_fix_system_tables(c, sql, 
prev_schema)) != NULL)
+                               return err;
+                       *systabfixed = true;
+
                        pos = 0;
                        pos += snprintf(buf + pos, bufsize - pos,
                                        "set schema \"sys\";\n");
@@ -2294,20 +2299,6 @@ sql_update_default(Client c, mvc *sql, c
                        pos += snprintf(buf + pos, bufsize - pos,
                                        "delete from args where id in (select 
args.id from args left join functions on args.func_id = functions.id where 
functions.id is null);\n");
 
-                       list *functions = sa_list(sql->sa);
-                       /* Adding fixed versions of degrees and radians 
functions */
-                       sql_subtype *flt_types[2] = {sql_bind_localtype("flt"), 
sql_bind_localtype("dbl")};
-                       for (int i = 0; i < 2; i++) {
-                               sql_subtype *next = flt_types[i];
-                               /*      TODO: This is BAD: its redundantly is 
trying to add duplicate function definitions to the global funcs list instead 
of updating the functions table.
-                                *      But it just ends up corrupting the 
global funcs list because it is using the wrong sql allocator.
-                                */
-                               list_append(functions, sql_create_func(sql->sa, 
"degrees", "mmath", "degrees", FALSE, FALSE, SCALE_FIX, 0, next->type, 1, 
next->type));
-                               list_append(functions, sql_create_func(sql->sa, 
"radians", "mmath", "radians", FALSE, FALSE, SCALE_FIX, 0, next->type, 1, 
next->type));
-                       }
-
-                       insert_functions(sql->session->tr, mvc_bind_table(sql, 
sys, "functions"), functions, mvc_bind_table(sql, sys, "args"));
-
                        pos += snprintf(buf + pos, bufsize - pos,
                                "UPDATE sys.functions set semantics = false 
WHERE (name, func) IN (VALUES \n"
                                        "('length', 'nitems'),\n"
@@ -2677,7 +2668,7 @@ SQLupgrades(Client c, mvc *m)
                return -1;
        }
 
-       if ((err = sql_update_default(c, m, prev_schema)) != NULL) {
+       if ((err = sql_update_default(c, m, prev_schema, &systabfixed)) != 
NULL) {
                TRC_CRITICAL(SQL_PARSER, "%s\n", err);
                freeException(err);
                GDKfree(prev_schema);
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1055,7 +1055,7 @@ sql_create_procedure(sql_allocator *sa, 
        return res;
 }
 
-sql_func *
+static sql_func *
 sql_create_func(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, bit semantics, bit side_effect, int fix_scale,
                                unsigned int res_scale, sql_type *fres, int 
nargs, ...)
 {
diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h
--- a/sql/common/sql_types.h
+++ b/sql/common/sql_types.h
@@ -68,8 +68,4 @@ extern int is_sqlfunc(sql_func *f);
 
 extern void types_init(sql_allocator *sa);
 
-/* This function should be used in exceptional cases such as dealing with 
tricky upgrades! */
-extern sql_func *sql_create_func(sql_allocator *sa, const char *name, const 
char *mod, const char *imp, bit semantics, bit side_effect, int fix_scale,
-                                                                unsigned int 
res_scale, sql_type *fres, int nargs, ...);
-
 #endif /* SQL_TYPES_H */
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -309,6 +309,7 @@ typedef enum sql_class {
 #define EC_TEMP_TZ(e)          (e==EC_TIME_TZ||e==EC_TIMESTAMP_TZ)
 #define EC_TEMP(e)                     
(e==EC_TIME||e==EC_DATE||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
 #define EC_TEMP_FRAC(e)                
(e==EC_TIME||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
+#define EC_TEMP_NOFRAC(e)      (e==EC_TIME||e==EC_TIMESTAMP)
 #define EC_BACKEND_FIXED(e)    (EC_NUMBER(e)||e==EC_BIT||EC_TEMP(e))
 
 typedef struct sql_type {
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -18,8 +18,6 @@
 #ifdef HAVE_HGE
 #include "mal.h"               /* for have_hge */
 #endif
-#include "gdk_time.h"
-#include "blob.h"
 
 comp_type
 compare_str2type(const char *compare_op)
@@ -2648,97 +2646,6 @@ exp_sum_scales(sql_subfunc *f, sql_exp *
        }
 }
 
-sql_exp *
-create_table_part_atom_exp(mvc *sql, sql_subtype tpe, ptr value)
-{
-       str buf = NULL;
-       size_t len = 0;
-       sql_exp *res = NULL;
-
-       switch (tpe.type->eclass) {
-               case EC_BIT: {
-                       bit bval = *((bit*) value);
-                       return exp_atom_bool(sql->sa, bval ? 1 : 0);
-               }
-               case EC_POS:
-               case EC_NUM:
-               case EC_DEC:
-               case EC_SEC:
-               case EC_MONTH:
-                       switch (tpe.type->localtype) {
-#ifdef HAVE_HGE
-                               case TYPE_hge: {
-                                       hge hval = *((hge*) value);
-                                       return exp_atom_hge(sql->sa, hval);
-                               }
-#endif
-                               case TYPE_lng: {
-                                       lng lval = *((lng*) value);
-                                       return exp_atom_lng(sql->sa, lval);
-                               }
-                               case TYPE_int: {
-                                       int ival = *((int*) value);
-                                       return exp_atom_int(sql->sa, ival);
-                               }
-                               case TYPE_sht: {
-                                       sht sval = *((sht*) value);
-                                       return exp_atom_sht(sql->sa, sval);
-                               }
-                               case TYPE_bte: {
-                                       bte bbval = *((bte *) value);
-                                       return exp_atom_bte(sql->sa, bbval);
-                               }
-                               default:
-                                       return NULL;
-                       }
-               case EC_FLT:
-                       switch (tpe.type->localtype) {
-                               case TYPE_flt: {
-                                       flt fval = *((flt*) value);
-                                       return exp_atom_flt(sql->sa, fval);
-                               }
-                               case TYPE_dbl: {
-                                       dbl dval = *((dbl*) value);
-                                       return exp_atom_dbl(sql->sa, dval);
-                               }
-                               default:
-                                       return NULL;
-                       }
-               case EC_DATE: {
-                       if(date_tostr(&buf, &len, (const date *)value, false) < 
0)
-                               return NULL;
-                       res = exp_atom(sql->sa, atom_general(sql->sa, &tpe, 
buf));
-                       break;
-               }
-               case EC_TIME: {
-                       if(daytime_tostr(&buf, &len, (const daytime *)value, 
false) < 0)
-                               return NULL;
-                       res = exp_atom(sql->sa, atom_general(sql->sa, &tpe, 
buf));
-                       break;
-               }
-               case EC_TIMESTAMP: {
-                       if(timestamp_tostr(&buf, &len, (const timestamp 
*)value, false) < 0)
-                               return NULL;
-                       res = exp_atom(sql->sa, atom_general(sql->sa, &tpe, 
buf));
-                       break;
-               }
-               case EC_BLOB: {
-                       if(BLOBtostr(&buf, &len, (const blob *)value, false) < 
0)
-                               return NULL;
-                       res = exp_atom(sql->sa, atom_general(sql->sa, &tpe, 
buf));
-                       break;
-               }
-               case EC_CHAR:
-               case EC_STRING:
-                       return exp_atom_clob(sql->sa, sa_strdup(sql->sa, 
value));
-               default:
-                       assert(0);
-       }
-       if(buf)
-               GDKfree(buf);
-       return res;
-}
-
 int
 exp_aggr_is_count(sql_exp *e)
 {
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -186,8 +186,6 @@ extern atom *exp_flatten(mvc *sql, sql_e
 
 extern void exp_sum_scales(sql_subfunc *f, sql_exp *l, sql_exp *r);
 
-extern sql_exp *create_table_part_atom_exp(mvc *sql, sql_subtype tpe, ptr 
value);
-
 extern int exp_aggr_is_count(sql_exp *e);
 
 extern void exps_reset_freevar(list *exps);
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -8790,52 +8790,15 @@ rel_add_dicts(visitor *v, sql_rel *rel)
 }
 
 static int
-find_col_exp( list *exps, sql_exp *e)
-{
-       node *n;
-       int nr = 0;
-
-       for (n=exps->h; n; n=n->next, nr++){
-               if (n->data == e)
-                       return nr;
-       }
-       return -1;
-}
-
-static int
-exp_range_overlap(mvc *sql, sql_exp *e, char *min, char *max, atom *emin, atom 
*emax)
-{
-       sql_subtype *t = exp_subtype(e);
-       int localtype = t->type->localtype;
-
-       if (!min || !max || !emin || !emax || strNil(min) || strNil(max) || 
emin->isnull || emax->isnull || !ATOMlinear(localtype))
+exp_range_overlap(atom *min, atom *max, atom *emin, atom *emax, bool 
min_exclusive, bool max_exclusive)
+{
+       if (!min || !max || !emin || !emax || min->isnull || max->isnull || 
emin->isnull || emax->isnull)
                return 0;
 
-       switch (ATOMstorage(localtype)) {
-       case TYPE_bte:
-       case TYPE_sht:
-       case TYPE_int:
-       case TYPE_lng:
-#ifdef HAVE_HGE
-       case TYPE_hge:
-#endif
-       case TYPE_flt:
-       case TYPE_dbl:
-       case TYPE_str: {
-               atom *cmin, *cmax;
-
-#ifdef HAVE_HGE
-               if (localtype == TYPE_hge && !have_hge)
-                       return 0;
-#endif
-               cmin = atom_general(sql->sa, t, min);
-               cmax = atom_general(sql->sa, t, max);
-               if (VALcmp(&(emax->data), &(cmin->data)) < 0 || 
VALcmp(&(emin->data), &(cmax->data)) > 0)
-                       return 0;
-       } break;
-       default:
+       if ((!min_exclusive && VALcmp(&(emax->data), &(min->data)) < 0) || 
(min_exclusive && VALcmp(&(emax->data), &(min->data)) <= 0))
                return 0;
-       }
+       if ((!max_exclusive && VALcmp(&(emin->data), &(max->data)) > 0) || 
(max_exclusive && VALcmp(&(emin->data), &(max->data)) >= 0))
+               return 0;
        return 1;
 }
 
@@ -8871,13 +8834,22 @@ rel_rename_part(mvc *sql, sql_rel *p, ch
        return p;
 }
 
+typedef struct {
+       atom *lval;
+       atom *hval;
+       bte anti:1,
+               semantics:1;
+       int flag;
+       list *values;
+} range_limit;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to