8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-22 14:03:03 +01:00

Reworked syntax for new error context vars, based on feedback from the other devs.

This commit is contained in:
Dmitry Yemanov 2016-12-01 15:52:12 +03:00
parent 246f8a817d
commit cd8b6e0a41
5 changed files with 43 additions and 48 deletions

View File

@ -170,20 +170,30 @@ SQLSTATE (FB 2.5)
1. SQLSTATE always evaluates to NULL outside the exception handling block.
EXCEPTION (FB 4.0)
RDB$ERROR (FB 4.0)
------------------
Function:
Returns name of the active user-defined exception.
Returns specific context of the active exception.
Author:
Dmitry Yemanov <dimitr@firebirdsql.org>
Syntax rules:
EXCEPTION
RDB$ERROR ( context )
context ::= { GDSCODE | SQLCODE | SQLSTATE | EXCEPTION | MESSAGE }
GDSCODE, SQLCODE, SQLSTATE - see above
EXCEPTION : VARCHAR(63) CHARACTER SET UTF8
Returns name of the active user-defined exception
or NULL if active exception is a system one
MESSAGE : VARCHAR(1024) CHARACTER SET UTF8
Returns interpreted text for the active exception
Type:
VARCHAR(63) CHARACTER SET UTF8
Depends on context
Scope:
PSQL, context of the exception handling block.
@ -192,41 +202,8 @@ EXCEPTION (FB 4.0)
BEGIN
...
WHEN ANY DO
IF (EXCEPTION IS NOT NULL)
EXECUTE PROCEDURE P_USR_EXCEPTION(EXCEPTION);
ELSE
EXECUTE PROCEDURE P_SYS_EXCEPTION;
EXECUTE PROCEDURE P_LOG_EXCEPTION(RDB$ERROR(MESSAGE));
END
Note(s):
1. EXCEPTION always contains NULL outside the exception handling block.
2. If system exception is thrown, EXCEPTION also contains NULL.
ERROR_MESSAGE (FB 4.0)
----------------------
Function:
Returns interpreted text for the active exception.
Author:
Dmitry Yemanov <dimitr@firebirdsql.org>
Syntax rules:
ERROR_MESSAGE
Type:
VARCHAR(1024) CHARACTER SET UTF8
Scope:
PSQL, context of the exception handling block.
Example(s):
BEGIN
...
WHEN ANY DO
EXECUTE PROCEDURE P_LOG_EXCEPTION(ERROR_MESSAGE);
END
Note(s):
1. ERROR_MESSAGE always contains NULL outside the exception handling block.
RDB$ERROR always contains NULL outside the exception handling block.

View File

@ -6125,7 +6125,9 @@ const InternalInfoNode::InfoAttr InternalInfoNode::INFO_TYPE_ATTRIBUTES[MAX_INFO
{"SQLCODE", DsqlCompilerScratch::FLAG_BLOCK},
{"ROW_COUNT", DsqlCompilerScratch::FLAG_BLOCK},
{"INSERTING/UPDATING/DELETING", DsqlCompilerScratch::FLAG_TRIGGER},
{"SQLSTATE", DsqlCompilerScratch::FLAG_BLOCK}
{"SQLSTATE", DsqlCompilerScratch::FLAG_BLOCK},
{"EXCEPTION", DsqlCompilerScratch::FLAG_BLOCK},
{"MESSAGE", DsqlCompilerScratch::FLAG_BLOCK}
};
InternalInfoNode::InternalInfoNode(MemoryPool& pool, ValueExprNode* aArg)

View File

@ -1 +1 @@
44 shift/reduce conflicts, 583 reduce/reduce conflicts.
44 shift/reduce conflicts, 17 reduce/reduce conflicts.

View File

@ -593,7 +593,7 @@ using namespace Firebird;
%token <metaNamePtr> CUME_DIST
%token <metaNamePtr> DEFINER
%token <metaNamePtr> ERROR_MESSAGE
%token <metaNamePtr> MESSAGE
%token <metaNamePtr> EXCLUDE
%token <metaNamePtr> FOLLOWING
%token <metaNamePtr> INVOKER
@ -603,6 +603,7 @@ using namespace Firebird;
%token <metaNamePtr> PRECEDING
%token <metaNamePtr> PRIVILEGE
%token <metaNamePtr> RANGE
%token <metaNamePtr> RDB_ERROR
%token <metaNamePtr> RDB_ROLE_IN_USE
%token <metaNamePtr> RDB_SYSTEM_PRIVILEGE
%token <metaNamePtr> SECURITY
@ -6952,12 +6953,25 @@ internal_info
{ $$ = newNode<InternalInfoNode>(MAKE_const_slong(INFO_TYPE_SQLSTATE)); }
| ROW_COUNT
{ $$ = newNode<InternalInfoNode>(MAKE_const_slong(INFO_TYPE_ROWS_AFFECTED)); }
| EXCEPTION
{ $$ = newNode<InternalInfoNode>(MAKE_const_slong(INFO_TYPE_EXCEPTION)); }
| ERROR_MESSAGE
{ $$ = newNode<InternalInfoNode>(MAKE_const_slong(INFO_TYPE_ERROR_MSG)); }
| RDB_ERROR '(' error_context ')'
{ $$ = newNode<InternalInfoNode>(MAKE_const_slong($3)); }
;
%type <int32Val> error_context
error_context
: GDSCODE
{ $$ = INFO_TYPE_GDSCODE; }
| SQLCODE
{ $$ = INFO_TYPE_SQLCODE; }
| SQLSTATE
{ $$ = INFO_TYPE_SQLSTATE; }
| EXCEPTION
{ $$ = INFO_TYPE_EXCEPTION; }
| MESSAGE
{ $$ = INFO_TYPE_ERROR_MSG; }
;
%type <intlStringPtr> sql_string
sql_string
: STRING // string in current charset
@ -8088,16 +8102,17 @@ non_reserved_word
| TRUSTED
| CUME_DIST // added in FB 4.0
| DEFINER
| ERROR_MESSAGE
| EXCLUDE
| FOLLOWING
| INVOKER
| MESSAGE
| NTILE
| OTHERS
| PERCENT_RANK
| PRECEDING
| PRIVILEGE
| RANGE
| RDB_ERROR
| RDB_ROLE_IN_USE
| RDB_SYSTEM_PRIVILEGE
| SECURITY

View File

@ -182,7 +182,6 @@ static const TOK tokens[] =
{TOK_END, "END", false},
{TOK_ENGINE, "ENGINE", true},
{TOK_ENTRY_POINT, "ENTRY_POINT", false},
{TOK_ERROR_MESSAGE, "ERROR_MESSAGE", true},
{TOK_ESCAPE, "ESCAPE", false},
{TOK_EXCEPTION, "EXCEPTION", false},
{TOK_EXCLUDE, "EXCLUDE", false},
@ -269,6 +268,7 @@ static const TOK tokens[] =
{TOK_MAXIMUM, "MAX", false},
{TOK_MAXVALUE, "MAXVALUE", false},
{TOK_MERGE, "MERGE", false},
{TOK_MESSAGE, "MESSAGE", true},
{TOK_MILLISECOND, "MILLISECOND", false},
{TOK_MIDDLENAME, "MIDDLENAME", false},
{TOK_MINIMUM, "MIN", false},
@ -336,6 +336,7 @@ static const TOK tokens[] =
{TOK_RANGE, "RANGE", false},
{TOK_RANK, "RANK", false},
{TOK_DB_KEY, "RDB$DB_KEY", false},
{TOK_RDB_ERROR, "RDB$ERROR", true},
{TOK_RDB_GET_CONTEXT, "RDB$GET_CONTEXT", true},
{TOK_RDB_RECORD_VERSION, "RDB$RECORD_VERSION", false},
{TOK_RDB_ROLE_IN_USE, "RDB$ROLE_IN_USE", true},