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]