Changeset: 7e73e2fb72e2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7e73e2fb72e2
Modified Files:
        sql/backends/monet5/sql_scenario.c
Branch: triggers
Log Message:

simplified look up for Post login trigger (also solved memory leak)


diffs (48 lines):

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
@@ -228,7 +228,8 @@ SQLepilogue(void *ret)
 
 
 static int
-SQLexecPostLoginTriggers(Client c) {
+SQLexecPostLoginTriggers(Client c)
+{
        int res = LOG_OK;
        char *err = NULL;
        backend *be = (backend *) c->sqlcontext;
@@ -236,24 +237,22 @@ SQLexecPostLoginTriggers(Client c) {
                mvc *m = be->mvc;
                sql_trans *tr = m->session->tr;
                int active = tr->active;
+               assert(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;
-                                       };
+                       int event = LOGIN_EVENT, time = 1;
+
+                       oid rid = store->table_api.column_find_row(tr, 
eventCol, &event, timeCol, &time, NULL);
+                       if (!is_oid_nil(rid)) {
+                               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)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to