Changeset: d2e41cb5c673 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d2e41cb5c673
Modified Files:
        sql/server/rel_psm.c
        sql/server/sql_parser.y
        sql/server/sql_scan.c
        sql/server/sql_tokens.h
Branch: triggers
Log Message:

wip trigger syntax


diffs (113 lines):

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
@@ -1241,8 +1241,8 @@ create_trigger(sql_query *query, dlist *
        mvc *sql = query->sql;
        const char *triggerschema = qname_schema(qname);
        const char *triggername = qname_schema_object(qname);
-       const char *sname = qname_schema(tqname);
-       const char *tname = qname_schema_object(tqname);
+       const char *sname = tqname? qname_schema(tqname) : NULL;
+       const char *tname = tqname? qname_schema_object(tqname) : NULL;
        int instantiate = (sql->emode == m_instantiate);
        int create = (!instantiate && sql->emode != m_deps), event, orientation;
        sql_schema *ss = cur_schema(sql), *old_schema = cur_schema(sql);
@@ -1276,8 +1276,10 @@ create_trigger(sql_query *query, dlist *
        if (create) {
                if (triggerschema)
                        return sql_error(sql, 02, SQLSTATE(42000) "%s: a 
trigger will be placed on the respective table's schema, specify the schema on 
the table reference, ie ON clause instead", base);
-               if (!(t = mvc_bind_table(sql, ss, tname)))
-                       return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42S02) 
"%s: no such table %s%s%s'%s'", base, sname ? "'":"", sname ? sname : "", sname 
? "'.":"", tname);
+               if (tname) {
+                       if (!(t = mvc_bind_table(sql, ss, tname)))
+                               return sql_error(sql, ERR_NOTFOUND, 
SQLSTATE(42S02) "%s: no such table %s%s%s'%s'", base, sname ? "'":"", sname ? 
sname : "", sname ? "'.":"", tname);
+               }
                if (!mvc_schema_privs(sql, ss))
                        return sql_error(sql, 02, SQLSTATE(42000) "%s: access 
denied for %s to schema '%s'", base, get_string_global_var(sql, 
"current_user"), ss->base.name);
                if (isView(t))
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -529,6 +529,7 @@ int yydebug=1;
        XML_element_content_list
        XML_value_expression_list
     opt_schema_details_list
+    opt_qname
 
 %type <i_val>
        _transaction_mode_list
@@ -639,7 +640,7 @@ int yydebug=1;
 
 %token USER CURRENT_USER SESSION_USER LOCAL BEST EFFORT
 %token  CURRENT_ROLE sqlSESSION CURRENT_SCHEMA CURRENT_TIMEZONE
-%token <sval> sqlDELETE UPDATE SELECT INSERT MATCHED
+%token <sval> sqlDELETE UPDATE SELECT INSERT MATCHED LOGIN
 %token <sval> LATERAL LEFT RIGHT FULL OUTER NATURAL CROSS JOIN INNER
 %token <sval> COMMIT ROLLBACK SAVEPOINT RELEASE WORK CHAIN NO PRESERVE ROWS
 %token  START TRANSACTION READ WRITE ONLY ISOLATION LEVEL
@@ -2536,19 +2537,25 @@ Define triggered SQL-statements.
 
 trigger_def:
     create_or_replace TRIGGER qname trigger_action_time trigger_event
-    ON qname opt_referencing_list triggered_action
+    opt_qname opt_referencing_list triggered_action
        { dlist *l = L();
          append_list(l, $3);
          append_int(l, $4);
          append_symbol(l, $5);
+         append_list(l, $6);
          append_list(l, $7);
          append_list(l, $8);
-         append_list(l, $9);
          append_int(l, $1);
          $$ = _symbol_create_list(SQL_CREATE_TRIGGER, l); 
        }
  ;
 
+opt_qname:
+    /* empty */ { $$ = NULL; }
+    | ON qname  { $$ = $2; }
+    ;
+    
+
 trigger_action_time:
     BEFORE     { $$ = 0; }
  |  AFTER      { $$ = 1; }
@@ -2561,6 +2568,7 @@ trigger_event:
  |  TRUNCATE           { $$ = _symbol_create_list(SQL_TRUNCATE, NULL); }
  |  UPDATE                     { $$ = _symbol_create_list(SQL_UPDATE, NULL); }
  |  UPDATE OF ident_commalist  { $$ = _symbol_create_list(SQL_UPDATE, $3); }
+ |  LOGIN                      { $$ = _symbol_create_list(SQL_LOGIN, NULL); }
  ;
 
 opt_referencing_list:
@@ -6383,6 +6391,7 @@ char *token2string(tokens token)
        SQL(IS_NULL);
        SQL(JOIN);
        SQL(LIKE);
+       SQL(LOGIN);
        SQL(MAXVALUE);
        SQL(MERGE);
        SQL(MERGE_MATCH);
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -522,6 +522,7 @@ scanner_init_keywords(void)
        failed += keywords_insert("MULTILINESTRINGZM", GEOMETRYSUBTYPE);
        failed += keywords_insert("MULTIPOLYGONZM", GEOMETRYSUBTYPE);
        failed += keywords_insert("GEOMETRYCOLLECTIONZM", GEOMETRYSUBTYPE);
+       failed += keywords_insert("LOGIN", LOGIN);
 
        return failed;
 }
diff --git a/sql/server/sql_tokens.h b/sql/server/sql_tokens.h
--- a/sql/server/sql_tokens.h
+++ b/sql/server/sql_tokens.h
@@ -98,6 +98,7 @@ typedef enum tokens {
        SQL_IS_NULL,
        SQL_JOIN,
        SQL_LIKE,
+       SQL_LOGIN,
        SQL_MAXVALUE,
        SQL_MERGE,
        SQL_MERGE_MATCH,
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to