Changeset: 19b4f53daf4b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19b4f53daf4b
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/include/sql_catalog.h
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_var.c
        sql/storage/sql_storage.h
        sql/test/ssqq/Tests/insert_query.stable.err
        sql/test/ssqq/Tests/insert_queue.stable.err
        sql/test/ssqq/Tests/insert_quser.stable.err
Branch: scoping
Log Message:

Declared tables on the stack don't have a schema


diffs (truncated from 319 to 300 lines):

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
@@ -557,7 +557,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        return stmt_assign(be, exp_relname(e), exp_name(e), r, 
GET_PSM_LEVEL(e->flag));
                } else if (e->flag & PSM_VAR) {
                        if (e->f)
-                               return stmt_vars(be, exp_relname(e), 
exp_name(e), e->f, 1, GET_PSM_LEVEL(e->flag));
+                               return stmt_vars(be, exp_name(e), e->f, 1, 
GET_PSM_LEVEL(e->flag));
                        else
                                return stmt_var(be, exp_relname(e), 
exp_name(e), &e->tpe, 1, GET_PSM_LEVEL(e->flag));
                } else if (e->flag & PSM_RETURN) {
@@ -1127,7 +1127,7 @@ stmt_col( backend *be, sql_column *c, st
 
        if (isTable(c->t) && c->t->access != TABLE_READONLY &&
           (!isNew(c) || !isNew(c->t) /* alter */) &&
-          (c->t->persistence == SQL_PERSIST || !isDeclaredTableOnStack(c->t)) 
&& !c->t->commit_action) {
+          (c->t->persistence == SQL_PERSIST || c->t->s) && 
!c->t->commit_action) {
                stmt *i = stmt_bat(be, c, RD_INS, 0);
                stmt *u = stmt_bat(be, c, RD_UPD_ID, part);
                sc = stmt_project_delta(be, sc, u, i);
@@ -1146,7 +1146,7 @@ stmt_idx( backend *be, sql_idx *i, stmt 
 
        if (isTable(i->t) && i->t->access != TABLE_READONLY &&
           (!isNew(i) || !isNew(i->t) /* alter */) &&
-          (i->t->persistence == SQL_PERSIST || !isDeclaredTableOnStack(i->t)) 
&& !i->t->commit_action) {
+          (i->t->persistence == SQL_PERSIST || i->t->s) && 
!i->t->commit_action) {
                stmt *ic = stmt_idxbat(be, i, RD_INS, 0);
                stmt *u = stmt_idxbat(be, i, RD_UPD_ID, part);
                sc = stmt_project_delta(be, sc, u, ic);
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -406,13 +406,12 @@ stmt_var(backend *be, const char *sname,
 }
 
 stmt *
-stmt_vars(backend *be, const char *sname, const char *varname, sql_table *t, 
int declare, int level)
+stmt_vars(backend *be, const char *varname, sql_table *t, int declare, int 
level)
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
        int *l;
 
-       (void)sname;
        (void)varname;
        /* declared table */
        if ((l = dump_table(be->mvc->sa, mb, t)) != NULL) {
@@ -539,7 +538,7 @@ stmt_tid(backend *be, sql_table *t, int 
        MalBlkPtr mb = be->mb;
        InstrPtr q;
 
-       if (isDeclaredTableOnStack(t) && t->data) { /* declared table */
+       if (!t->s && t->data) { /* declared table */
                stmt *s = stmt_create(be->mvc->sa, st_tid);
                int *l = t->data;
 
@@ -590,7 +589,7 @@ stmt_bat(backend *be, sql_column *c, int
        InstrPtr q;
 
        /* for read access tid.project(col) */
-       if (isDeclaredTableOnStack(c->t) && c->t->data) { /* declared table */
+       if (!c->t->s && c->t->data) { /* declared table */
                stmt *s = stmt_create(be->mvc->sa, st_bat);
                int *l = c->t->data;
 
@@ -719,7 +718,7 @@ stmt_append_col(backend *be, sql_column 
        if (b->nr < 0)
                return NULL;
 
-       if (isDeclaredTableOnStack(c->t) && c->t->data) { /* declared table */
+       if (!c->t->s && c->t->data) { /* declared table */
                int *l = c->t->data;
 
                if (c->colnr == 0) { /* append to tid column */
@@ -810,7 +809,7 @@ stmt_update_col(backend *be, sql_column 
        if (tids->nr < 0 || upd->nr < 0)
                return NULL;
 
-       if (isDeclaredTableOnStack(c->t) && c->t->data) { /* declared table */
+       if (!c->t->s && c->t->data) { /* declared table */
                int *l = c->t->data;
 
                q = newStmt(mb, batRef, replaceRef);
@@ -898,7 +897,7 @@ stmt_delete(backend *be, sql_table *t, s
        if (tids->nr < 0)
                return NULL;
 
-       if (isDeclaredTableOnStack(t) && t->data) { /* declared table */
+       if (!t->s && t->data) { /* declared table */
                int *l = t->data;
 
                q = newStmt(mb, batRef, deleteRef);
@@ -2795,7 +2794,7 @@ stmt_table_clear(backend *be, sql_table 
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
 
-       if (isDeclaredTableOnStack(t) && t->data) { /* declared table */
+       if (!t->s && t->data) { /* declared table */
                int *l = t->data, cnt = list_length(t->columns.set)+1;
 
                for (int i = 0; i < cnt; i++) {
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -135,7 +135,7 @@ extern stmt *stmt_none(backend *be);
 //#define VAR_DECLARE 1
 #define VAR_GLOBAL(f) ((f>>1)==1)
 extern stmt *stmt_var(backend *be, const char *sname, const char *varname, 
sql_subtype *t, int declare, int level);
-extern stmt *stmt_vars(backend *be, const char *sname, const char *varname, 
sql_table *t, int declare, int level);
+extern stmt *stmt_vars(backend *be, const char *varname, sql_table *t, int 
declare, int level);
 extern stmt *stmt_varnr(backend *be, int nr, sql_subtype *t);
 
 extern stmt *stmt_table(backend *be, stmt *cols, int temp);
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
@@ -125,7 +125,6 @@ typedef enum sql_dependency {
 #define PARTITION_LIST        2
 #define PARTITION_COLUMN      4
 #define PARTITION_EXPRESSION  8
-#define DECLARED_TABLE_ON_STACK  16
 
 #define STORAGE_MAX_VALUE_LENGTH 2048
 
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
@@ -730,13 +730,13 @@ exp_var(sql_allocator *sa, const char *s
 }
 
 sql_exp * 
-exp_table(sql_allocator *sa, const char *sname, const char *name, sql_table 
*t, int level)
+exp_table(sql_allocator *sa, const char *name, sql_table *t, int level)
 {
        sql_exp *e = exp_create(sa, e_psm);
 
        if (e == NULL)
                return NULL;
-       e->alias.rname = sname;
+       e->alias.rname = NULL;
        e->alias.name = name;
        e->f = t;
        e->flag = PSM_VAR + SET_PSM_LEVEL(level);
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
@@ -89,7 +89,7 @@ extern sql_exp * exp_alias_or_copy( mvc 
 extern sql_exp * exp_alias_ref(mvc *sql, sql_exp *e);
 extern sql_exp * exp_set(sql_allocator *sa, const char *sname, const char 
*name, sql_exp *val, int level);
 extern sql_exp * exp_var(sql_allocator *sa, const char *sname, const char 
*name, sql_subtype *type, int level);
-extern sql_exp * exp_table(sql_allocator *sa, const char *sname, const char 
*name, sql_table *t, int level);
+extern sql_exp * exp_table(sql_allocator *sa, const char *name, sql_table *t, 
int level);
 extern sql_exp * exp_return(sql_allocator *sa, sql_exp *val, int level);
 extern sql_exp * exp_while(sql_allocator *sa, sql_exp *cond, list *stmts);
 extern sql_exp * exp_exception(sql_allocator *sa, sql_exp *cond, const char 
*error_message);
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -252,7 +252,7 @@ rel_psm_declare_table(sql_query *query, 
        t = 
(sql_table*)((atom*)((sql_exp*)baset->exps->t->data)->l)->data.val.pval;
        if (!frame_push_table(sql, t))
                return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
-       return exp_table(sql->sa, sa_strdup(sql->sa, t->s->base.name), 
sa_strdup(sql->sa, name), t, sql->frame);
+       return exp_table(sql->sa, sa_strdup(sql->sa, name), t, sql->frame);
 }
 
 /* [ label: ]
@@ -480,7 +480,7 @@ rel_psm_return( sql_query *query, sql_su
                if (sname && !(s = mvc_bind_schema(sql, sname)))
                        return sql_error(sql, 02, SQLSTATE(3F000) "RETURN: no 
such schema '%s'", sname);
 
-               if ((t = stack_find_table(sql, s, tname))) {
+               if ((t = stack_find_table(sql, tname))) {
                        rel = rel_table(sql, ddl_create_table, s->base.name, t, 
SQL_DECLARED_TABLE);
                } else if ((t = find_sql_table(s, tname))) {
                        rel = rel_basetable(sql, t, t->base.name);
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
@@ -1035,7 +1035,7 @@ rel_create_table(sql_query *query, int t
                if (if_not_exists)
                        return rel_psm_block(sql->sa, new_exp_list(sql->sa));
                return sql_error(sql, 02, SQLSTATE(42S01) "%s TABLE: name '%s' 
already in use", action, name);
-       } else if (!global && frame_find_table(sql, s, name)) {
+       } else if (!global && frame_find_table(sql, name)) {
                assert(temp == SQL_DECLARED_TABLE);
                if (if_not_exists)
                        return rel_psm_block(sql->sa, new_exp_list(sql->sa));
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -1056,7 +1056,7 @@ mvc_bind_schema(mvc *m, const char *snam
 sql_table *
 mvc_bind_table(mvc *m, sql_schema *s, const char *tname)
 {
-       sql_table *t = stack_find_table(m, s, tname);
+       sql_table *t = stack_find_table(m, tname);
 
        if (!t)
                t = find_sql_table(s, tname);
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -274,8 +274,8 @@ extern void stack_pop_until(mvc *sql, in
 
 /* find variable in the stack */
 extern sql_var *stack_find_var_frame(mvc *sql, sql_schema *s, const char 
*name, int *level);
-extern sql_table *stack_find_table(mvc *sql, sql_schema *s, const char *name);
-extern sql_table *frame_find_table(mvc *sql, sql_schema *s, const char *name);
+extern sql_table *stack_find_table(mvc *sql, const char *name);
+extern sql_table *frame_find_table(mvc *sq, const char *name);
 extern sql_rel *stack_find_rel_view(mvc *sql, const char *name);
 
 /* find variable in the current frame */
diff --git a/sql/server/sql_var.c b/sql/server/sql_var.c
--- a/sql/server/sql_var.c
+++ b/sql/server/sql_var.c
@@ -155,7 +155,7 @@ frame_push_table(mvc *sql, sql_table *t)
        if (!slt)
                return NULL;
        slt->table = t;
-       t->properties |= DECLARED_TABLE_ON_STACK;
+       t->s = NULL;
        if (!f->tables && !(f->tables = list_create(destroy_sql_local_table))) {
                _DELETE(slt);
                return NULL;
@@ -422,15 +422,14 @@ stack_pop_frame(mvc *sql)
 }
 
 sql_table *
-frame_find_table(mvc *sql, sql_schema *s, const char *name)
+frame_find_table(mvc *sql, const char *name)
 {
        if (sql->topframes > 0) {
-               const char *sname = s->base.name;
                sql_frame *f = sql->frames[sql->topframes - 1];
                if (f->tables) {
                        for (node *n = f->tables->h; n ; n = n->next) {
                                sql_local_table *var = (sql_local_table*) 
n->data;
-                               if (!strcmp(var->table->s->base.name, sname) && 
!strcmp(var->table->base.name, name))
+                               if (!strcmp(var->table->base.name, name))
                                        return var->table;
                        }
                }
@@ -439,15 +438,14 @@ frame_find_table(mvc *sql, sql_schema *s
 }
 
 sql_table *
-stack_find_table(mvc *sql, sql_schema *s, const char *name)
+stack_find_table(mvc *sql, const char *name)
 {
-       const char *sname = s->base.name;
        for (int i = sql->topframes-1; i >= 0; i--) {
                sql_frame *f = sql->frames[i];
                if (f->tables) {
                        for (node *n = f->tables->h; n ; n = n->next) {
                                sql_local_table *var = (sql_local_table*) 
n->data;
-                               if (!strcmp(var->table->s->base.name, sname) && 
!strcmp(var->table->base.name, name))
+                               if (!strcmp(var->table->base.name, name))
                                        return var->table;
                        }
                }
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -23,7 +23,6 @@
 #define isGlobalTemp(x)  ((x)->persistence==SQL_GLOBAL_TEMP)
 #define isTempSchema(x)  (strcmp((x)->base.name, "tmp") == 0)
 #define isDeclaredTable(x)  ((x)->persistence==SQL_DECLARED_TABLE)
-#define isDeclaredTableOnStack(x)  (isDeclaredTable(x) && ((x)->properties & 
DECLARED_TABLE_ON_STACK) == DECLARED_TABLE_ON_STACK)
 
 extern int catalog_version;
 
diff --git a/sql/test/ssqq/Tests/insert_query.stable.err 
b/sql/test/ssqq/Tests/insert_query.stable.err
--- a/sql/test/ssqq/Tests/insert_query.stable.err
+++ b/sql/test/ssqq/Tests/insert_query.stable.err
@@ -79,7 +79,7 @@ ERROR = !INSERT INTO: NOT NULL constrain
 CODE  = 40002
 MAPI  = (monetdb) /var/tmp/mtest-470302/.s.monetdb.36480
 QUERY = declare id_result int;
-ERROR = !Variable 'id_result' already declared
+ERROR = !DECLARE: Variable 'sys.id_result' already declared on the global scope
 CODE  = 42000
 
 # 11:37:20 >  
diff --git a/sql/test/ssqq/Tests/insert_queue.stable.err 
b/sql/test/ssqq/Tests/insert_queue.stable.err
--- a/sql/test/ssqq/Tests/insert_queue.stable.err
+++ b/sql/test/ssqq/Tests/insert_queue.stable.err
@@ -79,7 +79,7 @@ ERROR = !INSERT INTO: FOREIGN KEY constr
 CODE  = 40002
 MAPI  = (monetdb) /var/tmp/mtest-470302/.s.monetdb.36480
 QUERY = declare id_result int;
-ERROR = !Variable 'id_result' already declared
+ERROR = !DECLARE: Variable 'sys.id_result' already declared on the global scope
 CODE  = 42000
 
 # 15:07:52 >  
diff --git a/sql/test/ssqq/Tests/insert_quser.stable.err 
b/sql/test/ssqq/Tests/insert_quser.stable.err
--- a/sql/test/ssqq/Tests/insert_quser.stable.err
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to