Changeset: 3756f04de0fd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3756f04de0fd
Modified Files:
        gdk/gdk_private.h
        gdk/gdk_tracer.c
        gdk/gdk_utils.c
        sql/backends/monet5/rel_bin.c
        sql/server/rel_optimizer.c
        sql/server/rel_schema.c
        sql/storage/store.c
        sql/test/SQLancer/Tests/sqlancer04.test
        sql/test/SQLancer/Tests/sqlancer09.test
Branch: default
Log Message:

Merged with Oct2020


diffs (truncated from 527 to 300 lines):

diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -168,7 +168,7 @@ gdk_return GDKssort_rev(void *restrict h
 gdk_return GDKssort(void *restrict h, void *restrict t, const void *restrict 
base, size_t n, int hs, int ts, int tpe)
        __attribute__((__warn_unused_result__))
        __attribute__((__visibility__("hidden")));
-void GDKtracer_init(void)
+void GDKtracer_init(const char *dbname, const char *dbtrace)
        __attribute__((__visibility__("hidden")));
 gdk_return GDKunlink(int farmid, const char *dir, const char *nme, const char 
*extension)
        __attribute__((__visibility__("hidden")));
diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -95,24 +95,20 @@ get_timestamp(char *datetime, size_t dts
 // When BASIC adapter is active, all the log messages are getting printed to a 
file.
 // This function prepares a file in order to write the contents of the buffer 
when necessary.
 static gdk_return
-_GDKtracer_init_basic_adptr(void)
+GDKtracer_init_trace_file(const char *dbpath, const char *dbtrace)
 {
-       const char *trace_path;
-
-       trace_path = GDKgetenv("gdk_dbtrace");
-       if (trace_path == NULL) {
-               trace_path = GDKgetenv("gdk_dbpath");
-               if (trace_path == NULL) {
+       if (dbtrace == NULL) {
+               if (dbpath == NULL) {
                        active_tracer = stderr;
                        return GDK_SUCCEED;
                }
                if (strconcat_len(file_name, sizeof(file_name),
-                                 trace_path, DIR_SEP_STR, FILE_NAME, NULL)
+                                 dbpath, DIR_SEP_STR, FILE_NAME, NULL)
                    >= sizeof(file_name)) {
                        goto too_long;
                }
        } else {
-               if (strcpy_len(file_name, trace_path, sizeof(file_name))
+               if (strcpy_len(file_name, dbtrace, sizeof(file_name))
                    >= sizeof(file_name)) {
                        goto too_long;
                }
@@ -137,6 +133,13 @@ static gdk_return
        return GDK_FAIL;
 }
 
+static gdk_return
+_GDKtracer_init_basic_adptr(void)
+{
+       return GDKtracer_init_trace_file(GDKgetenv("gdk_dbpath"),
+                                        GDKgetenv("gdk_dbtrace"));
+}
+
 
 static void
 set_level_for_layer(int layer, int lvl)
@@ -418,13 +421,14 @@ GDKtracer_reset_adapter(void)
 static bool add_ts;            /* add timestamp to error message to stderr */
 
 void
-GDKtracer_init(void)
+GDKtracer_init(const char *dbpath, const char *dbtrace)
 {
 #ifdef _MSC_VER
        add_ts = GetFileType(GetStdHandle(STD_ERROR_HANDLE)) != FILE_TYPE_PIPE;
 #else
        add_ts = isatty(2) || lseek(2, 0, SEEK_CUR) != (off_t) -1 || errno != 
ESPIPE;
 #endif
+       (void) GDKtracer_init_trace_file(dbpath, dbtrace);
 }
 
 void
@@ -487,7 +491,7 @@ GDKtracer_log(const char *file, const ch
        if ((p = strchr(buffer, '\n')) != NULL)
                *p = '\0';
 
-       if (comp == GDK && (level == M_CRITICAL || level == M_ERROR)) {
+       if (comp == GDK && level <= M_ERROR) {
                /* append message to GDKerrbuf (if set) */
                char *buf = GDKerrbuf;
                if (buf) {
@@ -500,7 +504,7 @@ GDKtracer_log(const char *file, const ch
                }
        }
 
-       if (level == M_CRITICAL || level == M_ERROR || level == M_WARNING) {
+       if (level <= M_WARNING) {
                fprintf(stderr, "#%s%s%s: %s: %s%s%s%s\n",
                        add_ts ? ts : "",
                        add_ts ? ": " : "",
@@ -510,12 +514,8 @@ GDKtracer_log(const char *file, const ch
                if (active_tracer == NULL || active_tracer == stderr)
                        return;
        }
-       MT_lock_set(&GDKtracer_lock);
-       if (file_name[0] == 0) {
-               MT_lock_unset(&GDKtracer_lock);
+       if (active_tracer == NULL)
                return;
-       }
-       MT_lock_unset(&GDKtracer_lock);
        if (syserr)
                fprintf(active_tracer, "%s: %s\n", buffer, syserr);
        else
@@ -527,7 +527,7 @@ GDKtracer_log(const char *file, const ch
        // like mserver5 refusing to start due to allocated port
        // and the error is never reported to the user because it
        // is still in the buffer which it never gets flushed.
-       if (level == cur_flush_level || level == M_CRITICAL || level == M_ERROR)
+       if (level == cur_flush_level || level <= M_ERROR)
                fflush(active_tracer);
 }
 
diff --git a/gdk/gdk_tracer.h b/gdk/gdk_tracer.h
--- a/gdk/gdk_tracer.h
+++ b/gdk/gdk_tracer.h
@@ -140,9 +140,7 @@ gdk_export log_level_t lvl_per_component
 // ERROR or WARNING it is logged no matter the component. In any other
 // case the component is taken into account
 #define GDK_TRACER_TEST(LOG_LEVEL, COMP)       \
-       (LOG_LEVEL == M_CRITICAL ||             \
-        LOG_LEVEL == M_ERROR    ||             \
-        LOG_LEVEL == M_WARNING  ||             \
+       (LOG_LEVEL <= M_WARNING  ||             \
         lvl_per_component[COMP] >= LOG_LEVEL)
 
 
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -743,7 +743,8 @@ gdk_return
 GDKinit(opt *set, int setlen, bool embedded)
 {
        static bool first = true;
-       char *dbpath = mo_find_option(set, setlen, "gdk_dbpath");
+       const char *dbpath = mo_find_option(set, setlen, "gdk_dbpath");
+       const char *dbtrace = mo_find_option(set, setlen, "gdk_dbtrace");
        const char *p;
        opt *n;
        int i, nlen = 0;
@@ -807,7 +808,7 @@ GDKinit(opt *set, int setlen, bool embed
                /* BBP was locked by BBPexit() */
                BBPunlock();
        }
-       GDKtracer_init();
+       GDKtracer_init(dbpath, dbtrace);
        errno = 0;
        if (!GDKinmemory(0) && !GDKenvironment(dbpath))
                return GDK_FAIL;
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -395,9 +395,9 @@ handle_in_exps(backend *be, sql_exp *ce,
                        if(!i)
                                return NULL;
 
-                       i = stmt_binop(be, c, i, sel, cmp);
+                       i = stmt_binop(be, c, i, NULL, cmp);
                        if (s)
-                               s = stmt_binop(be, s, i, sel, a);
+                               s = stmt_binop(be, s, i, NULL, a);
                        else
                                s = i;
 
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
@@ -24,6 +24,18 @@ typedef struct global_props {
 
 static sql_subfunc *find_func(mvc *sql, char *name, list *exps);
 
+static int
+find_member_pos(list *l, sql_table *t)
+{
+       int i = 0;
+       for (node *n = l->h; n ; n = n->next, i++) {
+               sql_part *pt = n->data;
+               if (pt->member->base.id == t->base.id)
+                       return i;
+       }
+       return -1;
+}
+
 /* The important task of the relational optimizer is to optimize the
    join order.
 
@@ -67,7 +79,7 @@ name_find_column( sql_rel *rel, const ch
                        if (strcmp(c->base.name, name) == 0) {
                                *bt = rel;
                                if (pnr < 0 || (mt &&
-                                       list_position(mt->members, c->t) == 
pnr))
+                                       find_member_pos(mt->members, c->t) == 
pnr))
                                        return c;
                        }
                }
@@ -77,7 +89,7 @@ name_find_column( sql_rel *rel, const ch
                        if (strcmp(i->base.name, name+1 /* skip % */) == 0) {
                                *bt = rel;
                                if (pnr < 0 || (mt &&
-                                       list_position(mt->members, i->t) == 
pnr)) {
+                                       find_member_pos(mt->members, i->t) == 
pnr)) {
                                        sql_kc *c = i->columns->h->data;
                                        return c->c;
                                }
@@ -3157,7 +3169,7 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        }
                                }
                        }
-                       if (exp_equal(le,re) == 0) { /* a - a = 0 */
+                       if (exp_is_not_null(le) && exp_is_not_null(re) && 
exp_equal(le,re) == 0) { /* a - a = 0 */
                                atom *a;
                                sql_exp *ne;
 
@@ -4882,7 +4894,7 @@ rel_part_nr( sql_rel *rel, sql_exp *e )
                return -1;
        sql_table *pp = c->t;
        sql_table *mt = bt->r;
-       return list_position(mt->members, pp);
+       return find_member_pos(mt->members, pp);
 }
 
 static int
@@ -4905,7 +4917,7 @@ rel_uses_part_nr( sql_rel *rel, sql_exp 
        if (c && bt && bt->r) {
                sql_table *pp = c->t;
                sql_table *mt = bt->r;
-               if (list_position(mt->members, pp) == pnr)
+               if (find_member_pos(mt->members, pp) == pnr)
                        return 1;
        }
        /* for projects we may need to do a rename! */
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1512,9 +1512,6 @@ sql_alter_table(sql_query *query, dlist 
                return rel_drop(sql->sa, ddl_drop_constraint, sname, kname, 
drop_action, 0);
        }
 
-       if (t->s && !nt->s)
-               nt->s = t->s;
-
        res = rel_table(sql, ddl_alter_table, sname, nt, 0);
 
        if (!isTable(nt))
@@ -1831,8 +1828,6 @@ rel_create_index(mvc *sql, char *iname, 
 
        if (t->persistence != SQL_DECLARED_TABLE)
                sname = t->s->base.name;
-       if (t->s && !nt->s)
-               nt->s = t->s;
 
        /* add index here */
        i = mvc_create_idx(sql, nt, iname, itype);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1765,6 +1765,8 @@ dup_sql_part(sql_allocator *sa, sql_tabl
        }
        list_append(mt->members, p);
        p->t = mt;
+       p->member = find_sql_table_id(mt->s, op->member->base.id);
+       assert(p->member);
        return p;
 }
 
@@ -1779,6 +1781,7 @@ dup_sql_table(sql_allocator *sa, sql_tab
        nt->access = t->access;
        nt->partition = t->partition;
        nt->query = (t->query) ? sa_strdup(sa, t->query) : NULL;
+       nt->s = t->s;
 
        if (isPartitionedByExpressionTable(nt)) {
                nt->part.pexp = SA_ZNEW(sa, sql_expression);
@@ -3462,7 +3465,7 @@ part_dup(sql_trans *tr, int flags, sql_p
        sql_allocator *sa = (newFlagSet(flags))?tr->parent->sa:tr->sa;
        sql_part *p = SA_ZNEW(sa, sql_part);
        sql_table *mt = find_sql_table_id(s, op->t->base.id);
-       sql_table *member = find_sql_table_id(s, op->base.id);
+       sql_table *member = find_sql_table_id(s, op->member->base.id);
 
        base_init(sa, &p->base, op->base.id, tr_flag(&op->base, flags), 
op->base.name);
        if (isRangePartitionTable(mt) || isListPartitionTable(mt))
diff --git 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out
 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out
--- 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out
+++ 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out
@@ -25,8 +25,8 @@ stdout of test 'sqlitelogictest-cast-dec
 
 #CREATE TABLE tab1(col0 INTEGER, col1 INTEGER, col2 INTEGER);
 #SELECT col0 + - - CAST ( NULL AS REAL ) - + col0 + + col1 FROM tab1 cor0 
WHERE ( NULL ) IS NOT NULL;
-% .%2 # table_name
-% %2 # name
+% sys.%1 # table_name
+% %1 # name
 % real # type
 % 15 # length
 #SELECT col0 + - - CAST( NULL AS DECIMAL ) - + col0 + + col1 FROM tab1 cor0 
WHERE ( NULL ) IS NOT NULL;
diff --git a/sql/test/SQLancer/Tests/sqlancer04.sql 
b/sql/test/SQLancer/Tests/sqlancer04.sql
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to