# 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