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