Changeset: c41b91037d4a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c41b91037d4a
Modified Files:
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_authorize.h
        monetdb5/mal/mal_session.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/include/sql_catalog.h
        sql/storage/sql_catalog.c
Branch: triggers
Log Message:

remove trigger hooks from MAL


diffs (239 lines):

diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -48,7 +48,6 @@ static AUTHCallbackCntx authCallbackCntx
        .get_user_name = NULL,
        .get_user_password = NULL,
        .get_user_oid = NULL,
-       .exec_post_login_triggers = NULL
 };
 
 static str AUTHdeleteRemoteTableCredentialsLocked(const char *local_table);
@@ -927,21 +926,3 @@ AUTHGeneratePasswordHash(str *res, const
        return AUTHcypherValue(res, value);
 }
 
-
-str
-AUTHRegisterPostLoginTriggersHandler(post_login_triggers_handler callback)
-{
-       authCallbackCntx.exec_post_login_triggers = callback;
-       return MAL_SUCCEED;
-}
-
-
-str
-AUTHexecPostLoginTriggers(Client c)
-{
-       if (c && authCallbackCntx.exec_post_login_triggers) {
-               if (authCallbackCntx.exec_post_login_triggers(c) < 0)
-                       throw(MAL, "AUTHexecPostLoginTriggers", 
OPERATION_FAILED);
-       }
-       return MAL_SUCCEED;
-}
diff --git a/monetdb5/mal/mal_authorize.h b/monetdb5/mal/mal_authorize.h
--- a/monetdb5/mal/mal_authorize.h
+++ b/monetdb5/mal/mal_authorize.h
@@ -48,20 +48,16 @@ mal_export str AUTHrequireAdmin(Client c
 typedef str (*get_user_name_handler)(Client c);
 typedef str (*get_user_password_handler)(Client c, const char *user);
 typedef oid (*get_user_oid_handler)(Client c, const char *user);
-typedef int (*post_login_triggers_handler)(Client c);
 
 typedef struct AUTHCallbackCntx {
        get_user_name_handler get_user_name;
        get_user_password_handler get_user_password;
        get_user_oid_handler get_user_oid;
-       post_login_triggers_handler exec_post_login_triggers;
 } AUTHCallbackCntx;
 
 mal_export str AUTHRegisterGetUserNameHandler(get_user_name_handler callback);
 mal_export str AUTHRegisterGetPasswordHandler(get_user_password_handler 
callback);
 mal_export str AUTHRegisterGetUserOIDHandler(get_user_oid_handler callback);
 mal_export str AUTHGeneratePasswordHash(str *res, const char *value);
-mal_export str 
AUTHRegisterPostLoginTriggersHandler(post_login_triggers_handler callback);
-mal_export str AUTHexecPostLoginTriggers(Client c);
 
 #endif /* _MAL_AUTHORIZE_H */
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -337,13 +337,6 @@ MSscheduleClient(str command, str challe
                                cleanUpScheduleClient(c, scenario, fin, fout, 
&command, &msg);
                                return;
                        }
-                       // post login triggers if any
-                       if ((msg=AUTHexecPostLoginTriggers(c)) != MAL_SUCCEED) {
-                               mnstr_printf(fout, "!%s\n", msg);
-                               cleanUpScheduleClient(c, scenario, fin, fout, 
&command, &msg);
-                               freeException(msg);
-                               return;
-                       }
                        cleanUpScheduleClient(c, scenario, NULL, NULL, NULL, 
NULL);
                }
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -223,6 +223,44 @@ SQLepilogue(void *ret)
        return MAL_SUCCEED;
 }
 
+
+static int
+SQLexecPostLoginTriggers(Client c) {
+       int res = LOG_OK;
+       char *err = NULL;
+       backend *be = (backend *) c->sqlcontext;
+       if (be) {
+               mvc *m = be->mvc;
+               sql_trans *tr = m->session->tr;
+               int active = tr->active;
+               if (active || mvc_trans(m) == 0) {
+                       sqlstore *store = tr->store;
+                       sql_table *triggers = find_sys_table(tr, 
TRIGGERS_TABLE_NAME);
+                       sql_column *eventCol = find_sql_column(triggers, 
"event");
+                       sql_column *timeCol = find_sql_column(triggers, "time");
+                       sql_column *stmtCol = find_sql_column(triggers, 
"statement");
+                       rids *rs = store->table_api.rids_select(tr, eventCol, 
NULL, NULL);
+                       for (oid rid = store->table_api.rids_next(rs); 
!is_oid_nil(rid); rid = store->table_api.rids_next(rs)) {
+                               const int event = (int) 
store->table_api.column_find_sht(tr, eventCol, rid);
+                               const int time = (int) 
store->table_api.column_find_sht(tr, timeCol, rid);
+                               bool after = time == 1;
+                               if ((event == LOGIN_EVENT) && after) {
+                                       const char *stmt = 
store->table_api.column_find_value(tr, stmtCol, rid);
+                                       if ((err = SQLstatementIntern(c, stmt, 
"sql.init", TRUE, FALSE, NULL))) {
+                                               (void) sql_error(m, 02, 
SQLSTATE(42000) "%s", err);
+                                               freeException(err);
+                                               res = LOG_ERR;
+                                       };
+                               }
+                       }
+                       if (!active)
+                               sql_trans_end(m->session, SQL_OK);
+               }
+       }
+       return res;
+}
+
+
 static char*
 SQLprepareClient(Client c, int login)
 {
@@ -275,6 +313,7 @@ SQLprepareClient(Client c, int login)
                        c->qryctx.maxmem = (ATOMIC_BASE_TYPE) (maxmem > 0 ? 
maxmem : 0);
                else
                        c->qryctx.maxmem = 0;
+
        }
 
        if (c->handshake_options) {
@@ -672,7 +711,11 @@ SQLinitClient(Client c)
                MT_lock_unset(&sql_contextLock);
                throw(SQL, "SQLinitClient", SQLSTATE(42000) "Catalogue not 
available");
        }
-       msg = SQLprepareClient(c, true);
+       if ((msg = SQLprepareClient(c, true)) == MAL_SUCCEED) {
+               if (SQLexecPostLoginTriggers(c) < 0) {
+                       throw(SQL, "SQLinitClient", SQLSTATE(42000) "Failed to 
execute post login triggers");
+               }
+       }
        MT_lock_unset(&sql_contextLock);
        return msg;
 }
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -28,15 +28,6 @@
 
 
 static inline sql_table*
-getSysTbl(mvc *m, const char* tbl_name)
-{
-       sql_trans *tr = m->session->tr;
-       sql_schema *sys = find_sql_schema(tr, "sys");
-       return find_sql_table(tr, sys, tbl_name);
-}
-
-
-static inline sql_table*
 getUsersTbl(mvc *m)
 {
        sql_trans *tr = m->session->tr;
@@ -231,42 +222,6 @@ getUserOIDCallback(Client c, const char 
        return oid_nil;
 }
 
-static int
-execPostLoginTriggers(Client c) {
-       int res = LOG_OK;
-       char *err = NULL;
-       backend *be = (backend *) c->sqlcontext;
-       if (be) {
-               mvc *m = be->mvc;
-               sql_table *triggers = getSysTbl(m, TRIGGERS_TABLE_NAME);
-               sql_trans *tr = m->session->tr;
-               int active = tr->active;
-               if (active || mvc_trans(m) == 0) {
-                       sqlstore *store = tr->store;
-                       sql_column *eventCol = find_sql_column(triggers, 
"event");
-                       sql_column *timeCol = find_sql_column(triggers, "time");
-                       sql_column *stmtCol = find_sql_column(triggers, 
"statement");
-                       rids *rs = store->table_api.rids_select(tr, eventCol, 
NULL, NULL);
-                       for (oid rid = store->table_api.rids_next(rs); 
!is_oid_nil(rid); rid = store->table_api.rids_next(rs)) {
-                               const int event = (int) 
store->table_api.column_find_sht(tr, eventCol, rid);
-                               const int time = (int) 
store->table_api.column_find_sht(tr, timeCol, rid);
-                               bool after = time == 1;
-                               if ((event == LOGIN_EVENT) && after) {
-                                       const char *stmt = 
store->table_api.column_find_value(tr, stmtCol, rid);
-                                       if ((err = SQLstatementIntern(c, stmt, 
"sql.init", TRUE, FALSE, NULL))) {
-                                               (void) sql_error(m, 02, 
SQLSTATE(42000) "%s", err);
-                                               freeException(err);
-                                               res = LOG_ERR;
-                                       };
-                               }
-                       }
-                       if (!active)
-                               sql_trans_end(m->session, SQL_OK);
-               }
-       }
-       return res;
-}
-
 
 static void
 monet5_set_user_api_hooks(ptr mvc)
@@ -275,7 +230,6 @@ monet5_set_user_api_hooks(ptr mvc)
        AUTHRegisterGetPasswordHandler(&getUserPasswordCallback);
        AUTHRegisterGetUserNameHandler(&getUserNameCallback);
        AUTHRegisterGetUserOIDHandler(&getUserOIDCallback);
-       AUTHRegisterPostLoginTriggersHandler(&execPostLoginTriggers);
 }
 
 
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
@@ -782,6 +782,7 @@ extern sql_idx *schema_find_idx_id(sql_t
 
 extern sql_column *find_sql_column(sql_table *t, const char *cname);
 
+extern sql_table *find_sys_table(sql_trans *tr, const char *tname);
 extern sql_table *find_sql_table(sql_trans *tr, sql_schema *s, const char 
*tname);
 extern sql_table *find_sql_table_id(sql_trans *tr, sql_schema *s, sqlid id);
 extern sql_table *sql_trans_find_table(sql_trans *tr, sqlid id);
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -615,3 +615,11 @@ atom_copy(sql_allocator *sa, atom *a)
                SA_VALcopy(sa, &r->data, &a->data);
        return r;
 }
+
+
+sql_table*
+find_sys_table(sql_trans *tr, const char* tbl_name)
+{
+       sql_schema *sys = find_sql_schema(tr, "sys");
+       return find_sql_table(tr, sys, tbl_name);
+}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to