Files
email-tracker/external/duckdb/test/sql/function/uuid/test_uuid.test
2025-10-24 19:21:19 -05:00

75 lines
1.7 KiB
SQL

# name: test/sql/function/uuid/test_uuid.test
# description: Test gen_random_uuid function
# group: [uuid]
statement ok
BEGIN TRANSACTION
statement ok
CREATE TEMPORARY TABLE t1 AS SELECT gen_random_uuid() a FROM range(0, 16);
statement ok
CREATE TEMPORARY TABLE t2 AS SELECT uuid() b FROM range(0, 16);
statement ok
CREATE TEMPORARY TABLE t3 AS SELECT gen_random_uuid() c FROM range(0, 16);
# empty result on this join
query I
SELECT COUNT(*) FROM (SELECT a FROM t1 JOIN t2 ON (a=b) JOIN t3 ON (b=c)) s1
----
0
statement ok
ROLLBACK
# use gen_random_uuid in some complicated expressions
statement ok
CREATE TABLE uuids(u UUID NOT NULL DEFAULT gen_random_uuid(), a INTEGER);
statement ok
INSERT INTO uuids (a) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
query I
SELECT COUNT(DISTINCT u) FROM uuids;
----
10
# we can order by gen_random_uuid
statement ok
SELECT * FROM uuids ORDER BY gen_random_uuid();
# we can select gen_random_uuid, uuidv4, uuidv7
statement ok
SELECT gen_random_uuid() FROM uuids;
SELECT uuidv4() FROM uuids;
SELECT uuidv7() FROM uuids;
# UUID v4 follows `XXXXXXXX-XXXX-4XXX-XXXX-XXXXXXXXXXXX` format
query I
SELECT DISTINCT substring(uuid()::varchar, 15, 1) FROM range(100);
----
4
query I
SELECT DISTINCT substring(uuidv4()::varchar, 15, 1) FROM range(100);
----
4
# UUID v7 follows `XXXXXXXX-XXXX-7XXX-XXXX-XXXXXXXXXXXX` format
query I
SELECT DISTINCT substring(uuidv7()::varchar, 15, 1) FROM range(100);
----
7
# UUID v4 variant 1 follows `XXXXXXXX-XXXX-4XXX-[89ab]XXX-XXXXXXXXXXXX` format
# the probability for 100 iters not to cover the 4 possible values is (3/4)**100 == 3e-13
query I
SELECT DISTINCT substring(uuid()::varchar, 20, 1) AS x FROM range(100) ORDER BY x
----
8
9
a
b