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 -- [email protected]
To unsubscribe send an email to [email protected]