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

Reply via email to