Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc0f2762

Browse files
committed
Improve regression tests for uuid-ossp.
On reflection, the timestamp-advances test might fail if we're unluckyenough for the time_mid field to change between two calls, since uuid_cmpis just bytewise comparison and the field ordering has more significantfields later. Build some field extraction functions so we can do a morehonest test of that. Also check that the version and reserved fieldscontain what they should.
1 parent2103218 commitc0f2762

File tree

2 files changed

+88
-21
lines changed

2 files changed

+88
-21
lines changed

‎contrib/uuid-ossp/expected/uuid_ossp.out

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,40 +29,71 @@ SELECT uuid_ns_x500();
2929
6ba7b814-9dad-11d1-80b4-00c04fd430c8
3030
(1 row)
3131

32-
SELECT uuid_generate_v1() < uuid_generate_v1();
33-
?column?
34-
----------
35-
t
32+
-- some quick and dirty field extraction functions
33+
-- this is actually timestamp concatenated with clock sequence, per RFC 4122
34+
CREATE FUNCTION uuid_timestamp_bits(uuid) RETURNS varbit AS
35+
$$ SELECT ('x' || substr($1::text, 15, 4) || substr($1::text, 10, 4) ||
36+
substr($1::text, 1, 8) || substr($1::text, 20, 4))::bit(80)
37+
& x'0FFFFFFFFFFFFFFF3FFF' $$
38+
LANGUAGE SQL STRICT IMMUTABLE;
39+
CREATE FUNCTION uuid_version_bits(uuid) RETURNS varbit AS
40+
$$ SELECT ('x' || substr($1::text, 15, 2))::bit(8) & '11110000' $$
41+
LANGUAGE SQL STRICT IMMUTABLE;
42+
CREATE FUNCTION uuid_reserved_bits(uuid) RETURNS varbit AS
43+
$$ SELECT ('x' || substr($1::text, 20, 2))::bit(8) & '11000000' $$
44+
LANGUAGE SQL STRICT IMMUTABLE;
45+
CREATE FUNCTION uuid_multicast_bits(uuid) RETURNS varbit AS
46+
$$ SELECT ('x' || substr($1::text, 25, 2))::bit(8) & '00000011' $$
47+
LANGUAGE SQL STRICT IMMUTABLE;
48+
CREATE FUNCTION uuid_node(uuid) RETURNS text AS
49+
$$ SELECT substr($1::text, 25) $$
50+
LANGUAGE SQL STRICT IMMUTABLE;
51+
SELECT uuid_version_bits(uuid_generate_v1()),
52+
uuid_reserved_bits(uuid_generate_v1()),
53+
uuid_multicast_bits(uuid_generate_v1());
54+
uuid_version_bits | uuid_reserved_bits | uuid_multicast_bits
55+
-------------------+--------------------+---------------------
56+
00010000 | 10000000 | 00000000
57+
(1 row)
58+
59+
SELECT uuid_version_bits(uuid_generate_v1mc()),
60+
uuid_reserved_bits(uuid_generate_v1mc()),
61+
uuid_multicast_bits(uuid_generate_v1mc());
62+
uuid_version_bits | uuid_reserved_bits | uuid_multicast_bits
63+
-------------------+--------------------+---------------------
64+
00010000 | 10000000 | 00000011
3665
(1 row)
3766

38-
SELECT uuid_generate_v1() < uuid_generate_v1mc();
67+
-- timestamp+clock sequence should be monotonic increasing in v1
68+
SELECT uuid_timestamp_bits(uuid_generate_v1()) < uuid_timestamp_bits(uuid_generate_v1());
3969
?column?
4070
----------
4171
t
4272
(1 row)
4373

44-
SELECTsubstr(uuid_generate_v1()::text, 25) = substr(uuid_generate_v1()::text, 25);
74+
SELECTuuid_timestamp_bits(uuid_generate_v1mc()) < uuid_timestamp_bits(uuid_generate_v1mc());
4575
?column?
4676
----------
4777
t
4878
(1 row)
4979

50-
SELECT substr(uuid_generate_v1()::text, 25) <> substr(uuid_generate_v1mc()::text, 25);
80+
-- node should be stable in v1, but not v1mc
81+
SELECT uuid_node(uuid_generate_v1()) = uuid_node(uuid_generate_v1());
5182
?column?
5283
----------
5384
t
5485
(1 row)
5586

56-
SELECTsubstr(uuid_generate_v1mc()::text, 25) <>substr(uuid_generate_v1mc()::text, 25);
87+
SELECTuuid_node(uuid_generate_v1()) <>uuid_node(uuid_generate_v1mc());
5788
?column?
5889
----------
5990
t
6091
(1 row)
6192

62-
SELECT('x' || substr(uuid_generate_v1mc()::text, 25, 2))::bit(8) & '00000011';
93+
SELECTuuid_node(uuid_generate_v1mc()) <> uuid_node(uuid_generate_v1mc());
6394
?column?
6495
----------
65-
00000011
96+
t
6697
(1 row)
6798

6899
SELECT uuid_generate_v3(uuid_ns_dns(), 'www.widgets.com');
@@ -77,10 +108,11 @@ SELECT uuid_generate_v5(uuid_ns_dns(), 'www.widgets.com');
77108
21f7f8de-8051-5b89-8680-0195ef798b6a
78109
(1 row)
79110

80-
SELECT uuid_generate_v4()::text ~ '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$';
81-
?column?
82-
----------
83-
t
111+
SELECT uuid_version_bits(uuid_generate_v4()),
112+
uuid_reserved_bits(uuid_generate_v4());
113+
uuid_version_bits | uuid_reserved_bits
114+
-------------------+--------------------
115+
01000000 | 10000000
84116
(1 row)
85117

86118
SELECT uuid_generate_v4() <> uuid_generate_v4();

‎contrib/uuid-ossp/sql/uuid_ossp.sql

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,52 @@ SELECT uuid_ns_url();
66
SELECT uuid_ns_oid();
77
SELECT uuid_ns_x500();
88

9-
SELECT uuid_generate_v1()< uuid_generate_v1();
10-
SELECT uuid_generate_v1()< uuid_generate_v1mc();
9+
-- some quick and dirty field extraction functions
1110

12-
SELECT substr(uuid_generate_v1()::text,25)= substr(uuid_generate_v1()::text,25);
13-
SELECT substr(uuid_generate_v1()::text,25)<> substr(uuid_generate_v1mc()::text,25);
14-
SELECT substr(uuid_generate_v1mc()::text,25)<> substr(uuid_generate_v1mc()::text,25);
11+
-- this is actually timestamp concatenated with clock sequence, per RFC 4122
12+
CREATEFUNCTIONuuid_timestamp_bits(uuid) RETURNS varbitAS
13+
$$SELECT ('x'|| substr($1::text,15,4)|| substr($1::text,10,4)||
14+
substr($1::text,1,8)|| substr($1::text,20,4))::bit(80)
15+
& x'0FFFFFFFFFFFFFFF3FFF' $$
16+
LANGUAGE SQL STRICT IMMUTABLE;
1517

16-
SELECT ('x'|| substr(uuid_generate_v1mc()::text,25,2))::bit(8) &'00000011';
18+
CREATEFUNCTIONuuid_version_bits(uuid) RETURNS varbitAS
19+
$$SELECT ('x'|| substr($1::text,15,2))::bit(8) &'11110000' $$
20+
LANGUAGE SQL STRICT IMMUTABLE;
21+
22+
CREATEFUNCTIONuuid_reserved_bits(uuid) RETURNS varbitAS
23+
$$SELECT ('x'|| substr($1::text,20,2))::bit(8) &'11000000' $$
24+
LANGUAGE SQL STRICT IMMUTABLE;
25+
26+
CREATEFUNCTIONuuid_multicast_bits(uuid) RETURNS varbitAS
27+
$$SELECT ('x'|| substr($1::text,25,2))::bit(8) &'00000011' $$
28+
LANGUAGE SQL STRICT IMMUTABLE;
29+
30+
CREATEFUNCTIONuuid_node(uuid) RETURNStextAS
31+
$$SELECT substr($1::text,25) $$
32+
LANGUAGE SQL STRICT IMMUTABLE;
33+
34+
SELECT uuid_version_bits(uuid_generate_v1()),
35+
uuid_reserved_bits(uuid_generate_v1()),
36+
uuid_multicast_bits(uuid_generate_v1());
37+
38+
SELECT uuid_version_bits(uuid_generate_v1mc()),
39+
uuid_reserved_bits(uuid_generate_v1mc()),
40+
uuid_multicast_bits(uuid_generate_v1mc());
41+
42+
-- timestamp+clock sequence should be monotonic increasing in v1
43+
SELECT uuid_timestamp_bits(uuid_generate_v1())< uuid_timestamp_bits(uuid_generate_v1());
44+
SELECT uuid_timestamp_bits(uuid_generate_v1mc())< uuid_timestamp_bits(uuid_generate_v1mc());
45+
46+
-- node should be stable in v1, but not v1mc
47+
SELECT uuid_node(uuid_generate_v1())= uuid_node(uuid_generate_v1());
48+
SELECT uuid_node(uuid_generate_v1())<> uuid_node(uuid_generate_v1mc());
49+
SELECT uuid_node(uuid_generate_v1mc())<> uuid_node(uuid_generate_v1mc());
1750

1851
SELECT uuid_generate_v3(uuid_ns_dns(),'www.widgets.com');
1952
SELECT uuid_generate_v5(uuid_ns_dns(),'www.widgets.com');
2053

21-
SELECT uuid_generate_v4()::text ~'^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$';
54+
SELECT uuid_version_bits(uuid_generate_v4()),
55+
uuid_reserved_bits(uuid_generate_v4());
56+
2257
SELECT uuid_generate_v4()<> uuid_generate_v4();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp