Skip to content
/ server Public

Commit acd4413

Browse files
refactoring
Signed-off-by: Varun Deep Saini <varun.23bcs10048@ms.sst.scaler.com>
1 parent 0ca9ce8 commit acd4413

File tree

4 files changed

+75
-63
lines changed

4 files changed

+75
-63
lines changed

include/my_sys.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@
1717
#ifndef _my_sys_h
1818
#define _my_sys_h
1919

20-
#ifndef __cplusplus
21-
#include <stdbool.h>
22-
#endif
23-
2420
#include <m_string.h>
2521
#include <mysql/psi/mysql_memory.h>
2622

@@ -1111,7 +1107,7 @@ int my_msync(int, void *, size_t, int);
11111107
void my_uuid_init(ulong seed1, ulong seed2);
11121108
void my_uuid(uchar *guid);
11131109
void my_uuid_end(void);
1114-
bool my_uuid_extract_ts(const char *uuid, my_time_t *seconds, ulong *usec);
1110+
int my_uuid_extract_ts(const char *uuid, my_time_t *seconds, ulong *usec);
11151111
static inline void my_uuid2str(const uchar *guid, char *s, int with_separators)
11161112
{
11171113
int i;

mysys/my_uuid.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,22 +235,22 @@ void my_uuid_end()
235235
@param[out] usec Microseconds part
236236
237237
@return
238-
@retval false Success
239-
@retval true UUID version doesn't contain timestamp or timestamp invalid
238+
@retval 0 Success
239+
@retval 1 UUID version doesn't contain timestamp or timestamp invalid
240240
241-
UUIDv1 format (RFC 4122, big-endian):
241+
UUIDv1 format (RFC 9562 Section 5.1, big-endian):
242242
Bytes 0-3: time_low (32 bits, low part of timestamp)
243243
Bytes 4-5: time_mid (16 bits, middle part of timestamp)
244244
Bytes 6-7: version (4 bits) + time_hi (12 bits, high part of timestamp)
245245
Timestamp is 100-nanosecond intervals since 1582-10-15
246246
247-
UUIDv7 format (RFC 9562, big-endian):
247+
UUIDv7 format (RFC 9562 Section 5.7, big-endian):
248248
Bytes 0-5: Unix timestamp in milliseconds (48 bits)
249249
Bytes 6-7: version (4 bits) + sub-millisecond precision (12 bits)
250250
*/
251-
bool my_uuid_extract_ts(const char *uuid, my_time_t *seconds, ulong *usec)
251+
int my_uuid_extract_ts(const char *uuid, my_time_t *seconds, ulong *usec)
252252
{
253-
uint version= (uchar) uuid[6] >> 4;
253+
char version= uuid[6] >> 4;
254254
ulonglong ts;
255255

256256
switch (version)

plugin/type_uuid/mysql-test/type_uuid/func_uuid_timestamp.result

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,33 @@ SET time_zone='+00:00';
22
#
33
# UUIDv1 with known timestamps
44
#
5-
SELECT UUID_TIMESTAMP('63b00000-bfde-11d3-80fe-9f59977b836e');
6-
UUID_TIMESTAMP('63b00000-bfde-11d3-80fe-9f59977b836e')
7-
2000-01-01 00:00:00.000000
8-
SELECT UUID_TIMESTAMP('16488880-2b13-11ef-808b-603c7ba5e656');
9-
UUID_TIMESTAMP('16488880-2b13-11ef-808b-603c7ba5e656')
10-
2024-06-15 12:30:45.000000
11-
SELECT UUID_TIMESTAMP('d02b2980-e6a4-11f0-8072-39f36896a88f');
12-
UUID_TIMESTAMP('d02b2980-e6a4-11f0-8072-39f36896a88f')
13-
2025-12-31 23:59:59.000000
5+
SELECT '4bd352dc-e593-11f0-8de9-0242ac120002' AS uuid,
6+
UUID_TIMESTAMP('4bd352dc-e593-11f0-8de9-0242ac120002') AS ts;
7+
uuid ts
8+
4bd352dc-e593-11f0-8de9-0242ac120002 2025-12-30 15:22:04.357910
9+
SELECT 'bec1046a-e593-11f0-8de9-0242ac120002' AS uuid,
10+
UUID_TIMESTAMP('bec1046a-e593-11f0-8de9-0242ac120002') AS ts;
11+
uuid ts
12+
bec1046a-e593-11f0-8de9-0242ac120002 2025-12-30 15:25:17.175921
13+
SELECT 'c28c09a0-e593-11f0-8de9-0242ac120002' AS uuid,
14+
UUID_TIMESTAMP('c28c09a0-e593-11f0-8de9-0242ac120002') AS ts;
15+
uuid ts
16+
c28c09a0-e593-11f0-8de9-0242ac120002 2025-12-30 15:25:23.539600
1417
#
1518
# UUIDv7 with known timestamps (ms precision)
1619
#
17-
SELECT UUID_TIMESTAMP('00dc6acf-ac00-737d-9f12-3229a718bf21');
18-
UUID_TIMESTAMP('00dc6acf-ac00-737d-9f12-3229a718bf21')
19-
2000-01-01 00:00:00.000000
20-
SELECT UUID_TIMESTAMP('01901be0-f183-7e6c-9601-62a5e4f6e7b8');
21-
UUID_TIMESTAMP('01901be0-f183-7e6c-9601-62a5e4f6e7b8')
22-
2024-06-15 12:30:45.123000
23-
SELECT UUID_TIMESTAMP('019b76da-a7ff-7ece-a98f-44624a8d3b0f');
24-
UUID_TIMESTAMP('019b76da-a7ff-7ece-a98f-44624a8d3b0f')
25-
2025-12-31 23:59:59.999000
20+
SELECT '019b6fdd-4937-7bb5-95c7-53363c6df927' AS uuid,
21+
UUID_TIMESTAMP('019b6fdd-4937-7bb5-95c7-53363c6df927') AS ts;
22+
uuid ts
23+
019b6fdd-4937-7bb5-95c7-53363c6df927 2025-12-30 15:25:31.831000
24+
SELECT '019b6fdd-5f17-7cf2-b034-248b9c207db6' AS uuid,
25+
UUID_TIMESTAMP('019b6fdd-5f17-7cf2-b034-248b9c207db6') AS ts;
26+
uuid ts
27+
019b6fdd-5f17-7cf2-b034-248b9c207db6 2025-12-30 15:25:37.431000
28+
SELECT '019b6fdd-7327-7a5b-935c-4de00dd0e7c6' AS uuid,
29+
UUID_TIMESTAMP('019b6fdd-7327-7a5b-935c-4de00dd0e7c6') AS ts;
30+
uuid ts
31+
019b6fdd-7327-7a5b-935c-4de00dd0e7c6 2025-12-30 15:25:42.567000
2632
#
2733
# UUIDv4 returns NULL (no timestamp)
2834
#
@@ -46,13 +52,14 @@ Warning 1292 Incorrect uuid value: 'not-a-valid-uuid'
4652
#
4753
# Native UUID type
4854
#
49-
SELECT UUID_TIMESTAMP(CAST('01901be0-f183-7e6c-9601-62a5e4f6e7b8' AS UUID));
50-
UUID_TIMESTAMP(CAST('01901be0-f183-7e6c-9601-62a5e4f6e7b8' AS UUID))
51-
2024-06-15 12:30:45.123000
55+
SELECT '019b6fdd-4937-7bb5-95c7-53363c6df927' AS uuid,
56+
UUID_TIMESTAMP(CAST('019b6fdd-4937-7bb5-95c7-53363c6df927' AS UUID)) AS ts;
57+
uuid ts
58+
019b6fdd-4937-7bb5-95c7-53363c6df927 2025-12-30 15:25:31.831000
5259
#
5360
# Return type is TIMESTAMP(6)
5461
#
55-
CREATE TABLE t1 AS SELECT UUID_TIMESTAMP('01901be0-f183-7e6c-9601-62a5e4f6e7b8') AS ts;
62+
CREATE TABLE t1 AS SELECT UUID_TIMESTAMP('019b6fdd-4937-7bb5-95c7-53363c6df927') AS ts;
5663
SHOW CREATE TABLE t1;
5764
Table Create Table
5865
t1 CREATE TABLE `t1` (
@@ -62,16 +69,20 @@ DROP TABLE t1;
6269
#
6370
# Edge cases
6471
#
65-
SELECT UUID_TIMESTAMP('00000000-0000-1000-8000-000000000000') IS NULL AS before_unix_epoch;
66-
before_unix_epoch
67-
1
68-
SELECT UUID_TIMESTAMP('00000000-0000-7000-8000-000000000000');
69-
UUID_TIMESTAMP('00000000-0000-7000-8000-000000000000')
70-
0000-00-00 00:00:00.000000
71-
SELECT UUID_TIMESTAMP('ffffffff-ffff-7fff-8000-000000000000');
72-
UUID_TIMESTAMP('ffffffff-ffff-7fff-8000-000000000000')
73-
2042-12-13 16:54:30.655000
74-
SELECT UUID_TIMESTAMP('ffffffff-ffff-1fff-8000-000000000000');
75-
UUID_TIMESTAMP('ffffffff-ffff-1fff-8000-000000000000')
76-
2105-11-25 16:30:52.684697
72+
SELECT '00000000-0000-1000-8000-000000000000' AS uuid,
73+
UUID_TIMESTAMP('00000000-0000-1000-8000-000000000000') IS NULL AS before_unix_epoch;
74+
uuid before_unix_epoch
75+
00000000-0000-1000-8000-000000000000 1
76+
SELECT '00000000-0000-7000-8000-000000000000' AS uuid,
77+
UUID_TIMESTAMP('00000000-0000-7000-8000-000000000000') AS ts;
78+
uuid ts
79+
00000000-0000-7000-8000-000000000000 0000-00-00 00:00:00.000000
80+
SELECT 'ffffffff-ffff-7fff-8000-000000000000' AS uuid,
81+
UUID_TIMESTAMP('ffffffff-ffff-7fff-8000-000000000000') AS ts;
82+
uuid ts
83+
ffffffff-ffff-7fff-8000-000000000000 2042-12-13 16:54:30.655000
84+
SELECT 'ffffffff-ffff-1fff-8000-000000000000' AS uuid,
85+
UUID_TIMESTAMP('ffffffff-ffff-1fff-8000-000000000000') AS ts;
86+
uuid ts
87+
ffffffff-ffff-1fff-8000-000000000000 2105-11-25 16:30:52.684697
7788
SET time_zone=DEFAULT;

plugin/type_uuid/mysql-test/type_uuid/func_uuid_timestamp.test

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ SET time_zone='+00:00';
55
--echo #
66
--echo # UUIDv1 with known timestamps
77
--echo #
8-
# 2000-01-01 00:00:00.000000
9-
SELECT UUID_TIMESTAMP('63b00000-bfde-11d3-80fe-9f59977b836e');
10-
# 2024-06-15 12:30:45.000000
11-
SELECT UUID_TIMESTAMP('16488880-2b13-11ef-808b-603c7ba5e656');
12-
# 2025-12-31 23:59:59.000000
13-
SELECT UUID_TIMESTAMP('d02b2980-e6a4-11f0-8072-39f36896a88f');
8+
SELECT '4bd352dc-e593-11f0-8de9-0242ac120002' AS uuid,
9+
UUID_TIMESTAMP('4bd352dc-e593-11f0-8de9-0242ac120002') AS ts;
10+
SELECT 'bec1046a-e593-11f0-8de9-0242ac120002' AS uuid,
11+
UUID_TIMESTAMP('bec1046a-e593-11f0-8de9-0242ac120002') AS ts;
12+
SELECT 'c28c09a0-e593-11f0-8de9-0242ac120002' AS uuid,
13+
UUID_TIMESTAMP('c28c09a0-e593-11f0-8de9-0242ac120002') AS ts;
1414

1515
--echo #
1616
--echo # UUIDv7 with known timestamps (ms precision)
1717
--echo #
18-
# 2000-01-01 00:00:00.000000
19-
SELECT UUID_TIMESTAMP('00dc6acf-ac00-737d-9f12-3229a718bf21');
20-
# 2024-06-15 12:30:45.123000
21-
SELECT UUID_TIMESTAMP('01901be0-f183-7e6c-9601-62a5e4f6e7b8');
22-
# 2025-12-31 23:59:59.999000
23-
SELECT UUID_TIMESTAMP('019b76da-a7ff-7ece-a98f-44624a8d3b0f');
18+
SELECT '019b6fdd-4937-7bb5-95c7-53363c6df927' AS uuid,
19+
UUID_TIMESTAMP('019b6fdd-4937-7bb5-95c7-53363c6df927') AS ts;
20+
SELECT '019b6fdd-5f17-7cf2-b034-248b9c207db6' AS uuid,
21+
UUID_TIMESTAMP('019b6fdd-5f17-7cf2-b034-248b9c207db6') AS ts;
22+
SELECT '019b6fdd-7327-7a5b-935c-4de00dd0e7c6' AS uuid,
23+
UUID_TIMESTAMP('019b6fdd-7327-7a5b-935c-4de00dd0e7c6') AS ts;
2424

2525
--echo #
2626
--echo # UUIDv4 returns NULL (no timestamp)
@@ -37,25 +37,30 @@ SELECT UUID_TIMESTAMP('not-a-valid-uuid');
3737
--echo #
3838
--echo # Native UUID type
3939
--echo #
40-
SELECT UUID_TIMESTAMP(CAST('01901be0-f183-7e6c-9601-62a5e4f6e7b8' AS UUID));
40+
SELECT '019b6fdd-4937-7bb5-95c7-53363c6df927' AS uuid,
41+
UUID_TIMESTAMP(CAST('019b6fdd-4937-7bb5-95c7-53363c6df927' AS UUID)) AS ts;
4142

4243
--echo #
4344
--echo # Return type is TIMESTAMP(6)
4445
--echo #
45-
CREATE TABLE t1 AS SELECT UUID_TIMESTAMP('01901be0-f183-7e6c-9601-62a5e4f6e7b8') AS ts;
46+
CREATE TABLE t1 AS SELECT UUID_TIMESTAMP('019b6fdd-4937-7bb5-95c7-53363c6df927') AS ts;
4647
SHOW CREATE TABLE t1;
4748
DROP TABLE t1;
4849

4950
--echo #
5051
--echo # Edge cases
5152
--echo #
5253
# UUIDv1 before Unix epoch
53-
SELECT UUID_TIMESTAMP('00000000-0000-1000-8000-000000000000') IS NULL AS before_unix_epoch;
54+
SELECT '00000000-0000-1000-8000-000000000000' AS uuid,
55+
UUID_TIMESTAMP('00000000-0000-1000-8000-000000000000') IS NULL AS before_unix_epoch;
5456
# UUIDv7 at Unix epoch (ts=0)
55-
SELECT UUID_TIMESTAMP('00000000-0000-7000-8000-000000000000');
57+
SELECT '00000000-0000-7000-8000-000000000000' AS uuid,
58+
UUID_TIMESTAMP('00000000-0000-7000-8000-000000000000') AS ts;
5659
# UUIDv7 max 48-bit timestamp
57-
SELECT UUID_TIMESTAMP('ffffffff-ffff-7fff-8000-000000000000');
60+
SELECT 'ffffffff-ffff-7fff-8000-000000000000' AS uuid,
61+
UUID_TIMESTAMP('ffffffff-ffff-7fff-8000-000000000000') AS ts;
5862
# UUIDv1 max timestamp
59-
SELECT UUID_TIMESTAMP('ffffffff-ffff-1fff-8000-000000000000');
63+
SELECT 'ffffffff-ffff-1fff-8000-000000000000' AS uuid,
64+
UUID_TIMESTAMP('ffffffff-ffff-1fff-8000-000000000000') AS ts;
6065

6166
SET time_zone=DEFAULT;

0 commit comments

Comments
 (0)