CREATE TABLE ifrsbox.PUBLIC.REP_IFRS7_DISCLOSURE
(
ID_COUNTERPARTY VARCHAR(50) NULL
, DESCRIPTION VARCHAR(2147483647) NULL
, SECTOR VARCHAR(50) NULL
, SUB_SECTOR VARCHAR(50) NULL
, ID_INSTRUMENT VARCHAR(40) NULL
, ID_INSTRUMENT_TYPE VARCHAR(12) NULL
, PRODUCT_TYPE VARCHAR(36) NULL
, PRODUCT VARCHAR(40) NULL
, END_DATE DATE NULL
, MATURITY_BUCKET VARCHAR(4) NULL
, GL_CODE VARCHAR(40) NULL
, PLEDGED VARCHAR(40) NULL
, AMORTISED_COST_DIRTY DECIMAL(23, 5) NULL
, AMORTISED_COST_DIRTY_BC DECIMAL(23, 5) NULL
, NOMINAL_BALANCE DECIMAL(2147483647, 2147483647) NULL
, NOMINAL_BALANCE_BC DECIMAL(2147483647, 2147483647) NULL
, OPEN_COMMITMENT DECIMAL(23, 5) NULL
, OPEN_COMMITMENT_BC DECIMAL(23, 5) NULL
, IMPAIRMENT DECIMAL(2147483647, 2147483647) NULL
, IMPAIRMENT_BC DECIMAL(2147483647, 2147483647) NULL
, IMPAIRMENT_CONTINGENT DECIMAL(23, 5) NULL
, IMPAIRMENT_CONTINGENT_BC DECIMAL(23, 5) NULL
, OVERDUE_DAYS DECIMAL(4) NULL
, IMPAIRMENT_STAGE DECIMAL(1) NULL
, ID_PORTFOLIO VARCHAR(40) NULL
, RATING_CLASS VARCHAR(34) NULL
, INVESTMENT_GRADE VARCHAR(14) NULL
);
CREATE TABLE ifrsbox.PUBLIC.REP_FINANCIAL_ASSETS
(
ID_COUNTERPARTY VARCHAR(50) NULL
, DESCRIPTION VARCHAR(2147483647) NULL
, SECTOR VARCHAR(50) NULL
, SUB_SECTOR VARCHAR(50) NULL
, ID_INSTRUMENT VARCHAR(40) NULL
, ID_INSTRUMENT_TYPE VARCHAR(12) NULL
, PRODUCT_TYPE VARCHAR(36) NULL
, PRODUCT VARCHAR(40) NULL
, END_DATE DATE NULL
, MATURITY_BUCKET VARCHAR(4) NULL
, GL_CODE VARCHAR(40) NULL
, PLEDGED VARCHAR(40) NULL
, AMORTISED_COST_DIRTY DECIMAL(23, 5) NULL
, AMORTISED_COST_DIRTY_BC DECIMAL(23, 5) NULL
, NOMINAL_BALANCE DECIMAL(2147483647, 100000) NULL
, NOMINAL_BALANCE_BC DECIMAL(2147483647, 100000) NULL
, OPEN_COMMITMENT DECIMAL(23, 5) NULL
, OPEN_COMMITMENT_BC DECIMAL(23, 5) NULL
, IMPAIRMENT DECIMAL(2147483647, 100000) NULL
, IMPAIRMENT_BC DECIMAL(2147483647, 100000) NULL
, IMPAIRMENT_CONTINGENT DECIMAL(23, 5) NULL
, IMPAIRMENT_CONTINGENT_BC DECIMAL(23, 5) NULL
, OVERDUE_DAYS DECIMAL(4) NULL
, IMPAIRMENT_STAGE DECIMAL(1) NULL
, ID_PORTFOLIO VARCHAR(40) NULL
, RATING_CLASS VARCHAR(34) NULL
, INVESTMENT_GRADE VARCHAR(14) NULL
);
CREATE INDEX idx_rep_financial_assets_1
ON ifrsbox.PUBLIC.rep_financial_assets(ID_COUNTERPARTY);
CREATE INDEX idx_rep_financial_assets_10
ON ifrsbox.PUBLIC.rep_financial_assets(IMPAIRMENT_STAGE);
CREATE INDEX idx_rep_financial_assets_11
ON ifrsbox.PUBLIC.rep_financial_assets(ID_PORTFOLIO);
CREATE INDEX idx_rep_financial_assets_12
ON ifrsbox.PUBLIC.rep_financial_assets(RATING_CLASS);
CREATE INDEX idx_rep_financial_assets_13
ON ifrsbox.PUBLIC.rep_financial_assets(INVESTMENT_GRADE);
CREATE INDEX idx_rep_financial_assets_2
ON ifrsbox.PUBLIC.rep_financial_assets(SECTOR);
CREATE INDEX idx_rep_financial_assets_3
ON ifrsbox.PUBLIC.rep_financial_assets(SUB_SECTOR);
CREATE INDEX idx_rep_financial_assets_4
ON ifrsbox.PUBLIC.rep_financial_assets(ID_INSTRUMENT_TYPE);
CREATE INDEX idx_rep_financial_assets_5
ON ifrsbox.PUBLIC.rep_financial_assets(PRODUCT_TYPE);
CREATE INDEX idx_rep_financial_assets_6
ON ifrsbox.PUBLIC.rep_financial_assets(PRODUCT);
CREATE INDEX idx_rep_financial_assets_7
ON ifrsbox.PUBLIC.rep_financial_assets(MATURITY_BUCKET);
CREATE INDEX idx_rep_financial_assets_8
ON ifrsbox.PUBLIC.rep_financial_assets(GL_CODE);
CREATE INDEX idx_rep_financial_assets_9
ON ifrsbox.PUBLIC.rep_financial_assets(PLEDGED);
1. Unsupported type 17 is usually thrown when multiple versions of H2 were used with the same database file (versions of TCP clients don't matter, only versions of servers and embedded connections should match). For example, IDEA users are affected, because IDEA uses 1.4.196 it its tools. https://github.com/h2database/h2database/issues/2078
If you can reproduce that issue with 1.4.200 only, please try to build a test case for it.
2. Addition of DECIMAL(23, 5) to DECIMAL(23, 5) should produce a numeric data type with scale 5 and any vendor-specific precision, according to the SQL Standard. Therefore you should not assume that it will be DECIMAL(23, 5), it can legally be different, for example, DECIMAL(2147483647, 5) or something else. You need to add an explicit cast to DECIMAL(23, 5) such as CAST(A + B AS DECIMAL(23, 5)) to be sure. Unfortunately, H2 does not evaluate the scale properly, this issue is also known. https://github.com/h2database/h2database/issues/1910
The SQL standard determines the precision and scale in the following way:
- If the declared type of both operands of a dyadic arithmetic operator is exact numeric, then the declared type of the result is an implementation-defined exact numeric type, with precision and scale determined as follows:
a) Let S1 and S2 be the scale of the first and second operands respectively.
b) The precision of the result of addition and subtraction is implementation-defined, and the scale is the maximum of S1 and S2.
3. Released versions of H2 don't have any sane limits for scale, but such limit exists in current sources. I think we need to add some code to allow initialization of databases that already have abnormal data types such as DECIMAL(2147483647, 2147483647) created by older versions of H2.
Perhaps, we even could optimize it as (Max(Precision_S1, Precision_S2) + 1) and Max(Scale_S1, Scale_S2), just in order to safe space.
Anyway, the result of addition has larger precision for additional possible digit, so in some use cases an explicit cast is still necessary.
CREATE TABLE ifrsbox.public.REP_FINANCIAL_ASSETS
(
ID_COUNTERPARTY VARCHAR(50) NULL
, DESCRIPTION VARCHAR(255) NULL
, SECTOR VARCHAR(50) NULL
, SUB_SECTOR VARCHAR(50) NULL
, ID_INSTRUMENT VARCHAR(40) NULL
, ID_INSTRUMENT_TYPE VARCHAR(12) NULL
, PRODUCT_TYPE VARCHAR(36) NULL
, PRODUCT VARCHAR(40) NULL
, END_DATE DATE NULL
, MATURITY_BUCKET VARCHAR(4) NULL
, GL_CODE VARCHAR(40) NULL
, PLEDGED VARCHAR(40) NULL
, AMORTISED_COST_DIRTY DECIMAL(23, 5) NULL
, AMORTISED_COST_DIRTY_BC DECIMAL(23, 5) NULL
, NOMINAL_BALANCE DECIMAL(24, 5) NULL
, NOMINAL_BALANCE_BC DECIMAL(24, 5) NULL
, OPEN_COMMITMENT DECIMAL(23, 5) NULL
, OPEN_COMMITMENT_BC DECIMAL(23, 5) NULL
, IMPAIRMENT DECIMAL(24, 5) NULL
, IMPAIRMENT_BC DECIMAL(24, 5) NULL
, IMPAIRMENT_CONTINGENT DECIMAL(23, 5) NULL
, IMPAIRMENT_CONTINGENT_BC DECIMAL(23, 5) NULL
, OVERDUE_DAYS DECIMAL(4) NULL
, IMPAIRMENT_STAGE DECIMAL(1) NULL
, ID_PORTFOLIO VARCHAR(40) NULL
, RATING_CLASS VARCHAR(34) NULL
, INVESTMENT_GRADE VARCHAR(14) NULL
, MASTER_RATING INTEGER(10) NULL
);