#coding:utf-8 # # id: functional.gtcs.dsql_domain_13 # title: GTCS/tests/DSQL_DOMAIN_13. Verify result of INSERT DEFAULT for domain-based fields which have their own default values. # decription: # Original test see in: # https://github.com/FirebirdSQL/fbtcs/blob/master/GTCS/tests/DSQL_DOMAIN_13.script # # Comment in GTCS # This script will test level 1 syntax checking for create domain # statement using datatype and default clauses. The domains are then # used to create a table where column defaults are also specified. # Data is then inserted into the table allowing the missing fields # to be supplied by the column defaults (where specified) and the # domain defaults (where no column default exists). # # ::: NOTE ::: # Added domains with datatype that did appear only in FB 4.0: DECFLOAT and TIME[STAMP] WITH TIME ZONE. For this reason only FB 4.0+ can be tested. # # Fields without default values have names 'F1xx': f101, f102, ... # Fields with their own default values are 'F2xx': f201, f202, ... # # Currently following datatypes are NOT checked: # blob sub_type text|binary # long float; # binary(20); # varbinary(20); # # Checked on 4.0.0.1954. # # tracker_id: # min_versions: ['4.0'] # versions: 4.0 # qmid: None import pytest from firebird.qa import db_factory, isql_act, Action # version: 4.0 # resources: None substitutions_1 = [('[ \t]+', ' '), ('F116_BLOB_ID.*', ''), ('F216_BLOB_ID.*', '')] init_script_1 = """""" db_1 = db_factory(sql_dialect=3, init=init_script_1) test_script_1 = """ set bail on; set list on; set blob all; create domain dom13_01 as smallint default -32768; create domain dom13_02 as int default -2147483648; create domain dom13_03 as bigint default -9223372036854775807; --create domain dom13_03 as bigint default -9223372036854775808; -- currently raises error 'numeric overflow', see CORE-6291 create domain dom13_04 as date default '31.12.9999'; create domain dom13_05 as time default '23:59:59.999'; create domain dom13_06 as time with time zone default '11:11:11.111 Indian/Cocos'; create domain dom13_07 as timestamp default '01.01.0001 00:00:01.001'; create domain dom13_08 as timestamp with time zone default '21.12.2013 11:11:11.111 Indian/Cocos'; create domain dom13_09 as char(1) character set utf8 default '€'; create domain dom13_10 as varchar(1) character set utf8 default '¢'; -- https://en.wikipedia.org/wiki/ISO/IEC_8859-1, -- see table "Languages with incomplete coverage", -- column "Typical workaround" for Hungarian 'Ő': create domain dom13_11 as nchar(1) default 'Ö' ; create domain dom13_12 as numeric(2,2) default -327.68; create domain dom13_13 as decimal(20,2) default -999999999999999999; -- Online evaluation of expressions: https://www.wolframalpha.com -- https://en.wikipedia.org/wiki/Single-precision_floating-point_format -- (largest number less than one): 1 - power(2,-24) create domain dom13_14 as float default 0.999999940395355224609375; -- https://en.wikipedia.org/wiki/Double-precision_floating-point_format -- Max Double: power(2,1023) * ( 1+(1-power(2,-52) ) create domain dom13_15 as double precision default 1.7976931348623157e308; create domain dom13_16 as blob default 'Ø'; create domain dom13_17 as boolean default false; create domain dom13_18 as decfloat(16) default -9.999999999999999E+384; create domain dom13_19 as decfloat default -9.999999999999999999999999999999999E6144; commit; recreate table test( f101 dom13_01 ,f102 dom13_02 ,f103 dom13_03 ,f104 dom13_04 ,f105 dom13_05 ,f106 dom13_06 ,f107 dom13_07 ,f108 dom13_08 ,f109 dom13_09 ,f110 dom13_10 ,f111 dom13_11 ,f112 dom13_12 ,f113 dom13_13 ,f114 dom13_14 ,f115 dom13_15 ,f116 dom13_16 ,f117 dom13_17 ,f118 dom13_18 ,f119 dom13_19 ------------------------------------- ,f201 dom13_01 default 32767 ,f202 dom13_02 default 2147483647 ,f203 dom13_03 default 9223372036854775807 ,f204 dom13_04 default '01.01.0001' ,f205 dom13_05 default '23:59:59.999' ,f206 dom13_06 default '22:22:22.222 Pacific/Fiji' ,f207 dom13_07 default '15.12.1234 12:34:56.789' ,f208 dom13_08 default '22.12.2222 22:22:22.222 Pacific/Fiji' ,f209 dom13_09 default '¥' ,f210 dom13_10 default '£' ,f211 dom13_11 default 'Ç' ,f212 dom13_12 default 327.67 ,f213 dom13_13 default 999999999999999999 ,f214 dom13_14 default 1.0000001192 ,f215 dom13_15 default 1.4012984643e-45 ,f216_blob_id dom13_16 default 'Ö' ,f217 dom13_17 default true ,f218 dom13_18 default 9.999999999999999E+384 ,f219 dom13_19 default 9.999999999999999999999999999999999E+6144 ); commit; insert into test default values; set count on; select * from test; """ act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1) expected_stdout_1 = """ F101 -32768 F102 -2147483648 F103 -9223372036854775807 F104 9999-12-31 F105 23:59:59.9990 F106 11:11:11.1110 Indian/Cocos F107 0001-01-01 00:00:01.0010 F108 2013-12-21 11:11:11.1110 Indian/Cocos F109 € F110 ¢ F111 Ö F112 -327.68 F113 -999999999999999999.00 F114 0.99999994 F115 1.797693134862316e+308 F116 80:0 Ø F117 F118 -9.999999999999999E+384 F119 -9.999999999999999999999999999999999E+6144 F201 32767 F202 2147483647 F203 9223372036854775807 F204 0001-01-01 F205 23:59:59.9990 F206 22:22:22.2220 Pacific/Fiji F207 1234-12-15 12:34:56.7890 F208 2222-12-22 22:22:22.2220 Pacific/Fiji F209 ¥ F210 £ F211 Ç F212 327.67 F213 999999999999999999.00 F214 1.0000001 F215 1.401298464300000e-45 F216_BLOB_ID 80:1 Ö F217 F218 9.999999999999999E+384 F219 9.999999999999999999999999999999999E+6144 Records affected: 1 """ @pytest.mark.version('>=4.0') def test_1(act_1: Action): act_1.expected_stdout = expected_stdout_1 act_1.execute() assert act_1.clean_stdout == act_1.clean_expected_stdout