mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 21:43:06 +01:00
63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
#coding:utf-8
|
|
|
|
"""
|
|
ID: issue-7980
|
|
ISSUE: https://github.com/FirebirdSQL/firebird/issues/7980
|
|
TITLE: Option for GEN_UUID to generate v7 UUID
|
|
DESCRIPTION:
|
|
Test verifies:
|
|
* ability to call function GEN_UUID() with argument (value = 7);
|
|
* orderliness of generated UUID values according to requirements of v7.
|
|
|
|
UUID v7 values have prefix (first 13 bytes) which monotonically grows.
|
|
If we generate some number of such UUIDs and write them into the table with integer PK
|
|
then this PK and value of row_number()over(order by left(uuid_v7,13)) must be EQUAL
|
|
for all records.
|
|
Otherwise generated UUID does not match to v7 requirement.
|
|
NOTES:
|
|
[10.07.2024] pzotov
|
|
Checked on 6.0.0.386
|
|
"""
|
|
|
|
import pytest
|
|
from firebird.qa import *
|
|
|
|
init_script = f"""
|
|
recreate table test (
|
|
id int generated by default as identity constraint pk_test primary key
|
|
,uuid_v7 varchar(36) unique
|
|
);
|
|
|
|
recreate view v_check as
|
|
with
|
|
a as (
|
|
select id, row_number()over(order by left(uuid_v7,13)) rn, uuid_v7 from test
|
|
)
|
|
select * from a where id <> rn
|
|
;
|
|
|
|
insert into test(uuid_v7) select uuid_to_char(gen_uuid(7)) from rdb$types rows 50;
|
|
commit;
|
|
"""
|
|
|
|
db = db_factory(init=init_script)
|
|
act = python_act('db')
|
|
|
|
expected_stdout = f"""
|
|
"""
|
|
|
|
@pytest.mark.version('>=6.0')
|
|
def test_1(act: Action, capsys):
|
|
with act.db.connect() as con:
|
|
cur = con.cursor()
|
|
cur.execute('select 1 from v_check')
|
|
violates_v7 = cur.fetchone()
|
|
if violates_v7:
|
|
print('SOME UUIDs DO NOT MEET UUID v7 REQUIREMENTS:')
|
|
cur.execute('select id, uuid_v7 from v_check')
|
|
act.print_data(cur)
|
|
|
|
act.expected_stdout = expected_stdout
|
|
act.stdout = capsys.readouterr().out # must be EMPTY!
|
|
assert act.clean_stdout == act.clean_expected_stdout
|