mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-23 05:53:06 +01:00
191 lines
7.6 KiB
Python
191 lines
7.6 KiB
Python
#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 <false>
|
|
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 <true>
|
|
F218 9.999999999999999E+384
|
|
F219 9.999999999999999999999999999999999E+6144
|
|
|
|
Records affected: 1
|
|
"""
|
|
|
|
@pytest.mark.version('>=4.0')
|
|
def test_dsql_domain_13_1(act_1: Action):
|
|
act_1.expected_stdout = expected_stdout_1
|
|
act_1.execute()
|
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
|
|