~ubuntu-branches/ubuntu/hardy/postgresql-8.4/hardy-backports

« back to all changes in this revision

Viewing changes to src/test/regress/expected/inet.out

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-03-20 12:00:13 UTC
  • Revision ID: james.westby@ubuntu.com-20090320120013-hogj7egc5mjncc5g
Tags: upstream-8.4~0cvs20090328
ImportĀ upstreamĀ versionĀ 8.4~0cvs20090328

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--
 
2
-- INET
 
3
--
 
4
-- prepare the table...
 
5
DROP TABLE INET_TBL;
 
6
ERROR:  table "inet_tbl" does not exist
 
7
CREATE TABLE INET_TBL (c cidr, i inet);
 
8
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.226/24');
 
9
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.0/26', '192.168.1.226');
 
10
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.0/24');
 
11
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.0/25');
 
12
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.255/24');
 
13
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.255/25');
 
14
INSERT INTO INET_TBL (c, i) VALUES ('10', '10.1.2.3/8');
 
15
INSERT INTO INET_TBL (c, i) VALUES ('10.0.0.0', '10.1.2.3/8');
 
16
INSERT INTO INET_TBL (c, i) VALUES ('10.1.2.3', '10.1.2.3/32');
 
17
INSERT INTO INET_TBL (c, i) VALUES ('10.1.2', '10.1.2.3/24');
 
18
INSERT INTO INET_TBL (c, i) VALUES ('10.1', '10.1.2.3/16');
 
19
INSERT INTO INET_TBL (c, i) VALUES ('10', '10.1.2.3/8');
 
20
INSERT INTO INET_TBL (c, i) VALUES ('10', '11.1.2.3/8');
 
21
INSERT INTO INET_TBL (c, i) VALUES ('10', '9.1.2.3/8');
 
22
INSERT INTO INET_TBL (c, i) VALUES ('10:23::f1', '10:23::f1/64');
 
23
INSERT INTO INET_TBL (c, i) VALUES ('10:23::8000/113', '10:23::ffff');
 
24
INSERT INTO INET_TBL (c, i) VALUES ('::ffff:1.2.3.4', '::4.3.2.1/24');
 
25
-- check that CIDR rejects invalid input:
 
26
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/30', '192.168.1.226');
 
27
ERROR:  invalid cidr value: "192.168.1.2/30"
 
28
LINE 1: INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/30', '192.1...
 
29
                                            ^
 
30
DETAIL:  Value has bits set to right of mask.
 
31
INSERT INTO INET_TBL (c, i) VALUES ('1234::1234::1234', '::1.2.3.4');
 
32
ERROR:  invalid input syntax for type cidr: "1234::1234::1234"
 
33
LINE 1: INSERT INTO INET_TBL (c, i) VALUES ('1234::1234::1234', '::1...
 
34
                                            ^
 
35
-- check that CIDR rejects invalid input when converting from text:
 
36
INSERT INTO INET_TBL (c, i) VALUES (cidr('192.168.1.2/30'), '192.168.1.226');
 
37
ERROR:  invalid cidr value: "192.168.1.2/30"
 
38
LINE 1: INSERT INTO INET_TBL (c, i) VALUES (cidr('192.168.1.2/30'), ...
 
39
                                                 ^
 
40
DETAIL:  Value has bits set to right of mask.
 
41
INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:ffff::/24'), '::192.168.1.226');
 
42
ERROR:  invalid cidr value: "ffff:ffff:ffff:ffff::/24"
 
43
LINE 1: INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:fff...
 
44
                                                 ^
 
45
DETAIL:  Value has bits set to right of mask.
 
46
SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL;
 
47
 ten |        cidr        |       inet       
 
48
-----+--------------------+------------------
 
49
     | 192.168.1.0/24     | 192.168.1.226/24
 
50
     | 192.168.1.0/26     | 192.168.1.226
 
51
     | 192.168.1.0/24     | 192.168.1.0/24
 
52
     | 192.168.1.0/24     | 192.168.1.0/25
 
53
     | 192.168.1.0/24     | 192.168.1.255/24
 
54
     | 192.168.1.0/24     | 192.168.1.255/25
 
55
     | 10.0.0.0/8         | 10.1.2.3/8
 
56
     | 10.0.0.0/32        | 10.1.2.3/8
 
57
     | 10.1.2.3/32        | 10.1.2.3
 
58
     | 10.1.2.0/24        | 10.1.2.3/24
 
59
     | 10.1.0.0/16        | 10.1.2.3/16
 
60
     | 10.0.0.0/8         | 10.1.2.3/8
 
61
     | 10.0.0.0/8         | 11.1.2.3/8
 
62
     | 10.0.0.0/8         | 9.1.2.3/8
 
63
     | 10:23::f1/128      | 10:23::f1/64
 
64
     | 10:23::8000/113    | 10:23::ffff
 
65
     | ::ffff:1.2.3.4/128 | ::4.3.2.1/24
 
66
(17 rows)
 
67
 
 
68
-- now test some support functions
 
69
SELECT '' AS ten, i AS inet, host(i), text(i), family(i) FROM INET_TBL;
 
70
 ten |       inet       |     host      |       text       | family 
 
71
-----+------------------+---------------+------------------+--------
 
72
     | 192.168.1.226/24 | 192.168.1.226 | 192.168.1.226/24 |      4
 
73
     | 192.168.1.226    | 192.168.1.226 | 192.168.1.226/32 |      4
 
74
     | 192.168.1.0/24   | 192.168.1.0   | 192.168.1.0/24   |      4
 
75
     | 192.168.1.0/25   | 192.168.1.0   | 192.168.1.0/25   |      4
 
76
     | 192.168.1.255/24 | 192.168.1.255 | 192.168.1.255/24 |      4
 
77
     | 192.168.1.255/25 | 192.168.1.255 | 192.168.1.255/25 |      4
 
78
     | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
 
79
     | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
 
80
     | 10.1.2.3         | 10.1.2.3      | 10.1.2.3/32      |      4
 
81
     | 10.1.2.3/24      | 10.1.2.3      | 10.1.2.3/24      |      4
 
82
     | 10.1.2.3/16      | 10.1.2.3      | 10.1.2.3/16      |      4
 
83
     | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
 
84
     | 11.1.2.3/8       | 11.1.2.3      | 11.1.2.3/8       |      4
 
85
     | 9.1.2.3/8        | 9.1.2.3       | 9.1.2.3/8        |      4
 
86
     | 10:23::f1/64     | 10:23::f1     | 10:23::f1/64     |      6
 
87
     | 10:23::ffff      | 10:23::ffff   | 10:23::ffff/128  |      6
 
88
     | ::4.3.2.1/24     | ::4.3.2.1     | ::4.3.2.1/24     |      6
 
89
(17 rows)
 
90
 
 
91
SELECT '' AS ten, c AS cidr, broadcast(c),
 
92
  i AS inet, broadcast(i) FROM INET_TBL;
 
93
 ten |        cidr        |    broadcast     |       inet       |               broadcast               
 
94
-----+--------------------+------------------+------------------+---------------------------------------
 
95
     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.226/24 | 192.168.1.255/24
 
96
     | 192.168.1.0/26     | 192.168.1.63/26  | 192.168.1.226    | 192.168.1.226
 
97
     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/24   | 192.168.1.255/24
 
98
     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/25   | 192.168.1.127/25
 
99
     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.255/24 | 192.168.1.255/24
 
100
     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.255/25 | 192.168.1.255/25
 
101
     | 10.0.0.0/8         | 10.255.255.255/8 | 10.1.2.3/8       | 10.255.255.255/8
 
102
     | 10.0.0.0/32        | 10.0.0.0         | 10.1.2.3/8       | 10.255.255.255/8
 
103
     | 10.1.2.3/32        | 10.1.2.3         | 10.1.2.3         | 10.1.2.3
 
104
     | 10.1.2.0/24        | 10.1.2.255/24    | 10.1.2.3/24      | 10.1.2.255/24
 
105
     | 10.1.0.0/16        | 10.1.255.255/16  | 10.1.2.3/16      | 10.1.255.255/16
 
106
     | 10.0.0.0/8         | 10.255.255.255/8 | 10.1.2.3/8       | 10.255.255.255/8
 
107
     | 10.0.0.0/8         | 10.255.255.255/8 | 11.1.2.3/8       | 11.255.255.255/8
 
108
     | 10.0.0.0/8         | 10.255.255.255/8 | 9.1.2.3/8        | 9.255.255.255/8
 
109
     | 10:23::f1/128      | 10:23::f1        | 10:23::f1/64     | 10:23::ffff:ffff:ffff:ffff/64
 
110
     | 10:23::8000/113    | 10:23::ffff/113  | 10:23::ffff      | 10:23::ffff
 
111
     | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4   | ::4.3.2.1/24     | 0:ff:ffff:ffff:ffff:ffff:ffff:ffff/24
 
112
(17 rows)
 
113
 
 
114
SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
 
115
  i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
 
116
 ten |        cidr        |   network(cidr)    |       inet       |  network(inet)   
 
117
-----+--------------------+--------------------+------------------+------------------
 
118
     | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.226/24 | 192.168.1.0/24
 
119
     | 192.168.1.0/26     | 192.168.1.0/26     | 192.168.1.226    | 192.168.1.226/32
 
120
     | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.0/24   | 192.168.1.0/24
 
121
     | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.0/25   | 192.168.1.0/25
 
122
     | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/24
 
123
     | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.255/25 | 192.168.1.128/25
 
124
     | 10.0.0.0/8         | 10.0.0.0/8         | 10.1.2.3/8       | 10.0.0.0/8
 
125
     | 10.0.0.0/32        | 10.0.0.0/32        | 10.1.2.3/8       | 10.0.0.0/8
 
126
     | 10.1.2.3/32        | 10.1.2.3/32        | 10.1.2.3         | 10.1.2.3/32
 
127
     | 10.1.2.0/24        | 10.1.2.0/24        | 10.1.2.3/24      | 10.1.2.0/24
 
128
     | 10.1.0.0/16        | 10.1.0.0/16        | 10.1.2.3/16      | 10.1.0.0/16
 
129
     | 10.0.0.0/8         | 10.0.0.0/8         | 10.1.2.3/8       | 10.0.0.0/8
 
130
     | 10.0.0.0/8         | 10.0.0.0/8         | 11.1.2.3/8       | 11.0.0.0/8
 
131
     | 10.0.0.0/8         | 10.0.0.0/8         | 9.1.2.3/8        | 9.0.0.0/8
 
132
     | 10:23::f1/128      | 10:23::f1/128      | 10:23::f1/64     | 10:23::/64
 
133
     | 10:23::8000/113    | 10:23::8000/113    | 10:23::ffff      | 10:23::ffff/128
 
134
     | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4/128 | ::4.3.2.1/24     | ::/24
 
135
(17 rows)
 
136
 
 
137
SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
 
138
  i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
 
139
 ten |        cidr        | masklen(cidr) |       inet       | masklen(inet) 
 
140
-----+--------------------+---------------+------------------+---------------
 
141
     | 192.168.1.0/24     |            24 | 192.168.1.226/24 |            24
 
142
     | 192.168.1.0/26     |            26 | 192.168.1.226    |            32
 
143
     | 192.168.1.0/24     |            24 | 192.168.1.0/24   |            24
 
144
     | 192.168.1.0/24     |            24 | 192.168.1.0/25   |            25
 
145
     | 192.168.1.0/24     |            24 | 192.168.1.255/24 |            24
 
146
     | 192.168.1.0/24     |            24 | 192.168.1.255/25 |            25
 
147
     | 10.0.0.0/8         |             8 | 10.1.2.3/8       |             8
 
148
     | 10.0.0.0/32        |            32 | 10.1.2.3/8       |             8
 
149
     | 10.1.2.3/32        |            32 | 10.1.2.3         |            32
 
150
     | 10.1.2.0/24        |            24 | 10.1.2.3/24      |            24
 
151
     | 10.1.0.0/16        |            16 | 10.1.2.3/16      |            16
 
152
     | 10.0.0.0/8         |             8 | 10.1.2.3/8       |             8
 
153
     | 10.0.0.0/8         |             8 | 11.1.2.3/8       |             8
 
154
     | 10.0.0.0/8         |             8 | 9.1.2.3/8        |             8
 
155
     | 10:23::f1/128      |           128 | 10:23::f1/64     |            64
 
156
     | 10:23::8000/113    |           113 | 10:23::ffff      |           128
 
157
     | ::ffff:1.2.3.4/128 |           128 | ::4.3.2.1/24     |            24
 
158
(17 rows)
 
159
 
 
160
SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
 
161
  i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
 
162
  WHERE masklen(c) <= 8;
 
163
 four |    cidr    | masklen(cidr) |    inet    | masklen(inet) 
 
164
------+------------+---------------+------------+---------------
 
165
      | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
 
166
      | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
 
167
      | 10.0.0.0/8 |             8 | 11.1.2.3/8 |             8
 
168
      | 10.0.0.0/8 |             8 | 9.1.2.3/8  |             8
 
169
(4 rows)
 
170
 
 
171
SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
 
172
  WHERE c = i;
 
173
 six |      cidr      |      inet      
 
174
-----+----------------+----------------
 
175
     | 192.168.1.0/24 | 192.168.1.0/24
 
176
     | 10.1.2.3/32    | 10.1.2.3
 
177
(2 rows)
 
178
 
 
179
SELECT '' AS ten, i, c,
 
180
  i < c AS lt, i <= c AS le, i = c AS eq, 
 
181
  i >= c AS ge, i > c AS gt, i <> c AS ne,
 
182
  i << c AS sb, i <<= c AS sbe,
 
183
  i >> c AS sup, i >>= c AS spe
 
184
  FROM INET_TBL;
 
185
 ten |        i         |         c          | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe 
 
186
-----+------------------+--------------------+----+----+----+----+----+----+----+-----+-----+-----
 
187
     | 192.168.1.226/24 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
188
     | 192.168.1.226    | 192.168.1.0/26     | f  | f  | f  | t  | t  | t  | f  | f   | f   | f
 
189
     | 192.168.1.0/24   | 192.168.1.0/24     | f  | t  | t  | t  | f  | f  | f  | t   | f   | t
 
190
     | 192.168.1.0/25   | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
 
191
     | 192.168.1.255/24 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
192
     | 192.168.1.255/25 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
 
193
     | 10.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
194
     | 10.1.2.3/8       | 10.0.0.0/32        | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
 
195
     | 10.1.2.3         | 10.1.2.3/32        | f  | t  | t  | t  | f  | f  | f  | t   | f   | t
 
196
     | 10.1.2.3/24      | 10.1.2.0/24        | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
197
     | 10.1.2.3/16      | 10.1.0.0/16        | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
198
     | 10.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
 
199
     | 11.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | f   | f   | f
 
200
     | 9.1.2.3/8        | 10.0.0.0/8         | t  | t  | f  | f  | f  | t  | f  | f   | f   | f
 
201
     | 10:23::f1/64     | 10:23::f1/128      | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
 
202
     | 10:23::ffff      | 10:23::8000/113    | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
 
203
     | ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
 
204
(17 rows)
 
205
 
 
206
-- check the conversion to/from text and set_netmask
 
207
SELECT '' AS ten, set_masklen(inet(text(i)), 24) FROM INET_TBL;
 
208
 ten |   set_masklen    
 
209
-----+------------------
 
210
     | 192.168.1.226/24
 
211
     | 192.168.1.226/24
 
212
     | 192.168.1.0/24
 
213
     | 192.168.1.0/24
 
214
     | 192.168.1.255/24
 
215
     | 192.168.1.255/24
 
216
     | 10.1.2.3/24
 
217
     | 10.1.2.3/24
 
218
     | 10.1.2.3/24
 
219
     | 10.1.2.3/24
 
220
     | 10.1.2.3/24
 
221
     | 10.1.2.3/24
 
222
     | 11.1.2.3/24
 
223
     | 9.1.2.3/24
 
224
     | 10:23::f1/24
 
225
     | 10:23::ffff/24
 
226
     | ::4.3.2.1/24
 
227
(17 rows)
 
228
 
 
229
-- check that index works correctly
 
230
CREATE INDEX inet_idx1 ON inet_tbl(i);
 
231
SET enable_seqscan TO off;
 
232
SELECT * FROM inet_tbl WHERE i<<'192.168.1.0/24'::cidr;
 
233
       c        |        i         
 
234
----------------+------------------
 
235
 192.168.1.0/24 | 192.168.1.0/25
 
236
 192.168.1.0/24 | 192.168.1.255/25
 
237
 192.168.1.0/26 | 192.168.1.226
 
238
(3 rows)
 
239
 
 
240
SELECT * FROM inet_tbl WHERE i<<='192.168.1.0/24'::cidr;
 
241
       c        |        i         
 
242
----------------+------------------
 
243
 192.168.1.0/24 | 192.168.1.0/24
 
244
 192.168.1.0/24 | 192.168.1.226/24
 
245
 192.168.1.0/24 | 192.168.1.255/24
 
246
 192.168.1.0/24 | 192.168.1.0/25
 
247
 192.168.1.0/24 | 192.168.1.255/25
 
248
 192.168.1.0/26 | 192.168.1.226
 
249
(6 rows)
 
250
 
 
251
SET enable_seqscan TO on;
 
252
DROP INDEX inet_idx1;
 
253
-- simple tests of inet boolean and arithmetic operators
 
254
SELECT i, ~i AS "~i" FROM inet_tbl;
 
255
        i         |                     ~i                     
 
256
------------------+--------------------------------------------
 
257
 192.168.1.226/24 | 63.87.254.29/24
 
258
 192.168.1.226    | 63.87.254.29
 
259
 192.168.1.0/24   | 63.87.254.255/24
 
260
 192.168.1.0/25   | 63.87.254.255/25
 
261
 192.168.1.255/24 | 63.87.254.0/24
 
262
 192.168.1.255/25 | 63.87.254.0/25
 
263
 10.1.2.3/8       | 245.254.253.252/8
 
264
 10.1.2.3/8       | 245.254.253.252/8
 
265
 10.1.2.3         | 245.254.253.252
 
266
 10.1.2.3/24      | 245.254.253.252/24
 
267
 10.1.2.3/16      | 245.254.253.252/16
 
268
 10.1.2.3/8       | 245.254.253.252/8
 
269
 11.1.2.3/8       | 244.254.253.252/8
 
270
 9.1.2.3/8        | 246.254.253.252/8
 
271
 10:23::f1/64     | ffef:ffdc:ffff:ffff:ffff:ffff:ffff:ff0e/64
 
272
 10:23::ffff      | ffef:ffdc:ffff:ffff:ffff:ffff:ffff:0
 
273
 ::4.3.2.1/24     | ffff:ffff:ffff:ffff:ffff:ffff:fbfc:fdfe/24
 
274
(17 rows)
 
275
 
 
276
SELECT i, c, i & c AS "and" FROM inet_tbl;
 
277
        i         |         c          |      and       
 
278
------------------+--------------------+----------------
 
279
 192.168.1.226/24 | 192.168.1.0/24     | 192.168.1.0/24
 
280
 192.168.1.226    | 192.168.1.0/26     | 192.168.1.0
 
281
 192.168.1.0/24   | 192.168.1.0/24     | 192.168.1.0/24
 
282
 192.168.1.0/25   | 192.168.1.0/24     | 192.168.1.0/25
 
283
 192.168.1.255/24 | 192.168.1.0/24     | 192.168.1.0/24
 
284
 192.168.1.255/25 | 192.168.1.0/24     | 192.168.1.0/25
 
285
 10.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
 
286
 10.1.2.3/8       | 10.0.0.0/32        | 10.0.0.0
 
287
 10.1.2.3         | 10.1.2.3/32        | 10.1.2.3
 
288
 10.1.2.3/24      | 10.1.2.0/24        | 10.1.2.0/24
 
289
 10.1.2.3/16      | 10.1.0.0/16        | 10.1.0.0/16
 
290
 10.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
 
291
 11.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
 
292
 9.1.2.3/8        | 10.0.0.0/8         | 8.0.0.0/8
 
293
 10:23::f1/64     | 10:23::f1/128      | 10:23::f1
 
294
 10:23::ffff      | 10:23::8000/113    | 10:23::8000
 
295
 ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | ::0.2.2.0
 
296
(17 rows)
 
297
 
 
298
SELECT i, c, i | c AS "or" FROM inet_tbl;
 
299
        i         |         c          |        or        
 
300
------------------+--------------------+------------------
 
301
 192.168.1.226/24 | 192.168.1.0/24     | 192.168.1.226/24
 
302
 192.168.1.226    | 192.168.1.0/26     | 192.168.1.226
 
303
 192.168.1.0/24   | 192.168.1.0/24     | 192.168.1.0/24
 
304
 192.168.1.0/25   | 192.168.1.0/24     | 192.168.1.0/25
 
305
 192.168.1.255/24 | 192.168.1.0/24     | 192.168.1.255/24
 
306
 192.168.1.255/25 | 192.168.1.0/24     | 192.168.1.255/25
 
307
 10.1.2.3/8       | 10.0.0.0/8         | 10.1.2.3/8
 
308
 10.1.2.3/8       | 10.0.0.0/32        | 10.1.2.3
 
309
 10.1.2.3         | 10.1.2.3/32        | 10.1.2.3
 
310
 10.1.2.3/24      | 10.1.2.0/24        | 10.1.2.3/24
 
311
 10.1.2.3/16      | 10.1.0.0/16        | 10.1.2.3/16
 
312
 10.1.2.3/8       | 10.0.0.0/8         | 10.1.2.3/8
 
313
 11.1.2.3/8       | 10.0.0.0/8         | 11.1.2.3/8
 
314
 9.1.2.3/8        | 10.0.0.0/8         | 11.1.2.3/8
 
315
 10:23::f1/64     | 10:23::f1/128      | 10:23::f1
 
316
 10:23::ffff      | 10:23::8000/113    | 10:23::ffff
 
317
 ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | ::ffff:5.3.3.5
 
318
(17 rows)
 
319
 
 
320
SELECT i, i + 500 AS "i+500" FROM inet_tbl;
 
321
        i         |      i+500       
 
322
------------------+------------------
 
323
 192.168.1.226/24 | 192.168.3.214/24
 
324
 192.168.1.226    | 192.168.3.214
 
325
 192.168.1.0/24   | 192.168.2.244/24
 
326
 192.168.1.0/25   | 192.168.2.244/25
 
327
 192.168.1.255/24 | 192.168.3.243/24
 
328
 192.168.1.255/25 | 192.168.3.243/25
 
329
 10.1.2.3/8       | 10.1.3.247/8
 
330
 10.1.2.3/8       | 10.1.3.247/8
 
331
 10.1.2.3         | 10.1.3.247
 
332
 10.1.2.3/24      | 10.1.3.247/24
 
333
 10.1.2.3/16      | 10.1.3.247/16
 
334
 10.1.2.3/8       | 10.1.3.247/8
 
335
 11.1.2.3/8       | 11.1.3.247/8
 
336
 9.1.2.3/8        | 9.1.3.247/8
 
337
 10:23::f1/64     | 10:23::2e5/64
 
338
 10:23::ffff      | 10:23::1:1f3
 
339
 ::4.3.2.1/24     | ::4.3.3.245/24
 
340
(17 rows)
 
341
 
 
342
SELECT i, i - 500 AS "i-500" FROM inet_tbl;
 
343
        i         |                 i-500                  
 
344
------------------+----------------------------------------
 
345
 192.168.1.226/24 | 192.167.255.238/24
 
346
 192.168.1.226    | 192.167.255.238
 
347
 192.168.1.0/24   | 192.167.255.12/24
 
348
 192.168.1.0/25   | 192.167.255.12/25
 
349
 192.168.1.255/24 | 192.168.0.11/24
 
350
 192.168.1.255/25 | 192.168.0.11/25
 
351
 10.1.2.3/8       | 10.1.0.15/8
 
352
 10.1.2.3/8       | 10.1.0.15/8
 
353
 10.1.2.3         | 10.1.0.15
 
354
 10.1.2.3/24      | 10.1.0.15/24
 
355
 10.1.2.3/16      | 10.1.0.15/16
 
356
 10.1.2.3/8       | 10.1.0.15/8
 
357
 11.1.2.3/8       | 11.1.0.15/8
 
358
 9.1.2.3/8        | 9.1.0.15/8
 
359
 10:23::f1/64     | 10:22:ffff:ffff:ffff:ffff:ffff:fefd/64
 
360
 10:23::ffff      | 10:23::fe0b
 
361
 ::4.3.2.1/24     | ::4.3.0.13/24
 
362
(17 rows)
 
363
 
 
364
SELECT i, c, i - c AS "minus" FROM inet_tbl;
 
365
        i         |         c          |      minus       
 
366
------------------+--------------------+------------------
 
367
 192.168.1.226/24 | 192.168.1.0/24     |              226
 
368
 192.168.1.226    | 192.168.1.0/26     |              226
 
369
 192.168.1.0/24   | 192.168.1.0/24     |                0
 
370
 192.168.1.0/25   | 192.168.1.0/24     |                0
 
371
 192.168.1.255/24 | 192.168.1.0/24     |              255
 
372
 192.168.1.255/25 | 192.168.1.0/24     |              255
 
373
 10.1.2.3/8       | 10.0.0.0/8         |            66051
 
374
 10.1.2.3/8       | 10.0.0.0/32        |            66051
 
375
 10.1.2.3         | 10.1.2.3/32        |                0
 
376
 10.1.2.3/24      | 10.1.2.0/24        |                3
 
377
 10.1.2.3/16      | 10.1.0.0/16        |              515
 
378
 10.1.2.3/8       | 10.0.0.0/8         |            66051
 
379
 11.1.2.3/8       | 10.0.0.0/8         |         16843267
 
380
 9.1.2.3/8        | 10.0.0.0/8         |        -16711165
 
381
 10:23::f1/64     | 10:23::f1/128      |                0
 
382
 10:23::ffff      | 10:23::8000/113    |            32767
 
383
 ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | -281470631346435
 
384
(17 rows)
 
385
 
 
386
SELECT '127.0.0.1'::inet + 257;
 
387
 ?column?  
 
388
-----------
 
389
 127.0.1.2
 
390
(1 row)
 
391
 
 
392
SELECT ('127.0.0.1'::inet + 257) - 257;
 
393
 ?column?  
 
394
-----------
 
395
 127.0.0.1
 
396
(1 row)
 
397
 
 
398
SELECT '127::1'::inet + 257;
 
399
 ?column? 
 
400
----------
 
401
 127::102
 
402
(1 row)
 
403
 
 
404
SELECT ('127::1'::inet + 257) - 257;
 
405
 ?column? 
 
406
----------
 
407
 127::1
 
408
(1 row)
 
409
 
 
410
SELECT '127.0.0.2'::inet  - ('127.0.0.2'::inet + 500);
 
411
 ?column? 
 
412
----------
 
413
     -500
 
414
(1 row)
 
415
 
 
416
SELECT '127.0.0.2'::inet  - ('127.0.0.2'::inet - 500);
 
417
 ?column? 
 
418
----------
 
419
      500
 
420
(1 row)
 
421
 
 
422
SELECT '127::2'::inet  - ('127::2'::inet + 500);
 
423
 ?column? 
 
424
----------
 
425
     -500
 
426
(1 row)
 
427
 
 
428
SELECT '127::2'::inet  - ('127::2'::inet - 500);
 
429
 ?column? 
 
430
----------
 
431
      500
 
432
(1 row)
 
433
 
 
434
-- these should give overflow errors:
 
435
SELECT '127.0.0.1'::inet + 10000000000;
 
436
ERROR:  result is out of range
 
437
SELECT '127.0.0.1'::inet - 10000000000;
 
438
ERROR:  result is out of range
 
439
SELECT '126::1'::inet - '127::2'::inet;
 
440
ERROR:  result is out of range
 
441
SELECT '127::1'::inet - '126::2'::inet;
 
442
ERROR:  result is out of range
 
443
-- but not these
 
444
SELECT '127::1'::inet + 10000000000;
 
445
     ?column?     
 
446
------------------
 
447
 127::2:540b:e401
 
448
(1 row)
 
449
 
 
450
SELECT '127::1'::inet - '127::2'::inet;
 
451
 ?column? 
 
452
----------
 
453
       -1
 
454
(1 row)
 
455