Skip to content

Commit 6761a03

Browse files
committed
Add regression test for macaddr type. Enhance documentation about accepted
input formats.
1 parent 0e4896d commit 6761a03

File tree

5 files changed

+174
-13
lines changed

5 files changed

+174
-13
lines changed

doc/src/sgml/datatype.sgml

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.228 2008/09/11 15:27:30 tgl Exp $ -->
1+
<!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.229 2008/10/03 15:37:18 petere Exp $ -->
22

33
<chapter id="datatype">
44
<title id="datatype-title">Data Types</title>
@@ -3187,23 +3187,39 @@ SELECT person.name, holidays.num_weeks FROM person, holidays
31873187
</indexterm>
31883188

31893189
<para>
3190-
The <type>macaddr</> type stores MAC addresses, i.e., Ethernet
3191-
card hardware addresses (although MAC addresses are used for
3192-
other purposes as well). Input is accepted in various customary
3193-
formats, including
3190+
The <type>macaddr</> type stores MAC addresses, known for example
3191+
from Ethernet card hardware addresses (although MAC addresses are
3192+
used for other purposes as well). Input is accepted in the
3193+
following formats:
31943194

31953195
<simplelist>
3196+
<member><literal>'08:00:2b:01:02:03'</></member>
3197+
<member><literal>'08-00-2b-01-02-03'</></member>
31963198
<member><literal>'08002b:010203'</></member>
31973199
<member><literal>'08002b-010203'</></member>
31983200
<member><literal>'0800.2b01.0203'</></member>
3199-
<member><literal>'08-00-2b-01-02-03'</></member>
3200-
<member><literal>'08:00:2b:01:02:03'</></member>
3201+
<member><literal>'08002b010203'</></member>
32013202
</simplelist>
32023203

3203-
which would all specify the same
3204-
address. Upper and lower case is accepted for the digits
3204+
These examples would all specify the same address. Upper and
3205+
lower case is accepted for the digits
32053206
<literal>a</> through <literal>f</>. Output is always in the
3206-
last of the forms shown.
3207+
first of the forms shown.
3208+
</para>
3209+
3210+
<para>
3211+
IEEE Std 802-2001 specifies the second shown form (with hyphens)
3212+
as the canonical form for MAC addresses, and specifies the first
3213+
form (with colons) as the bit-reversed notation, so that
3214+
08-00-2b-01-02-03 = 01:00:4D:08:04:0C. This convention is widely
3215+
ignored nowadays, and it is only relevant for obsolete network
3216+
protocols (such as Token Ring). PostgreSQL makes no provisions
3217+
for bit reversal, and all accepted formats use the canonical LSB
3218+
order.
3219+
</para>
3220+
3221+
<para>
3222+
The remaining four input formats are not part of any standard.
32073223
</para>
32083224
</sect2>
32093225

src/test/regress/expected/macaddr.out

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
--
2+
-- macaddr
3+
--
4+
CREATE TABLE macaddr_data (a int, b macaddr);
5+
INSERT INTO macaddr_data VALUES (1, '08:00:2b:01:02:03');
6+
INSERT INTO macaddr_data VALUES (2, '08-00-2b-01-02-03');
7+
INSERT INTO macaddr_data VALUES (3, '08002b:010203');
8+
INSERT INTO macaddr_data VALUES (4, '08002b-010203');
9+
INSERT INTO macaddr_data VALUES (5, '0800.2b01.0203');
10+
INSERT INTO macaddr_data VALUES (6, '08002b010203');
11+
INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203'); -- invalid
12+
ERROR: invalid input syntax for type macaddr: "0800:2b01:0203"
13+
LINE 1: INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203');
14+
^
15+
INSERT INTO macaddr_data VALUES (8, 'not even close'); -- invalid
16+
ERROR: invalid input syntax for type macaddr: "not even close"
17+
LINE 1: INSERT INTO macaddr_data VALUES (8, 'not even close');
18+
^
19+
INSERT INTO macaddr_data VALUES (10, '08:00:2b:01:02:04');
20+
INSERT INTO macaddr_data VALUES (11, '08:00:2b:01:02:02');
21+
INSERT INTO macaddr_data VALUES (12, '08:00:2a:01:02:03');
22+
INSERT INTO macaddr_data VALUES (13, '08:00:2c:01:02:03');
23+
INSERT INTO macaddr_data VALUES (14, '08:00:2a:01:02:04');
24+
SELECT * FROM macaddr_data;
25+
a | b
26+
----+-------------------
27+
1 | 08:00:2b:01:02:03
28+
2 | 08:00:2b:01:02:03
29+
3 | 08:00:2b:01:02:03
30+
4 | 08:00:2b:01:02:03
31+
5 | 08:00:2b:01:02:03
32+
6 | 08:00:2b:01:02:03
33+
10 | 08:00:2b:01:02:04
34+
11 | 08:00:2b:01:02:02
35+
12 | 08:00:2a:01:02:03
36+
13 | 08:00:2c:01:02:03
37+
14 | 08:00:2a:01:02:04
38+
(11 rows)
39+
40+
CREATE INDEX macaddr_data_btree ON macaddr_data USING btree (b);
41+
CREATE INDEX macaddr_data_hash ON macaddr_data USING hash (b);
42+
SELECT a, b, trunc(b) FROM macaddr_data ORDER BY 2, 1;
43+
a | b | trunc
44+
----+-------------------+-------------------
45+
12 | 08:00:2a:01:02:03 | 08:00:2a:00:00:00
46+
14 | 08:00:2a:01:02:04 | 08:00:2a:00:00:00
47+
11 | 08:00:2b:01:02:02 | 08:00:2b:00:00:00
48+
1 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
49+
2 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
50+
3 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
51+
4 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
52+
5 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
53+
6 | 08:00:2b:01:02:03 | 08:00:2b:00:00:00
54+
10 | 08:00:2b:01:02:04 | 08:00:2b:00:00:00
55+
13 | 08:00:2c:01:02:03 | 08:00:2c:00:00:00
56+
(11 rows)
57+
58+
SELECT b < '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
59+
?column?
60+
----------
61+
t
62+
(1 row)
63+
64+
SELECT b > '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- false
65+
?column?
66+
----------
67+
f
68+
(1 row)
69+
70+
SELECT b > '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- false
71+
?column?
72+
----------
73+
f
74+
(1 row)
75+
76+
SELECT b <= '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
77+
?column?
78+
----------
79+
t
80+
(1 row)
81+
82+
SELECT b >= '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- false
83+
?column?
84+
----------
85+
f
86+
(1 row)
87+
88+
SELECT b = '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- true
89+
?column?
90+
----------
91+
t
92+
(1 row)
93+
94+
SELECT b <> '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
95+
?column?
96+
----------
97+
t
98+
(1 row)
99+
100+
SELECT b <> '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- false
101+
?column?
102+
----------
103+
f
104+
(1 row)
105+
106+
DROP TABLE macaddr_data;

src/test/regress/parallel_schedule

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ----------
2-
# $PostgreSQL: pgsql/src/test/regress/parallel_schedule,v 1.47 2008/04/10 22:25:26 tgl Exp $
2+
# $PostgreSQL: pgsql/src/test/regress/parallel_schedule,v 1.48 2008/10/03 15:37:18 petere Exp $
33
#
44
# By convention, we put no more than twenty tests in any one parallel group;
55
# this limits the number of connections needed to run the tests.
@@ -18,7 +18,7 @@ test: numerology
1818
# ----------
1919
# The second group of parallel tests
2020
# ----------
21-
test: point lseg box path polygon circle date time timetz timestamp timestamptz interval abstime reltime tinterval inet tstypes comments
21+
test: point lseg box path polygon circle date time timetz timestamp timestamptz interval abstime reltime tinterval inet macaddr tstypes comments
2222

2323
# ----------
2424
# Another group of parallel tests

src/test/regress/serial_schedule

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.44 2008/04/10 22:25:26 tgl Exp $
1+
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.45 2008/10/03 15:37:18 petere Exp $
22
# This should probably be in an order similar to parallel_schedule.
33
test: boolean
44
test: char
@@ -35,6 +35,7 @@ test: abstime
3535
test: reltime
3636
test: tinterval
3737
test: inet
38+
test: macaddr
3839
test: tstypes
3940
test: comments
4041
test: geometry

src/test/regress/sql/macaddr.sql

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--
2+
-- macaddr
3+
--
4+
5+
CREATE TABLE macaddr_data (a int, b macaddr);
6+
7+
INSERT INTO macaddr_data VALUES (1, '08:00:2b:01:02:03');
8+
INSERT INTO macaddr_data VALUES (2, '08-00-2b-01-02-03');
9+
INSERT INTO macaddr_data VALUES (3, '08002b:010203');
10+
INSERT INTO macaddr_data VALUES (4, '08002b-010203');
11+
INSERT INTO macaddr_data VALUES (5, '0800.2b01.0203');
12+
INSERT INTO macaddr_data VALUES (6, '08002b010203');
13+
INSERT INTO macaddr_data VALUES (7, '0800:2b01:0203'); -- invalid
14+
INSERT INTO macaddr_data VALUES (8, 'not even close'); -- invalid
15+
16+
INSERT INTO macaddr_data VALUES (10, '08:00:2b:01:02:04');
17+
INSERT INTO macaddr_data VALUES (11, '08:00:2b:01:02:02');
18+
INSERT INTO macaddr_data VALUES (12, '08:00:2a:01:02:03');
19+
INSERT INTO macaddr_data VALUES (13, '08:00:2c:01:02:03');
20+
INSERT INTO macaddr_data VALUES (14, '08:00:2a:01:02:04');
21+
22+
SELECT * FROM macaddr_data;
23+
24+
CREATE INDEX macaddr_data_btree ON macaddr_data USING btree (b);
25+
CREATE INDEX macaddr_data_hash ON macaddr_data USING hash (b);
26+
27+
SELECT a, b, trunc(b) FROM macaddr_data ORDER BY 2, 1;
28+
29+
SELECT b < '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
30+
SELECT b > '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- false
31+
SELECT b > '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- false
32+
SELECT b <= '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
33+
SELECT b >= '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- false
34+
SELECT b = '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- true
35+
SELECT b <> '08:00:2b:01:02:04' FROM macaddr_data WHERE a = 1; -- true
36+
SELECT b <> '08:00:2b:01:02:03' FROM macaddr_data WHERE a = 1; -- false
37+
38+
DROP TABLE macaddr_data;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy