Changeset: f0220e75acba for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f0220e75acba
Added Files:
sql/server/sql_var.c
Modified Files:
sql/server/Makefile.ag
sql/server/sql_mvc.c
Branch: scoping
Log Message:
Moved sql_mvc variables management to it's own implementation file
diffs (truncated from 968 to 300 lines):
diff --git a/sql/server/Makefile.ag b/sql/server/Makefile.ag
--- a/sql/server/Makefile.ag
+++ b/sql/server/Makefile.ag
@@ -36,6 +36,7 @@ lib_sqlserver = {
sql_env.c \
sql_privileges.c \
sql_query.c \
+ sql_var.c \
rel_semantic.c \
rel_select.c \
rel_updates.c \
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
@@ -1497,469 +1497,6 @@ mvc_is_sorted(mvc *m, sql_column *col)
return sql_trans_is_sorted(m->session->tr, col);
}
-/* variable management */
-static sql_var*
-stack_set(mvc *sql, int var, const char *name, sql_subtype *type, sql_rel
*rel, sql_table *t, dlist *wdef, sql_groupby_expression *exp, int view, int
frame)
-{
- sql_var *v, *nvars;
- int nextsize = sql->sizevars;
- if (var == nextsize) {
- nextsize <<= 1;
- nvars = RENEW_ARRAY(sql_var,sql->vars,nextsize);
- if(!nvars) {
- return NULL;
- } else {
- sql->vars = nvars;
- sql->sizevars = nextsize;
- }
- }
- v = sql->vars+var;
-
- v->name = NULL;
- atom_init( &v->a );
- v->rel = rel;
- v->t = t;
- v->view = view;
- v->frame = frame;
- v->visited = 0;
- v->wdef = wdef;
- v->exp = exp;
- if (type) {
- int tpe = type->type->localtype;
- VALset(&sql->vars[var].a.data, tpe, (ptr) ATOMnilptr(tpe));
- v->a.tpe = *type;
- }
- if (name) {
- v->name = _STRDUP(name);
- if(!v->name)
- return NULL;
- }
- return v;
-}
-
-sql_var*
-stack_push_var(mvc *sql, const char *name, sql_subtype *type)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, type, NULL, NULL,
NULL, NULL, 0, 0);
- if(res)
- sql->topvars++;
- return res;
-}
-
-sql_var*
-stack_push_rel_var(mvc *sql, const char *name, sql_rel *var, sql_subtype *type)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, type, var, NULL,
NULL, NULL, 0, 0);
- if(res)
- sql->topvars++;
- return res;
-}
-
-sql_var*
-stack_push_table(mvc *sql, const char *name, sql_rel *var, sql_table *t)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, NULL, var, t, NULL,
NULL, 0, 0);
- if(res)
- sql->topvars++;
- return res;
-}
-
-sql_var*
-stack_push_rel_view(mvc *sql, const char *name, sql_rel *var)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, NULL, var, NULL,
NULL, NULL, 1, 0);
- if(res)
- sql->topvars++;
- return res;
-}
-
-sql_var*
-stack_push_window_def(mvc *sql, const char *name, dlist *wdef)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, NULL, NULL, NULL,
wdef, NULL, 0, 0);
- if(res)
- sql->topvars++;
- return res;
-}
-
-dlist *
-stack_get_window_def(mvc *sql, const char *name, int *pos)
-{
- for (int i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && sql->vars[i].wdef &&
sql->vars[i].name && strcmp(sql->vars[i].name, name)==0) {
- if(pos)
- *pos = i;
- return sql->vars[i].wdef;
- }
- }
- return NULL;
-}
-
-sql_var*
-stack_push_groupby_expression(mvc *sql, symbol *def, sql_exp *exp)
-{
- sql_var* res = NULL;
- sql_groupby_expression *sge = MNEW(sql_groupby_expression);
-
- if(sge) {
- sge->sdef = def;
- sge->token = def->token;
- sge->exp = exp;
-
- res = stack_set(sql, sql->topvars, NULL, NULL, NULL, NULL,
NULL, sge, 0, 0);
- if(res)
- sql->topvars++;
- }
- return res;
-}
-
-sql_exp*
-stack_get_groupby_expression(mvc *sql, symbol *def)
-{
- for (int i = sql->topvars-1; i >= 0; i--)
- if (!sql->vars[i].frame && sql->vars[i].exp &&
sql->vars[i].exp->token == def->token && symbol_cmp(sql,
sql->vars[i].exp->sdef, def)==0)
- return sql->vars[i].exp->exp;
- return NULL;
-}
-
-/* There could a possibility that this is vulnerable to a time-of-check,
time-of-use race condition.
- * However this should never happen in the SQL compiler */
-char
-stack_check_var_visited(mvc *sql, int i)
-{
- if(i < 0 || i >= sql->topvars)
- return 0;
- return sql->vars[i].visited;
-}
-
-void
-stack_set_var_visited(mvc *sql, int i)
-{
- if(i < 0 || i >= sql->topvars)
- return;
- sql->vars[i].visited = 1;
-}
-
-void
-stack_clear_frame_visited_flag(mvc *sql)
-{
- for (int i = sql->topvars-1; i >= 0 && !sql->vars[i].frame; i--)
- sql->vars[i].visited = 0;
-}
-
-atom *
-stack_set_var(mvc *sql, const char *name, ValRecord *v)
-{
- int i;
- atom *res = NULL;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && sql->vars[i].name &&
strcmp(sql->vars[i].name, name)==0) {
- VALclear(&sql->vars[i].a.data);
- if(VALcopy(&sql->vars[i].a.data, v) == NULL)
- return NULL;
- sql->vars[i].a.isnull = VALisnil(v);
- if (v->vtype == TYPE_flt)
- sql->vars[i].a.d = v->val.fval;
- else if (v->vtype == TYPE_dbl)
- sql->vars[i].a.d = v->val.dval;
- res = &sql->vars[i].a;
- }
- }
- return res;
-}
-
-atom *
-stack_get_var(mvc *sql, const char *name)
-{
- int i;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && sql->vars[i].name &&
strcmp(sql->vars[i].name, name)==0) {
- return &sql->vars[i].a;
- }
- }
- return NULL;
-}
-
-sql_var*
-stack_push_frame(mvc *sql, const char *name)
-{
- sql_var* res = stack_set(sql, sql->topvars, name, NULL, NULL, NULL,
NULL, NULL, 0, 1);
- if (res) {
- sql->topvars++;
- sql->frame++;
- }
- return res;
-}
-
-void
-stack_pop_until(mvc *sql, int top)
-{
- while (sql->topvars > top) {
- sql_var *v = &sql->vars[--sql->topvars];
-
- c_delete(v->name);
- VALclear(&v->a.data);
- v->a.data.vtype = 0;
- if (v->exp)
- _DELETE(v->exp);
- v->wdef = NULL;
- }
-}
-
-void
-stack_pop_frame(mvc *sql)
-{
- while (!sql->vars[--sql->topvars].frame) {
- sql_var *v = &sql->vars[sql->topvars];
-
- c_delete(v->name);
- VALclear(&v->a.data);
- v->a.data.vtype = 0;
- if (v->t && v->view)
- table_destroy(v->t);
- else if (v->rel)
- rel_destroy(v->rel);
- else if(v->exp)
- _DELETE(v->exp);
- v->wdef = NULL;
- }
- if (sql->vars[sql->topvars].name)
- c_delete(sql->vars[sql->topvars].name);
- sql->frame--;
-}
-
-sql_subtype *
-stack_find_type(mvc *sql, const char *name)
-{
- int i;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && !sql->vars[i].view &&
sql->vars[i].name && strcmp(sql->vars[i].name, name)==0)
- return &sql->vars[i].a.tpe;
- }
- return NULL;
-}
-
-sql_table *
-stack_find_table(mvc *sql, const char *name)
-{
- int i;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && !sql->vars[i].view && sql->vars[i].t
- && sql->vars[i].name && strcmp(sql->vars[i].name,
name)==0)
- return sql->vars[i].t;
- }
- return NULL;
-}
-
-sql_rel *
-stack_find_rel_view(mvc *sql, const char *name)
-{
- int i;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && sql->vars[i].view &&
- sql->vars[i].rel && sql->vars[i].name &&
strcmp(sql->vars[i].name, name)==0)
- return rel_dup(sql->vars[i].rel);
- }
- return NULL;
-}
-
-void
-stack_update_rel_view(mvc *sql, const char *name, sql_rel *view)
-{
- int i;
-
- for (i = sql->topvars-1; i >= 0; i--) {
- if (!sql->vars[i].frame && sql->vars[i].view &&
- sql->vars[i].rel && sql->vars[i].name &&
strcmp(sql->vars[i].name, name)==0) {
- rel_destroy(sql->vars[i].rel);
- sql->vars[i].rel = view;
- }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list