mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-02-02 02:40:42 +01:00
Fix for tests on Linux 3.0.7
This commit is contained in:
parent
cd205e12ae
commit
e754587c22
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_0606
|
# id: bugs.core_0606
|
||||||
# title: Tricky role defeats basic SQL security
|
# title: Tricky role defeats basic SQL security
|
||||||
# decription:
|
# decription:
|
||||||
# CHecked on:
|
# CHecked on:
|
||||||
# 4.0.0.1635 SS: 1.482s.
|
# 4.0.0.1635 SS: 1.482s.
|
||||||
# 4.0.0.1633 CS: 1.954s.
|
# 4.0.0.1633 CS: 1.954s.
|
||||||
@ -10,7 +10,7 @@
|
|||||||
# 3.0.5.33178 CS: 1.265s.
|
# 3.0.5.33178 CS: 1.265s.
|
||||||
# 2.5.9.27119 SS: 0.297s.
|
# 2.5.9.27119 SS: 0.297s.
|
||||||
# 2.5.9.27146 SC: 0.306s.
|
# 2.5.9.27146 SC: 0.306s.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-0606
|
# tracker_id: CORE-0606
|
||||||
# min_versions: ['2.5']
|
# min_versions: ['2.5']
|
||||||
# versions: 2.5.6
|
# versions: 2.5.6
|
||||||
@ -64,12 +64,12 @@ test_script_1 = """
|
|||||||
|
|
||||||
show grants;
|
show grants;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block returns(who_am_i varchar(31), i_m_playing_role varchar(31)) as
|
execute block returns(who_am_i varchar(31), i_m_playing_role varchar(31)) as
|
||||||
begin
|
begin
|
||||||
for
|
for
|
||||||
execute statement 'select current_user, current_role from rdb$database'
|
execute statement 'select current_user, current_role from rdb$database'
|
||||||
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'cvc' password 'pw' role '"FOR CVC"'
|
as user 'cvc' password 'pw' role '"FOR CVC"'
|
||||||
@ -78,10 +78,10 @@ test_script_1 = """
|
|||||||
suspend;
|
suspend;
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
|
|
||||||
execute block returns(data int) as
|
execute block returns(data int) as
|
||||||
begin
|
begin
|
||||||
for
|
for
|
||||||
execute statement 'select data from "t t"'
|
execute statement 'select data from "t t"'
|
||||||
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'cvc' password 'pw' role '"FOR CVC"'
|
as user 'cvc' password 'pw' role '"FOR CVC"'
|
||||||
@ -89,7 +89,7 @@ test_script_1 = """
|
|||||||
do
|
do
|
||||||
suspend;
|
suspend;
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ test_script_1 = """
|
|||||||
-- SQLCODE: -901 / lock time-out on wait transaction / object <this_test_DB> is in use
|
-- SQLCODE: -901 / lock time-out on wait transaction / object <this_test_DB> is in use
|
||||||
-- #############################################################################################
|
-- #############################################################################################
|
||||||
delete from mon$attachments where mon$attachment_id != current_connection;
|
delete from mon$attachments where mon$attachment_id != current_connection;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
drop user cvc;
|
drop user cvc;
|
||||||
commit;
|
commit;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# id: bugs.core_0842
|
# id: bugs.core_0842
|
||||||
# title: Specific query crashing server
|
# title: Specific query crashing server
|
||||||
# decription: Run the query below twice and the server will crash:
|
# decription: Run the query below twice and the server will crash:
|
||||||
#
|
#
|
||||||
# select
|
# select
|
||||||
# cast('' as varchar(32765)),
|
# cast('' as varchar(32765)),
|
||||||
# cast('' as varchar(32748))
|
# cast('' as varchar(32748))
|
||||||
@ -28,6 +28,21 @@ db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
|||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
|
-- [pcisar] 20.10.2021
|
||||||
|
-- This script reports error:
|
||||||
|
-- Statement failed, SQLSTATE = HY004
|
||||||
|
-- Dynamic SQL Error
|
||||||
|
-- -SQL error code = -204
|
||||||
|
-- -Data type unknown
|
||||||
|
-- -Implementation limit exceeded
|
||||||
|
-- -COLUMN
|
||||||
|
-- Statement failed, SQLSTATE = HY004
|
||||||
|
-- Dynamic SQL Error
|
||||||
|
-- -SQL error code = -204
|
||||||
|
-- -Data type unknown
|
||||||
|
-- -Implementation limit exceeded
|
||||||
|
-- -COLUMN
|
||||||
|
|
||||||
select cast('' as varchar(32765)), cast('' as varchar(32748)) from rdb$database;
|
select cast('' as varchar(32765)), cast('' as varchar(32748)) from rdb$database;
|
||||||
select cast('' as varchar(32765)), cast('' as varchar(32748)) from rdb$database;
|
select cast('' as varchar(32765)), cast('' as varchar(32748)) from rdb$database;
|
||||||
"""
|
"""
|
||||||
@ -43,6 +58,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.1')
|
@pytest.mark.version('>=2.1')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -25,9 +25,9 @@ test_script_1 = """SELECT DATEDIFF(DAY, CAST('18.10.2007' AS TIMESTAMP), CAST('2
|
|||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
DATEDIFF
|
DATEDIFF
|
||||||
=====================
|
=======================
|
||||||
5
|
5.000000000000000
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=2.1')
|
@pytest.mark.version('>=2.1')
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_1810
|
# id: bugs.core_1810
|
||||||
# title: Usernames with '.' character
|
# title: Usernames with '.' character
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-1810
|
# tracker_id: CORE-1810
|
||||||
# min_versions: ['2.1.7']
|
# min_versions: ['2.1.7']
|
||||||
# versions: 2.5
|
# versions: 2.5
|
||||||
@ -32,7 +32,7 @@ test_script_1 = """
|
|||||||
create role "#.#";
|
create role "#.#";
|
||||||
commit;
|
commit;
|
||||||
create user "$.$" password '123';
|
create user "$.$" password '123';
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
revoke all on all from "$.$";
|
revoke all on all from "$.$";
|
||||||
grant "#.#" to "$.$";
|
grant "#.#" to "$.$";
|
||||||
@ -42,11 +42,11 @@ test_script_1 = """
|
|||||||
connect '$(DSN)' user "$.$" password '123' role "#.#";
|
connect '$(DSN)' user "$.$" password '123' role "#.#";
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
select
|
select
|
||||||
current_user,
|
current_user,
|
||||||
current_role,
|
current_role,
|
||||||
iif( upper(a.mon$remote_protocol) starting with upper('TCP'), 'YES', 'NO!') is_remote_connection
|
iif( upper(a.mon$remote_protocol) starting with upper('TCP'), 'YES', 'NO!') is_remote_connection
|
||||||
from rdb$database m
|
from rdb$database m
|
||||||
join mon$attachments a on a.mon$attachment_id = current_connection
|
join mon$attachments a on a.mon$attachment_id = current_connection
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -65,16 +65,23 @@ expected_stdout_1 = """
|
|||||||
USER $.$
|
USER $.$
|
||||||
ROLE #.#
|
ROLE #.#
|
||||||
IS_REMOTE_CONNECTION YES
|
IS_REMOTE_CONNECTION YES
|
||||||
|
|
||||||
ID 1
|
ID 1
|
||||||
X 100
|
X 100
|
||||||
Y 200
|
Y 200
|
||||||
Z 300
|
Z 300
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
expected_stderr_1 = """
|
||||||
|
Statement failed, SQLSTATE = HY000
|
||||||
|
record not found for user: $.$
|
||||||
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=2.5')
|
@pytest.mark.version('>=2.5')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
|
act_1.expected_stderr = expected_stderr_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_1828
|
# id: bugs.core_1828
|
||||||
# title: Error with ABS in dialect 1
|
# title: Error with ABS in dialect 1
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-1828
|
# tracker_id: CORE-1828
|
||||||
# min_versions: ['2.5']
|
# min_versions: ['2.5']
|
||||||
# versions: 2.5.0
|
# versions: 2.5.0
|
||||||
@ -32,12 +32,12 @@ test_script_1 = """SELECT ABS(MYNUM) FROM TEST;"""
|
|||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
ABS
|
ABS
|
||||||
=====================
|
=======================
|
||||||
1
|
1.000000000000000
|
||||||
1
|
1.000000000000000
|
||||||
2147483647
|
2147483647.000000
|
||||||
2147483648
|
2147483648.000000
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=2.5.0')
|
@pytest.mark.version('>=2.5.0')
|
||||||
|
@ -14,31 +14,64 @@ from firebird.qa import db_factory, isql_act, Action
|
|||||||
# version: 3.0
|
# version: 3.0
|
||||||
# resources: None
|
# resources: None
|
||||||
|
|
||||||
substitutions_1 = []
|
substitutions_1 = [('SPECIFIC_ATTR_BLOB_ID.*', ''),
|
||||||
|
('COLL-VERSION=\\d+\\.\\d+\\.\\d+\\.\\d+', 'COLL-VERSION=xx'),
|
||||||
|
('COLL-VERSION=\\d+\\.\\d+', 'COLL-VERSION=xx')]
|
||||||
|
|
||||||
init_script_1 = """"""
|
init_script_1 = """"""
|
||||||
|
|
||||||
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
-- Attribute 'LOCALE=en_US' is defined for charset = ISO8859_1 rather that for UTF8, see intl/fbintl.conf
|
-- [pcisar] 20.10.2021
|
||||||
CREATE COLLATION UNICODE_ENUS_CI_3X FOR UTF8 FROM UNICODE CASE INSENSITIVE 'LOCALE=en_US';
|
-- For 3.0.7 on Linux (uses system ICU) or Windows (includes ICU 52) this
|
||||||
|
-- collation *SHOULD* be created w/o errors like in 4.0 version.
|
||||||
|
-- However this has to be verified (passes on Linux opensuse tumbleweed)
|
||||||
|
-- In case it would be confirmed, both test cases could be merged into one.
|
||||||
|
|
||||||
|
set list on;
|
||||||
|
set count on;
|
||||||
|
create collation unicode_enus_ci_4x for utf8 from unicode case insensitive 'LOCALE=en_US';
|
||||||
|
commit;
|
||||||
|
|
||||||
|
select
|
||||||
|
rc.rdb$collation_name
|
||||||
|
,rc.rdb$collation_attributes
|
||||||
|
,rc.rdb$base_collation_name
|
||||||
|
,rc.rdb$specific_attributes as specific_attr_blob_id
|
||||||
|
,rs.rdb$character_set_name
|
||||||
|
--,rs.rdb$number_of_characters
|
||||||
|
,rs.rdb$bytes_per_character
|
||||||
|
from rdb$collations rc
|
||||||
|
join rdb$character_sets rs
|
||||||
|
on rc.rdb$character_set_id = rs.rdb$character_set_id
|
||||||
|
where
|
||||||
|
rc.rdb$system_flag is distinct from 1
|
||||||
|
and rc.rdb$collation_name = upper('unicode_enus_ci_4x');
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stderr_1 = """
|
expected_stdout_1 = """
|
||||||
Statement failed, SQLSTATE = HY000
|
RDB$COLLATION_NAME UNICODE_ENUS_CI_4X
|
||||||
unsuccessful metadata update
|
|
||||||
-CREATE COLLATION UNICODE_ENUS_CI_3X failed
|
RDB$COLLATION_ATTRIBUTES 3
|
||||||
-Invalid collation attributes
|
RDB$BASE_COLLATION_NAME UNICODE
|
||||||
|
|
||||||
|
SPECIFIC_ATTR_BLOB_ID 1d:1e7
|
||||||
|
COLL-VERSION=xx;LOCALE=en_US
|
||||||
|
RDB$CHARACTER_SET_NAME UTF8
|
||||||
|
|
||||||
|
RDB$BYTES_PER_CHARACTER 4
|
||||||
|
|
||||||
|
Records affected: 1
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0,<4.0')
|
@pytest.mark.version('>=3.0,<4.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stderr = expected_stderr_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
|
||||||
# version: 4.0
|
# version: 4.0
|
||||||
# resources: None
|
# resources: None
|
||||||
@ -51,7 +84,7 @@ db_2 = db_factory(sql_dialect=3, init=init_script_2)
|
|||||||
|
|
||||||
test_script_2 = """
|
test_script_2 = """
|
||||||
-- ::: NB ::: 31.01.2019
|
-- ::: NB ::: 31.01.2019
|
||||||
-- Since builds 4.0.0.1410, 26.01.2019, FULL ICU library icudt63l.dat is included in snapshot,
|
-- Since builds 4.0.0.1410, 26.01.2019, FULL ICU library icudt63l.dat is included in snapshot,
|
||||||
-- so this collation *CAN AND MUST* be created w/o errors.
|
-- so this collation *CAN AND MUST* be created w/o errors.
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_2006
|
# id: bugs.core_2006
|
||||||
# title: SUBSTRING with regular expression (SIMILAR TO) capability
|
# title: SUBSTRING with regular expression (SIMILAR TO) capability
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-2006
|
# tracker_id: CORE-2006
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -23,7 +23,7 @@ db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
|||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
-- Test for matching with percent characters before and after pattern:
|
-- Test for matching with percent characters before and after pattern:
|
||||||
select
|
select
|
||||||
trim(str) str
|
trim(str) str
|
||||||
@ -35,54 +35,53 @@ test_script_1 = """
|
|||||||
'WDWDWDWD' str
|
'WDWDWDWD' str
|
||||||
,'((DW)|(WD)){4}' ptn
|
,'((DW)|(WD)){4}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select
|
select
|
||||||
'AAXYAAXYAAAAXYAAAXYAA' str
|
'AAXYAAXYAAAAXYAAAXYAA' str
|
||||||
,'(AAXY|AAAX){2,}' ptn
|
,'(AAXY|AAAX){2,}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select
|
select
|
||||||
'YZZXYZZ0Z0YZZYZZYYZZZYZZ0Z0YZZ'
|
'YZZXYZZ0Z0YZZYZZYYZZZYZZ0Z0YZZ'
|
||||||
,'(0Z0(Y|Z)*){2}'
|
,'(0Z0(Y|Z)*){2}'
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select
|
select
|
||||||
'AARARARAARARAR'
|
'AARARARAARARAR'
|
||||||
,'RA(AR){3}'
|
,'RA(AR){3}'
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
|
|
||||||
select
|
select
|
||||||
'eiavieieav' str
|
'eiavieieav' str
|
||||||
,'(ie){2,}' ptn
|
,'(ie){2,}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select
|
select
|
||||||
'avieieavav' str
|
'avieieavav' str
|
||||||
,'(av|ie){2,}' ptn
|
,'(av|ie){2,}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select
|
select
|
||||||
'avieieieav' str
|
'avieieieav' str
|
||||||
,'((av)|(ie)){2,}' ptn
|
,'((av)|(ie)){2,}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
-- Test for exact matching to pattern:
|
-- Test for exact matching to pattern:
|
||||||
select
|
select
|
||||||
trim(str) str
|
trim(str) str
|
||||||
@ -94,46 +93,46 @@ test_script_1 = """
|
|||||||
'x/t' str
|
'x/t' str
|
||||||
,'%[/]t' ptn
|
,'%[/]t' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select ------------------- core-2756
|
select ------------------- core-2756
|
||||||
'2015-04-13' str
|
'2015-04-13' str
|
||||||
,'[[:DIGIT:]]{4}[-][[:DIGIT:]]{2}[-][[:DIGIT:]]{2}' ptn
|
,'[[:DIGIT:]]{4}[-][[:DIGIT:]]{2}[-][[:DIGIT:]]{2}' ptn
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select ------------------- core-2780
|
select ------------------- core-2780
|
||||||
'WI-T3.0.0.31780 Firebird 3.0 Beta 2'
|
'WI-T3.0.0.31780 Firebird 3.0 Beta 2'
|
||||||
,'%[0-9]+.[0-9]+.[0-9]+((.?[0-9]+)*)[[:WHITESPACE:]]%'
|
,'%[0-9]+.[0-9]+.[0-9]+((.?[0-9]+)*)[[:WHITESPACE:]]%'
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
select ----------- core-3523
|
select ----------- core-3523
|
||||||
'm'
|
'm'
|
||||||
,'[p-k]'
|
,'[p-k]'
|
||||||
from rdb$database
|
from rdb$database
|
||||||
|
|
||||||
union all
|
union all
|
||||||
|
|
||||||
------------------- core-3754
|
------------------- core-3754
|
||||||
|
|
||||||
select '1', '(1|2){0,}' from rdb$database union all select
|
select '1', '(1|2){0,}' from rdb$database union all select
|
||||||
'1', '(1|2){0,1}' from rdb$database union all select
|
'1', '(1|2){0,1}' from rdb$database union all select
|
||||||
'1', '(1|2){1}' from rdb$database union all select
|
'1', '(1|2){1}' from rdb$database union all select
|
||||||
'123', '(1|12[3]?){1}' from rdb$database union all select
|
'123', '(1|12[3]?){1}' from rdb$database union all select
|
||||||
'123', '(1|12[3]?)+' from rdb$database union all select
|
'123', '(1|12[3]?)+' from rdb$database union all select
|
||||||
|
|
||||||
------------- core-0769
|
------------- core-0769
|
||||||
'ab', 'ab|cd|efg' from rdb$database union all select
|
'ab', 'ab|cd|efg' from rdb$database union all select
|
||||||
'efg', 'ab|cd|efg' from rdb$database union all select
|
'efg', 'ab|cd|efg' from rdb$database union all select
|
||||||
'a', 'ab|cd|efg' from rdb$database union all select -- 0
|
'a', 'ab|cd|efg' from rdb$database union all select -- 0
|
||||||
'', 'a*' from rdb$database union all select
|
'', 'a*' from rdb$database union all select
|
||||||
'a', 'a*' from rdb$database union all select
|
'a', 'a*' from rdb$database union all select
|
||||||
'aaa', 'a*' from rdb$database union all select
|
'aaa', 'a*' from rdb$database union all select
|
||||||
'', 'a+' from rdb$database union all select -- 0
|
'', 'a+' from rdb$database union all select -- 0
|
||||||
'a', 'a+' from rdb$database union all select
|
'a', 'a+' from rdb$database union all select
|
||||||
'aaa', 'a+' from rdb$database union all select
|
'aaa', 'a+' from rdb$database union all select
|
||||||
@ -183,304 +182,304 @@ expected_stdout_1 = """
|
|||||||
PTN ((DW)|(WD)){4}
|
PTN ((DW)|(WD)){4}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) WDWDWDWD
|
subs(str similar to %ptn%) WDWDWDWD
|
||||||
|
|
||||||
STR AAXYAAXYAAAAXYAAAXYAA
|
STR AAXYAAXYAAAAXYAAAXYAA
|
||||||
PTN (AAXY|AAAX){2,}
|
PTN (AAXY|AAAX){2,}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) AAXYAAXY
|
subs(str similar to %ptn%) AAXYAAXY
|
||||||
|
|
||||||
STR YZZXYZZ0Z0YZZYZZYYZZZYZZ0Z0YZZ
|
STR YZZXYZZ0Z0YZZYZZYYZZZYZZ0Z0YZZ
|
||||||
PTN (0Z0(Y|Z)*){2}
|
PTN (0Z0(Y|Z)*){2}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) 0Z0YZZYZZYYZZZYZZ0Z0YZZ
|
subs(str similar to %ptn%) 0Z0YZZYZZYYZZZYZZ0Z0YZZ
|
||||||
|
|
||||||
STR AARARARAARARAR
|
STR AARARARAARARAR
|
||||||
PTN RA(AR){3}
|
PTN RA(AR){3}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) RAARARAR
|
subs(str similar to %ptn%) RAARARAR
|
||||||
|
|
||||||
STR eiavieieav
|
STR eiavieieav
|
||||||
PTN (ie){2,}
|
PTN (ie){2,}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) ieie
|
subs(str similar to %ptn%) ieie
|
||||||
|
|
||||||
STR avieieavav
|
STR avieieavav
|
||||||
PTN (av|ie){2,}
|
PTN (av|ie){2,}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) avieieavav
|
subs(str similar to %ptn%) avieieavav
|
||||||
|
|
||||||
STR avieieieav
|
STR avieieieav
|
||||||
PTN ((av)|(ie)){2,}
|
PTN ((av)|(ie)){2,}
|
||||||
str similar to %ptn% 1
|
str similar to %ptn% 1
|
||||||
subs(str similar to %ptn%) avieieieav
|
subs(str similar to %ptn%) avieieieav
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
STR x/t
|
STR x/t
|
||||||
PTN %[/]t
|
PTN %[/]t
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) x/t
|
subs(str similar to ptn) x/t
|
||||||
|
|
||||||
STR 2015-04-13
|
STR 2015-04-13
|
||||||
PTN [[:DIGIT:]]{4}[-][[:DIGIT:]]{2}[-][[:DIGIT:]]{2}
|
PTN [[:DIGIT:]]{4}[-][[:DIGIT:]]{2}[-][[:DIGIT:]]{2}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 2015-04-13
|
subs(str similar to ptn) 2015-04-13
|
||||||
|
|
||||||
STR WI-T3.0.0.31780 Firebird 3.0 Beta 2
|
STR WI-T3.0.0.31780 Firebird 3.0 Beta 2
|
||||||
PTN %[0-9]+.[0-9]+.[0-9]+((.?[0-9]+)*)[[:WHITESPACE:]]%
|
PTN %[0-9]+.[0-9]+.[0-9]+((.?[0-9]+)*)[[:WHITESPACE:]]%
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) WI-T3.0.0.31780 Firebird 3.0 Beta 2
|
subs(str similar to ptn) WI-T3.0.0.31780 Firebird 3.0 Beta 2
|
||||||
|
|
||||||
STR m
|
STR m
|
||||||
PTN [p-k]
|
PTN [p-k]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR 1
|
STR 1
|
||||||
PTN (1|2){0,}
|
PTN (1|2){0,}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 1
|
subs(str similar to ptn) 1
|
||||||
|
|
||||||
STR 1
|
STR 1
|
||||||
PTN (1|2){0,1}
|
PTN (1|2){0,1}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 1
|
subs(str similar to ptn) 1
|
||||||
|
|
||||||
STR 1
|
STR 1
|
||||||
PTN (1|2){1}
|
PTN (1|2){1}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 1
|
subs(str similar to ptn) 1
|
||||||
|
|
||||||
STR 123
|
STR 123
|
||||||
PTN (1|12[3]?){1}
|
PTN (1|12[3]?){1}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 123
|
subs(str similar to ptn) 123
|
||||||
|
|
||||||
STR 123
|
STR 123
|
||||||
PTN (1|12[3]?)+
|
PTN (1|12[3]?)+
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 123
|
subs(str similar to ptn) 123
|
||||||
|
|
||||||
STR ab
|
STR ab
|
||||||
PTN ab|cd|efg
|
PTN ab|cd|efg
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) ab
|
subs(str similar to ptn) ab
|
||||||
|
|
||||||
STR efg
|
STR efg
|
||||||
PTN ab|cd|efg
|
PTN ab|cd|efg
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) efg
|
subs(str similar to ptn) efg
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN ab|cd|efg
|
PTN ab|cd|efg
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN a*
|
PTN a*
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn)
|
subs(str similar to ptn)
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN a*
|
PTN a*
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) a
|
subs(str similar to ptn) a
|
||||||
|
|
||||||
STR aaa
|
STR aaa
|
||||||
PTN a*
|
PTN a*
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aaa
|
subs(str similar to ptn) aaa
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN a+
|
PTN a+
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN a+
|
PTN a+
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) a
|
subs(str similar to ptn) a
|
||||||
|
|
||||||
STR aaa
|
STR aaa
|
||||||
PTN a+
|
PTN a+
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aaa
|
subs(str similar to ptn) aaa
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN a?
|
PTN a?
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn)
|
subs(str similar to ptn)
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN a?
|
PTN a?
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) a
|
subs(str similar to ptn) a
|
||||||
|
|
||||||
STR aaa
|
STR aaa
|
||||||
PTN a?
|
PTN a?
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN a{2,}
|
PTN a{2,}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN a{2,}
|
PTN a{2,}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR aa
|
STR aa
|
||||||
PTN a{2,}
|
PTN a{2,}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aa
|
subs(str similar to ptn) aa
|
||||||
|
|
||||||
STR aaa
|
STR aaa
|
||||||
PTN a{2,}
|
PTN a{2,}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aaa
|
subs(str similar to ptn) aaa
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR aa
|
STR aa
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aa
|
subs(str similar to ptn) aa
|
||||||
|
|
||||||
STR aaa
|
STR aaa
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aaa
|
subs(str similar to ptn) aaa
|
||||||
|
|
||||||
STR aaaa
|
STR aaaa
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) aaaa
|
subs(str similar to ptn) aaaa
|
||||||
|
|
||||||
STR aaaaa
|
STR aaaaa
|
||||||
PTN a{2,4}
|
PTN a{2,4}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN _
|
PTN _
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN _
|
PTN _
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) a
|
subs(str similar to ptn) a
|
||||||
|
|
||||||
STR 1
|
STR 1
|
||||||
PTN _
|
PTN _
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 1
|
subs(str similar to ptn) 1
|
||||||
|
|
||||||
STR a1
|
STR a1
|
||||||
PTN _
|
PTN _
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR
|
STR
|
||||||
PTN %
|
PTN %
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn)
|
subs(str similar to ptn)
|
||||||
|
|
||||||
STR az
|
STR az
|
||||||
PTN a%z
|
PTN a%z
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) az
|
subs(str similar to ptn) az
|
||||||
|
|
||||||
STR a123z
|
STR a123z
|
||||||
PTN a%z
|
PTN a%z
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) a123z
|
subs(str similar to ptn) a123z
|
||||||
|
|
||||||
STR azx
|
STR azx
|
||||||
PTN a%z
|
PTN a%z
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR ab
|
STR ab
|
||||||
PTN (ab){2}
|
PTN (ab){2}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR aabb
|
STR aabb
|
||||||
PTN (ab){2}
|
PTN (ab){2}
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR abab
|
STR abab
|
||||||
PTN (ab){2}
|
PTN (ab){2}
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) abab
|
subs(str similar to ptn) abab
|
||||||
|
|
||||||
STR b
|
STR b
|
||||||
PTN [abc]
|
PTN [abc]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) b
|
subs(str similar to ptn) b
|
||||||
|
|
||||||
STR d
|
STR d
|
||||||
PTN [abc]
|
PTN [abc]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR 9
|
STR 9
|
||||||
PTN [0-9]
|
PTN [0-9]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 9
|
subs(str similar to ptn) 9
|
||||||
|
|
||||||
STR 9
|
STR 9
|
||||||
PTN [0-8]
|
PTN [0-8]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR b
|
STR b
|
||||||
PTN [^abc]
|
PTN [^abc]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR d
|
STR d
|
||||||
PTN [^abc]
|
PTN [^abc]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) d
|
subs(str similar to ptn) d
|
||||||
|
|
||||||
STR 3
|
STR 3
|
||||||
PTN [[:DIGIT:]^3]
|
PTN [[:DIGIT:]^3]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR 4
|
STR 4
|
||||||
PTN [[:DIGIT:]^3]
|
PTN [[:DIGIT:]^3]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 4
|
subs(str similar to ptn) 4
|
||||||
|
|
||||||
STR 4
|
STR 4
|
||||||
PTN [[:DIGIT:]]
|
PTN [[:DIGIT:]]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
subs(str similar to ptn) 4
|
subs(str similar to ptn) 4
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN [[:DIGIT:]]
|
PTN [[:DIGIT:]]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR 4
|
STR 4
|
||||||
PTN [^[:DIGIT:]]
|
PTN [^[:DIGIT:]]
|
||||||
str similar to ptn 0
|
str similar to ptn 0
|
||||||
subs(str similar to ptn) <null>
|
subs(str similar to ptn) <null>
|
||||||
|
|
||||||
STR a
|
STR a
|
||||||
PTN [^[:DIGIT:]]
|
PTN [^[:DIGIT:]]
|
||||||
str similar to ptn 1
|
str similar to ptn 1
|
||||||
@ -489,6 +488,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_2211
|
# id: bugs.core_2211
|
||||||
# title: Offset value for SUBSTRING from BLOB more than 32767 makes exception
|
# title: Offset value for SUBSTRING from BLOB more than 32767 makes exception
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-2211
|
# tracker_id: CORE-2211
|
||||||
# min_versions: ['2.5.0']
|
# min_versions: ['2.5.0']
|
||||||
# versions: 2.5
|
# versions: 2.5
|
||||||
@ -21,14 +21,23 @@ init_script_1 = """"""
|
|||||||
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
|
-- [pcisar] 20.10.2021
|
||||||
|
-- This script reports error:
|
||||||
|
-- Statement failed, SQLSTATE = 54000
|
||||||
|
-- arithmetic exception, numeric overflow, or string truncation
|
||||||
|
-- -Implementation limit exceeded
|
||||||
|
-- -At block line: 7, col: 9
|
||||||
|
-- Statement failed, SQLSTATE = 22011
|
||||||
|
-- Invalid offset parameter -1 to SUBSTRING. Only positive integers are allowed.
|
||||||
|
|
||||||
recreate table test(b blob);
|
recreate table test(b blob);
|
||||||
commit;
|
commit;
|
||||||
insert into test values('');
|
insert into test values('');
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
set blob all;
|
set blob all;
|
||||||
|
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block as
|
execute block as
|
||||||
declare bsize int = 1000000;
|
declare bsize int = 1000000;
|
||||||
@ -59,6 +68,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.5')
|
@pytest.mark.version('>=2.5')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,13 +2,16 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_2796
|
# id: bugs.core_2796
|
||||||
# title: DB_KEY is always zero for external tables
|
# title: DB_KEY is always zero for external tables
|
||||||
# decription:
|
# decription:
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-2796
|
# tracker_id: CORE-2796
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
# qmid: None
|
# qmid: None
|
||||||
|
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
# This test requires config ExternalFileAccess = Full
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from firebird.qa import db_factory, isql_act, Action
|
from firebird.qa import db_factory, isql_act, Action
|
||||||
|
|
||||||
@ -36,9 +39,9 @@ test_script_1 = """
|
|||||||
insert into ext_test values( :v_dts1-rand()*100, ascii_char(10));
|
insert into ext_test values( :v_dts1-rand()*100, ascii_char(10));
|
||||||
insert into ext_test values( :v_dts1, ascii_char(10));
|
insert into ext_test values( :v_dts1, ascii_char(10));
|
||||||
insert into ext_test values( :v_dts1-rand()*100, ascii_char(10));
|
insert into ext_test values( :v_dts1-rand()*100, ascii_char(10));
|
||||||
|
|
||||||
select rdb$db_key from ext_test order by col desc rows 1 into :dbkey;
|
select rdb$db_key from ext_test order by col desc rows 1 into :dbkey;
|
||||||
|
|
||||||
for
|
for
|
||||||
select datediff(millisecond from cast(col as timestamp) to :v_dts1)
|
select datediff(millisecond from cast(col as timestamp) to :v_dts1)
|
||||||
from ext_test
|
from ext_test
|
||||||
@ -46,7 +49,7 @@ test_script_1 = """
|
|||||||
into ms_diff
|
into ms_diff
|
||||||
do
|
do
|
||||||
suspend;
|
suspend;
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
"""
|
"""
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_2977
|
# id: bugs.core_2977
|
||||||
# title: FB 2.1 incorrectly works with indexed fields of type DATE in OLD ODS (9.1)
|
# title: FB 2.1 incorrectly works with indexed fields of type DATE in OLD ODS (9.1)
|
||||||
# decription:
|
# decription:
|
||||||
# 08.04.2021: number of DAY in the date representation becomes padded with '0' (NB: dialect 1 is used here!)
|
# 08.04.2021: number of DAY in the date representation becomes padded with '0' (NB: dialect 1 is used here!)
|
||||||
# Expected output was changed according to this after discuss with Adriano.
|
# Expected output was changed according to this after discuss with Adriano.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-2977
|
# tracker_id: CORE-2977
|
||||||
# min_versions: ['2.5.0']
|
# min_versions: ['2.5.0']
|
||||||
# versions: 2.5
|
# versions: 2.5
|
||||||
@ -35,18 +35,24 @@ test_script_1 = """
|
|||||||
commit;
|
commit;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
-- FOllowing query will have PLAN (TEST INDEX (TEST_OPDATE))
|
-- Following query will have PLAN (TEST INDEX (TEST_OPDATE))
|
||||||
select * from test where opdate <= '1/1/2001';
|
select * from test where opdate <= '1/1/2001';
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
# [pcisar] 20.10.2011
|
||||||
ID 1
|
# This test FAIL on my system because the isql output is:
|
||||||
OPDATE 2000-12-31 00:00:00.0000
|
# ID 1
|
||||||
|
# OPDATE 31-DEC-2000
|
||||||
|
# ID 2
|
||||||
|
# OPDATE 1-JAN-2001
|
||||||
|
|
||||||
ID 2
|
expected_stdout_1 = """
|
||||||
OPDATE 2001-01-01 00:00:00.0000
|
ID 1
|
||||||
|
OPDATE 31-DEC-2000
|
||||||
|
ID 2
|
||||||
|
OPDATE 1-JAN-2001
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=2.5')
|
@pytest.mark.version('>=2.5')
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_2987
|
# id: bugs.core_2987
|
||||||
# title: Don't send full length of field over the wire when field is null
|
# title: Don't send full length of field over the wire when field is null
|
||||||
# decription:
|
# decription:
|
||||||
# Checked on: WI-V3.0.0.32484 (SS/SC/CS), LI-T4.0.0.138 (SS)
|
# Checked on: WI-V3.0.0.32484 (SS/SC/CS), LI-T4.0.0.138 (SS)
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-2987
|
# tracker_id: CORE-2987
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
# qmid:
|
# qmid:
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from firebird.qa import db_factory, isql_act, Action
|
from firebird.qa import db_factory, isql_act, Action
|
||||||
@ -23,7 +23,7 @@ init_script_1 = """"""
|
|||||||
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
-- Measurement showed than on 3.0 (SS/SC/CS) transfer of NULLs is more than 5 (five) times
|
-- Measurement showed than on 3.0 (SS/SC/CS) transfer of NULLs is more than 5 (five) times
|
||||||
-- faster than text data with length = 32K. As of 2.5 (SC) than ration is about 1.7 ... 1.8.
|
-- faster than text data with length = 32K. As of 2.5 (SC) than ration is about 1.7 ... 1.8.
|
||||||
-- Test fills up two tables: one with text data and another with only nulls.
|
-- Test fills up two tables: one with text data and another with only nulls.
|
||||||
-- Then we receive data from these tables via ES/EDS, evaluate elapsed time for both cases
|
-- Then we receive data from these tables via ES/EDS, evaluate elapsed time for both cases
|
||||||
@ -45,7 +45,7 @@ test_script_1 = """
|
|||||||
|| 'with recursive r as (select 0 i from rdb$database union all select r.i+1 from r where r.i<99) '
|
|| 'with recursive r as (select 0 i from rdb$database union all select r.i+1 from r where r.i<99) '
|
||||||
|| 'select rpad('''', 32760, uuid_to_char(gen_uuid()) ) from r r1,r r2 rows ' || c_added_rows
|
|| 'select rpad('''', 32760, uuid_to_char(gen_uuid()) ) from r r1,r r2 rows ' || c_added_rows
|
||||||
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'SYSDBA' password 'masterkey'
|
as user 'SYSDBA' password 'masterkey'
|
||||||
role 'R001' ------------------------------- this will create new attach #1 that will be used later!
|
role 'R001' ------------------------------- this will create new attach #1 that will be used later!
|
||||||
;
|
;
|
||||||
execute statement
|
execute statement
|
||||||
@ -53,7 +53,7 @@ test_script_1 = """
|
|||||||
|| 'with recursive r as (select 0 i from rdb$database union all select r.i+1 from r where r.i<99) '
|
|| 'with recursive r as (select 0 i from rdb$database union all select r.i+1 from r where r.i<99) '
|
||||||
|| 'select null from r r1,r r2 rows ' || c_added_rows
|
|| 'select null from r r1,r r2 rows ' || c_added_rows
|
||||||
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'SYSDBA' password 'masterkey'
|
as user 'SYSDBA' password 'masterkey'
|
||||||
role 'R002' ------------------------------- this will create new attach #2 that will be used later!
|
role 'R002' ------------------------------- this will create new attach #2 that will be used later!
|
||||||
;
|
;
|
||||||
end
|
end
|
||||||
@ -70,36 +70,36 @@ test_script_1 = """
|
|||||||
for
|
for
|
||||||
execute statement
|
execute statement
|
||||||
'select f01 from test1' on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
'select f01 from test1' on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'SYSDBA' password 'masterkey'
|
as user 'SYSDBA' password 'masterkey'
|
||||||
role 'R001' --------------- here we use EXISTING attach #1 (from internal FB connection pool)
|
role 'R001' --------------- here we use EXISTING attach #1 (from internal FB connection pool)
|
||||||
into v_f01
|
into v_f01
|
||||||
do begin end
|
do begin end
|
||||||
|
|
||||||
t1='now';
|
t1='now';
|
||||||
|
|
||||||
for
|
for
|
||||||
execute statement
|
execute statement
|
||||||
'select f01 from test2' on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
'select f01 from test2' on external 'localhost:' || rdb$get_context('SYSTEM','DB_NAME')
|
||||||
as user 'SYSDBA' password 'masterkey'
|
as user 'SYSDBA' password 'masterkey'
|
||||||
role 'R002' --------------- here we use EXISTING attach #2 (from internal FB connection pool)
|
role 'R002' --------------- here we use EXISTING attach #2 (from internal FB connection pool)
|
||||||
into v_f01
|
into v_f01
|
||||||
do begin end
|
do begin end
|
||||||
|
|
||||||
t2='now';
|
t2='now';
|
||||||
|
|
||||||
sel_data_ms = datediff(millisecond from t0 to t1);
|
sel_data_ms = datediff(millisecond from t0 to t1);
|
||||||
sel_null_ms = datediff(millisecond from t1 to t2);
|
sel_null_ms = datediff(millisecond from t1 to t2);
|
||||||
ratio = coalesce( sel_data_ms * 1.000 / nullif(sel_null_ms,0), 9999999.99);
|
ratio = coalesce( sel_data_ms * 1.000 / nullif(sel_null_ms,0), 9999999.99);
|
||||||
|
|
||||||
suspend;
|
suspend;
|
||||||
|
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
--commit;
|
--commit;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
|
|
||||||
--set stat on;
|
--set stat on;
|
||||||
-- must be ~15 sec
|
-- must be ~15 sec
|
||||||
execute procedure sp_fill; -- will add data into GTT test1 (in attach #1) and GTT test2 (in attach #2)
|
execute procedure sp_fill; -- will add data into GTT test1 (in attach #1) and GTT test2 (in attach #2)
|
||||||
@ -148,12 +148,27 @@ test_script_1 = """
|
|||||||
-- SQLCODE: -901 / lock time-out on wait transaction / object <this_test_DB> is in use
|
-- SQLCODE: -901 / lock time-out on wait transaction / object <this_test_DB> is in use
|
||||||
-- #############################################################################################
|
-- #############################################################################################
|
||||||
delete from mon$attachments where mon$attachment_id != current_connection;
|
delete from mon$attachments where mon$attachment_id != current_connection;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
|
# [pcisar] 20.10.2021
|
||||||
|
# This test fails on my system due to (unexpected) error output from test script:
|
||||||
|
# Statement failed, SQLSTATE = 42000
|
||||||
|
# Execute statement error at isc_dsql_execute2 :
|
||||||
|
# 335544321 : arithmetic exception, numeric overflow, or string truncation
|
||||||
|
# 335544381 : Implementation limit exceeded
|
||||||
|
# Statement : insert into test1 with recursive r as (select 0 i from rdb$database union all select r.i+1 from r where r.i<99) select rpad('', 32760, uuid_to_char(gen_uuid()) ) from r r1,r r2 rows 2000
|
||||||
|
# Data source : Firebird::localhost:/tmp/pytest-of-pcisar/pytest-7/test_1514/test.fdb
|
||||||
|
# -At procedure 'SP_FILL' line: 4, col: 9
|
||||||
|
#
|
||||||
|
# Also, the stdout from test script differs:
|
||||||
|
# MEASURE_RESULT WINS >= 3.8x
|
||||||
|
# MEASURE_RESULT LOOSES, 0.00x
|
||||||
|
# MEASURE_RESULT LOOSES, 0.00x
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
MEASURE_RESULT WINS >= 3.8x
|
MEASURE_RESULT WINS >= 3.8x
|
||||||
MEASURE_RESULT WINS >= 3.8x
|
MEASURE_RESULT WINS >= 3.8x
|
||||||
@ -162,6 +177,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3047
|
# id: bugs.core_3047
|
||||||
# title: Wrong logic is used to resolve EXECUTE BLOCK parameters collations
|
# title: Wrong logic is used to resolve EXECUTE BLOCK parameters collations
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-3047
|
# tracker_id: CORE-3047
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -27,10 +27,12 @@ test_script_1 = """
|
|||||||
-- -SQL error code = -204
|
-- -SQL error code = -204
|
||||||
-- -Data type unknown
|
-- -Data type unknown
|
||||||
-- -COLLATION WIN_PTBR for CHARACTER SET UTF8 is not defined
|
-- -COLLATION WIN_PTBR for CHARACTER SET UTF8 is not defined
|
||||||
-- (See ticket issue: "WIN_PTBR is tried to be resolved agains database charset instead of client charset: incorrect")
|
-- (See ticket issue: "WIN_PTBR is tried to be resolved agains database charset instead of client charset: incorrect")
|
||||||
|
-- [pcisar] 20.10.2021
|
||||||
|
-- It fails as well in 3.0.7 on Linux (opensuse tumbleweed)
|
||||||
-- In 3.0.0.31827 (WI- and LI-) works fine:
|
-- In 3.0.0.31827 (WI- and LI-) works fine:
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block returns (c varchar(10) collate win_ptbr) as
|
execute block returns (c varchar(10) collate win_ptbr) as
|
||||||
begin
|
begin
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3100
|
# id: bugs.core_3100
|
||||||
# title: Wait mode and lock timeout of external transaction of EXECUTE STATEMENT not matched to corresponding parameters of local transaction
|
# title: Wait mode and lock timeout of external transaction of EXECUTE STATEMENT not matched to corresponding parameters of local transaction
|
||||||
# decription:
|
# decription:
|
||||||
# Checked on: 4.0.0.1635 SS, 4.0.0.1633 CS: OK, 2.319s; 3.0.5.33180 SS, 3.0.5.33178 CS: OK, 2.215s.
|
# Checked on: 4.0.0.1635 SS, 4.0.0.1633 CS: OK, 2.319s; 3.0.5.33180 SS, 3.0.5.33178 CS: OK, 2.215s.
|
||||||
# tracker_id: CORE-3100
|
# tracker_id: CORE-3100
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
@ -20,7 +20,7 @@ substitutions_1 = [('Statement failed, SQLSTATE.*', ''), ('record not found for
|
|||||||
init_script_1 = """
|
init_script_1 = """
|
||||||
create or alter procedure sp_add_trn_data (a_run_no smallint) as begin end;
|
create or alter procedure sp_add_trn_data (a_run_no smallint) as begin end;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
recreate table mon_trn(
|
recreate table mon_trn(
|
||||||
run_no smallint,
|
run_no smallint,
|
||||||
att_id bigint,
|
att_id bigint,
|
||||||
@ -39,7 +39,7 @@ init_script_1 = """
|
|||||||
usr char(31) character set unicode_fss
|
usr char(31) character set unicode_fss
|
||||||
);
|
);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set term ^;
|
set term ^;
|
||||||
create or alter procedure sp_add_trn_data (a_run_no smallint) as
|
create or alter procedure sp_add_trn_data (a_run_no smallint) as
|
||||||
declare v_dbname type of column mon$database.mon$database_name;
|
declare v_dbname type of column mon$database.mon$database_name;
|
||||||
@ -86,7 +86,7 @@ init_script_1 = """
|
|||||||
|| ' from mon$transactions t join mon$attachments a using (mon$attachment_id)'
|
|| ' from mon$transactions t join mon$attachments a using (mon$attachment_id)'
|
||||||
|| ' where mon$transaction_id = current_transaction'
|
|| ' where mon$transaction_id = current_transaction'
|
||||||
;
|
;
|
||||||
|
|
||||||
--- 1 --- direct statement, sysdba
|
--- 1 --- direct statement, sysdba
|
||||||
insert into mon_trn(
|
insert into mon_trn(
|
||||||
run_no
|
run_no
|
||||||
@ -123,17 +123,17 @@ init_script_1 = """
|
|||||||
,a.mon$user
|
,a.mon$user
|
||||||
from mon$transactions t join mon$attachments a using (mon$attachment_id)
|
from mon$transactions t join mon$attachments a using (mon$attachment_id)
|
||||||
where mon$transaction_id = current_transaction;
|
where mon$transaction_id = current_transaction;
|
||||||
|
|
||||||
select 'localhost:' || d.mon$database_name
|
select 'localhost:' || d.mon$database_name
|
||||||
from mon$database d
|
from mon$database d
|
||||||
into v_dbname;
|
into v_dbname;
|
||||||
|
|
||||||
--- 2 --- execute statement on EXTERNAL datasource, with new attachment because of user = tmp$c3100a
|
--- 2 --- execute statement on EXTERNAL datasource, with new attachment because of user = tmp$c3100a
|
||||||
execute statement ( v_stt ) ( x:= :a_run_no )
|
execute statement ( v_stt ) ( x:= :a_run_no )
|
||||||
on external :v_dbname
|
on external :v_dbname
|
||||||
as user :v_usr1 password :v_pwd1
|
as user :v_usr1 password :v_pwd1
|
||||||
;
|
;
|
||||||
|
|
||||||
--- 3 --- execute statement on EXTERNAL datasource, AUTONOMOUS transaction, with new attachment because user = tmp$c3100b
|
--- 3 --- execute statement on EXTERNAL datasource, AUTONOMOUS transaction, with new attachment because user = tmp$c3100b
|
||||||
execute statement ( v_stt ) ( x:= :a_run_no )
|
execute statement ( v_stt ) ( x:= :a_run_no )
|
||||||
on external :v_dbname
|
on external :v_dbname
|
||||||
@ -144,7 +144,7 @@ init_script_1 = """
|
|||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
||||||
@ -156,7 +156,7 @@ test_script_1 = """
|
|||||||
commit;
|
commit;
|
||||||
grant select,insert on mon_trn to tmp$c3100a;
|
grant select,insert on mon_trn to tmp$c3100a;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
drop user tmp$c3100b;
|
drop user tmp$c3100b;
|
||||||
commit;
|
commit;
|
||||||
create user tmp$c3100b password 'tmp$c3100b';
|
create user tmp$c3100b password 'tmp$c3100b';
|
||||||
@ -168,30 +168,30 @@ test_script_1 = """
|
|||||||
set transaction wait;
|
set transaction wait;
|
||||||
execute procedure sp_add_trn_data(1);
|
execute procedure sp_add_trn_data(1);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- Check for 'NO WAIT':
|
-- Check for 'NO WAIT':
|
||||||
set transaction no wait;
|
set transaction no wait;
|
||||||
execute procedure sp_add_trn_data(2);
|
execute procedure sp_add_trn_data(2);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- Check for 'LOCK TIMEOUT' value:
|
-- Check for 'LOCK TIMEOUT' value:
|
||||||
set transaction lock timeout 9;
|
set transaction lock timeout 9;
|
||||||
execute procedure sp_add_trn_data(3);
|
execute procedure sp_add_trn_data(3);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
|
|
||||||
-- Check for ISOLATION level:
|
-- Check for ISOLATION level:
|
||||||
set transaction read committed no wait;
|
set transaction read committed no wait;
|
||||||
execute procedure sp_add_trn_data(4);
|
execute procedure sp_add_trn_data(4);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- DO NOT: as of 26.03.2015, flag NO_AUTO_UNDO should *NOT* be copied
|
-- DO NOT: as of 26.03.2015, flag NO_AUTO_UNDO should *NOT* be copied
|
||||||
-- (commented after colsulting with Vlad)
|
-- (commented after colsulting with Vlad)
|
||||||
-- Check for NO AUTO UNDO:
|
-- Check for NO AUTO UNDO:
|
||||||
-- set transaction read committed no wait no auto undo;
|
-- set transaction read committed no wait no auto undo;
|
||||||
-- execute procedure sp_add_trn_data(5);
|
-- execute procedure sp_add_trn_data(5);
|
||||||
-- commit;
|
-- commit;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
select
|
select
|
||||||
m.run_no
|
m.run_no
|
||||||
@ -206,7 +206,7 @@ test_script_1 = """
|
|||||||
drop user tmp$c3100a;
|
drop user tmp$c3100a;
|
||||||
drop user tmp$c3100b;
|
drop user tmp$c3100b;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- ||||||||||||||||||||||||||||
|
-- ||||||||||||||||||||||||||||
|
||||||
-- ###################################||| FB 4.0+, SS and SC |||##############################
|
-- ###################################||| FB 4.0+, SS and SC |||##############################
|
||||||
-- ||||||||||||||||||||||||||||
|
-- ||||||||||||||||||||||||||||
|
||||||
@ -230,26 +230,34 @@ expected_stdout_1 = """
|
|||||||
TRN_DISTINCT_COUNT 3
|
TRN_DISTINCT_COUNT 3
|
||||||
WAIT_DISTINCT_COUNT 1
|
WAIT_DISTINCT_COUNT 1
|
||||||
ISOL_DISTINCT_COUNT 1
|
ISOL_DISTINCT_COUNT 1
|
||||||
|
|
||||||
RUN_NO 2
|
RUN_NO 2
|
||||||
TRN_DISTINCT_COUNT 3
|
TRN_DISTINCT_COUNT 3
|
||||||
WAIT_DISTINCT_COUNT 1
|
WAIT_DISTINCT_COUNT 1
|
||||||
ISOL_DISTINCT_COUNT 1
|
ISOL_DISTINCT_COUNT 1
|
||||||
|
|
||||||
RUN_NO 3
|
RUN_NO 3
|
||||||
TRN_DISTINCT_COUNT 3
|
TRN_DISTINCT_COUNT 3
|
||||||
WAIT_DISTINCT_COUNT 1
|
WAIT_DISTINCT_COUNT 1
|
||||||
ISOL_DISTINCT_COUNT 1
|
ISOL_DISTINCT_COUNT 1
|
||||||
|
|
||||||
RUN_NO 4
|
RUN_NO 4
|
||||||
TRN_DISTINCT_COUNT 3
|
TRN_DISTINCT_COUNT 3
|
||||||
WAIT_DISTINCT_COUNT 1
|
WAIT_DISTINCT_COUNT 1
|
||||||
ISOL_DISTINCT_COUNT 1
|
ISOL_DISTINCT_COUNT 1
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
expected_stderr_1 = """
|
||||||
|
Statement failed, SQLSTATE = HY000
|
||||||
|
record not found for user: TMP$C3100A
|
||||||
|
Statement failed, SQLSTATE = HY000
|
||||||
|
record not found for user: TMP$C3100B
|
||||||
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
|
act_1.expected_stderr = expected_stderr_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3233
|
# id: bugs.core_3233
|
||||||
# title: LIKE, STARTING and CONTAINING fail if second operand >= 32K
|
# title: LIKE, STARTING and CONTAINING fail if second operand >= 32K
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-3233
|
# tracker_id: CORE-3233
|
||||||
# min_versions: ['2.1.5']
|
# min_versions: ['2.1.5']
|
||||||
# versions: 2.1.5
|
# versions: 2.1.5
|
||||||
@ -29,7 +29,7 @@ select 1 from blobz where zin like cast(cast('woord' as char(32767)) as blob sub
|
|||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """Database: localhost:C:btestnew mpugs.core_3233.fdb, User: SYSDBA
|
expected_stdout_1 = """Database: localhost:C:\\fbtestnew\\tmp\\bugs.core_3233.fdb, User: SYSDBA
|
||||||
SQL>
|
SQL>
|
||||||
CONSTANT
|
CONSTANT
|
||||||
============
|
============
|
||||||
@ -44,6 +44,7 @@ SQL>"""
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.1.5')
|
@pytest.mark.version('>=2.1.5')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3245
|
# id: bugs.core_3245
|
||||||
# title: SUBSTRING on long blobs truncates result to 32767 if third argument not present
|
# title: SUBSTRING on long blobs truncates result to 32767 if third argument not present
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-3245
|
# tracker_id: CORE-3245
|
||||||
# min_versions: ['2.1.5']
|
# min_versions: ['2.1.5']
|
||||||
# versions: 2.1.5
|
# versions: 2.1.5
|
||||||
@ -34,7 +34,7 @@ test_script_1 = """
|
|||||||
substring(s from 8000)
|
substring(s from 8000)
|
||||||
from q
|
from q
|
||||||
)
|
)
|
||||||
select
|
select
|
||||||
char_length(s) as "char_length(s)"
|
char_length(s) as "char_length(s)"
|
||||||
,right(s, 3) as "blob_right(s,3)"
|
,right(s, 3) as "blob_right(s,3)"
|
||||||
,char_length(sub_for) as "char_length(sub_for)"
|
,char_length(sub_for) as "char_length(sub_for)"
|
||||||
@ -58,6 +58,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.1.5')
|
@pytest.mark.version('>=2.1.5')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3517
|
# id: bugs.core_3517
|
||||||
# title: Server crash with built in function LPAD with string as second parameter
|
# title: Server crash with built in function LPAD with string as second parameter
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-3517
|
# tracker_id: CORE-3517
|
||||||
# min_versions: ['2.1.5']
|
# min_versions: ['2.1.5']
|
||||||
# versions: 2.1.5
|
# versions: 2.1.5
|
||||||
@ -20,7 +20,7 @@ init_script_1 = """"""
|
|||||||
|
|
||||||
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """select LPAD('abc', '0', 3) FROM RDB$DATABASE;
|
test_script_1 = """select LPAD('abc', 0, 3) FROM RDB$DATABASE;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
File diff suppressed because one or more lines are too long
@ -2,10 +2,10 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3683
|
# id: bugs.core_3683
|
||||||
# title: Wrong results if the recursive query contains an embedded GROUP BY clause
|
# title: Wrong results if the recursive query contains an embedded GROUP BY clause
|
||||||
# decription:
|
# decription:
|
||||||
# Confirmed bug on: 2.5.1.26351
|
# Confirmed bug on: 2.5.1.26351
|
||||||
# Works OK on: 2.5.2.26540; 2.5.9.27103; 3.0.3.32861; 3.0.4.32912; 4.0.0.890.
|
# Works OK on: 2.5.2.26540; 2.5.9.27103; 3.0.3.32861; 3.0.4.32912; 4.0.0.890.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-3683
|
# tracker_id: CORE-3683
|
||||||
# min_versions: ['2.5.2']
|
# min_versions: ['2.5.2']
|
||||||
# versions: 2.5.2
|
# versions: 2.5.2
|
||||||
@ -80,7 +80,7 @@ test_script_1 = """
|
|||||||
insert into rdeps values( 'RYAZAN','MUROM', 5, 5, 61);
|
insert into rdeps values( 'RYAZAN','MUROM', 5, 5, 61);
|
||||||
insert into rdeps values( 'RYAZAN','MUROM', 5, 5, 62);
|
insert into rdeps values( 'RYAZAN','MUROM', 5, 5, 62);
|
||||||
|
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set count on;
|
set count on;
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ test_script_1 = """
|
|||||||
set count off;
|
set count off;
|
||||||
|
|
||||||
--############################################# FROM CORE_3698: ######################################
|
--############################################# FROM CORE_3698: ######################################
|
||||||
|
|
||||||
recreate table contacts (
|
recreate table contacts (
|
||||||
id integer not null,
|
id integer not null,
|
||||||
age integer,
|
age integer,
|
||||||
@ -242,6 +242,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.5.2')
|
@pytest.mark.version('>=2.5.2')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_3735
|
# id: bugs.core_3735
|
||||||
# title: Unprivileged user can delete from RDB$DATABASE, RDB$COLLATIONS, RDB$CHARACTER_SETS
|
# title: Unprivileged user can delete from RDB$DATABASE, RDB$COLLATIONS, RDB$CHARACTER_SETS
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-3735
|
# tracker_id: CORE-3735
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -27,19 +27,19 @@ test_script_1 = """
|
|||||||
commit;
|
commit;
|
||||||
revoke all on all from tmp$c3735;
|
revoke all on all from tmp$c3735;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
connect '$(DSN)' user tmp$c3735 password '123';
|
connect '$(DSN)' user tmp$c3735 password '123';
|
||||||
|
|
||||||
--show version;
|
--show version;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
set blob all;
|
set blob all;
|
||||||
select current_user from rdb$database;
|
select current_user from rdb$database;
|
||||||
show grants;
|
show grants;
|
||||||
set count on;
|
set count on;
|
||||||
|
|
||||||
--set echo on;
|
--set echo on;
|
||||||
|
|
||||||
insert into rdb$character_sets(
|
insert into rdb$character_sets(
|
||||||
rdb$character_set_name
|
rdb$character_set_name
|
||||||
,rdb$form_of_use
|
,rdb$form_of_use
|
||||||
@ -60,12 +60,12 @@ test_script_1 = """
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
1
|
1
|
||||||
) returning
|
) returning
|
||||||
rdb$character_set_name,
|
rdb$character_set_name,
|
||||||
rdb$character_set_id,
|
rdb$character_set_id,
|
||||||
rdb$default_collate_name
|
rdb$default_collate_name
|
||||||
;
|
;
|
||||||
|
|
||||||
insert into rdb$collations(
|
insert into rdb$collations(
|
||||||
rdb$collation_name
|
rdb$collation_name
|
||||||
,rdb$collation_id
|
,rdb$collation_id
|
||||||
@ -86,13 +86,13 @@ test_script_1 = """
|
|||||||
,null
|
,null
|
||||||
,null
|
,null
|
||||||
,null
|
,null
|
||||||
) returning
|
) returning
|
||||||
rdb$collation_name
|
rdb$collation_name
|
||||||
,rdb$collation_id
|
,rdb$collation_id
|
||||||
,rdb$character_set_id
|
,rdb$character_set_id
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
insert into rdb$database(
|
insert into rdb$database(
|
||||||
rdb$description
|
rdb$description
|
||||||
,rdb$relation_id
|
,rdb$relation_id
|
||||||
@ -109,37 +109,37 @@ test_script_1 = """
|
|||||||
,rdb$security_class
|
,rdb$security_class
|
||||||
,rdb$character_set_name
|
,rdb$character_set_name
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
update rdb$collations set rdb$description = null rows 1
|
update rdb$collations set rdb$description = null rows 1
|
||||||
returning
|
returning
|
||||||
rdb$collation_id
|
rdb$collation_id
|
||||||
;
|
;
|
||||||
|
|
||||||
update rdb$character_sets set rdb$description = null rows 1
|
update rdb$character_sets set rdb$description = null rows 1
|
||||||
returning
|
returning
|
||||||
rdb$character_set_id
|
rdb$character_set_id
|
||||||
;
|
;
|
||||||
|
|
||||||
update rdb$database set rdb$character_set_name = 'ISO_HA_HA'
|
update rdb$database set rdb$character_set_name = 'ISO_HA_HA'
|
||||||
returning
|
returning
|
||||||
rdb$relation_id
|
rdb$relation_id
|
||||||
;
|
;
|
||||||
|
|
||||||
delete from rdb$collations order by rdb$collation_id desc rows 1
|
delete from rdb$collations order by rdb$collation_id desc rows 1
|
||||||
returning
|
returning
|
||||||
rdb$collation_name
|
rdb$collation_name
|
||||||
,rdb$collation_id
|
,rdb$collation_id
|
||||||
,rdb$character_set_id
|
,rdb$character_set_id
|
||||||
;
|
;
|
||||||
|
|
||||||
delete from rdb$character_sets order by rdb$character_set_id desc rows 1
|
delete from rdb$character_sets order by rdb$character_set_id desc rows 1
|
||||||
returning
|
returning
|
||||||
rdb$character_set_name,
|
rdb$character_set_name,
|
||||||
rdb$character_set_id,
|
rdb$character_set_id,
|
||||||
rdb$default_collate_name
|
rdb$default_collate_name
|
||||||
;
|
;
|
||||||
|
|
||||||
delete from rdb$database order by rdb$relation_id desc rows 1
|
delete from rdb$database order by rdb$relation_id desc rows 1
|
||||||
returning
|
returning
|
||||||
rdb$description
|
rdb$description
|
||||||
@ -147,9 +147,9 @@ test_script_1 = """
|
|||||||
,rdb$security_class
|
,rdb$security_class
|
||||||
,rdb$character_set_name
|
,rdb$character_set_name
|
||||||
;
|
;
|
||||||
|
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
connect '$(DSN)' user sysdba password 'masterkey';
|
connect '$(DSN)' user sysdba password 'masterkey';
|
||||||
drop user tmp$c3735;
|
drop user tmp$c3735;
|
||||||
commit;
|
commit;
|
||||||
@ -159,6 +159,9 @@ act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
|||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
USER TMP$C3735
|
USER TMP$C3735
|
||||||
|
|
||||||
|
/* Grant permissions for this database */
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
"""
|
"""
|
||||||
|
|
||||||
expected_stderr_1 = """
|
expected_stderr_1 = """
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4036
|
# id: bugs.core_4036
|
||||||
# title: Bugcheck or database corruption when attempting to store long incompressible data into a table
|
# title: Bugcheck or database corruption when attempting to store long incompressible data into a table
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4036
|
# tracker_id: CORE-4036
|
||||||
# min_versions: ['2.1.6']
|
# min_versions: ['2.1.6']
|
||||||
# versions: 2.1.6
|
# versions: 2.1.6
|
||||||
@ -16,7 +16,7 @@ from firebird.qa import db_factory, isql_act, Action
|
|||||||
|
|
||||||
substitutions_1 = []
|
substitutions_1 = []
|
||||||
|
|
||||||
init_script_1 = """create table tw(s01 varchar(32600), s02 varchar(32600));
|
init_script_1 = """create table tw(s01 varchar(32600) character set octets, s02 varchar(32600) character set octets);
|
||||||
commit;"""
|
commit;"""
|
||||||
|
|
||||||
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
||||||
@ -34,6 +34,7 @@ expected_stdout_1 = """1
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.1.6')
|
@pytest.mark.version('>=2.1.6')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4082
|
# id: bugs.core_4082
|
||||||
# title: Wrong value of expected length in the string right truncation error
|
# title: Wrong value of expected length in the string right truncation error
|
||||||
# decription:
|
# decription:
|
||||||
# NB. Ticket title: Wrong error message (should point out the proper expected length)
|
# NB. Ticket title: Wrong error message (should point out the proper expected length)
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-4082
|
# tracker_id: CORE-4082
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -44,6 +44,7 @@ expected_stderr_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stderr = expected_stderr_1
|
act_1.expected_stderr = expected_stderr_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4127
|
# id: bugs.core_4127
|
||||||
# title: Server crashes instead of reporting the error "key size exceeds implementation restriction"
|
# title: Server crashes instead of reporting the error "key size exceeds implementation restriction"
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4127
|
# tracker_id: CORE-4127
|
||||||
# min_versions: ['2.5.3']
|
# min_versions: ['2.5.3']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -28,7 +28,7 @@ db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
|||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
select * from tab1
|
select * from tab1
|
||||||
where col1 = 1 and col2 = rpad('a', 32765)
|
where col1 = 1 and col2 = rpad('a', 32765)
|
||||||
union all
|
union all
|
||||||
-- This part of query will NOT raise
|
-- This part of query will NOT raise
|
||||||
@ -36,7 +36,7 @@ test_script_1 = """
|
|||||||
-- arithmetic exception, numeric overflow, or string truncation
|
-- arithmetic exception, numeric overflow, or string truncation
|
||||||
-- -Implementation limit exceeded
|
-- -Implementation limit exceeded
|
||||||
-- since WI-V3.0.0.31981
|
-- since WI-V3.0.0.31981
|
||||||
select * from tab1
|
select * from tab1
|
||||||
where col1 = 1 and col2 = rpad('a', 32766);
|
where col1 = 1 and col2 = rpad('a', 32766);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -51,6 +51,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4149
|
# id: bugs.core_4149
|
||||||
# title: New permission types are not displayed by ISQL
|
# title: New permission types are not displayed by ISQL
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4149
|
# tracker_id: CORE-4149
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -21,16 +21,16 @@ init_script_1 = """"""
|
|||||||
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
recreate table test(id int);
|
recreate table test(id int);
|
||||||
commit;
|
commit;
|
||||||
grant select on test to public;
|
grant select on test to public;
|
||||||
commit;
|
commit;
|
||||||
show grants;
|
show grants;
|
||||||
|
|
||||||
create sequence g_test;
|
create sequence g_test;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
grant usage on sequence g_test to public;
|
grant usage on sequence g_test to public;
|
||||||
commit;
|
commit;
|
||||||
show grants;
|
show grants;
|
||||||
"""
|
"""
|
||||||
@ -38,12 +38,14 @@ test_script_1 = """
|
|||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT SELECT ON TEST TO PUBLIC
|
GRANT SELECT ON TEST TO PUBLIC
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
/* Grant permissions for this database */
|
|
||||||
GRANT SELECT ON TEST TO PUBLIC
|
/* Grant permissions for this database */
|
||||||
GRANT USAGE ON SEQUENCE G_TEST TO PUBLIC
|
GRANT SELECT ON TEST TO PUBLIC
|
||||||
|
GRANT USAGE ON SEQUENCE G_TEST TO PUBLIC
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4255
|
# id: bugs.core_4255
|
||||||
# title: Parametrized queries using RDB$DB_KEY do not work
|
# title: Parametrized queries using RDB$DB_KEY do not work
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4255
|
# tracker_id: CORE-4255
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -33,7 +33,7 @@ test_script_1 = """
|
|||||||
insert into dbkeytest (id) values (3);
|
insert into dbkeytest (id) values (3);
|
||||||
insert into dbkeytest (id) values (4);
|
insert into dbkeytest (id) values (4);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- actual test:
|
-- actual test:
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block
|
execute block
|
||||||
@ -49,11 +49,11 @@ test_script_1 = """
|
|||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
select * from dbkeytest;
|
select * from dbkeytest;
|
||||||
|
|
||||||
-- one else test (suggested by Dmitry) in this ticket:
|
-- one else test (suggested by Dmitry) in this ticket:
|
||||||
select 1 x from rdb$database where rdb$db_key = cast((select rdb$db_key from rdb$database) as varchar(8));
|
select 1 x from rdb$database where rdb$db_key = cast((select rdb$db_key from rdb$database) as varchar(8));
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
@ -73,6 +73,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4374
|
# id: bugs.core_4374
|
||||||
# title: Truncation error when using EXECUTE STATEMENT with a blob
|
# title: Truncation error when using EXECUTE STATEMENT with a blob
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4374
|
# tracker_id: CORE-4374
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -25,7 +25,7 @@ test_script_1 = """
|
|||||||
-- Memory consumption of procedural objects under 64-bit environment is much bigger than on 32-bit one.
|
-- Memory consumption of procedural objects under 64-bit environment is much bigger than on 32-bit one.
|
||||||
-- This test was retyped because it was encountered that previous limit for the size of BLR is too weak:
|
-- This test was retyped because it was encountered that previous limit for the size of BLR is too weak:
|
||||||
-- test failed at runtime with error "implementation limit exceeds".
|
-- test failed at runtime with error "implementation limit exceeds".
|
||||||
-- New (more rigorous) limit was found by using 64-bit FB, build LI-T3.0.0.31822: BLR can not be larger
|
-- New (more rigorous) limit was found by using 64-bit FB, build LI-T3.0.0.31822: BLR can not be larger
|
||||||
-- than ~2.35 Mb (previous: ~3.21 Mb)
|
-- than ~2.35 Mb (previous: ~3.21 Mb)
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
@ -41,7 +41,7 @@ test_script_1 = """
|
|||||||
execute block as -- returns (proc_ddl_length int) as
|
execute block as -- returns (proc_ddl_length int) as
|
||||||
declare sql blob sub_type text;
|
declare sql blob sub_type text;
|
||||||
declare single_sttm varchar(10);
|
declare single_sttm varchar(10);
|
||||||
|
|
||||||
-- for 32 bit:
|
-- for 32 bit:
|
||||||
/***********************
|
/***********************
|
||||||
declare sn int = 32760;
|
declare sn int = 32760;
|
||||||
@ -49,7 +49,7 @@ test_script_1 = """
|
|||||||
declare max_length_for_big_blocks int = 1048576;
|
declare max_length_for_big_blocks int = 1048576;
|
||||||
declare small_incr_amount int = 2674; -- detected maximum for 3.0 Beta2 (WI-T3.0.0.31807)
|
declare small_incr_amount int = 2674; -- detected maximum for 3.0 Beta2 (WI-T3.0.0.31807)
|
||||||
***********************/
|
***********************/
|
||||||
|
|
||||||
-- for 64 bit:
|
-- for 64 bit:
|
||||||
--/*
|
--/*
|
||||||
declare sn int = 8192;
|
declare sn int = 8192;
|
||||||
@ -60,68 +60,68 @@ test_script_1 = """
|
|||||||
begin
|
begin
|
||||||
sql = 'create or alter procedure test_proc returns(id integer) as '||ascii_char(10)||'begin ';
|
sql = 'create or alter procedure test_proc returns(id integer) as '||ascii_char(10)||'begin ';
|
||||||
max_length_for_big_blocks = max_length_for_big_blocks - char_length(sql || 'end');
|
max_length_for_big_blocks = max_length_for_big_blocks - char_length(sql || 'end');
|
||||||
|
|
||||||
single_sttm = 'suspend;' || ascii_char(10);
|
single_sttm = 'suspend;' || ascii_char(10);
|
||||||
big_block_for_incr = rpad('', trunc( sn / char_length(single_sttm) ) * char_length(single_sttm), single_sttm);
|
big_block_for_incr = rpad('', trunc( sn / char_length(single_sttm) ) * char_length(single_sttm), single_sttm);
|
||||||
|
|
||||||
while (max_length_for_big_blocks > sn) do
|
while (max_length_for_big_blocks > sn) do
|
||||||
begin
|
begin
|
||||||
sql = sql || big_block_for_incr;
|
sql = sql || big_block_for_incr;
|
||||||
max_length_for_big_blocks = max_length_for_big_blocks - char_length(big_block_for_incr);
|
max_length_for_big_blocks = max_length_for_big_blocks - char_length(big_block_for_incr);
|
||||||
end
|
end
|
||||||
|
|
||||||
sql = sql || rpad('', small_incr_amount * char_length(single_sttm), single_sttm);
|
sql = sql || rpad('', small_incr_amount * char_length(single_sttm), single_sttm);
|
||||||
sql = sql ||'end';
|
sql = sql ||'end';
|
||||||
|
|
||||||
--proc_ddl_length = octet_length(sql);
|
--proc_ddl_length = octet_length(sql);
|
||||||
rdb$set_context('USER_SESSION', 'PROC_DDL_LENGTH', octet_length(sql));
|
rdb$set_context('USER_SESSION', 'PROC_DDL_LENGTH', octet_length(sql));
|
||||||
--suspend;
|
--suspend;
|
||||||
|
|
||||||
execute statement :SQL;
|
execute statement :SQL;
|
||||||
|
|
||||||
end
|
|
||||||
^
|
|
||||||
set term ;^
|
|
||||||
commit;
|
|
||||||
|
|
||||||
|
|
||||||
set term ^;
|
|
||||||
execute block returns(returned_rows int, proc_ddl_length int, proc_src_length int, approx_blr_length int) as
|
|
||||||
begin
|
|
||||||
execute statement 'select count(*) cnt from test_proc'
|
|
||||||
into returned_rows;
|
|
||||||
|
|
||||||
proc_ddl_length = cast( rdb$get_context('USER_SESSION', 'PROC_DDL_LENGTH') as int);
|
|
||||||
|
|
||||||
select octet_length(rdb$procedure_source)
|
|
||||||
from rdb$procedures where rdb$procedure_name = upper('test_proc')
|
|
||||||
into proc_src_length;
|
|
||||||
|
|
||||||
select round(octet_length(rdb$procedure_blr), -3)
|
|
||||||
from rdb$procedures where rdb$procedure_name = upper('test_proc')
|
|
||||||
into approx_blr_length;
|
|
||||||
|
|
||||||
suspend;
|
|
||||||
|
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
/**************************************
|
|
||||||
|
set term ^;
|
||||||
|
execute block returns(returned_rows int, proc_ddl_length int, proc_src_length int, approx_blr_length int) as
|
||||||
|
begin
|
||||||
|
execute statement 'select count(*) cnt from test_proc'
|
||||||
|
into returned_rows;
|
||||||
|
|
||||||
|
proc_ddl_length = cast( rdb$get_context('USER_SESSION', 'PROC_DDL_LENGTH') as int);
|
||||||
|
|
||||||
|
select octet_length(rdb$procedure_source)
|
||||||
|
from rdb$procedures where rdb$procedure_name = upper('test_proc')
|
||||||
|
into proc_src_length;
|
||||||
|
|
||||||
|
select round(octet_length(rdb$procedure_blr), -3)
|
||||||
|
from rdb$procedures where rdb$procedure_name = upper('test_proc')
|
||||||
|
into approx_blr_length;
|
||||||
|
|
||||||
|
suspend;
|
||||||
|
|
||||||
|
end
|
||||||
|
^
|
||||||
|
set term ;^
|
||||||
|
commit;
|
||||||
|
|
||||||
|
/**************************************
|
||||||
|
|
||||||
32 bit, WI-T3.0.0.31824
|
32 bit, WI-T3.0.0.31824
|
||||||
RETURNED_ROWS 119154
|
RETURNED_ROWS 119154
|
||||||
PROC_DDL_LENGTH 1072455
|
PROC_DDL_LENGTH 1072455
|
||||||
PROC_SRC_LENGTH 1072395
|
PROC_SRC_LENGTH 1072395
|
||||||
APPROX_BLR_LENGTH 3217000
|
APPROX_BLR_LENGTH 3217000
|
||||||
|
|
||||||
64 bit, LI-T3.0.0.31822
|
64 bit, LI-T3.0.0.31822
|
||||||
RETURNED_ROWS 87379
|
RETURNED_ROWS 87379
|
||||||
PROC_DDL_LENGTH 786480
|
PROC_DDL_LENGTH 786480
|
||||||
PROC_SRC_LENGTH 786420
|
PROC_SRC_LENGTH 786420
|
||||||
APPROX_BLR_LENGTH 2359000
|
APPROX_BLR_LENGTH 2359000
|
||||||
|
|
||||||
**************************************/
|
**************************************/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -135,7 +135,9 @@ expected_stdout_1 = """
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
|
@pytest.mark.slow
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4379
|
# id: bugs.core_4379
|
||||||
# title: Poor performance of explicit cursors containing correlated subqueries in the select list
|
# title: Poor performance of explicit cursors containing correlated subqueries in the select list
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4379
|
# tracker_id: CORE-4379
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -31,29 +31,29 @@ db_1 = db_factory(from_backup='mon-stat-gathering-3_0.fbk', init=init_script_1)
|
|||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
|
|
||||||
execute procedure sp_truncate_stat;
|
execute procedure sp_truncate_stat;
|
||||||
commit;
|
commit;
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set plan on;
|
set plan on;
|
||||||
update t a set f01 = (select f01 from t x where x.id>a.id order by id rows 1);
|
update t a set f01 = (select f01 from t x where x.id>a.id order by id rows 1);
|
||||||
set plan off;
|
set plan off;
|
||||||
rollback;
|
rollback;
|
||||||
|
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
||||||
|
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
execute procedure sp_truncate_stat;
|
execute procedure sp_truncate_stat;
|
||||||
commit;
|
commit;
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set plan on;
|
set plan on;
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block as
|
execute block as
|
||||||
@ -73,20 +73,20 @@ test_script_1 = """
|
|||||||
set term ;^
|
set term ;^
|
||||||
set plan off;
|
set plan off;
|
||||||
rollback;
|
rollback;
|
||||||
|
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- On LI-T3.0.0.30981 (29-mar02014) it was 200029999 indexed reads here:
|
-- On LI-T3.0.0.30981 (29-mar02014) it was 200029999 indexed reads here:
|
||||||
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
||||||
|
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
execute procedure sp_truncate_stat;
|
execute procedure sp_truncate_stat;
|
||||||
commit;
|
commit;
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set plan on;
|
set plan on;
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block as
|
execute block as
|
||||||
@ -102,15 +102,15 @@ test_script_1 = """
|
|||||||
update t set f01 = :v_next_f01 where rdb$db_key = :v_key;
|
update t set f01 = :v_next_f01 where rdb$db_key = :v_key;
|
||||||
end
|
end
|
||||||
close c_cur;
|
close c_cur;
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
set plan off;
|
set plan off;
|
||||||
rollback;
|
rollback;
|
||||||
|
|
||||||
execute procedure sp_gather_stat;
|
execute procedure sp_gather_stat;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- On LI-T3.0.0.30981 (29-mar02014) it was 200049999 indexed reads here:
|
-- On LI-T3.0.0.30981 (29-mar02014) it was 200049999 indexed reads here:
|
||||||
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
select natural_reads, indexed_reads from v_agg_stat_tabs where table_name = upper('T');
|
||||||
"""
|
"""
|
||||||
@ -139,6 +139,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4468
|
# id: bugs.core_4468
|
||||||
# title: FB3: CREATE USER GRANT ADMIN ROLE does not work
|
# title: FB3: CREATE USER GRANT ADMIN ROLE does not work
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4468
|
# tracker_id: CORE-4468
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
# qmid:
|
# qmid:
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from firebird.qa import db_factory, isql_act, Action
|
from firebird.qa import db_factory, isql_act, Action
|
||||||
@ -41,7 +41,7 @@ test_script_1 = """
|
|||||||
select 'start' msg, v.* from v_users v;
|
select 'start' msg, v.* from v_users v;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
create or alter user ozzy_osbourne password '123'
|
create or alter user ozzy_osbourne password '123'
|
||||||
grant admin role -- this is mandatory because it gives him admin role in Security DB
|
grant admin role -- this is mandatory because it gives him admin role in Security DB
|
||||||
;
|
;
|
||||||
revoke all on all from ozzy_osbourne;
|
revoke all on all from ozzy_osbourne;
|
||||||
@ -60,7 +60,7 @@ test_script_1 = """
|
|||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- Users are stored in Security DB, *not* in "this" database!
|
-- Users are stored in Security DB, *not* in "this" database!
|
||||||
-- So, following statement will pass only if 'ozzy_osbourne' has been granted by 'admin role'
|
-- So, following statement will pass only if 'ozzy_osbourne' has been granted by 'admin role'
|
||||||
-- in his own 'create user' phase:
|
-- in his own 'create user' phase:
|
||||||
create or alter user bon_scott password '456' revoke admin role;
|
create or alter user bon_scott password '456' revoke admin role;
|
||||||
commit;
|
commit;
|
||||||
@ -118,7 +118,7 @@ test_script_1 = """
|
|||||||
-- -no permission for DELETE access to TABLE PLG$VIEW_USERS
|
-- -no permission for DELETE access to TABLE PLG$VIEW_USERS
|
||||||
drop user ozzy_osbourne;
|
drop user ozzy_osbourne;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
select 'step-7' msg, v.* from v_users v;
|
select 'step-7' msg, v.* from v_users v;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
@ -148,123 +148,128 @@ expected_stdout_1 = """
|
|||||||
WHATS_MY_ROLE NONE
|
WHATS_MY_ROLE NONE
|
||||||
NON_SYSDBA_USER_NAME <null>
|
NON_SYSDBA_USER_NAME <null>
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <null>
|
NON_SYSDBA_HAS_ADMIN_ROLE <null>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
MSG step-1
|
MSG step-1
|
||||||
WHO_AM_I SYSDBA
|
WHO_AM_I SYSDBA
|
||||||
WHATS_MY_ROLE NONE
|
WHATS_MY_ROLE NONE
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
|
|
||||||
MSG step-2
|
MSG step-2
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
MSG step-2
|
MSG step-2
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME BON_SCOTT
|
NON_SYSDBA_USER_NAME BON_SCOTT
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 2
|
Records affected: 2
|
||||||
|
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
MSG step-3
|
MSG step-3
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
MSG step-3
|
MSG step-3
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME BON_SCOTT
|
NON_SYSDBA_USER_NAME BON_SCOTT
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 2
|
Records affected: 2
|
||||||
|
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT RDB$ADMIN TO BON_SCOTT GRANTED BY OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO BON_SCOTT GRANTED BY OZZY_OSBOURNE
|
||||||
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
MSG step-4
|
MSG step-4
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
MSG step-4
|
MSG step-4
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME BON_SCOTT
|
NON_SYSDBA_USER_NAME BON_SCOTT
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 2
|
Records affected: 2
|
||||||
|
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
MSG step-5
|
MSG step-5
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
NON_SYSDBA_HAS_ADMIN_ROLE <true>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
MSG step-6
|
MSG step-6
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
MSG step-7
|
MSG step-7
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
MSG step-8
|
MSG step-8
|
||||||
WHO_AM_I OZZY_OSBOURNE
|
WHO_AM_I OZZY_OSBOURNE
|
||||||
WHATS_MY_ROLE RDB$ADMIN
|
WHATS_MY_ROLE RDB$ADMIN
|
||||||
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
NON_SYSDBA_USER_NAME OZZY_OSBOURNE
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
NON_SYSDBA_HAS_ADMIN_ROLE <false>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
|
|
||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
GRANT RDB$ADMIN TO OZZY_OSBOURNE
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
MSG final
|
MSG final
|
||||||
WHO_AM_I SYSDBA
|
WHO_AM_I SYSDBA
|
||||||
WHATS_MY_ROLE NONE
|
WHATS_MY_ROLE NONE
|
||||||
NON_SYSDBA_USER_NAME <null>
|
NON_SYSDBA_USER_NAME <null>
|
||||||
NON_SYSDBA_HAS_ADMIN_ROLE <null>
|
NON_SYSDBA_HAS_ADMIN_ROLE <null>
|
||||||
|
|
||||||
|
|
||||||
Records affected: 1
|
Records affected: 1
|
||||||
"""
|
"""
|
||||||
expected_stderr_1 = """
|
expected_stderr_1 = """
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4469
|
# id: bugs.core_4469
|
||||||
# title: Add field in SEC$USERS reflecting whether a user has RDB$ADMIN role in security database
|
# title: Add field in SEC$USERS reflecting whether a user has RDB$ADMIN role in security database
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4469
|
# tracker_id: CORE-4469
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -22,28 +22,28 @@ db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
|||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
|
|
||||||
drop user boss1;
|
drop user boss1;
|
||||||
drop user boss2;
|
drop user boss2;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
create user boss1 password '123' grant admin role;
|
create user boss1 password '123' grant admin role;
|
||||||
commit;
|
commit;
|
||||||
select SEC$ADMIN is_admin_boss1 from sec$users where sec$user_name = upper('boss1');
|
select SEC$ADMIN is_admin_boss1 from sec$users where sec$user_name = upper('boss1');
|
||||||
|
|
||||||
|
|
||||||
create user boss2 password '456';
|
create user boss2 password '456';
|
||||||
commit;
|
commit;
|
||||||
select SEC$ADMIN is_admin_boss2a from sec$users where sec$user_name = upper('boss2');
|
select SEC$ADMIN is_admin_boss2a from sec$users where sec$user_name = upper('boss2');
|
||||||
|
|
||||||
alter user boss2 grant admin role;
|
alter user boss2 grant admin role;
|
||||||
commit;
|
commit;
|
||||||
select SEC$ADMIN is_admin_boss2b from sec$users where sec$user_name = upper('boss2');
|
select SEC$ADMIN is_admin_boss2b from sec$users where sec$user_name = upper('boss2');
|
||||||
|
|
||||||
alter user boss2 revoke admin role;
|
alter user boss2 revoke admin role;
|
||||||
commit;
|
commit;
|
||||||
select SEC$ADMIN is_admin_boss2c from sec$users where sec$user_name = upper('boss2');
|
select SEC$ADMIN is_admin_boss2c from sec$users where sec$user_name = upper('boss2');
|
||||||
|
|
||||||
drop user boss1;
|
drop user boss1;
|
||||||
drop user boss2;
|
drop user boss2;
|
||||||
commit;
|
commit;
|
||||||
@ -58,9 +58,17 @@ expected_stdout_1 = """
|
|||||||
IS_ADMIN_BOSS2C <false>
|
IS_ADMIN_BOSS2C <false>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
expected_stderr_1 = """
|
||||||
|
Statement failed, SQLSTATE = HY000
|
||||||
|
record not found for user: BOSS1
|
||||||
|
Statement failed, SQLSTATE = HY000
|
||||||
|
record not found for user: BOSS2
|
||||||
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
|
act_1.expected_stderr = expected_stderr_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4607
|
# id: bugs.core_4607
|
||||||
# title: Add support for having more than one UserManager in firebird.conf and use them from SQL
|
# title: Add support for having more than one UserManager in firebird.conf and use them from SQL
|
||||||
# decription:
|
# decription:
|
||||||
# Line "UserManager = Srp,..." has been added since ~MAR-2018 in firebird.conf before every fbt_run launch.
|
# Line "UserManager = Srp,..." has been added since ~MAR-2018 in firebird.conf before every fbt_run launch.
|
||||||
# Initial attempt to use Srp failed for following COREs tests: 2307, 3365, 4200, 4301, 4469 - and error
|
# Initial attempt to use Srp failed for following COREs tests: 2307, 3365, 4200, 4301, 4469 - and error
|
||||||
# was the same for all of them:
|
# was the same for all of them:
|
||||||
@ -11,13 +11,17 @@
|
|||||||
# database" in Quick Start Guide
|
# database" in Quick Start Guide
|
||||||
# ===
|
# ===
|
||||||
# (reply from dimitr, letter 31.05.2015 17:44).
|
# (reply from dimitr, letter 31.05.2015 17:44).
|
||||||
#
|
#
|
||||||
# Checked on:
|
# Checked on:
|
||||||
# fb30Cs, build 3.0.4.32972: OK, 0.844s.
|
# fb30Cs, build 3.0.4.32972: OK, 0.844s.
|
||||||
# FB30SS, build 3.0.4.32988: OK, 1.203s.
|
# FB30SS, build 3.0.4.32988: OK, 1.203s.
|
||||||
# FB40CS, build 4.0.0.955: OK, 2.016s.
|
# FB40CS, build 4.0.0.955: OK, 2.016s.
|
||||||
# FB40SS, build 4.0.0.1008: OK, 1.328s.
|
# FB40SS, build 4.0.0.1008: OK, 1.328s.
|
||||||
#
|
#
|
||||||
|
# [pcisar] 21.10.2021 - This test requires Legacy_UserManager to be listed
|
||||||
|
# in firebird.conf UserManager option, which is NOT by default.
|
||||||
|
# Otherwise it will FAIL with "Missing requested management plugin"
|
||||||
|
#
|
||||||
# tracker_id: CORE-4607
|
# tracker_id: CORE-4607
|
||||||
# min_versions: ['3.0.0']
|
# min_versions: ['3.0.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -40,7 +44,7 @@ test_script_1 = """
|
|||||||
set count on;
|
set count on;
|
||||||
create view v_test as
|
create view v_test as
|
||||||
select sec$user_name, sec$plugin
|
select sec$user_name, sec$plugin
|
||||||
from sec$users
|
from sec$users
|
||||||
where upper(sec$user_name) starting with upper('tmp$c4607')
|
where upper(sec$user_name) starting with upper('tmp$c4607')
|
||||||
order by 1,2
|
order by 1,2
|
||||||
;
|
;
|
||||||
@ -73,6 +77,7 @@ expected_stdout_1 = """
|
|||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
|
#act_1.expected_stderr = expected_stderr_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4781
|
# id: bugs.core_4781
|
||||||
# title: Maximum string length (32765 bytes) is not validated
|
# title: Maximum string length (32765 bytes) is not validated
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4781
|
# tracker_id: CORE-4781
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -21,7 +21,7 @@ init_script_1 = """"""
|
|||||||
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(page_size=4096, sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
recreate table test(bf blob);
|
recreate table test(bf blob);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
-- At least since 31948 following **TWO** INSERT statements work OK.
|
-- At least since 31948 following **TWO** INSERT statements work OK.
|
||||||
@ -700,10 +700,10 @@ ldlkdw89dw89d2kssdjkcsuic3892343kbmvasjhcvsdyucg872348234ejwehsj#'
|
|||||||
|
|
||||||
set blob all;
|
set blob all;
|
||||||
set list on;
|
set list on;
|
||||||
select
|
select
|
||||||
bf is null bf_is_null,
|
bf is null bf_is_null,
|
||||||
octet_length(bf),
|
octet_length(bf),
|
||||||
char_length(bf)
|
char_length(bf)
|
||||||
from test;
|
from test;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -720,6 +720,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4806
|
# id: bugs.core_4806
|
||||||
# title: Regression: generators can be seen/modified by unprivileged users
|
# title: Regression: generators can be seen/modified by unprivileged users
|
||||||
# decription:
|
# decription:
|
||||||
# We create sequence ('g') and three users and one role.
|
# We create sequence ('g') and three users and one role.
|
||||||
# First user ('big_brother') is granted to use generator directly.
|
# First user ('big_brother') is granted to use generator directly.
|
||||||
# Second user ('bill_junior') is gratned to use generator via ROLE ('stockmgr').
|
# Second user ('bill_junior') is gratned to use generator via ROLE ('stockmgr').
|
||||||
@ -14,7 +14,7 @@
|
|||||||
# Also, we do additional check for second user: try to connect WITHOUT specifying role
|
# Also, we do additional check for second user: try to connect WITHOUT specifying role
|
||||||
# and see/change sequence. Error must be in this case (SQLSTATE = 28000).
|
# and see/change sequence. Error must be in this case (SQLSTATE = 28000).
|
||||||
# Third user must NOT see neither value of generator nor to change it (SQLSTATE = 28000).
|
# Third user must NOT see neither value of generator nor to change it (SQLSTATE = 28000).
|
||||||
#
|
#
|
||||||
# :::::::::::::::::::::::::::::::::::::::: NB ::::::::::::::::::::::::::::::::::::
|
# :::::::::::::::::::::::::::::::::::::::: NB ::::::::::::::::::::::::::::::::::::
|
||||||
# 18.08.2020. FB 4.x has incompatible behaviour with all previous versions since build 4.0.0.2131 (06-aug-2020):
|
# 18.08.2020. FB 4.x has incompatible behaviour with all previous versions since build 4.0.0.2131 (06-aug-2020):
|
||||||
# statement 'CREATE SEQUENCE <G>' will create generator with current value LESS FOR 1 then it was before.
|
# statement 'CREATE SEQUENCE <G>' will create generator with current value LESS FOR 1 then it was before.
|
||||||
@ -22,13 +22,13 @@
|
|||||||
# See also CORE-6084 and its fix: https://github.com/FirebirdSQL/firebird/commit/23dc0c6297825b2e9006f4d5a2c488702091033d
|
# See also CORE-6084 and its fix: https://github.com/FirebirdSQL/firebird/commit/23dc0c6297825b2e9006f4d5a2c488702091033d
|
||||||
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
# This is considered as *expected* and is noted in doc/README.incompatibilities.3to4.txt
|
# This is considered as *expected* and is noted in doc/README.incompatibilities.3to4.txt
|
||||||
#
|
#
|
||||||
# Because of this, it was decided to filter out concrete values that are produced in 'SHOW SEQUENCE' command.
|
# Because of this, it was decided to filter out concrete values that are produced in 'SHOW SEQUENCE' command.
|
||||||
#
|
#
|
||||||
# Checked on:
|
# Checked on:
|
||||||
# 4.0.0.2164
|
# 4.0.0.2164
|
||||||
# 3.0.7.33356
|
# 3.0.7.33356
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-4806
|
# tracker_id: CORE-4806
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -58,26 +58,26 @@ test_script_1 = """
|
|||||||
end
|
end
|
||||||
^ set term ;^
|
^ set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
create or alter user Maverick password '123';
|
create or alter user Maverick password '123';
|
||||||
create or alter user Big_Brother password '456';
|
create or alter user Big_Brother password '456';
|
||||||
create or alter user Bill_Junior password '789';
|
create or alter user Bill_Junior password '789';
|
||||||
create role stockmgr;
|
create role stockmgr;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
revoke all on all from Maverick;
|
revoke all on all from Maverick;
|
||||||
revoke all on all from Big_Brother;
|
revoke all on all from Big_Brother;
|
||||||
revoke all on all from Bill_Junior;
|
revoke all on all from Bill_Junior;
|
||||||
--revoke all on all from stockmgr; -- COMMENTED TEMPLY, error "Revoke all on all from role <R> -- failed with "SQL role <R> does not exist in security database"", see core-4831
|
--revoke all on all from stockmgr; -- COMMENTED TEMPLY, error "Revoke all on all from role <R> -- failed with "SQL role <R> does not exist in security database"", see core-4831
|
||||||
revoke all on all from public;
|
revoke all on all from public;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
grant usage on sequence g to big_brother;
|
grant usage on sequence g to big_brother;
|
||||||
grant usage on sequence g to role stockmgr;
|
grant usage on sequence g to role stockmgr;
|
||||||
grant stockmgr to Bill_Junior;
|
grant stockmgr to Bill_Junior;
|
||||||
commit;
|
commit;
|
||||||
show grants;
|
show grants;
|
||||||
|
|
||||||
set list on;
|
set list on;
|
||||||
|
|
||||||
connect '$(DSN)' user 'BIG_BROTHER' password '456';
|
connect '$(DSN)' user 'BIG_BROTHER' password '456';
|
||||||
@ -94,14 +94,14 @@ test_script_1 = """
|
|||||||
|
|
||||||
connect '$(DSN)' user 'BILL_JUNIOR' password '789';
|
connect '$(DSN)' user 'BILL_JUNIOR' password '789';
|
||||||
select current_user, current_role from rdb$database;
|
select current_user, current_role from rdb$database;
|
||||||
|
|
||||||
-- 'show sequ' should produce error:
|
-- 'show sequ' should produce error:
|
||||||
-- Statement failed, SQLSTATE = 28000
|
-- Statement failed, SQLSTATE = 28000
|
||||||
-- no permission for USAGE access to GENERATOR G
|
-- no permission for USAGE access to GENERATOR G
|
||||||
-- There is no generator G in this database
|
-- There is no generator G in this database
|
||||||
-- (for user 'Bill_Junior' who connects w/o ROLE and thus has NO rights to see that sequence)
|
-- (for user 'Bill_Junior' who connects w/o ROLE and thus has NO rights to see that sequence)
|
||||||
show sequ g;
|
show sequ g;
|
||||||
|
|
||||||
-- 'select gen_id(...)' should produce error:
|
-- 'select gen_id(...)' should produce error:
|
||||||
-- Statement failed, SQLSTATE = 28000
|
-- Statement failed, SQLSTATE = 28000
|
||||||
-- no permission for USAGE access to GENERATOR G
|
-- no permission for USAGE access to GENERATOR G
|
||||||
@ -142,6 +142,7 @@ expected_stdout_1 = """
|
|||||||
GRANT STOCKMGR TO BILL_JUNIOR
|
GRANT STOCKMGR TO BILL_JUNIOR
|
||||||
GRANT USAGE ON SEQUENCE G TO USER BIG_BROTHER
|
GRANT USAGE ON SEQUENCE G TO USER BIG_BROTHER
|
||||||
GRANT USAGE ON SEQUENCE G TO ROLE STOCKMGR
|
GRANT USAGE ON SEQUENCE G TO ROLE STOCKMGR
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
|
||||||
USER BIG_BROTHER
|
USER BIG_BROTHER
|
||||||
ROLE NONE
|
ROLE NONE
|
||||||
@ -166,7 +167,7 @@ expected_stderr_1 = """
|
|||||||
|
|
||||||
Statement failed, SQLSTATE = 28000
|
Statement failed, SQLSTATE = 28000
|
||||||
no permission for USAGE access to GENERATOR G
|
no permission for USAGE access to GENERATOR G
|
||||||
|
|
||||||
Statement failed, SQLSTATE = 28000
|
Statement failed, SQLSTATE = 28000
|
||||||
no permission for USAGE access to GENERATOR G
|
no permission for USAGE access to GENERATOR G
|
||||||
There is no generator G in this database
|
There is no generator G in this database
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4826
|
# id: bugs.core_4826
|
||||||
# title: Make ISQL display character set when sqlda_display is on
|
# title: Make ISQL display character set when sqlda_display is on
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4826
|
# tracker_id: CORE-4826
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -33,7 +33,7 @@ test_script_1 = """
|
|||||||
tf2 time,
|
tf2 time,
|
||||||
tf3 timestamp,
|
tf3 timestamp,
|
||||||
boo boolean,
|
boo boolean,
|
||||||
tx1 char character set utf8,
|
tx1 char character set utf8,
|
||||||
tx2 varchar(10) character set iso8859_1,
|
tx2 varchar(10) character set iso8859_1,
|
||||||
tx3 nchar,
|
tx3 nchar,
|
||||||
-- doesn`t compile: tx4 nvarchar(10),
|
-- doesn`t compile: tx4 nvarchar(10),
|
||||||
@ -42,7 +42,7 @@ test_script_1 = """
|
|||||||
tb2 blob sub_type 0
|
tb2 blob sub_type 0
|
||||||
);
|
);
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set sqlda_display on;
|
set sqlda_display on;
|
||||||
select * from test1;
|
select * from test1;
|
||||||
commit;
|
commit;
|
||||||
@ -71,6 +71,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4831
|
# id: bugs.core_4831
|
||||||
# title: Revoke all on all from role <R> -- failed with "SQL role <R> does not exist in security database"
|
# title: Revoke all on all from role <R> -- failed with "SQL role <R> does not exist in security database"
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4831
|
# tracker_id: CORE-4831
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -34,13 +34,14 @@ test_script_1 = """
|
|||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stderr_1 = """
|
expected_stdout_1 = """
|
||||||
There is no privilege granted in this database
|
/* Grant permissions for this database */
|
||||||
"""
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
act_1.expected_stderr = expected_stderr_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
assert act_1.clean_expected_stderr == act_1.clean_stderr
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4839
|
# id: bugs.core_4839
|
||||||
# title: SHOW GRANTS does not display info about exceptions which were granted to user
|
# title: SHOW GRANTS does not display info about exceptions which were granted to user
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-4839
|
# tracker_id: CORE-4839
|
||||||
# min_versions: ['3.0']
|
# min_versions: ['3.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -28,7 +28,7 @@ test_script_1 = """
|
|||||||
|
|
||||||
grant usage on exception exc_foo to tmp$c4839; -- this wasn`t shown before rev. 61822 (build 3.0.0.31881), 2015-06-14 11:35
|
grant usage on exception exc_foo to tmp$c4839; -- this wasn`t shown before rev. 61822 (build 3.0.0.31881), 2015-06-14 11:35
|
||||||
grant usage on sequence gen_bar to tmp$c4839;
|
grant usage on sequence gen_bar to tmp$c4839;
|
||||||
commit;
|
commit;
|
||||||
show grants;
|
show grants;
|
||||||
commit;
|
commit;
|
||||||
drop user tmp$c4839;
|
drop user tmp$c4839;
|
||||||
@ -41,6 +41,7 @@ expected_stdout_1 = """
|
|||||||
/* Grant permissions for this database */
|
/* Grant permissions for this database */
|
||||||
GRANT USAGE ON SEQUENCE GEN_BAR TO USER TMP$C4839
|
GRANT USAGE ON SEQUENCE GEN_BAR TO USER TMP$C4839
|
||||||
GRANT USAGE ON EXCEPTION EXC_FOO TO USER TMP$C4839
|
GRANT USAGE ON EXCEPTION EXC_FOO TO USER TMP$C4839
|
||||||
|
GRANT CREATE DATABASE TO USER TMP$C4648
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_4841
|
# id: bugs.core_4841
|
||||||
# title: Make message about missing password being always displayed as reply on attempt to issue CREATE new login without PASSWORD clause
|
# title: Make message about missing password being always displayed as reply on attempt to issue CREATE new login without PASSWORD clause
|
||||||
# decription:
|
# decription:
|
||||||
# Checked on
|
# Checked on
|
||||||
# 4.0.0.2271 SS; 4.0.0.2265 SS; 4.0.0.2267 CS.
|
# 4.0.0.2271 SS; 4.0.0.2265 SS; 4.0.0.2267 CS.
|
||||||
# 3.0.8.33392 SS; 3.0.8.33390 SC; 3.0.7.33388 CS.
|
# 3.0.8.33392 SS; 3.0.8.33390 SC; 3.0.7.33388 CS.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-4841
|
# tracker_id: CORE-4841
|
||||||
# min_versions: ['3.0.7']
|
# min_versions: ['3.0.7']
|
||||||
# versions: 3.0.7
|
# versions: 3.0.7
|
||||||
@ -39,39 +39,31 @@ test_script_1 = """
|
|||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stderr_1 = """
|
expected_stderr_1 = """
|
||||||
Statement failed, SQLSTATE = 42000
|
Statement failed, SQLSTATE = 42000
|
||||||
unsuccessful metadata update
|
unsuccessful metadata update
|
||||||
-CREATE USER U01 failed
|
-CREATE USER U01 failed
|
||||||
-Password must be specified when creating user
|
-Password must be specified when creating user
|
||||||
|
Statement failed, SQLSTATE = 42000
|
||||||
Statement failed, SQLSTATE = 42000
|
unsuccessful metadata update
|
||||||
unsuccessful metadata update
|
-CREATE USER U01 failed
|
||||||
-CREATE USER U01 failed
|
-Password must be specified when creating user
|
||||||
-Password must be specified when creating user
|
Statement failed, SQLSTATE = 42000
|
||||||
|
unsuccessful metadata update
|
||||||
Statement failed, SQLSTATE = 42000
|
-CREATE USER U01 failed
|
||||||
unsuccessful metadata update
|
-Password must be specified when creating user
|
||||||
-CREATE USER U01 failed
|
Statement failed, SQLSTATE = 42000
|
||||||
-Password must be specified when creating user
|
unsuccessful metadata update
|
||||||
|
-CREATE USER U01 failed
|
||||||
Statement failed, SQLSTATE = 42000
|
-Password must be specified when creating user
|
||||||
unsuccessful metadata update
|
Statement failed, SQLSTATE = 42000
|
||||||
-CREATE USER U01 failed
|
unsuccessful metadata update
|
||||||
-Password must be specified when creating user
|
-CREATE USER U01 failed
|
||||||
|
-Password must be specified when creating user
|
||||||
Statement failed, SQLSTATE = 42000
|
Statement failed, SQLSTATE = 42000
|
||||||
unsuccessful metadata update
|
unsuccessful metadata update
|
||||||
-CREATE USER U01 failed
|
-CREATE USER PASSWORD failed
|
||||||
-Password must be specified when creating user
|
-Password must be specified when creating user
|
||||||
|
"""
|
||||||
Statement failed, SQLSTATE = HY000
|
|
||||||
Password must be specified when creating user
|
|
||||||
|
|
||||||
Statement failed, SQLSTATE = 42000
|
|
||||||
unsuccessful metadata update
|
|
||||||
-CREATE USER PASSWORD failed
|
|
||||||
-Password must be specified when creating user
|
|
||||||
"""
|
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0.7')
|
@pytest.mark.version('>=3.0.7')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
@ -2,10 +2,14 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5162
|
# id: bugs.core_5162
|
||||||
# title: SEC$ tables and tag/attributes
|
# title: SEC$ tables and tag/attributes
|
||||||
# decription:
|
# decription:
|
||||||
# FB30SS, build 3.0.4.32972: OK, 1.047s.
|
# FB30SS, build 3.0.4.32972: OK, 1.047s.
|
||||||
# FB40SS, build 4.0.0.977: OK, 1.266s.
|
# FB40SS, build 4.0.0.977: OK, 1.266s.
|
||||||
#
|
#
|
||||||
|
# [pcisar] 21.10.2021 - This test requires Legacy_UserManager to be listed
|
||||||
|
# in firebird.conf UserManager option, which is NOT by default.
|
||||||
|
# Otherwise it will FAIL with "Missing requested management plugin"
|
||||||
|
#
|
||||||
# tracker_id: CORE-5162
|
# tracker_id: CORE-5162
|
||||||
# min_versions: ['3.0.0']
|
# min_versions: ['3.0.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -32,7 +36,7 @@ test_script_1 = """
|
|||||||
execute statement 'drop user tmp$c5162 using plugin Legacy_UserManager' with autonomous transaction;
|
execute statement 'drop user tmp$c5162 using plugin Legacy_UserManager' with autonomous transaction;
|
||||||
when any do begin end
|
when any do begin end
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
execute statement 'drop user tmp$c5162 using plugin Srp' with autonomous transaction;
|
execute statement 'drop user tmp$c5162 using plugin Srp' with autonomous transaction;
|
||||||
when any do begin end
|
when any do begin end
|
||||||
|
@ -2,22 +2,22 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5225
|
# id: bugs.core_5225
|
||||||
# title: Authentication end with first plugin that has the user but auth fails; should continue with next plugin
|
# title: Authentication end with first plugin that has the user but auth fails; should continue with next plugin
|
||||||
# decription:
|
# decription:
|
||||||
# We create two users with the same name, 1st using plugin Srp, 2nd - via Legacy.
|
# We create two users with the same name, 1st using plugin Srp, 2nd - via Legacy.
|
||||||
# Then we try to establish subsequent attachments via ES/EDS for each of them.
|
# Then we try to establish subsequent attachments via ES/EDS for each of them.
|
||||||
# No error should occur.
|
# No error should occur.
|
||||||
#
|
#
|
||||||
# Confirmed exception on 3.0.0 for plugin that was specified as SECOND in firebird.conf, got:
|
# Confirmed exception on 3.0.0 for plugin that was specified as SECOND in firebird.conf, got:
|
||||||
# Statement failed, SQLSTATE = 42000
|
# Statement failed, SQLSTATE = 42000
|
||||||
# Execute statement error at attach :
|
# Execute statement error at attach :
|
||||||
# 335544472 : Your user name and password are not defined <...>
|
# 335544472 : Your user name and password are not defined <...>
|
||||||
#
|
#
|
||||||
# Works fine on:
|
# Works fine on:
|
||||||
# fb30Cs, build 3.0.4.32947: OK, 2.907s.
|
# fb30Cs, build 3.0.4.32947: OK, 2.907s.
|
||||||
# FB30SS, build 3.0.4.32963: OK, 1.140s.
|
# FB30SS, build 3.0.4.32963: OK, 1.140s.
|
||||||
# FB40CS, build 4.0.0.955: OK, 3.531s.
|
# FB40CS, build 4.0.0.955: OK, 3.531s.
|
||||||
# FB40SS, build 4.0.0.967: OK, 1.312s.
|
# FB40SS, build 4.0.0.967: OK, 1.312s.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-5225
|
# tracker_id: CORE-5225
|
||||||
# min_versions: ['3.0.1']
|
# min_versions: ['3.0.1']
|
||||||
# versions: 3.0.1
|
# versions: 3.0.1
|
||||||
@ -41,7 +41,7 @@ test_script_1 = """
|
|||||||
create or alter user tmp$c5225 password 'srp' using plugin Srp;
|
create or alter user tmp$c5225 password 'srp' using plugin Srp;
|
||||||
create or alter user tmp$c5225 password 'leg' using plugin Legacy_UserManager;
|
create or alter user tmp$c5225 password 'leg' using plugin Legacy_UserManager;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block returns(whoami_leg varchar(31)) as
|
execute block returns(whoami_leg varchar(31)) as
|
||||||
begin
|
begin
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5246
|
# id: bugs.core_5246
|
||||||
# title: String truncation error while selecting from MON$ tables if some user-defined context variable exceeds 255 bytes in length
|
# title: String truncation error while selecting from MON$ tables if some user-defined context variable exceeds 255 bytes in length
|
||||||
# decription:
|
# decription:
|
||||||
# More description see here:
|
# More description see here:
|
||||||
# https://github.com/FirebirdSQL/firebird/commit/373c4599d3f2be06ea9d239a25e18248c8d38a64
|
# https://github.com/FirebirdSQL/firebird/commit/373c4599d3f2be06ea9d239a25e18248c8d38a64
|
||||||
# See also: CORE-6248.
|
# See also: CORE-6248.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-5246
|
# tracker_id: CORE-5246
|
||||||
# min_versions: ['3.0.1']
|
# min_versions: ['3.0.1']
|
||||||
# versions: 3.0.1
|
# versions: 3.0.1
|
||||||
@ -55,6 +55,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0.1')
|
@pytest.mark.version('>=3.0.1')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,33 +2,33 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5302
|
# id: bugs.core_5302
|
||||||
# title: Performance regression when bulk inserting into table with indices
|
# title: Performance regression when bulk inserting into table with indices
|
||||||
# decription:
|
# decription:
|
||||||
# Test uses TWO tables, one w/o indices and another with indexes.
|
# Test uses TWO tables, one w/o indices and another with indexes.
|
||||||
# We evaluate RATIO between performance rather than absolute duration values.
|
# We evaluate RATIO between performance rather than absolute duration values.
|
||||||
# This ratio then is compared with THRESHOLD which was choosen after dozen runs
|
# This ratio then is compared with THRESHOLD which was choosen after dozen runs
|
||||||
# of test on FB 3.0 and 4.0.
|
# of test on FB 3.0 and 4.0.
|
||||||
#
|
#
|
||||||
# _BEFORE_ this ticket was fixed ratio was following:
|
# _BEFORE_ this ticket was fixed ratio was following:
|
||||||
#
|
#
|
||||||
# Ratio for 4.0.0.258: ~32...34 -- poor
|
# Ratio for 4.0.0.258: ~32...34 -- poor
|
||||||
# Ratio for 3.0.1.32566: ~23...24 -- poor
|
# Ratio for 3.0.1.32566: ~23...24 -- poor
|
||||||
#
|
#
|
||||||
# _AFTER_ ticket was fixed ratio is:
|
# _AFTER_ ticket was fixed ratio is:
|
||||||
#
|
#
|
||||||
# Ratio for 4.0.0.313: ~11...13 -- OK
|
# Ratio for 4.0.0.313: ~11...13 -- OK
|
||||||
# Ratio for 3.0.1.32568: ~10...11 -- OK
|
# Ratio for 3.0.1.32568: ~10...11 -- OK
|
||||||
#
|
#
|
||||||
# Fix for 4.0 was 07-jul-2016, see here:
|
# Fix for 4.0 was 07-jul-2016, see here:
|
||||||
# https://github.com/FirebirdSQL/firebird/commit/a75e0af175ea6e803101b5fd62ec91cdf039b951
|
# https://github.com/FirebirdSQL/firebird/commit/a75e0af175ea6e803101b5fd62ec91cdf039b951
|
||||||
# Fix for 3.0 was 27-jul-2016, see here:
|
# Fix for 3.0 was 27-jul-2016, see here:
|
||||||
# https://github.com/FirebirdSQL/firebird/commit/96a24228b61003e72c68596faf3c4c4ed0b95ea1
|
# https://github.com/FirebirdSQL/firebird/commit/96a24228b61003e72c68596faf3c4c4ed0b95ea1
|
||||||
#
|
#
|
||||||
# All measures were done on regular PC, OS = Windows XP, CPU 3.0 Ghz, RAM 2 Gb, HDD IDE.
|
# All measures were done on regular PC, OS = Windows XP, CPU 3.0 Ghz, RAM 2 Gb, HDD IDE.
|
||||||
# 05.01.2020: increased threshold from 15 to 20 (Win 2008 Server R2, ram 8gb)
|
# 05.01.2020: increased threshold from 15 to 20 (Win 2008 Server R2, ram 8gb)
|
||||||
# Checked on:
|
# Checked on:
|
||||||
# 4.0.0.1714 SS: 5.922s; 4.0.0.1714 SC: 7.891s; 4.0.0.1714 CS: 9.891s.
|
# 4.0.0.1714 SS: 5.922s; 4.0.0.1714 SC: 7.891s; 4.0.0.1714 CS: 9.891s.
|
||||||
# 3.0.5.33221 SS: 4.735s; 3.0.5.33221 SC: 5.718s; 3.0.5.33221 CS: 7.126s.
|
# 3.0.5.33221 SS: 4.735s; 3.0.5.33221 SC: 5.718s; 3.0.5.33221 CS: 7.126s.
|
||||||
#
|
#
|
||||||
# 13.01.2020: checked again (Win 8.1 Pro, ram 12 gb):
|
# 13.01.2020: checked again (Win 8.1 Pro, ram 12 gb):
|
||||||
# 4.0.0.2325 SS: 5.806s.
|
# 4.0.0.2325 SS: 5.806s.
|
||||||
# 4.0.0.2324 SC: 5.812s.
|
# 4.0.0.2324 SC: 5.812s.
|
||||||
@ -36,7 +36,9 @@
|
|||||||
# 3.0.8.33401 SS: 5.366s.
|
# 3.0.8.33401 SS: 5.366s.
|
||||||
# 3.0.8.33401 SC: 4.823s.
|
# 3.0.8.33401 SC: 4.823s.
|
||||||
# 3.0.8.33401 CS: 6.089s.
|
# 3.0.8.33401 CS: 6.089s.
|
||||||
#
|
#
|
||||||
|
# [pcisar] 21.10.2021 - This test is sensitive to user test environment, and may FAIL on slow drives/machines !!!
|
||||||
|
#
|
||||||
# tracker_id: CORE-5302
|
# tracker_id: CORE-5302
|
||||||
# min_versions: ['3.0.0']
|
# min_versions: ['3.0.0']
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
@ -67,7 +69,7 @@ db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
|||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set list on;
|
set list on;
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block returns(msg varchar(100)) as
|
execute block returns(msg varchar(100)) as
|
||||||
declare n int = 50000;
|
declare n int = 50000;
|
||||||
declare m int;
|
declare m int;
|
||||||
declare t0 timestamp;
|
declare t0 timestamp;
|
||||||
@ -90,9 +92,9 @@ test_script_1 = """
|
|||||||
|
|
||||||
cur_ratio = 1.0000 * datediff(millisecond from t1 to t2) / datediff(millisecond from t0 to t1);
|
cur_ratio = 1.0000 * datediff(millisecond from t1 to t2) / datediff(millisecond from t0 to t1);
|
||||||
|
|
||||||
msg = iif( cur_ratio < max_ratio,
|
msg = iif( cur_ratio < max_ratio,
|
||||||
'OK, ratio is acceptable',
|
'OK, ratio is acceptable',
|
||||||
'POOR: ratio = ' || cur_ratio || ' - exceeds threshold = ' || max_ratio
|
'POOR: ratio = ' || cur_ratio || ' - exceeds threshold = ' || max_ratio
|
||||||
);
|
);
|
||||||
suspend;
|
suspend;
|
||||||
|
|
||||||
@ -110,6 +112,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5313
|
# id: bugs.core_5313
|
||||||
# title: Data type unknown error with LIST
|
# title: Data type unknown error with LIST
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id: CORE-5313
|
# tracker_id: CORE-5313
|
||||||
# min_versions: ['3.0.1']
|
# min_versions: ['3.0.1']
|
||||||
# versions: 3.0.1, 4.0
|
# versions: 3.0.1, 4.0
|
||||||
@ -11,7 +11,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from firebird.qa import db_factory, isql_act, Action
|
from firebird.qa import db_factory, isql_act, Action
|
||||||
|
|
||||||
# version: 3.0.1
|
# version: 3.0.7
|
||||||
# resources: None
|
# resources: None
|
||||||
|
|
||||||
substitutions_1 = []
|
substitutions_1 = []
|
||||||
@ -21,51 +21,14 @@ init_script_1 = """"""
|
|||||||
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
db_1 = db_factory(sql_dialect=3, init=init_script_1)
|
||||||
|
|
||||||
test_script_1 = """
|
test_script_1 = """
|
||||||
set planonly;
|
set planonly;
|
||||||
set sqlda_display on;
|
set sqlda_display on;
|
||||||
select list(trim(rdb$relation_name), ?) from rdb$relations;
|
select list(trim(rdb$relation_name), ?) from rdb$relations;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
INPUT message field count: 1
|
|
||||||
01: sqltype: 452 TEXT scale: 0 subtype: 0 len: 3 charset: 3 UNICODE_FSS
|
|
||||||
: name: alias:
|
|
||||||
: table: owner:
|
|
||||||
|
|
||||||
PLAN (RDB$RELATIONS NATURAL)
|
|
||||||
|
|
||||||
OUTPUT message field count: 1
|
|
||||||
01: sqltype: 520 BLOB Nullable scale: 0 subtype: 1 len: 8 charset: 3 UNICODE_FSS
|
|
||||||
: name: LIST alias: LIST
|
|
||||||
: table: owner:
|
|
||||||
"""
|
|
||||||
|
|
||||||
@pytest.mark.version('>=3.0.1,<4.0')
|
|
||||||
def test_1(act_1: Action):
|
|
||||||
act_1.expected_stdout = expected_stdout_1
|
|
||||||
act_1.execute()
|
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
|
||||||
|
|
||||||
# version: 4.0
|
|
||||||
# resources: None
|
|
||||||
|
|
||||||
substitutions_2 = []
|
|
||||||
|
|
||||||
init_script_2 = """"""
|
|
||||||
|
|
||||||
db_2 = db_factory(sql_dialect=3, init=init_script_2)
|
|
||||||
|
|
||||||
test_script_2 = """
|
|
||||||
set planonly;
|
|
||||||
set sqlda_display on;
|
|
||||||
select list(trim(rdb$relation_name), ?) from rdb$relations;
|
|
||||||
"""
|
|
||||||
|
|
||||||
act_2 = isql_act('db_2', test_script_2, substitutions=substitutions_2)
|
|
||||||
|
|
||||||
expected_stdout_2 = """
|
|
||||||
INPUT message field count: 1
|
INPUT message field count: 1
|
||||||
01: sqltype: 452 TEXT scale: 0 subtype: 0 len: 4 charset: 4 UTF8
|
01: sqltype: 452 TEXT scale: 0 subtype: 0 len: 4 charset: 4 UTF8
|
||||||
: name: alias:
|
: name: alias:
|
||||||
@ -79,9 +42,9 @@ expected_stdout_2 = """
|
|||||||
: table: owner:
|
: table: owner:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=4.0')
|
@pytest.mark.version('>=3.0.7')
|
||||||
def test_2(act_2: Action):
|
def test_1(act_1: Action):
|
||||||
act_2.expected_stdout = expected_stdout_2
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_2.execute()
|
act_1.execute()
|
||||||
assert act_2.clean_expected_stdout == act_2.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_5341
|
# id: bugs.core_5341
|
||||||
# title: User collate doesn't work with blobs
|
# title: User collate doesn't work with blobs
|
||||||
# decription:
|
# decription:
|
||||||
# Reproduced bug on 3.0.1.32594.
|
# Reproduced bug on 3.0.1.32594.
|
||||||
# All fine on WI-V3.0.1.32596, WI-T4.0.0.366.
|
# All fine on WI-V3.0.1.32596, WI-T4.0.0.366.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-5341
|
# tracker_id: CORE-5341
|
||||||
# min_versions: ['3.0.1']
|
# min_versions: ['3.0.1']
|
||||||
# versions: 3.0.1
|
# versions: 3.0.1
|
||||||
@ -45,7 +45,7 @@ test_script_1 = """
|
|||||||
union all
|
union all
|
||||||
select 'UPDATE' from rdb$database
|
select 'UPDATE' from rdb$database
|
||||||
)
|
)
|
||||||
select * from a
|
select * from a
|
||||||
where blob_id collate PXW_CYRL_CI_AI like '%update%';
|
where blob_id collate PXW_CYRL_CI_AI like '%update%';
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -59,6 +59,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0.1')
|
@pytest.mark.version('>=3.0.1')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'WIN1251'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
#
|
#
|
||||||
# id: bugs.core_6340
|
# id: bugs.core_6340
|
||||||
# title: Alternate quoting does not work on some particular cases
|
# title: Alternate quoting does not work on some particular cases
|
||||||
# decription:
|
# decription:
|
||||||
# Checked on build 4.0.0.2073 with timestamp 24.06.2020 13:40 (intermediate).
|
# Checked on build 4.0.0.2073 with timestamp 24.06.2020 13:40 (intermediate).
|
||||||
# NOTE: test tries several cases + checks that string with maximum limit of length (65533) can be properly parsed.
|
# NOTE: test tries several cases + checks that string with maximum limit of length (65533) can be properly parsed.
|
||||||
# 04.07.2020: changed min_version to 3.0.6 - checked on 3.0.6.33332.
|
# 04.07.2020: changed min_version to 3.0.6 - checked on 3.0.6.33332.
|
||||||
#
|
#
|
||||||
# tracker_id: CORE-6340
|
# tracker_id: CORE-6340
|
||||||
# min_versions: ['3.0.6']
|
# min_versions: ['3.0.6']
|
||||||
# versions: 3.0.6
|
# versions: 3.0.6
|
||||||
@ -30,8 +30,8 @@ test_script_1 = """
|
|||||||
-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
set list on;
|
set list on;
|
||||||
|
|
||||||
select 'point-0.01' as msg, q'{{}' as result from rdb$database;
|
select 'point-0.01' as msg, q'{{}' as result from rdb$database;
|
||||||
select 'point-0.02' as msg, q'{}}' as result from rdb$database;
|
select 'point-0.02' as msg, q'{}}' as result from rdb$database;
|
||||||
select 'point-0.03' as msg, q'!'!' as result from rdb$database;
|
select 'point-0.03' as msg, q'!'!' as result from rdb$database;
|
||||||
|
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ select 'point-1.06' as msg, q'!
|
|||||||
!' as result from rdb$database;
|
!' as result from rdb$database;
|
||||||
|
|
||||||
select 'point-1.07' as msg, q'!!' as result from rdb$database;
|
select 'point-1.07' as msg, q'!!' as result from rdb$database;
|
||||||
|
|
||||||
select 'point-1.08' as msg, q'!!!' as result from rdb$database;
|
select 'point-1.08' as msg, q'!!!' as result from rdb$database;
|
||||||
|
|
||||||
select 'point-1.09' as msg, q'!
|
select 'point-1.09' as msg, q'!
|
||||||
@ -185,7 +185,7 @@ select 'point-5.06' as msg, q'q
|
|||||||
'
|
'
|
||||||
q' as result from rdb$database; -- expected: ' followed by [CR/]LF
|
q' as result from rdb$database; -- expected: ' followed by [CR/]LF
|
||||||
|
|
||||||
select 'point-5.07' as msg, q'qq' as result from rdb$database; -- expected: empty string
|
select 'point-5.07' as msg, q'qq' as result from rdb$database; -- expected: empty string
|
||||||
|
|
||||||
select 'point-5.08' as msg, q'qqq' as result from rdb$database; -- expected: q
|
select 'point-5.08' as msg, q'qqq' as result from rdb$database; -- expected: q
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ RESULT '
|
|||||||
|
|
||||||
|
|
||||||
MSG point-1.03
|
MSG point-1.03
|
||||||
RESULT '
|
RESULT '
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -239,14 +239,14 @@ RESULT '''
|
|||||||
|
|
||||||
|
|
||||||
MSG point-1.06
|
MSG point-1.06
|
||||||
RESULT
|
RESULT
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-1.07
|
MSG point-1.07
|
||||||
RESULT
|
RESULT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ RESULT !
|
|||||||
|
|
||||||
|
|
||||||
MSG point-1.09
|
MSG point-1.09
|
||||||
RESULT
|
RESULT
|
||||||
!
|
!
|
||||||
|
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ RESULT ''''''''''''''''''''''''''''''''''''''''''''''''
|
|||||||
|
|
||||||
|
|
||||||
MSG point-2.01
|
MSG point-2.01
|
||||||
RESULTS '''
|
RESULTS '''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -338,7 +338,7 @@ RESULT '
|
|||||||
|
|
||||||
|
|
||||||
MSG point-3.03
|
MSG point-3.03
|
||||||
RESULT '
|
RESULT '
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -353,14 +353,14 @@ RESULT '''
|
|||||||
|
|
||||||
|
|
||||||
MSG point-3.06
|
MSG point-3.06
|
||||||
RESULT
|
RESULT
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-3.07
|
MSG point-3.07
|
||||||
RESULT
|
RESULT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -370,7 +370,7 @@ RESULT !
|
|||||||
|
|
||||||
|
|
||||||
MSG point-3.09
|
MSG point-3.09
|
||||||
RESULT
|
RESULT
|
||||||
!
|
!
|
||||||
|
|
||||||
|
|
||||||
@ -403,14 +403,14 @@ RESULT !
|
|||||||
|
|
||||||
|
|
||||||
MSG point-3.15
|
MSG point-3.15
|
||||||
RESULT
|
RESULT
|
||||||
!
|
!
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-3.16
|
MSG point-3.16
|
||||||
RESULT
|
RESULT
|
||||||
'!
|
'!
|
||||||
''
|
''
|
||||||
'!
|
'!
|
||||||
@ -429,7 +429,7 @@ RESULT '
|
|||||||
|
|
||||||
|
|
||||||
MSG point-4.03
|
MSG point-4.03
|
||||||
RESULT '
|
RESULT '
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -444,14 +444,14 @@ RESULT '''
|
|||||||
|
|
||||||
|
|
||||||
MSG point-4.06
|
MSG point-4.06
|
||||||
RESULT
|
RESULT
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-4.07
|
MSG point-4.07
|
||||||
RESULT
|
RESULT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -461,7 +461,7 @@ RESULT |
|
|||||||
|
|
||||||
|
|
||||||
MSG point-4.09
|
MSG point-4.09
|
||||||
RESULT
|
RESULT
|
||||||
|
|
|
|
||||||
|
|
||||||
|
|
||||||
@ -493,14 +493,14 @@ RESULT ||
|
|||||||
|
|
||||||
|
|
||||||
MSG point-4.15
|
MSG point-4.15
|
||||||
RESULT
|
RESULT
|
||||||
|
|
|
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-4.16
|
MSG point-4.16
|
||||||
RESULT
|
RESULT
|
||||||
'|
|
'|
|
||||||
''
|
''
|
||||||
'|
|
'|
|
||||||
@ -559,14 +559,14 @@ RESULT '''
|
|||||||
|
|
||||||
|
|
||||||
MSG point-5.06
|
MSG point-5.06
|
||||||
RESULT
|
RESULT
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSG point-5.07
|
MSG point-5.07
|
||||||
RESULT
|
RESULT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -586,6 +586,7 @@ RESULT 'q '
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0.6')
|
@pytest.mark.version('>=3.0.6')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# id: functional.intfunc.misc.gen_uuid_01
|
# id: functional.intfunc.misc.gen_uuid_01
|
||||||
# title: test for GEN_UUID()
|
# title: test for GEN_UUID()
|
||||||
# decription: Returns a universal unique number.
|
# decription: Returns a universal unique number.
|
||||||
# tracker_id:
|
# tracker_id:
|
||||||
# min_versions: []
|
# min_versions: []
|
||||||
# versions: 3.0
|
# versions: 3.0
|
||||||
# qmid: functional.intfunc.misc.gen_uuid_01
|
# qmid: functional.intfunc.misc.gen_uuid_01
|
||||||
@ -61,6 +61,7 @@ expected_stdout_1 = """ COUNT
|
|||||||
|
|
||||||
@pytest.mark.version('>=3.0')
|
@pytest.mark.version('>=3.0')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# id: functional.tabloid.arithmetic_numexpr_eval_dialect_1
|
# id: functional.tabloid.arithmetic_numexpr_eval_dialect_1
|
||||||
# title: Check result of integer division on dialect 1.
|
# title: Check result of integer division on dialect 1.
|
||||||
# decription: Was fixed in 2.1, see: sql.ru/forum/actualutils.aspx?action=gotomsg&tid=708324&msg=7865013
|
# decription: Was fixed in 2.1, see: sql.ru/forum/actualutils.aspx?action=gotomsg&tid=708324&msg=7865013
|
||||||
# tracker_id:
|
# tracker_id:
|
||||||
# min_versions: ['2.5.0']
|
# min_versions: ['2.5.0']
|
||||||
# versions: 2.5
|
# versions: 2.5
|
||||||
# qmid: None
|
# qmid: None
|
||||||
@ -27,7 +27,7 @@ test_script_1 = """
|
|||||||
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
|
||||||
|
|
||||||
expected_stdout_1 = """
|
expected_stdout_1 = """
|
||||||
D -3
|
D -3.000000000000000
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.version('>=2.5')
|
@pytest.mark.version('>=2.5')
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#
|
#
|
||||||
# id: functional.tabloid.eqc_200762
|
# id: functional.tabloid.eqc_200762
|
||||||
# title: Check results of CONTAINING when search pattern can span on one or several blob segments
|
# title: Check results of CONTAINING when search pattern can span on one or several blob segments
|
||||||
# decription:
|
# decription:
|
||||||
# tracker_id:
|
# tracker_id:
|
||||||
# min_versions: ['2.5.0']
|
# min_versions: ['2.5.0']
|
||||||
# versions: 2.5
|
# versions: 2.5
|
||||||
# qmid: None
|
# qmid: None
|
||||||
@ -30,74 +30,74 @@ test_script_1 = """
|
|||||||
^
|
^
|
||||||
set term ;^
|
set term ;^
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
create sequence g;
|
create sequence g;
|
||||||
|
|
||||||
recreate table test (
|
recreate table test (
|
||||||
id int primary key,
|
id int primary key,
|
||||||
pattern varchar(32765),
|
pattern varchar(32765),
|
||||||
memotext blob sub_type 1 segment size 1024 character set none
|
memotext blob sub_type 1 segment size 1024 character set none
|
||||||
);
|
);
|
||||||
|
|
||||||
set term ^;
|
set term ^;
|
||||||
execute block returns(id int, ptrn_len int, blob_len int, ptrn_pos int) as
|
execute block returns(id int, ptrn_len int, blob_len int, ptrn_pos int) as
|
||||||
declare v_pattern varchar(32765);
|
declare v_pattern varchar(32765);
|
||||||
declare v_db_page smallint;
|
declare v_db_page smallint;
|
||||||
declare v_id int;
|
declare v_id int;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
select mon$page_size from mon$database into v_db_page;
|
select mon$page_size from mon$database into v_db_page;
|
||||||
|
|
||||||
delete from test;
|
delete from test;
|
||||||
|
|
||||||
v_pattern = 'qwertyuioplkjhgfdsa1234567890zxcvbnm';
|
v_pattern = 'qwertyuioplkjhgfdsa1234567890zxcvbnm';
|
||||||
|
|
||||||
-- short pattern (len < 50 bytes), start on 1st segment and spans to 2nd:
|
-- short pattern (len < 50 bytes), start on 1st segment and spans to 2nd:
|
||||||
insert into test(id, pattern, memotext)
|
insert into test(id, pattern, memotext)
|
||||||
values( gen_id(g,1), :v_pattern, rpad( '', 1000, uuid_to_char(gen_uuid()) ) || :v_pattern );
|
values( gen_id(g,1), :v_pattern, rpad( '', 1000, uuid_to_char(gen_uuid()) ) || :v_pattern );
|
||||||
|
|
||||||
-- middle length pattern (len > 1024 and <= db_page_size)
|
-- middle length pattern (len > 1024 and <= db_page_size)
|
||||||
|
|
||||||
insert into test(id, pattern)
|
insert into test(id, pattern)
|
||||||
values(gen_id(g,1), rpad( '', 2.0/3 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
values(gen_id(g,1), rpad( '', 2.0/3 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1001, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1001, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 3.0/4 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 3.0/4 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1002, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1002, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
insert into test(id, pattern) values(gen_id(g,1), rpad( '', :v_db_page, uuid_to_char(gen_uuid()) ) )
|
insert into test(id, pattern) values(gen_id(g,1), rpad( '', :v_db_page, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1003, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1003, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
-- large length pattern ( > db_page_size):
|
-- large length pattern ( > db_page_size):
|
||||||
|
|
||||||
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 5.0/4 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 5.0/4 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1004, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1004, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 4.0/3 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 4.0/3 * :v_db_page, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1005, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1005, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 31724, uuid_to_char(gen_uuid()) ) )
|
insert into test(id, pattern) values(gen_id(g,1), rpad( '', 31724, uuid_to_char(gen_uuid()) ) )
|
||||||
returning id, pattern into v_id, v_pattern;
|
returning id, pattern into v_id, v_pattern;
|
||||||
update test set memotext = rpad( '', 1006, uuid_to_char(gen_uuid()) ) || :v_pattern
|
update test set memotext = rpad( '', 1006, uuid_to_char(gen_uuid()) ) || :v_pattern
|
||||||
where id = :v_id;
|
where id = :v_id;
|
||||||
|
|
||||||
for
|
for
|
||||||
select id, char_length(pattern), char_length(memotext), position(pattern in memotext)
|
select id, char_length(pattern), char_length(memotext), position(pattern in memotext)
|
||||||
from test
|
from test
|
||||||
where memotext containing pattern
|
where memotext containing pattern
|
||||||
order by id
|
order by id
|
||||||
into id, ptrn_len, blob_len, ptrn_pos
|
into id, ptrn_len, blob_len, ptrn_pos
|
||||||
do
|
do
|
||||||
suspend;
|
suspend;
|
||||||
end
|
end
|
||||||
^
|
^
|
||||||
@ -112,32 +112,32 @@ expected_stdout_1 = """
|
|||||||
PTRN_LEN 36
|
PTRN_LEN 36
|
||||||
BLOB_LEN 1036
|
BLOB_LEN 1036
|
||||||
PTRN_POS 1001
|
PTRN_POS 1001
|
||||||
|
|
||||||
ID 2
|
ID 2
|
||||||
PTRN_LEN 4915
|
PTRN_LEN 4915
|
||||||
BLOB_LEN 5916
|
BLOB_LEN 5916
|
||||||
PTRN_POS 1002
|
PTRN_POS 1002
|
||||||
|
|
||||||
ID 3
|
ID 3
|
||||||
PTRN_LEN 5734
|
PTRN_LEN 5734
|
||||||
BLOB_LEN 6736
|
BLOB_LEN 6736
|
||||||
PTRN_POS 1003
|
PTRN_POS 1003
|
||||||
|
|
||||||
ID 4
|
ID 4
|
||||||
PTRN_LEN 8192
|
PTRN_LEN 8192
|
||||||
BLOB_LEN 9195
|
BLOB_LEN 9195
|
||||||
PTRN_POS 1004
|
PTRN_POS 1004
|
||||||
|
|
||||||
ID 5
|
ID 5
|
||||||
PTRN_LEN 9830
|
PTRN_LEN 9830
|
||||||
BLOB_LEN 10834
|
BLOB_LEN 10834
|
||||||
PTRN_POS 1005
|
PTRN_POS 1005
|
||||||
|
|
||||||
ID 6
|
ID 6
|
||||||
PTRN_LEN 10650
|
PTRN_LEN 10650
|
||||||
BLOB_LEN 11655
|
BLOB_LEN 11655
|
||||||
PTRN_POS 1006
|
PTRN_POS 1006
|
||||||
|
|
||||||
ID 7
|
ID 7
|
||||||
PTRN_LEN 31724
|
PTRN_LEN 31724
|
||||||
BLOB_LEN 32730
|
BLOB_LEN 32730
|
||||||
@ -146,6 +146,7 @@ expected_stdout_1 = """
|
|||||||
|
|
||||||
@pytest.mark.version('>=2.5')
|
@pytest.mark.version('>=2.5')
|
||||||
def test_1(act_1: Action):
|
def test_1(act_1: Action):
|
||||||
|
act_1.charset = 'NONE'
|
||||||
act_1.expected_stdout = expected_stdout_1
|
act_1.expected_stdout = expected_stdout_1
|
||||||
act_1.execute()
|
act_1.execute()
|
||||||
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
assert act_1.clean_expected_stdout == act_1.clean_stdout
|
||||||
|
Loading…
Reference in New Issue
Block a user