Changeset: fc082618586c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fc082618586c
Modified Files:
sql/src/backends/monet5/sql_gencode.mx
sql/src/backends/monet5/sql_scenario.mx
sql/src/common/sql_backend.mx
sql/src/server/rel_select.mx
sql/src/server/sql_psm.mx
Branch: Oct2010
Log Message:
resolve function (TODO do the real check in m5)
diffs (144 lines):
diff -r 96f640dc676a -r fc082618586c sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx Mon Dec 13 20:45:08 2010 +0100
+++ b/sql/src/backends/monet5/sql_gencode.mx Mon Dec 13 22:40:10 2010 +0100
@@ -53,7 +53,8 @@
sql5_export void backend_call(backend *be, Client c, cq *q);
sql5_export void initSQLreferences(void);
sql5_export str backend_name(cq *cq);
-sql5_export void monet5_create_function(ptr M, char *name, sql_rel *rel,
sql_table *t);
+sql5_export void monet5_create_table_function(ptr M, char *name, sql_rel *rel,
sql_table *t);
+sql5_export int monet5_resolve_function(ptr M, sql_func *f);
#endif /* _SQL2MAL_H */
@c
@@ -2252,7 +2253,7 @@
}
void
-monet5_create_function(ptr M, char *name, sql_rel *rel, sql_table *t)
+monet5_create_table_function(ptr M, char *name, sql_rel *rel, sql_table *t)
{
sql_rel *r;
mvc *m = (mvc*)M;
@@ -2312,6 +2313,24 @@
c->curprg = backup;
}
+int
+monet5_resolve_function(ptr M, sql_func *f)
+{
+// node *n;
+
+ (void)M;
+ (void)f;
+/*
+ newFcnCall(f->mod, f->imp);
+ for (n = f->ops->h; n; n = n->next) {
+ sql_arg *a = n->data;
+
+ q = push ?type? (mb, q, a->);
+ }
+*/
+ return 1;
+}
+
static void
backend_create_func(backend *be, sql_func *f)
{
diff -r 96f640dc676a -r fc082618586c sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx Mon Dec 13 20:45:08 2010 +0100
+++ b/sql/src/backends/monet5/sql_scenario.mx Mon Dec 13 22:40:10 2010 +0100
@@ -260,7 +260,8 @@
memset((char*)&be_funcs, 0, sizeof(backend_functions));
be_funcs.fstack = &monet5_freestack;
be_funcs.fcode = &monet5_freecode;
- be_funcs.fcreate_function = &monet5_create_function;
+ be_funcs.fcreate_table_function = &monet5_create_table_function;
+ be_funcs.fresolve_function = &monet5_resolve_function;
monet5_user_init(&be_funcs);
MTIMEtimezone(&tz, &gmt);
diff -r 96f640dc676a -r fc082618586c sql/src/common/sql_backend.mx
--- a/sql/src/common/sql_backend.mx Mon Dec 13 20:45:08 2010 +0100
+++ b/sql/src/common/sql_backend.mx Mon Dec 13 22:40:10 2010 +0100
@@ -54,7 +54,8 @@
typedef int (*alter_user_fptr) (ptr mvc, str user, str passwd, char enc,
sqlid schema_id, str oldpasswd);
typedef int (*rename_user_fptr) (ptr mvc, str olduser, str newuser);
typedef void* (*schema_user_dependencies) (ptr mvc, int schema_id);
-typedef void (*create_function) (ptr mvc, str name, sql_rel *rel, sql_table
*t);
+typedef void (*create_table_function) (ptr mvc, str name, sql_rel *rel,
sql_table *t);
+typedef int (*resolve_function) (ptr mvc, sql_func *f);
/* backing struct for this interface */
typedef struct _backend_functions {
@@ -68,7 +69,8 @@
alter_user_fptr fauser;
rename_user_fptr fruser;
schema_user_dependencies fschuserdep;
- create_function fcreate_function;
+ create_table_function fcreate_table_function;
+ resolve_function fresolve_function;
} backend_functions;
extern void backend_freestack(int clientid, backend_stack stk);
@@ -82,7 +84,8 @@
extern int backend_alter_user(ptr mvc, str user, str passwd, char enc,
sqlid schema_id, str oldpasswd);
extern int backend_rename_user(ptr mvc, str olduser, str newuser);
extern void* backend_schema_user_dependencies(ptr trans, int schema_id);
-extern void backend_create_function(ptr trans, str name, sql_rel *rel,
sql_table *t);
+extern void backend_create_table_function(ptr trans, str name, sql_rel
*rel, sql_table *t);
+extern int backend_resolve_function(ptr trans, sql_func *f);
extern backend_functions be_funcs;
@@ -172,9 +175,16 @@
return NULL;
}
void
-backend_create_function(ptr trans, str name, sql_rel *rel, sql_table *t)
+backend_create_table_function(ptr trans, str name, sql_rel *rel, sql_table *t)
{
- if (be_funcs.fcreate_function != NULL)
- be_funcs.fcreate_function(trans, name, rel, t);
+ if (be_funcs.fcreate_table_function != NULL)
+ be_funcs.fcreate_table_function(trans, name, rel, t);
+}
+int
+backend_resolve_function(ptr M, sql_func *f)
+{
+ if (be_funcs.fresolve_function != NULL)
+ return be_funcs.fresolve_function(M, f);
+ return 0;
}
@}
diff -r 96f640dc676a -r fc082618586c sql/src/server/rel_select.mx
--- a/sql/src/server/rel_select.mx Mon Dec 13 20:45:08 2010 +0100
+++ b/sql/src/server/rel_select.mx Mon Dec 13 22:40:10 2010 +0100
@@ -1366,7 +1366,7 @@
rel_destroy(sq);
return NULL;
}
- backend_create_function(sql, nme, sq, t);
+ backend_create_table_function(sql, nme, sq, t);
f = NEW(sql_func);
base_init(&f->base, store_next_oid(), TR_OLD, nme);
diff -r 96f640dc676a -r fc082618586c sql/src/server/sql_psm.mx
--- a/sql/src/server/sql_psm.mx Mon Dec 13 20:45:08 2010 +0100
+++ b/sql/src/server/sql_psm.mx Mon Dec 13 22:40:10 2010 +0100
@@ -649,10 +649,13 @@
list_destroy(l);
}
} else {
+
char *fmod = qname_module(ext_name);
char *fnme = qname_fname(ext_name);
- mvc_create_func(sql, sql->session->schema,
fname, l, restype,
- FALSE, is_aggr, fmod, fnme,
is_func);
+ sql_func *f = mvc_create_func(sql,
sql->session->schema, fname, l, restype, FALSE, is_aggr, fmod, fnme, is_func);
+
+ if (!backend_resolve_function(sql, f))
+ return sql_error(sql, 01, "CREATE %s:
external name %s.%s not bound", F, fmod, fnme);
sql_destroy_params(sql);
list_destroy(l);
}
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list