Changeset: b8e1044ba82a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b8e1044ba82a
Modified Files:
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_cat.h
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sqlcatalog.mal
sql/include/sql_catalog.h
sql/include/sql_relation.h
sql/server/rel_psm.c
sql/server/rel_semantic.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: timetrails
Log Message:
Adding START CONTINUOUS PROCEDURE name, PAUSE CONTINUOUS PROCEDURE name and
STOP CONTINUOUS PROCEDURE name statements. I think it has to be done this way.
The next step is to call the Petrinet. It's almost there!
diffs (truncated from 552 to 300 lines):
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -114,6 +114,7 @@ str drop_userRef;
str drop_indexRef;
str drop_functionRef;
str drop_triggerRef;
+str continuous_procedureRef;
str subdiffRef;
str diffRef;
str subinterRef;
@@ -411,6 +412,7 @@ void optimizerInit(void)
drop_indexRef = putName("drop_index");
drop_functionRef = putName("drop_function");
drop_triggerRef = putName("drop_trigger");
+ continuous_procedureRef = putName("continuous_procedure");
mergecandRef= putName("mergecand");
mergepackRef= putName("mergepack");
intersectcandRef= putName("intersectcand");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -112,6 +112,7 @@ mal_export str drop_userRef;
mal_export str drop_indexRef;
mal_export str drop_functionRef;
mal_export str drop_triggerRef;
+mal_export str continuous_procedureRef;
mal_export str subdiffRef;
mal_export str diffRef;
mal_export str subinterRef;
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -460,9 +460,9 @@ drop_func(mvc *sql, char *sname, char *n
F = "PROCEDURE";
f = "procedure";
break;
- case F_CONTINUOUS_QUERY:
- F = "CONTINUOUS QUERY";
- f = "continuous query";
+ case F_CONTINUOUS_PROCEDURE:
+ F = "CONTINUOUS PROCEDURE";
+ f = "continuous procedure";
break;
default:
F = "FUNCTION";
@@ -524,8 +524,8 @@ create_func(mvc *sql, char *sname, char
case F_PROC:
F = "PROCEDURE";
break;
- case F_CONTINUOUS_QUERY:
- F = "CONTINUOUS QUERY";
+ case F_CONTINUOUS_PROCEDURE:
+ F = "CONTINUOUS PROCEDURE";
break;
default:
F = "FUNCTION";
@@ -574,13 +574,6 @@ create_func(mvc *sql, char *sname, char
if (!backend_resolve_function(sql, nf))
return sql_message("3F000!CREATE %s%s: external name
%s.%s not bound", KF, F, nf->mod, nf->base.name);
}
- if(f->type == F_CONTINUOUS_QUERY) {
- Client cntxt = MCgetClient(sql->clientid);
- char *err = CQregisterInternal(cntxt, (str) sname,
f->base.name);
- if (err != NULL) {
- return sql_message("3F000!CREATE %s%s: continuous query
register error: %s", KF, F, err);
- }
- }
return MAL_SUCCEED;
}
@@ -714,6 +707,45 @@ alter_table(Client cntxt, mvc *sql, char
return MAL_SUCCEED;
}
+static str
+continuous_procedure(mvc *sql, char *sname, char *cpname, int fid, int action)
+{
+ sql_schema *s = NULL;
+ char *F;
+
+ switch (action) {
+ case START_CONTINUOUS_PROCEDURE:
+ F = "START CONTINUOUS PROCEDURE";
+ break;
+ case PAUSE_CONTINUOUS_PROCEDURE:
+ F = "PAUSE CONTINUOUS PROCEDURE";
+ break;
+ case STOP_CONTINUOUS_PROCEDURE:
+ F = "STOP CONTINUOUS PROCEDURE";
+ break;
+ }
+
+ if (sname && !(s = mvc_bind_schema(sql, sname)))
+ return sql_message("3F000!%s CONTINUOUS PROCEDURE: no such
schema '%s'", F, sname);
+ if (!s)
+ s = cur_schema(sql);
+ if (fid >= 0) {
+ node *n = find_sql_func_node(s, fid);
+ if (n) {
+ sql_func *func = n->data;
+
+ if (!mvc_schema_privs(sql, s)) {
+ return sql_message("%s: access denied for %s to
schema ;'%s'", F, stack_get_string(sql, "current_user"), s->base.name);
+ }
+
+ mvc_continuous_procedure(sql, s, func, action);
+ }
+ } else {
+ return sql_message("3F000!%s CONTINUOUS PROCEDURE: could not
find continuous procedure %s in the catalog", F, cpname);
+ }
+ return MAL_SUCCEED;
+}
+
str
UPGdrop_func(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
@@ -1280,6 +1312,20 @@ SQLdrop_trigger(Client cntxt, MalBlkPtr
}
str
+SQLcontinuous_procedure(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
+{ mvc *sql = NULL;
+ str msg;
+ str sname = *getArgReference_str(stk, pci, 1);
+ char *cpname = *getArgReference_str(stk, pci, 2);
+ int fid = *getArgReference_int(stk, pci, 3);
+ int action = *getArgReference_int(stk, pci, 4);
+
+ initcontext();
+ msg = continuous_procedure(sql, sname, cpname, fid, action);
+ return msg;
+}
+
+str
SQLalter_add_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{ mvc *sql = NULL;
str msg;
diff --git a/sql/backends/monet5/sql_cat.h b/sql/backends/monet5/sql_cat.h
--- a/sql/backends/monet5/sql_cat.h
+++ b/sql/backends/monet5/sql_cat.h
@@ -60,6 +60,7 @@ sql5_export str SQLdrop_function(Client
sql5_export str SQLcreate_function(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci) ;
sql5_export str SQLcreate_trigger(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci) ;
sql5_export str SQLdrop_trigger(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci) ;
+sql5_export str SQLcontinuous_procedure(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
sql5_export str SQLalter_add_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLalter_del_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLalter_set_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
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
@@ -2159,6 +2159,7 @@ stmt_catalog(backend *be, int type, stmt
case DDL_CREATE_FUNCTION: q = newStmt(mb, sqlcatalogRef,
create_functionRef); break;
case DDL_CREATE_TRIGGER: q = newStmt(mb, sqlcatalogRef,
create_triggerRef); break;
case DDL_DROP_TRIGGER: q = newStmt(mb, sqlcatalogRef,
drop_triggerRef); break;
+ case DDL_CONTINUOUS_PROCEDURE: q = newStmt(mb, sqlcatalogRef,
continuous_procedureRef); break;
case DDL_ALTER_TABLE_ADD_TABLE: q = newStmt(mb, sqlcatalogRef,
alter_add_tableRef); break;
case DDL_ALTER_TABLE_DEL_TABLE: q = newStmt(mb, sqlcatalogRef,
alter_del_tableRef); break;
case DDL_ALTER_TABLE_SET_ACCESS:q = newStmt(mb, sqlcatalogRef,
alter_set_tableRef); break;
diff --git a/sql/backends/monet5/sqlcatalog.mal
b/sql/backends/monet5/sqlcatalog.mal
--- a/sql/backends/monet5/sqlcatalog.mal
+++ b/sql/backends/monet5/sqlcatalog.mal
@@ -147,6 +147,10 @@ pattern drop_trigger(sname:str,nme:str )
address SQLdrop_trigger
comment "Catalog operation drop_trigger";
+pattern continuous_procedure(sname:str, nme:str, action:int)
+address SQLcontinuous_procedure
+comment "Catalog operation continuous_procedure";
+
pattern alter_add_table( sname:str, mtnme:str, psnme:str, ptnme:str,
action:int)
address SQLalter_add_table
comment "Catalog operation alter_add_table";
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
@@ -282,16 +282,16 @@ typedef struct sql_arg {
#define F_UNION 5
#define F_ANALYTIC 6
#define F_LOADER 7
-#define F_CONTINUOUS_QUERY 8
+#define F_CONTINUOUS_PROCEDURE 8
#define IS_FUNC(f) (f->type == F_FUNC)
-#define IS_PROC(f) (f->type == F_PROC || f->type == F_CONTINUOUS_QUERY) /* To
be safe */
+#define IS_PROC(f) (f->type == F_PROC || f->type == F_CONTINUOUS_PROCEDURE) /*
To be safe */
#define IS_AGGR(f) (f->type == F_AGGR)
#define IS_FILT(f) (f->type == F_FILT)
#define IS_UNION(f) (f->type == F_UNION)
#define IS_ANALYTIC(f) (f->type == F_ANALYTIC)
#define IS_LOADER(f) (f->type == F_LOADER)
-#define IS_CONTINUOUS_QUERY(f) (f->type == F_CONTINUOUS_QUERY)
+#define IS_CONTINUOUS_QUERY(f) (f->type == F_CONTINUOUS_PROCEDURE)
#define FUNC_LANG_INT 0 /* internal */
#define FUNC_LANG_MAL 1 /* create sql external mod.func */
@@ -309,6 +309,10 @@ typedef struct sql_arg {
#define LANG_EXT(l) (l>FUNC_LANG_SQL)
+#define START_CONTINUOUS_PROCEDURE 1 /* this might stay here I think... */
+#define PAUSE_CONTINUOUS_PROCEDURE 2
+#define STOP_CONTINUOUS_PROCEDURE 3
+
typedef struct sql_func {
sql_base base;
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -121,6 +121,8 @@ typedef struct expression {
#define DDL_CREATE_TRIGGER 43
#define DDL_DROP_TRIGGER 44
+#define DDL_CONTINUOUS_PROCEDURE 45
+
#define DDL_GRANT_ROLES 51
#define DDL_REVOKE_ROLES 52
#define DDL_GRANT 53
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
@@ -763,13 +763,13 @@ rel_create_func(mvc *sql, dlist *qname,
bit vararg = FALSE;
char is_table = (res && res->token == SQL_TABLE);
- char is_func = (type != F_PROC && type != F_CONTINUOUS_QUERY);
+ char is_func = (type != F_PROC && type != F_CONTINUOUS_PROCEDURE);
char *F, *fn;
char *KF = (type == F_FILT) ? "FILTER " : (type == F_UNION) ? "UNION "
: "";
char *kf = (type == F_FILT) ? "filter " : (type == F_UNION) ? "union "
: "";
- assert(res || type == F_PROC || type == F_FILT || type == F_LOADER ||
type == F_CONTINUOUS_QUERY);
+ assert(res || type == F_PROC || type == F_FILT || type == F_LOADER ||
type == F_CONTINUOUS_PROCEDURE);
switch (type) {
case F_PROC:
@@ -784,9 +784,9 @@ rel_create_func(mvc *sql, dlist *qname,
F = "LOADER";
fn = "loader";
break;
- case F_CONTINUOUS_QUERY:
- F = "CONTINUOUS QUERY";
- fn = "continuous query";
+ case F_CONTINUOUS_PROCEDURE:
+ F = "CONTINUOUS PROCEDURE";
+ fn = "continuous procedure";
break;
default:
F = "FUNCTION";
@@ -954,13 +954,6 @@ rel_create_func(mvc *sql, dlist *qname,
}
}
}
- /*if(create && f->type == F_CONTINUOUS_QUERY) {
- Client cntxt = MCgetClient(sql->clientid);
- char *err = CQregisterInternal(cntxt, (str) sname, (str) fname);
- if (err != NULL) {
- return sql_error(sql, 01, "CREATE %s%s: continuous
query register error: %s", KF, F, err);
- }
- }*/
return rel_create_function(sql->sa, s->base.name, f);
}
@@ -991,7 +984,7 @@ resolve_func( mvc *sql, sql_schema *s, c
sql_func *func = NULL;
list *list_func = NULL, *type_list = NULL;
char is_aggr = (type == F_AGGR);
- char is_func = (type != F_PROC && type != F_LOADER && type !=
F_CONTINUOUS_QUERY);
+ char is_func = (type != F_PROC && type != F_LOADER && type !=
F_CONTINUOUS_PROCEDURE);
char *F = is_aggr?"AGGREGATE":(is_func?"FUNCTION":"PROCEDURE");
char *f = is_aggr?"aggregate":(is_func?"function":"procedure");
char *KF = type==F_FILT?"FILTER ": type==F_UNION?"UNION ": "";
@@ -1073,7 +1066,7 @@ rel_drop_func(mvc *sql, dlist *qname, dl
sql_func *func = NULL;
char is_aggr = (type == F_AGGR);
- char is_func = (type != F_PROC && type != F_CONTINUOUS_QUERY);
+ char is_func = (type != F_PROC && type != F_CONTINUOUS_PROCEDURE);
char *F = is_aggr?"AGGREGATE":(is_func?"FUNCTION":"PROCEDURE");
char *KF = type==F_FILT?"FILTER ": type==F_UNION?"UNION ": "";
@@ -1102,7 +1095,7 @@ rel_drop_all_func(mvc *sql, dlist *qname
list * list_func = NULL;
char is_aggr = (type == F_AGGR);
- char is_func = (type != F_PROC && type != F_CONTINUOUS_QUERY);
+ char is_func = (type != F_PROC && type != F_CONTINUOUS_PROCEDURE);
char *F = is_aggr?"AGGREGATE":(is_func?"FUNCTION":"PROCEDURE");
char *f = is_aggr?"aggregate":(is_func?"function":"procedure");
char *KF = type==F_FILT?"FILTER ": type==F_UNION?"UNION ": "";
@@ -1396,6 +1389,64 @@ create_table_from_loader(mvc *sql, dlist
return rel_psm_stmt(sql->sa, import);
}
+static sql_rel *
+rel_change_continuous_procedure(mvc *sql, int token, dlist *qname, dlist
*typelist) {
+ const char *sname = qname_schema(qname);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list