[
http://tracker.firebirdsql.org/browse/CORE-3545?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Zotov reopened CORE-3545:
-------------------------------
Following script and its output shows that when domain based on collation which
was created with attrubite 'NUMERIC-SORT=1' than some values can be pass
through limitation od domain definition:
===
set echo on;
set term ^;
execute block as
begin
begin execute statement 'drop table test'; when any do begin end end
begin execute statement 'drop domain dm_nums'; when any do begin end end
begin execute statement 'drop collation co_nums'; when any do begin end
end
end
^ set term ;^
commit;
show version;
set list on;
create collation co_nums for utf8 from unicode 'NUMERIC-SORT=1';
commit;
create domain dm_nums varchar(3) character set utf8 check (value < '50')
collate co_nums;
commit;
create table test(id int, n dm_nums);
commit;
show collation;
show domain;
show table test;
insert into test values(1, 4);
insert into test values(2, 399);
insert into test values(2, 50);
insert into test values(3, '4');
insert into test values(3,'399');
insert into test values(4, '50');
select * from test;
commit;
set term ^;
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = '4';
o2 = '399';
o3 = '50';
suspend;
end
^
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = 4;
o2 = 399;
o3 = 50;
suspend;
end
^
set term ;^
===
STDOUT + STDERR in WI-T3.0.0.31844, starting from line 'show collation':
===
show collation;
CO_NUMS, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), PAD SPACE,
'COLL-VERSION=58.0.6.50;NUMERIC-SORT=1'
show domain;
DM_NUMS
show table test;
ID INTEGER Nullable
N (DM_NUMS) VARCHAR(3) CHARACTER SET UTF8
Nullable
check (value < '50')
COLLATE CO_NUMS
insert into test values(1, 4);
insert into test values(2, 399);
insert into test values(2, 50);
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "50"
After line 29 in file c3545.sql
insert into test values(3, '4');
insert into test values(3,'399');
insert into test values(4, '50');
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "50"
After line 33 in file c3545.sql
select * from test;
ID 1
N 4
ID 2
N 399
ID 3
N 4
ID 3
N 399
commit;
set term ^;
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = '4';
o2 = '399';
o3 = '50';
suspend;
end
^
Statement failed, SQLSTATE = 42000
validation error for variable O3, value "50"
After line 41 in file c3545.sql
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = 4;
o2 = 399;
o3 = 50;
suspend;
end
^
Statement failed, SQLSTATE = 42000
validation error for variable O3, value "50"
After line 49 in file c3545.sql
set term ;^
===
Compare with WI-V2.5.5.26871:
===
show collation;
CO_NUMS, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), PAD SPACE,
'NUMERIC-SORT=1'
show domain;
DM_NUMS
show table test;
ID INTEGER Nullable
N (DM_NUMS) VARCHAR(3) CHARACTER SET UTF8
Nullable
check (value < '50')
COLLATE CO_NUMS
insert into test values(1, 4);
insert into test values(2, 399);
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "399"
After line 28 in file c3545.sql
insert into test values(2, 50);
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "50"
After line 29 in file c3545.sql
insert into test values(3, '4');
insert into test values(3,'399');
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "399"
After line 32 in file c3545.sql
insert into test values(4, '50');
Statement failed, SQLSTATE = 23000
validation error for column "TEST"."N", value "50"
After line 33 in file c3545.sql
select * from test;
ID 1
N 4
ID 3
N 4
commit;
set term ^;
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = '4';
o2 = '399';
o3 = '50';
suspend;
end
^
Statement failed, SQLSTATE = 42000
validation error for variable O3, value "50"
After line 41 in file c3545.sql
execute block returns(o1 dm_nums, o2 dm_nums, o3 dm_nums) as
begin
o1 = 4;
o2 = 399;
o3 = 50;
suspend;
end
^
Statement failed, SQLSTATE = 42000
validation error for variable O2, value "399"
After line 49 in file c3545.sql
set term ;^
===
Note: value "399" was denied in 2.5 but not in 3.0.
> Inconsistent domain's constraint validation in PSQL
> ---------------------------------------------------
>
> Key: CORE-3545
> URL: http://tracker.firebirdsql.org/browse/CORE-3545
> Project: Firebird Core
> Issue Type: Bug
> Components: Engine
> Affects Versions: 3.0 Initial, 2.5.0
> Reporter: Adriano dos Santos Fernandes
> Assignee: Adriano dos Santos Fernandes
> Fix For: 3.0 Alpha 1
>
>
> The domain's check constraint validation is done using the type of the
> expression, instead of the type of the variable.
> Test case:
> create domain dx varchar(2) check (value < '5')!
> -- No error: ok
> execute block as
> declare v1 dx = '40';
> begin
> end!
> -- Error: not ok - validation error for variable V1, value "40"
> execute block as
> declare v1 dx = 40;
> begin
> end!
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel