2017-03-15 16:16:25 +01:00
|
|
|
--
|
|
|
|
-- macaddr8
|
|
|
|
--
|
|
|
|
-- test various cases of valid and invalid input
|
|
|
|
-- valid
|
|
|
|
SELECT '08:00:2b:01:02:03 '::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:ff:fe:01:02:03
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT ' 08:00:2b:01:02:03 '::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:ff:fe:01:02:03
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT ' 08:00:2b:01:02:03'::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:ff:fe:01:02:03
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT '08:00:2b:01:02:03:04:05 '::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:01:02:03:04:05
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT ' 08:00:2b:01:02:03:04:05 '::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:01:02:03:04:05
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT ' 08:00:2b:01:02:03:04:05'::macaddr8;
|
|
|
|
macaddr8
|
|
|
|
-------------------------
|
|
|
|
08:00:2b:01:02:03:04:05
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT '123 08:00:2b:01:02:03'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "123 08:00:2b:01:02:03"
|
|
|
|
LINE 1: SELECT '123 08:00:2b:01:02:03'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00:2b:01:02:03 123'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00:2b:01:02:03 123"
|
|
|
|
LINE 1: SELECT '08:00:2b:01:02:03 123'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '123 08:00:2b:01:02:03:04:05'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "123 08:00:2b:01:02:03:04:05"
|
|
|
|
LINE 1: SELECT '123 08:00:2b:01:02:03:04:05'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00:2b:01:02:03:04:05 123'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00:2b:01:02:03:04:05 123"
|
|
|
|
LINE 1: SELECT '08:00:2b:01:02:03:04:05 123'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00:2b:01:02:03:04:05:06:07'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00:2b:01:02:03:04:05:06:07"
|
|
|
|
LINE 1: SELECT '08:00:2b:01:02:03:04:05:06:07'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08-00-2b-01-02-03-04-05-06-07'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08-00-2b-01-02-03-04-05-06-07"
|
|
|
|
LINE 1: SELECT '08-00-2b-01-02-03-04-05-06-07'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08002b:01020304050607'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08002b:01020304050607"
|
|
|
|
LINE 1: SELECT '08002b:01020304050607'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08002b01020304050607'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08002b01020304050607"
|
|
|
|
LINE 1: SELECT '08002b01020304050607'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '0z002b0102030405'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "0z002b0102030405"
|
|
|
|
LINE 1: SELECT '0z002b0102030405'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08002b010203xyza'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08002b010203xyza"
|
|
|
|
LINE 1: SELECT '08002b010203xyza'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00-2b:01:02:03:04:05'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00-2b:01:02:03:04:05"
|
|
|
|
LINE 1: SELECT '08:00-2b:01:02:03:04:05'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00-2b:01:02:03:04:05'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00-2b:01:02:03:04:05"
|
|
|
|
LINE 1: SELECT '08:00-2b:01:02:03:04:05'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00:2b:01.02:03:04:05'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00:2b:01.02:03:04:05"
|
|
|
|
LINE 1: SELECT '08:00:2b:01.02:03:04:05'::macaddr8;
|
|
|
|
^
|
|
|
|
SELECT '08:00:2b:01.02:03:04:05'::macaddr8; -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "08:00:2b:01.02:03:04:05"
|
|
|
|
LINE 1: SELECT '08:00:2b:01.02:03:04:05'::macaddr8;
|
|
|
|
^
|
|
|
|
-- test converting a MAC address to modified EUI-64 for inclusion
|
|
|
|
-- in an ipv6 address
|
|
|
|
SELECT macaddr8_set7bit('00:08:2b:01:02:03'::macaddr8);
|
|
|
|
macaddr8_set7bit
|
|
|
|
-------------------------
|
|
|
|
02:08:2b:ff:fe:01:02:03
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
CREATE TABLE macaddr8_data (a int, b macaddr8);
|
|
|
|
INSERT INTO macaddr8_data VALUES (1, '08:00:2b:01:02:03');
|
|
|
|
INSERT INTO macaddr8_data VALUES (2, '08-00-2b-01-02-03');
|
|
|
|
INSERT INTO macaddr8_data VALUES (3, '08002b:010203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (4, '08002b-010203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (5, '0800.2b01.0203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (6, '0800-2b01-0203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (7, '08002b010203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (8, '0800:2b01:0203');
|
|
|
|
INSERT INTO macaddr8_data VALUES (9, 'not even close'); -- invalid
|
|
|
|
ERROR: invalid input syntax for type macaddr8: "not even close"
|
|
|
|
LINE 1: INSERT INTO macaddr8_data VALUES (9, 'not even close');
|
|
|
|
^
|
|
|
|
INSERT INTO macaddr8_data VALUES (10, '08:00:2b:01:02:04');
|
|
|
|
INSERT INTO macaddr8_data VALUES (11, '08:00:2b:01:02:02');
|
|
|
|
INSERT INTO macaddr8_data VALUES (12, '08:00:2a:01:02:03');
|
|
|
|
INSERT INTO macaddr8_data VALUES (13, '08:00:2c:01:02:03');
|
|
|
|
INSERT INTO macaddr8_data VALUES (14, '08:00:2a:01:02:04');
|
|
|
|
INSERT INTO macaddr8_data VALUES (15, '08:00:2b:01:02:03:04:05');
|
|
|
|
INSERT INTO macaddr8_data VALUES (16, '08-00-2b-01-02-03-04-05');
|
|
|
|
INSERT INTO macaddr8_data VALUES (17, '08002b:0102030405');
|
|
|
|
INSERT INTO macaddr8_data VALUES (18, '08002b-0102030405');
|
|
|
|
INSERT INTO macaddr8_data VALUES (19, '0800.2b01.0203.0405');
|
|
|
|
INSERT INTO macaddr8_data VALUES (20, '08002b01:02030405');
|
|
|
|
INSERT INTO macaddr8_data VALUES (21, '08002b0102030405');
|
|
|
|
SELECT * FROM macaddr8_data ORDER BY 1;
|
|
|
|
a | b
|
|
|
|
----+-------------------------
|
|
|
|
1 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
2 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
3 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
4 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
5 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
6 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
7 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
8 | 08:00:2b:ff:fe:01:02:03
|
|
|
|
10 | 08:00:2b:ff:fe:01:02:04
|
|
|
|
11 | 08:00:2b:ff:fe:01:02:02
|
|
|
|
12 | 08:00:2a:ff:fe:01:02:03
|
|
|
|
13 | 08:00:2c:ff:fe:01:02:03
|
|
|
|
14 | 08:00:2a:ff:fe:01:02:04
|
|
|
|
15 | 08:00:2b:01:02:03:04:05
|
|
|
|
16 | 08:00:2b:01:02:03:04:05
|
|
|
|
17 | 08:00:2b:01:02:03:04:05
|
|
|
|
18 | 08:00:2b:01:02:03:04:05
|
|
|
|
19 | 08:00:2b:01:02:03:04:05
|
|
|
|
20 | 08:00:2b:01:02:03:04:05
|
|
|
|
21 | 08:00:2b:01:02:03:04:05
|
|
|
|
(20 rows)
|
|
|
|
|
|
|
|
CREATE INDEX macaddr8_data_btree ON macaddr8_data USING btree (b);
|
|
|
|
CREATE INDEX macaddr8_data_hash ON macaddr8_data USING hash (b);
|
|
|
|
SELECT a, b, trunc(b) FROM macaddr8_data ORDER BY 2, 1;
|
|
|
|
a | b | trunc
|
|
|
|
----+-------------------------+-------------------------
|
|
|
|
12 | 08:00:2a:ff:fe:01:02:03 | 08:00:2a:00:00:00:00:00
|
|
|
|
14 | 08:00:2a:ff:fe:01:02:04 | 08:00:2a:00:00:00:00:00
|
|
|
|
15 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
16 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
17 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
18 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
19 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
20 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
21 | 08:00:2b:01:02:03:04:05 | 08:00:2b:00:00:00:00:00
|
|
|
|
11 | 08:00:2b:ff:fe:01:02:02 | 08:00:2b:00:00:00:00:00
|
|
|
|
1 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
2 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
3 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
4 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
5 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
6 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
7 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
8 | 08:00:2b:ff:fe:01:02:03 | 08:00:2b:00:00:00:00:00
|
|
|
|
10 | 08:00:2b:ff:fe:01:02:04 | 08:00:2b:00:00:00:00:00
|
|
|
|
13 | 08:00:2c:ff:fe:01:02:03 | 08:00:2c:00:00:00:00:00
|
|
|
|
(20 rows)
|
|
|
|
|
|
|
|
SELECT b < '08:00:2b:01:02:04' FROM macaddr8_data WHERE a = 1; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b > '08:00:2b:ff:fe:01:02:04' FROM macaddr8_data WHERE a = 1; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b > '08:00:2b:ff:fe:01:02:03' FROM macaddr8_data WHERE a = 1; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b::macaddr <= '08:00:2b:01:02:04' FROM macaddr8_data WHERE a = 1; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b::macaddr >= '08:00:2b:01:02:04' FROM macaddr8_data WHERE a = 1; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b = '08:00:2b:ff:fe:01:02:03' FROM macaddr8_data WHERE a = 1; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b::macaddr <> '08:00:2b:01:02:04'::macaddr FROM macaddr8_data WHERE a = 1; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b::macaddr <> '08:00:2b:01:02:03'::macaddr FROM macaddr8_data WHERE a = 1; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b < '08:00:2b:01:02:03:04:06' FROM macaddr8_data WHERE a = 15; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b > '08:00:2b:01:02:03:04:06' FROM macaddr8_data WHERE a = 15; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b > '08:00:2b:01:02:03:04:05' FROM macaddr8_data WHERE a = 15; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b <= '08:00:2b:01:02:03:04:06' FROM macaddr8_data WHERE a = 15; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b >= '08:00:2b:01:02:03:04:06' FROM macaddr8_data WHERE a = 15; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b = '08:00:2b:01:02:03:04:05' FROM macaddr8_data WHERE a = 15; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b <> '08:00:2b:01:02:03:04:06' FROM macaddr8_data WHERE a = 15; -- true
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT b <> '08:00:2b:01:02:03:04:05' FROM macaddr8_data WHERE a = 15; -- false
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT ~b FROM macaddr8_data;
|
|
|
|
?column?
|
|
|
|
-------------------------
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fc
|
|
|
|
f7:ff:d4:00:01:fe:fd:fb
|
|
|
|
f7:ff:d4:00:01:fe:fd:fd
|
|
|
|
f7:ff:d5:00:01:fe:fd:fc
|
|
|
|
f7:ff:d3:00:01:fe:fd:fc
|
|
|
|
f7:ff:d5:00:01:fe:fd:fb
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
f7:ff:d4:fe:fd:fc:fb:fa
|
|
|
|
(20 rows)
|
|
|
|
|
|
|
|
SELECT b & '00:00:00:ff:ff:ff' FROM macaddr8_data;
|
|
|
|
?column?
|
|
|
|
-------------------------
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:04
|
|
|
|
00:00:00:ff:fe:01:02:02
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:03
|
|
|
|
00:00:00:ff:fe:01:02:04
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
00:00:00:01:02:03:04:05
|
|
|
|
(20 rows)
|
|
|
|
|
|
|
|
SELECT b | '01:02:03:04:05:06' FROM macaddr8_data;
|
|
|
|
?column?
|
|
|
|
-------------------------
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:06
|
|
|
|
09:02:2b:ff:fe:05:07:06
|
|
|
|
09:02:2b:ff:fe:05:07:07
|
|
|
|
09:02:2f:ff:fe:05:07:07
|
|
|
|
09:02:2b:ff:fe:05:07:06
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
09:02:2b:ff:fe:07:05:07
|
|
|
|
(20 rows)
|
|
|
|
|
|
|
|
DROP TABLE macaddr8_data;
|
2022-12-14 19:22:08 +01:00
|
|
|
-- test non-error-throwing API for some core types
|
|
|
|
SELECT pg_input_is_valid('08:00:2b:01:02:03:04:ZZ', 'macaddr8');
|
|
|
|
pg_input_is_valid
|
|
|
|
-------------------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT pg_input_error_message('08:00:2b:01:02:03:04:ZZ', 'macaddr8');
|
|
|
|
pg_input_error_message
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
invalid input syntax for type macaddr8: "08:00:2b:01:02:03:04:ZZ"
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT pg_input_is_valid('08:00:2b:01:02:03:04:', 'macaddr8');
|
|
|
|
pg_input_is_valid
|
|
|
|
-------------------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT pg_input_error_message('08:00:2b:01:02:03:04:', 'macaddr8');
|
|
|
|
pg_input_error_message
|
|
|
|
-----------------------------------------------------------------
|
|
|
|
invalid input syntax for type macaddr8: "08:00:2b:01:02:03:04:"
|
|
|
|
(1 row)
|
|
|
|
|