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