Incorrect size of the output parameter/argument when execute block, procedure or function use system field in metadata charset [CORE4566] #4883
Labels
affect-version: 2.1.5 Update 1
affect-version: 2.1.5
affect-version: 2.1.6
affect-version: 2.5.2 Update 1
affect-version: 2.5.2
affect-version: 2.5.3
affect-version: 3.0 Alpha 1
affect-version: 3.0 Alpha 2
component: charsets/collation
fix-version: 2.1.7
fix-version: 2.5.4
fix-version: 3.0 Beta 1
priority: major
qa: done successfully
type: bug
Submitted by: @sim1984
Is related to QA613
Incorrect size of the output argument when connection character set does not match the character set of the return argument.
Database created with character set win1251.
CREATE OR ALTER FUNCTION GET_MNEMONIC (
AFIELD_NAME TYPE OF COLUMN RDB$TYPES.RDB$FIELD_NAME,
ATYPE TYPE OF COLUMN RDB$TYPES.RDB$TYPE)
RETURNS TYPE OF COLUMN RDB$TYPES.RDB$TYPE_NAME
AS
begin
RETURN (SELECT RDB$TYPE_NAME
FROM RDB$TYPES
WHERE RDB$FIELD_NAME = :AFIELD_NAME
AND RDB$TYPE = :ATYPE);
end
Use CONNECT or CREATE DATABASE to specify a database
SQL> set names win1251;
SQL> connect 'localhost:test' user 'sysdba' password 'masterkey';
Database: 'localhost:horses', User: sysdba
SQL> select GET_MNEMONIC('MON$SHUTDOWN_MODE', 1) AS MNEMONIC
CON> from rdb$database;
MNEMONIC
Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation
-expected length 10, actual 19
SQL> select cast(GET_MNEMONIC('MON$SHUTDOWN_MODE', 1) as varchar(100)) AS MNEMONIC
CON> from rdb$database;
MNEMONIC
===============================================================================
MULTI_USER_SHUTDOWN
SQL> SELECT
CON> RDB$TYPE_NAME
CON> FROM
CON> RDB$TYPES
CON> WHERE RDB$FIELD_NAME = 'MON$SHUTDOWN_MODE'
CON> AND RDB$TYPE = 1;
RDB$TYPE_NAME
MULTI_USER_SHUTDOWN
Commits: b294402 aea3784 e8930f4 FirebirdSQL/fbt-repository@9b00340 FirebirdSQL/fbt-repository@52ef861
The text was updated successfully, but these errors were encountered: