diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 223ba6ade8..1eea98b410 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -3645,6 +3645,7 @@ SELECT person.name, holidays.num_weeks FROM person, holidays '08002b:010203' '08002b-010203' '0800.2b01.0203' + '0800-2b01-0203' '08002b010203' @@ -3666,7 +3667,7 @@ SELECT person.name, holidays.num_weeks FROM person, holidays - The remaining four input formats are not part of any standard. + The remaining five input formats are not part of any standard. diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c index aa9993fa5c..509315ae0e 100644 --- a/src/backend/utils/adt/mac.c +++ b/src/backend/utils/adt/mac.c @@ -56,6 +56,9 @@ macaddr_in(PG_FUNCTION_ARGS) if (count != 6) count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x%1s", &a, &b, &c, &d, &e, &f, junk); + if (count != 6) + count = sscanf(str, "%2x%2x-%2x%2x-%2x%2x%1s", + &a, &b, &c, &d, &e, &f, junk); if (count != 6) count = sscanf(str, "%2x%2x%2x%2x%2x%2x%1s", &a, &b, &c, &d, &e, &f, junk); diff --git a/src/test/regress/expected/macaddr.out b/src/test/regress/expected/macaddr.out index 8e41a4bbf3..e84ff5f8c0 100644 --- a/src/test/regress/expected/macaddr.out +++ b/src/test/regress/expected/macaddr.out @@ -7,14 +7,15 @@ INSERT INTO macaddr_data VALUES (2, '08-00-2b-01-02-03'); INSERT INTO macaddr_data VALUES (3, '08002b:010203'); INSERT INTO macaddr_data VALUES (4, '08002b-010203'); INSERT INTO macaddr_data VALUES (5, '0800.2b01.0203'); -INSERT INTO macaddr_data VALUES (6, '08002b010203'); -INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203'); -- invalid +INSERT INTO macaddr_data VALUES (6, '0800-2b01-0203'); +INSERT INTO macaddr_data VALUES (7, '08002b010203'); +INSERT INTO macaddr_data VALUES (8, '0800:2b01:0203'); -- invalid ERROR: invalid input syntax for type macaddr: "0800:2b01:0203" -LINE 1: INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203'); +LINE 1: INSERT INTO macaddr_data VALUES (8, '0800:2b01:0203'); ^ -INSERT INTO macaddr_data VALUES (8, 'not even close'); -- invalid +INSERT INTO macaddr_data VALUES (9, 'not even close'); -- invalid ERROR: invalid input syntax for type macaddr: "not even close" -LINE 1: INSERT INTO macaddr_data VALUES (8, 'not even close'); +LINE 1: INSERT INTO macaddr_data VALUES (9, 'not even close'); ^ INSERT INTO macaddr_data VALUES (10, '08:00:2b:01:02:04'); INSERT INTO macaddr_data VALUES (11, '08:00:2b:01:02:02'); @@ -30,12 +31,13 @@ SELECT * FROM macaddr_data; 4 | 08:00:2b:01:02:03 5 | 08:00:2b:01:02:03 6 | 08:00:2b:01:02:03 + 7 | 08:00:2b:01:02:03 10 | 08:00:2b:01:02:04 11 | 08:00:2b:01:02:02 12 | 08:00:2a:01:02:03 13 | 08:00:2c:01:02:03 14 | 08:00:2a:01:02:04 -(11 rows) +(12 rows) CREATE INDEX macaddr_data_btree ON macaddr_data USING btree (b); CREATE INDEX macaddr_data_hash ON macaddr_data USING hash (b); @@ -52,9 +54,10 @@ SELECT a, b, trunc(b) FROM macaddr_data ORDER BY 2, 1; 4 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00 5 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00 6 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00 + 7 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00 10 | 08:00:2b:01:02:04 | 08:00:2b:00:00:00 13 | 08:00:2c:01:02:03 | 08:00:2c:00:00:00 -(11 rows) +(12 rows) SELECT b < '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true ?column? @@ -113,12 +116,13 @@ SELECT ~b FROM macaddr_data; f7:ff:d4:fe:fd:fc f7:ff:d4:fe:fd:fc f7:ff:d4:fe:fd:fc + f7:ff:d4:fe:fd:fc f7:ff:d4:fe:fd:fb f7:ff:d4:fe:fd:fd f7:ff:d5:fe:fd:fc f7:ff:d3:fe:fd:fc f7:ff:d5:fe:fd:fb -(11 rows) +(12 rows) SELECT b & '00:00:00:ff:ff:ff' FROM macaddr_data; ?column? @@ -129,12 +133,13 @@ SELECT b & '00:00:00:ff:ff:ff' FROM macaddr_data; 00:00:00:01:02:03 00:00:00:01:02:03 00:00:00:01:02:03 + 00:00:00:01:02:03 00:00:00:01:02:04 00:00:00:01:02:02 00:00:00:01:02:03 00:00:00:01:02:03 00:00:00:01:02:04 -(11 rows) +(12 rows) SELECT b | '01:02:03:04:05:06' FROM macaddr_data; ?column? @@ -145,11 +150,12 @@ SELECT b | '01:02:03:04:05:06' FROM macaddr_data; 09:02:2b:05:07:07 09:02:2b:05:07:07 09:02:2b:05:07:07 + 09:02:2b:05:07:07 09:02:2b:05:07:06 09:02:2b:05:07:06 09:02:2b:05:07:07 09:02:2f:05:07:07 09:02:2b:05:07:06 -(11 rows) +(12 rows) DROP TABLE macaddr_data; diff --git a/src/test/regress/sql/macaddr.sql b/src/test/regress/sql/macaddr.sql index 1ccf501722..7bad8f5d7a 100644 --- a/src/test/regress/sql/macaddr.sql +++ b/src/test/regress/sql/macaddr.sql @@ -9,9 +9,10 @@ INSERT INTO macaddr_data VALUES (2, '08-00-2b-01-02-03'); INSERT INTO macaddr_data VALUES (3, '08002b:010203'); INSERT INTO macaddr_data VALUES (4, '08002b-010203'); INSERT INTO macaddr_data VALUES (5, '0800.2b01.0203'); -INSERT INTO macaddr_data VALUES (6, '08002b010203'); -INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203'); -- invalid -INSERT INTO macaddr_data VALUES (8, 'not even close'); -- invalid +INSERT INTO macaddr_data VALUES (6, '0800-2b01-0203'); +INSERT INTO macaddr_data VALUES (7, '08002b010203'); +INSERT INTO macaddr_data VALUES (8, '0800:2b01:0203'); -- invalid +INSERT INTO macaddr_data VALUES (9, 'not even close'); -- invalid INSERT INTO macaddr_data VALUES (10, '08:00:2b:01:02:04'); INSERT INTO macaddr_data VALUES (11, '08:00:2b:01:02:02');