1-- ip4r extension 2 3-- complain if script is sourced in psql, rather than via CREATE EXTENSION 4\echo Use "CREATE EXTENSION ip4r" to load this file. \quit 5 6-- ---------------------------------------------------------------------- 7-- Type definitions 8 9--CREATE TYPE ip4; 10 11CREATE OR REPLACE FUNCTION ip4_in(cstring) RETURNS ip4 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 12CREATE OR REPLACE FUNCTION ip4_out(ip4) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 13CREATE OR REPLACE FUNCTION ip4_recv(internal) RETURNS ip4 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 14CREATE OR REPLACE FUNCTION ip4_send(ip4) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 15 16/* 17CREATE TYPE ip4 ( 18 INPUT = ip4_in, OUTPUT = ip4_out, 19 RECEIVE = ip4_recv, SEND = ip4_send, 20 INTERNALLENGTH = 4, ALIGNMENT = int4, PASSEDBYVALUE 21); 22*/ 23 24ALTER EXTENSION ip4r ADD TYPE ip4; 25 26COMMENT ON TYPE ip4 IS 'IPv4 address ''#.#.#.#'''; 27 28--CREATE TYPE ip4r; 29 30CREATE OR REPLACE FUNCTION ip4r_in(cstring) RETURNS ip4r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 31CREATE OR REPLACE FUNCTION ip4r_out(ip4r) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 32CREATE OR REPLACE FUNCTION ip4r_recv(internal) RETURNS ip4r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 33CREATE OR REPLACE FUNCTION ip4r_send(ip4r) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 34 35/* 36CREATE TYPE ip4r ( 37 INPUT = ip4r_in, OUTPUT = ip4r_out, 38 RECEIVE = ip4r_recv, SEND = ip4r_send, 39 INTERNALLENGTH = 8, ALIGNMENT = int4 40); 41*/ 42 43ALTER EXTENSION ip4r ADD TYPE ip4r; 44 45COMMENT ON TYPE ip4r IS 'IPv4 range ''#.#.#.#-#.#.#.#'' or ''#.#.#.#/#'' or ''#.#.#.#'''; 46 47CREATE TYPE ip6; 48 49CREATE OR REPLACE FUNCTION ip6_in(cstring) RETURNS ip6 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 50CREATE OR REPLACE FUNCTION ip6_out(ip6) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 51CREATE OR REPLACE FUNCTION ip6_recv(internal) RETURNS ip6 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 52CREATE OR REPLACE FUNCTION ip6_send(ip6) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 53 54CREATE TYPE ip6 ( 55 INPUT = ip6_in, OUTPUT = ip6_out, 56 RECEIVE = ip6_recv, SEND = ip6_send, 57 INTERNALLENGTH = 16, ALIGNMENT = double 58); 59 60COMMENT ON TYPE ip6 IS 'IPv6 address ''xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx'''; 61 62CREATE TYPE ip6r; 63 64CREATE OR REPLACE FUNCTION ip6r_in(cstring) RETURNS ip6r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 65CREATE OR REPLACE FUNCTION ip6r_out(ip6r) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 66CREATE OR REPLACE FUNCTION ip6r_recv(internal) RETURNS ip6r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 67CREATE OR REPLACE FUNCTION ip6r_send(ip6r) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 68 69CREATE TYPE ip6r ( 70 INPUT = ip6r_in, OUTPUT = ip6r_out, 71 RECEIVE = ip6r_recv, SEND = ip6r_send, 72 INTERNALLENGTH = 32, ALIGNMENT = double 73); 74 75COMMENT ON TYPE ip6r IS 'IPv6 range ''#-#'' or ''#/#'' or ''#'''; 76 77CREATE TYPE ipaddress; 78 79CREATE OR REPLACE FUNCTION ipaddress_in(cstring) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_in' LANGUAGE C IMMUTABLE STRICT; 80CREATE OR REPLACE FUNCTION ipaddress_out(ipaddress) RETURNS cstring AS 'MODULE_PATHNAME','ipaddr_out' LANGUAGE C IMMUTABLE STRICT; 81CREATE OR REPLACE FUNCTION ipaddress_recv(internal) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_recv' LANGUAGE C IMMUTABLE STRICT; 82CREATE OR REPLACE FUNCTION ipaddress_send(ipaddress) RETURNS bytea AS 'MODULE_PATHNAME','ipaddr_send' LANGUAGE C IMMUTABLE STRICT; 83 84CREATE TYPE ipaddress ( 85 INPUT = ipaddress_in, OUTPUT = ipaddress_out, 86 RECEIVE = ipaddress_recv, SEND = ipaddress_send, 87 INTERNALLENGTH = VARIABLE, ALIGNMENT = int4, STORAGE = main 88); 89 90COMMENT ON TYPE ipaddress IS 'IPv4 or IPv6 address'; 91 92CREATE TYPE iprange; 93 94CREATE OR REPLACE FUNCTION iprange_in(cstring) RETURNS iprange AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 95CREATE OR REPLACE FUNCTION iprange_out(iprange) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 96CREATE OR REPLACE FUNCTION iprange_recv(internal) RETURNS iprange AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 97CREATE OR REPLACE FUNCTION iprange_send(iprange) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 98 99CREATE TYPE iprange ( 100 INPUT = iprange_in, OUTPUT = iprange_out, 101 RECEIVE = iprange_recv, SEND = iprange_send, 102 INTERNALLENGTH = VARIABLE, ALIGNMENT = int4, STORAGE = main 103); 104 105COMMENT ON TYPE iprange IS 'IPv4 or IPv6 range'; 106 107-- ---------------------------------------------------------------------- 108-- Cast functions (inward) 109 110CREATE OR REPLACE FUNCTION ip4(bigint) RETURNS ip4 AS 'MODULE_PATHNAME','ip4_cast_from_bigint' LANGUAGE C IMMUTABLE STRICT; 111CREATE OR REPLACE FUNCTION ip4(double precision) RETURNS ip4 AS 'MODULE_PATHNAME','ip4_cast_from_double' LANGUAGE C IMMUTABLE STRICT; 112CREATE OR REPLACE FUNCTION ip4(numeric) RETURNS ip4 AS 'MODULE_PATHNAME','ip4_cast_from_numeric' LANGUAGE C IMMUTABLE STRICT; 113CREATE OR REPLACE FUNCTION ip4(inet) RETURNS ip4 AS 'MODULE_PATHNAME','ip4_cast_from_inet' LANGUAGE C IMMUTABLE STRICT; 114CREATE OR REPLACE FUNCTION ip4(text) RETURNS ip4 AS 'MODULE_PATHNAME','ip4_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 115CREATE OR REPLACE FUNCTION ip4(ipaddress) RETURNS ip4 AS 'MODULE_PATHNAME','ipaddr_cast_to_ip4' LANGUAGE C IMMUTABLE STRICT; 116 117CREATE OR REPLACE FUNCTION ip6(numeric) RETURNS ip6 AS 'MODULE_PATHNAME','ip6_cast_from_numeric' LANGUAGE C IMMUTABLE STRICT; 118CREATE OR REPLACE FUNCTION ip6(inet) RETURNS ip6 AS 'MODULE_PATHNAME','ip6_cast_from_inet' LANGUAGE C IMMUTABLE STRICT; 119CREATE OR REPLACE FUNCTION ip6(text) RETURNS ip6 AS 'MODULE_PATHNAME','ip6_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 120CREATE OR REPLACE FUNCTION ip6(ipaddress) RETURNS ip6 AS 'MODULE_PATHNAME','ipaddr_cast_to_ip6' LANGUAGE C IMMUTABLE STRICT; 121 122CREATE OR REPLACE FUNCTION ipaddress(inet) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_cast_from_inet' LANGUAGE C IMMUTABLE STRICT; 123CREATE OR REPLACE FUNCTION ipaddress(ip4) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_cast_from_ip4' LANGUAGE C IMMUTABLE STRICT; 124CREATE OR REPLACE FUNCTION ipaddress(ip6) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_cast_from_ip6' LANGUAGE C IMMUTABLE STRICT; 125CREATE OR REPLACE FUNCTION ipaddress(text) RETURNS ipaddress AS 'MODULE_PATHNAME','ipaddr_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 126 127CREATE OR REPLACE FUNCTION ip4r(cidr) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_cast_from_cidr' LANGUAGE C IMMUTABLE STRICT; 128CREATE OR REPLACE FUNCTION ip4r(ip4) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_cast_from_ip4' LANGUAGE C IMMUTABLE STRICT; 129CREATE OR REPLACE FUNCTION ip4r(text) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 130CREATE OR REPLACE FUNCTION ip4r(iprange) RETURNS ip4r AS 'MODULE_PATHNAME','iprange_cast_to_ip4r' LANGUAGE C IMMUTABLE STRICT; 131 132CREATE OR REPLACE FUNCTION ip6r(cidr) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_cast_from_cidr' LANGUAGE C IMMUTABLE STRICT; 133CREATE OR REPLACE FUNCTION ip6r(ip6) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_cast_from_ip6' LANGUAGE C IMMUTABLE STRICT; 134CREATE OR REPLACE FUNCTION ip6r(text) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 135CREATE OR REPLACE FUNCTION ip6r(iprange) RETURNS ip6r AS 'MODULE_PATHNAME','iprange_cast_to_ip6r' LANGUAGE C IMMUTABLE STRICT; 136 137CREATE OR REPLACE FUNCTION iprange(cidr) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_cidr' LANGUAGE C IMMUTABLE STRICT; 138CREATE OR REPLACE FUNCTION iprange(ip4) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_ip4' LANGUAGE C IMMUTABLE STRICT; 139CREATE OR REPLACE FUNCTION iprange(ip6) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_ip6' LANGUAGE C IMMUTABLE STRICT; 140CREATE OR REPLACE FUNCTION iprange(ip4r) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_ip4r' LANGUAGE C IMMUTABLE STRICT; 141CREATE OR REPLACE FUNCTION iprange(ip6r) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_ip6r' LANGUAGE C IMMUTABLE STRICT; 142CREATE OR REPLACE FUNCTION iprange(ipaddress) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_ipaddr' LANGUAGE C IMMUTABLE STRICT; 143CREATE OR REPLACE FUNCTION iprange(text) RETURNS iprange AS 'MODULE_PATHNAME','iprange_cast_from_text' LANGUAGE C IMMUTABLE STRICT; 144 145-- ---------------------------------------------------------------------- 146-- Cast functions (outward) 147 148CREATE OR REPLACE FUNCTION cidr(ip4) RETURNS cidr AS 'MODULE_PATHNAME','ip4_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 149CREATE OR REPLACE FUNCTION cidr(ip4r) RETURNS cidr AS 'MODULE_PATHNAME','ip4r_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 150CREATE OR REPLACE FUNCTION cidr(ip6) RETURNS cidr AS 'MODULE_PATHNAME','ip6_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 151CREATE OR REPLACE FUNCTION cidr(ip6r) RETURNS cidr AS 'MODULE_PATHNAME','ip6r_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 152CREATE OR REPLACE FUNCTION cidr(ipaddress) RETURNS cidr AS 'MODULE_PATHNAME','ipaddr_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 153CREATE OR REPLACE FUNCTION cidr(iprange) RETURNS cidr AS 'MODULE_PATHNAME','iprange_cast_to_cidr' LANGUAGE C IMMUTABLE STRICT; 154 155CREATE OR REPLACE FUNCTION text(ip4) RETURNS text AS 'MODULE_PATHNAME','ip4_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 156CREATE OR REPLACE FUNCTION text(ip4r) RETURNS text AS 'MODULE_PATHNAME','ip4r_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 157CREATE OR REPLACE FUNCTION text(ip6) RETURNS text AS 'MODULE_PATHNAME','ip6_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 158CREATE OR REPLACE FUNCTION text(ip6r) RETURNS text AS 'MODULE_PATHNAME','ip6r_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 159CREATE OR REPLACE FUNCTION text(ipaddress) RETURNS text AS 'MODULE_PATHNAME','ipaddr_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 160CREATE OR REPLACE FUNCTION text(iprange) RETURNS text AS 'MODULE_PATHNAME','iprange_cast_to_text' LANGUAGE C IMMUTABLE STRICT; 161 162CREATE OR REPLACE FUNCTION to_bigint(ip4) RETURNS bigint AS 'MODULE_PATHNAME','ip4_cast_to_bigint' LANGUAGE C IMMUTABLE STRICT; 163CREATE OR REPLACE FUNCTION to_double(ip4) RETURNS double precision AS 'MODULE_PATHNAME','ip4_cast_to_double' LANGUAGE C IMMUTABLE STRICT; 164CREATE OR REPLACE FUNCTION to_numeric(ip4) RETURNS numeric AS 'MODULE_PATHNAME','ip4_cast_to_numeric' LANGUAGE C IMMUTABLE STRICT; 165CREATE OR REPLACE FUNCTION to_numeric(ip6) RETURNS numeric AS 'MODULE_PATHNAME','ip6_cast_to_numeric' LANGUAGE C IMMUTABLE STRICT; 166CREATE OR REPLACE FUNCTION to_numeric(ipaddress) RETURNS numeric AS 'MODULE_PATHNAME','ipaddr_cast_to_numeric' LANGUAGE C IMMUTABLE STRICT; 167 168-- ---------------------------------------------------------------------- 169-- Cast definitions (outward) 170 171-- all these are explicit, with the exception of casts from single-address 172-- types to "cidr", which we make assignment casts since they are lossless 173-- and preserve general semantics. 174 175ALTER EXTENSION ip4r ADD CAST (ip4 as bigint); 176ALTER EXTENSION ip4r ADD CAST (ip4 as double precision); 177CREATE CAST (ip4 as numeric) WITH FUNCTION to_numeric(ip4); 178ALTER EXTENSION ip4r ADD CAST (ip4 as text); 179 180ALTER EXTENSION ip4r ADD CAST (ip4 as cidr); 181 182ALTER EXTENSION ip4r ADD CAST (ip4r as cidr); 183ALTER EXTENSION ip4r ADD CAST (ip4r as text); 184 185CREATE CAST (ip6 as numeric) WITH FUNCTION to_numeric(ip6); 186CREATE CAST (ip6 as text) WITH FUNCTION text(ip6); 187 188CREATE CAST (ip6 as cidr) WITH FUNCTION cidr(ip6) AS ASSIGNMENT; 189 190CREATE CAST (ip6r as cidr) WITH FUNCTION cidr(ip6r); 191CREATE CAST (ip6r as text) WITH FUNCTION text(ip6r); 192 193CREATE CAST (ipaddress as numeric) WITH FUNCTION to_numeric(ipaddress); 194CREATE CAST (ipaddress as text) WITH FUNCTION text(ipaddress); 195 196CREATE CAST (ipaddress as cidr) WITH FUNCTION cidr(ipaddress) AS ASSIGNMENT; 197 198CREATE CAST (iprange as cidr) WITH FUNCTION cidr(iprange); 199CREATE CAST (iprange as text) WITH FUNCTION text(iprange); 200 201-- ---------------------------------------------------------------------- 202-- Cast definitions (inward) 203 204-- these are explicit except for casts from inet/cidr types. Even though 205-- such casts are lossy for inet, since the masklen isn't preserved, the 206-- semantics and common usage are enough to justify an assignment cast. 207 208ALTER EXTENSION ip4r ADD CAST (text as ip4); 209ALTER EXTENSION ip4r ADD CAST (text as ip4r); 210CREATE CAST (text as ip6) WITH FUNCTION ip6(text); 211CREATE CAST (text as ip6r) WITH FUNCTION ip6r(text); 212CREATE CAST (text as ipaddress) WITH FUNCTION ipaddress(text); 213CREATE CAST (text as iprange) WITH FUNCTION iprange(text); 214 215ALTER EXTENSION ip4r ADD CAST (bigint as ip4); 216ALTER EXTENSION ip4r ADD CAST (double precision as ip4); 217 218CREATE CAST (numeric as ip4) WITH FUNCTION ip4(numeric); 219CREATE CAST (numeric as ip6) WITH FUNCTION ip6(numeric); 220 221ALTER EXTENSION ip4r ADD CAST (cidr as ip4r); 222CREATE CAST (cidr as ip6r) WITH FUNCTION ip6r(cidr) AS ASSIGNMENT; 223CREATE CAST (cidr as iprange) WITH FUNCTION iprange(cidr) AS ASSIGNMENT; 224 225ALTER EXTENSION ip4r ADD CAST (inet as ip4); 226CREATE CAST (inet as ip6) WITH FUNCTION ip6(inet) AS ASSIGNMENT; 227CREATE CAST (inet as ipaddress) WITH FUNCTION ipaddress(inet) AS ASSIGNMENT; 228 229-- ---------------------------------------------------------------------- 230-- Cast definitions (cross-type) 231 232-- the lossless "upward" casts are made implict. 233 234ALTER EXTENSION ip4r ADD CAST (ip4 as ip4r); 235CREATE CAST (ip4 as ipaddress) WITH FUNCTION ipaddress(ip4) AS IMPLICIT; 236CREATE CAST (ip4 as iprange) WITH FUNCTION iprange(ip4) AS IMPLICIT; 237CREATE CAST (ip4r as iprange) WITH FUNCTION iprange(ip4r) AS IMPLICIT; 238 239CREATE CAST (ip6 as ip6r) WITH FUNCTION ip6r(ip6) AS IMPLICIT; 240CREATE CAST (ip6 as ipaddress) WITH FUNCTION ipaddress(ip6) AS IMPLICIT; 241CREATE CAST (ip6 as iprange) WITH FUNCTION iprange(ip6) AS IMPLICIT; 242CREATE CAST (ip6r as iprange) WITH FUNCTION iprange(ip6r) AS IMPLICIT; 243 244CREATE CAST (ipaddress as iprange) WITH FUNCTION iprange(ipaddress) AS IMPLICIT; 245 246CREATE CAST (ipaddress as ip4) WITH FUNCTION ip4(ipaddress); 247CREATE CAST (ipaddress as ip6) WITH FUNCTION ip6(ipaddress); 248 249CREATE CAST (iprange as ip4r) WITH FUNCTION ip4r(iprange); 250CREATE CAST (iprange as ip6r) WITH FUNCTION ip6r(iprange); 251 252-- ---------------------------------------------------------------------- 253-- Constructor functions 254 255CREATE OR REPLACE FUNCTION ip4r(ip4,ip4) RETURNS ip4r AS 'MODULE_PATHNAME', 'ip4r_from_ip4s' LANGUAGE C IMMUTABLE STRICT; 256CREATE OR REPLACE FUNCTION ip6r(ip6,ip6) RETURNS ip6r AS 'MODULE_PATHNAME', 'ip6r_from_ip6s' LANGUAGE C IMMUTABLE STRICT; 257CREATE OR REPLACE FUNCTION iprange(ip4,ip4) RETURNS iprange AS 'MODULE_PATHNAME', 'iprange_from_ip4s' LANGUAGE C IMMUTABLE STRICT; 258CREATE OR REPLACE FUNCTION iprange(ip6,ip6) RETURNS iprange AS 'MODULE_PATHNAME', 'iprange_from_ip6s' LANGUAGE C IMMUTABLE STRICT; 259CREATE OR REPLACE FUNCTION iprange(ipaddress,ipaddress) RETURNS iprange AS 'MODULE_PATHNAME', 'iprange_from_ipaddrs' LANGUAGE C IMMUTABLE STRICT; 260 261-- ---------------------------------------------------------------------- 262-- Utility functions (no operator equivalent) 263 264CREATE OR REPLACE FUNCTION family(ip4) RETURNS integer AS $f$ select 4; $f$ LANGUAGE SQL IMMUTABLE; 265CREATE OR REPLACE FUNCTION family(ip4r) RETURNS integer AS $f$ select 4; $f$ LANGUAGE SQL IMMUTABLE; 266CREATE OR REPLACE FUNCTION family(ip6) RETURNS integer AS $f$ select 6; $f$ LANGUAGE SQL IMMUTABLE; 267CREATE OR REPLACE FUNCTION family(ip6r) RETURNS integer AS $f$ select 6; $f$ LANGUAGE SQL IMMUTABLE; 268CREATE OR REPLACE FUNCTION family(ipaddress) RETURNS integer AS 'MODULE_PATHNAME', 'ipaddr_family' LANGUAGE C IMMUTABLE STRICT; 269CREATE OR REPLACE FUNCTION family(iprange) RETURNS integer AS 'MODULE_PATHNAME', 'iprange_family' LANGUAGE C IMMUTABLE STRICT; 270 271CREATE OR REPLACE FUNCTION ip4_netmask(integer) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_netmask' LANGUAGE C IMMUTABLE STRICT; 272CREATE OR REPLACE FUNCTION ip6_netmask(integer) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_netmask' LANGUAGE C IMMUTABLE STRICT; 273 274CREATE OR REPLACE FUNCTION is_cidr(ip4r) RETURNS boolean AS 'MODULE_PATHNAME', 'ip4r_is_cidr' LANGUAGE C IMMUTABLE STRICT; 275CREATE OR REPLACE FUNCTION is_cidr(ip6r) RETURNS boolean AS 'MODULE_PATHNAME', 'ip6r_is_cidr' LANGUAGE C IMMUTABLE STRICT; 276CREATE OR REPLACE FUNCTION is_cidr(iprange) RETURNS boolean AS 'MODULE_PATHNAME', 'iprange_is_cidr' LANGUAGE C IMMUTABLE STRICT; 277 278CREATE OR REPLACE FUNCTION masklen(ip4r) RETURNS integer AS 'MODULE_PATHNAME','ip4r_prefixlen' LANGUAGE C IMMUTABLE STRICT; 279CREATE OR REPLACE FUNCTION masklen(ip6r) RETURNS integer AS 'MODULE_PATHNAME','ip6r_prefixlen' LANGUAGE C IMMUTABLE STRICT; 280CREATE OR REPLACE FUNCTION masklen(iprange) RETURNS integer AS 'MODULE_PATHNAME','iprange_prefixlen' LANGUAGE C IMMUTABLE STRICT; 281 282CREATE OR REPLACE FUNCTION lower(ip4r) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4r_lower' LANGUAGE C IMMUTABLE STRICT; 283CREATE OR REPLACE FUNCTION lower(ip6r) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6r_lower' LANGUAGE C IMMUTABLE STRICT; 284CREATE OR REPLACE FUNCTION lower(iprange) RETURNS ipaddress AS 'MODULE_PATHNAME', 'iprange_lower' LANGUAGE C IMMUTABLE STRICT; 285 286CREATE OR REPLACE FUNCTION upper(ip4r) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4r_upper' LANGUAGE C IMMUTABLE STRICT; 287CREATE OR REPLACE FUNCTION upper(ip6r) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6r_upper' LANGUAGE C IMMUTABLE STRICT; 288CREATE OR REPLACE FUNCTION upper(iprange) RETURNS ipaddress AS 'MODULE_PATHNAME', 'iprange_upper' LANGUAGE C IMMUTABLE STRICT; 289 290CREATE OR REPLACE FUNCTION ip4_net_lower(ip4,integer) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_net_lower' LANGUAGE C IMMUTABLE STRICT; 291CREATE OR REPLACE FUNCTION ip6_net_lower(ip6,integer) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_net_lower' LANGUAGE C IMMUTABLE STRICT; 292CREATE OR REPLACE FUNCTION ipaddress_net_lower(ipaddress,integer) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_net_lower' LANGUAGE C IMMUTABLE STRICT; 293 294CREATE OR REPLACE FUNCTION ip4_net_upper(ip4,integer) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_net_upper' LANGUAGE C IMMUTABLE STRICT; 295CREATE OR REPLACE FUNCTION ip6_net_upper(ip6,integer) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_net_upper' LANGUAGE C IMMUTABLE STRICT; 296CREATE OR REPLACE FUNCTION ipaddress_net_upper(ipaddress,integer) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_net_upper' LANGUAGE C IMMUTABLE STRICT; 297 298CREATE OR REPLACE FUNCTION ip4r_union(ip4r, ip4r) RETURNS ip4r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 299CREATE OR REPLACE FUNCTION ip6r_union(ip6r, ip6r) RETURNS ip6r AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 300CREATE OR REPLACE FUNCTION iprange_union(iprange, iprange) RETURNS iprange AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 301 302CREATE OR REPLACE FUNCTION ip4r_inter(ip4r,ip4r) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_inter' LANGUAGE C IMMUTABLE STRICT; 303CREATE OR REPLACE FUNCTION ip6r_inter(ip6r,ip6r) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_inter' LANGUAGE C IMMUTABLE STRICT; 304CREATE OR REPLACE FUNCTION iprange_inter(iprange,iprange) RETURNS iprange AS 'MODULE_PATHNAME','iprange_inter' LANGUAGE C IMMUTABLE STRICT; 305 306-- ---------------------------------------------------------------------- 307-- Functions with operator equivalents 308 309-- it's intended that either the function form or the operator form be used, 310-- as desired. 311 312-- (ip / len) or (ip / mask) 313 314CREATE OR REPLACE FUNCTION ip4r_net_mask(ip4,ip4) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_net_mask' LANGUAGE C IMMUTABLE STRICT; 315CREATE OR REPLACE FUNCTION ip6r_net_mask(ip6,ip6) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_net_mask' LANGUAGE C IMMUTABLE STRICT; 316CREATE OR REPLACE FUNCTION iprange_net_mask(ip4,ip4) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_mask_ip4' LANGUAGE C IMMUTABLE STRICT; 317CREATE OR REPLACE FUNCTION iprange_net_mask(ip6,ip6) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_mask_ip6' LANGUAGE C IMMUTABLE STRICT; 318CREATE OR REPLACE FUNCTION iprange_net_mask(ipaddress,ipaddress) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_mask' LANGUAGE C IMMUTABLE STRICT; 319 320CREATE OR REPLACE FUNCTION ip4r_net_prefix(ip4,integer) RETURNS ip4r AS 'MODULE_PATHNAME','ip4r_net_prefix' LANGUAGE C IMMUTABLE STRICT; 321CREATE OR REPLACE FUNCTION ip6r_net_prefix(ip6,integer) RETURNS ip6r AS 'MODULE_PATHNAME','ip6r_net_prefix' LANGUAGE C IMMUTABLE STRICT; 322CREATE OR REPLACE FUNCTION iprange_net_prefix(ip4,integer) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_prefix_ip4' LANGUAGE C IMMUTABLE STRICT; 323CREATE OR REPLACE FUNCTION iprange_net_prefix(ip6,integer) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_prefix_ip6' LANGUAGE C IMMUTABLE STRICT; 324CREATE OR REPLACE FUNCTION iprange_net_prefix(ipaddress,integer) RETURNS iprange AS 'MODULE_PATHNAME','iprange_net_prefix' LANGUAGE C IMMUTABLE STRICT; 325 326CREATE OPERATOR / ( LEFTARG = ip4, RIGHTARG = ip4, PROCEDURE = ip4r_net_mask ); 327CREATE OPERATOR / ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6r_net_mask ); 328CREATE OPERATOR / ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = iprange_net_mask ); 329CREATE OPERATOR / ( LEFTARG = ip4, RIGHTARG = integer, PROCEDURE = ip4r_net_prefix ); 330CREATE OPERATOR / ( LEFTARG = ip6, RIGHTARG = integer, PROCEDURE = ip6r_net_prefix ); 331CREATE OPERATOR / ( LEFTARG = ipaddress, RIGHTARG = integer, PROCEDURE = iprange_net_prefix ); 332 333-- @ ipr (approximate size) or @@ ipr (exact size) 334 335CREATE OR REPLACE FUNCTION ip4r_size(ip4r) RETURNS double precision AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 336CREATE OR REPLACE FUNCTION ip6r_size(ip6r) RETURNS double precision AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 337CREATE OR REPLACE FUNCTION iprange_size(iprange) RETURNS double precision AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 338 339CREATE OR REPLACE FUNCTION ip4r_size_exact(ip4r) RETURNS numeric AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 340CREATE OR REPLACE FUNCTION ip6r_size_exact(ip6r) RETURNS numeric AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 341CREATE OR REPLACE FUNCTION iprange_size_exact(iprange) RETURNS numeric AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 342 343CREATE OPERATOR @ ( RIGHTARG = ip4r, PROCEDURE = ip4r_size ); 344CREATE OPERATOR @ ( RIGHTARG = ip6r, PROCEDURE = ip6r_size ); 345CREATE OPERATOR @ ( RIGHTARG = iprange, PROCEDURE = iprange_size ); 346 347CREATE OPERATOR @@ ( RIGHTARG = ip4r, PROCEDURE = ip4r_size_exact ); 348CREATE OPERATOR @@ ( RIGHTARG = ip6r, PROCEDURE = ip6r_size_exact ); 349CREATE OPERATOR @@ ( RIGHTARG = iprange, PROCEDURE = iprange_size_exact ); 350 351-- ---------------------------------------------------------------------- 352-- Operators 353 354-- the function forms of these aren't intended for general use 355 356-- bitwise ops: and (a & b), or (a | b), xor (a # b), not (~a) 357 358CREATE OR REPLACE FUNCTION ip4_and(ip4,ip4) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_and' LANGUAGE C IMMUTABLE STRICT; 359CREATE OR REPLACE FUNCTION ip6_and(ip6,ip6) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_and' LANGUAGE C IMMUTABLE STRICT; 360CREATE OR REPLACE FUNCTION ipaddress_and(ipaddress,ipaddress) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_and' LANGUAGE C IMMUTABLE STRICT; 361 362ALTER EXTENSION ip4r ADD OPERATOR &(ip4,ip4); 363CREATE OPERATOR & ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_and ); 364CREATE OPERATOR & ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_and ); 365 366CREATE OR REPLACE FUNCTION ip4_or(ip4,ip4) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_or' LANGUAGE C IMMUTABLE STRICT; 367CREATE OR REPLACE FUNCTION ip6_or(ip6,ip6) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_or' LANGUAGE C IMMUTABLE STRICT; 368CREATE OR REPLACE FUNCTION ipaddress_or(ipaddress,ipaddress) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_or' LANGUAGE C IMMUTABLE STRICT; 369 370ALTER EXTENSION ip4r ADD OPERATOR |(ip4,ip4); 371CREATE OPERATOR | ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_or ); 372CREATE OPERATOR | ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_or ); 373 374CREATE OR REPLACE FUNCTION ip4_not(ip4) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_not' LANGUAGE C IMMUTABLE STRICT; 375CREATE OR REPLACE FUNCTION ip6_not(ip6) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_not' LANGUAGE C IMMUTABLE STRICT; 376CREATE OR REPLACE FUNCTION ipaddress_not(ipaddress) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_not' LANGUAGE C IMMUTABLE STRICT; 377 378ALTER EXTENSION ip4r ADD OPERATOR ~(NONE,ip4); 379CREATE OPERATOR ~ ( RIGHTARG = ip6, PROCEDURE = ip6_not ); 380CREATE OPERATOR ~ ( RIGHTARG = ipaddress, PROCEDURE = ipaddress_not ); 381 382CREATE OR REPLACE FUNCTION ip4_xor(ip4,ip4) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_xor' LANGUAGE C IMMUTABLE STRICT; 383CREATE OR REPLACE FUNCTION ip6_xor(ip6,ip6) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_xor' LANGUAGE C IMMUTABLE STRICT; 384CREATE OR REPLACE FUNCTION ipaddress_xor(ipaddress,ipaddress) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_xor' LANGUAGE C IMMUTABLE STRICT; 385 386ALTER EXTENSION ip4r ADD OPERATOR #(ip4,ip4); 387CREATE OPERATOR # ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_xor ); 388CREATE OPERATOR # ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_xor ); 389 390-- arithmetic ops: (ip + n), (ip - n), (ip - ip) where n is a numeric or integer type 391 392CREATE OR REPLACE FUNCTION ip4_plus_bigint(ip4,bigint) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_plus_bigint' LANGUAGE C IMMUTABLE STRICT; 393CREATE OR REPLACE FUNCTION ip4_plus_int(ip4,integer) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_plus_int' LANGUAGE C IMMUTABLE STRICT; 394CREATE OR REPLACE FUNCTION ip4_plus_numeric(ip4,numeric) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_plus_numeric' LANGUAGE C IMMUTABLE STRICT; 395 396ALTER EXTENSION ip4r ADD OPERATOR +(ip4,bigint); 397ALTER EXTENSION ip4r ADD OPERATOR +(ip4,integer); 398CREATE OPERATOR + ( LEFTARG = ip4, RIGHTARG = numeric, PROCEDURE = ip4_plus_numeric ); 399 400CREATE OR REPLACE FUNCTION ip6_plus_bigint(ip6,bigint) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_plus_bigint' LANGUAGE C IMMUTABLE STRICT; 401CREATE OR REPLACE FUNCTION ip6_plus_int(ip6,integer) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_plus_int' LANGUAGE C IMMUTABLE STRICT; 402CREATE OR REPLACE FUNCTION ip6_plus_numeric(ip6,numeric) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_plus_numeric' LANGUAGE C IMMUTABLE STRICT; 403 404CREATE OPERATOR + ( LEFTARG = ip6, RIGHTARG = bigint, PROCEDURE = ip6_plus_bigint ); 405CREATE OPERATOR + ( LEFTARG = ip6, RIGHTARG = integer, PROCEDURE = ip6_plus_int ); 406CREATE OPERATOR + ( LEFTARG = ip6, RIGHTARG = numeric, PROCEDURE = ip6_plus_numeric ); 407 408CREATE OR REPLACE FUNCTION ipaddress_plus_bigint(ipaddress,bigint) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_plus_bigint' LANGUAGE C IMMUTABLE STRICT; 409CREATE OR REPLACE FUNCTION ipaddress_plus_int(ipaddress,integer) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_plus_int' LANGUAGE C IMMUTABLE STRICT; 410CREATE OR REPLACE FUNCTION ipaddress_plus_numeric(ipaddress,numeric) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_plus_numeric' LANGUAGE C IMMUTABLE STRICT; 411 412CREATE OPERATOR + ( LEFTARG = ipaddress, RIGHTARG = bigint, PROCEDURE = ipaddress_plus_bigint ); 413CREATE OPERATOR + ( LEFTARG = ipaddress, RIGHTARG = integer, PROCEDURE = ipaddress_plus_int ); 414CREATE OPERATOR + ( LEFTARG = ipaddress, RIGHTARG = numeric, PROCEDURE = ipaddress_plus_numeric ); 415 416CREATE OR REPLACE FUNCTION ip4_minus_bigint(ip4,bigint) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_minus_bigint' LANGUAGE C IMMUTABLE STRICT; 417CREATE OR REPLACE FUNCTION ip4_minus_int(ip4,integer) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_minus_int' LANGUAGE C IMMUTABLE STRICT; 418CREATE OR REPLACE FUNCTION ip4_minus_numeric(ip4,numeric) RETURNS ip4 AS 'MODULE_PATHNAME', 'ip4_minus_numeric' LANGUAGE C IMMUTABLE STRICT; 419 420ALTER EXTENSION ip4r ADD OPERATOR -(ip4,bigint); 421ALTER EXTENSION ip4r ADD OPERATOR -(ip4,integer); 422CREATE OPERATOR - ( LEFTARG = ip4, RIGHTARG = numeric, PROCEDURE = ip4_minus_numeric ); 423 424CREATE OR REPLACE FUNCTION ip6_minus_bigint(ip6,bigint) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_minus_bigint' LANGUAGE C IMMUTABLE STRICT; 425CREATE OR REPLACE FUNCTION ip6_minus_int(ip6,integer) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_minus_int' LANGUAGE C IMMUTABLE STRICT; 426CREATE OR REPLACE FUNCTION ip6_minus_numeric(ip6,numeric) RETURNS ip6 AS 'MODULE_PATHNAME', 'ip6_minus_numeric' LANGUAGE C IMMUTABLE STRICT; 427 428CREATE OPERATOR - ( LEFTARG = ip6, RIGHTARG = bigint, PROCEDURE = ip6_minus_bigint ); 429CREATE OPERATOR - ( LEFTARG = ip6, RIGHTARG = integer, PROCEDURE = ip6_minus_int ); 430CREATE OPERATOR - ( LEFTARG = ip6, RIGHTARG = numeric, PROCEDURE = ip6_minus_numeric ); 431 432CREATE OR REPLACE FUNCTION ipaddress_minus_bigint(ipaddress,bigint) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_minus_bigint' LANGUAGE C IMMUTABLE STRICT; 433CREATE OR REPLACE FUNCTION ipaddress_minus_int(ipaddress,integer) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_minus_int' LANGUAGE C IMMUTABLE STRICT; 434CREATE OR REPLACE FUNCTION ipaddress_minus_numeric(ipaddress,numeric) RETURNS ipaddress AS 'MODULE_PATHNAME', 'ipaddr_minus_numeric' LANGUAGE C IMMUTABLE STRICT; 435 436CREATE OPERATOR - ( LEFTARG = ipaddress, RIGHTARG = bigint, PROCEDURE = ipaddress_minus_bigint ); 437CREATE OPERATOR - ( LEFTARG = ipaddress, RIGHTARG = integer, PROCEDURE = ipaddress_minus_int ); 438CREATE OPERATOR - ( LEFTARG = ipaddress, RIGHTARG = numeric, PROCEDURE = ipaddress_minus_numeric ); 439 440CREATE OR REPLACE FUNCTION ip4_minus_ip4(ip4,ip4) RETURNS bigint AS 'MODULE_PATHNAME', 'ip4_minus_ip4' LANGUAGE C IMMUTABLE STRICT; 441CREATE OR REPLACE FUNCTION ip6_minus_ip6(ip6,ip6) RETURNS numeric AS 'MODULE_PATHNAME', 'ip6_minus_ip6' LANGUAGE C IMMUTABLE STRICT; 442CREATE OR REPLACE FUNCTION ipaddress_minus_ipaddress(ipaddress,ipaddress) RETURNS numeric AS 'MODULE_PATHNAME', 'ipaddr_minus_ipaddr' LANGUAGE C IMMUTABLE STRICT; 443 444ALTER EXTENSION ip4r ADD OPERATOR -(ip4,ip4); 445CREATE OPERATOR - ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_minus_ip6 ); 446CREATE OPERATOR - ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_minus_ipaddress ); 447 448-- containment predicates: (a >>= b), (a >> b), (a <<= b), (a << b), (a && b) 449 450CREATE OR REPLACE FUNCTION ip4r_contained_by(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 451CREATE OR REPLACE FUNCTION ip6r_contained_by(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 452CREATE OR REPLACE FUNCTION iprange_contained_by(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 453 454ALTER EXTENSION ip4r ADD OPERATOR <<=(ip4r,ip4r); 455CREATE OPERATOR <<= ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_contained_by, COMMUTATOR = '>>=', RESTRICT = contsel, JOIN = contjoinsel ); 456CREATE OPERATOR <<= ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_contained_by, COMMUTATOR = '>>=', RESTRICT = contsel, JOIN = contjoinsel ); 457 458CREATE OR REPLACE FUNCTION ip4r_contained_by_strict(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 459CREATE OR REPLACE FUNCTION ip6r_contained_by_strict(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 460CREATE OR REPLACE FUNCTION iprange_contained_by_strict(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 461 462ALTER EXTENSION ip4r ADD OPERATOR <<(ip4r,ip4r); 463CREATE OPERATOR << ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_contained_by_strict, COMMUTATOR = '>>', RESTRICT = contsel, JOIN = contjoinsel ); 464CREATE OPERATOR << ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_contained_by_strict, COMMUTATOR = '>>', RESTRICT = contsel, JOIN = contjoinsel ); 465 466CREATE OR REPLACE FUNCTION ip4r_contains(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 467CREATE OR REPLACE FUNCTION ip6r_contains(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 468CREATE OR REPLACE FUNCTION iprange_contains(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 469 470ALTER EXTENSION ip4r ADD OPERATOR >>=(ip4r,ip4r); 471CREATE OPERATOR >>= ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_contains, COMMUTATOR = '<<=', RESTRICT = contsel, JOIN = contjoinsel ); 472CREATE OPERATOR >>= ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_contains, COMMUTATOR = '<<=', RESTRICT = contsel, JOIN = contjoinsel ); 473 474CREATE OR REPLACE FUNCTION ip4r_contains_strict(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 475CREATE OR REPLACE FUNCTION ip6r_contains_strict(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 476CREATE OR REPLACE FUNCTION iprange_contains_strict(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 477 478ALTER EXTENSION ip4r ADD OPERATOR >>(ip4r,ip4r); 479CREATE OPERATOR >> ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_contains_strict, COMMUTATOR = '<<', RESTRICT = contsel, JOIN = contjoinsel ); 480CREATE OPERATOR >> ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_contains_strict, COMMUTATOR = '<<', RESTRICT = contsel, JOIN = contjoinsel ); 481 482CREATE OR REPLACE FUNCTION ip4r_overlaps(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 483CREATE OR REPLACE FUNCTION ip6r_overlaps(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 484CREATE OR REPLACE FUNCTION iprange_overlaps(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 485 486ALTER EXTENSION ip4r ADD OPERATOR &&(ip4r,ip4r); 487CREATE OPERATOR && ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_overlaps, COMMUTATOR = '&&', RESTRICT = areasel, JOIN = areajoinsel ); 488CREATE OPERATOR && ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_overlaps, COMMUTATOR = '&&', RESTRICT = areasel, JOIN = areajoinsel ); 489 490-- cross-type containment 491-- no operators for these since they seem to do more harm than good. These cases 492-- are handled by implicit casts instead. 493 494CREATE OR REPLACE FUNCTION ip4_contained_by(ip4,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 495CREATE OR REPLACE FUNCTION ip4_contained_by(ip4,iprange) RETURNS bool AS 'MODULE_PATHNAME','iprange_ip4_contained_by' LANGUAGE C IMMUTABLE STRICT; 496CREATE OR REPLACE FUNCTION ip6_contained_by(ip6,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 497CREATE OR REPLACE FUNCTION ip6_contained_by(ip6,iprange) RETURNS bool AS 'MODULE_PATHNAME','iprange_ip6_contained_by' LANGUAGE C IMMUTABLE STRICT; 498CREATE OR REPLACE FUNCTION ipaddress_contained_by(ipaddress,iprange) RETURNS bool AS 'MODULE_PATHNAME','iprange_ip_contained_by' LANGUAGE C IMMUTABLE STRICT; 499 500CREATE OR REPLACE FUNCTION ip4_contains(ip4r,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 501CREATE OR REPLACE FUNCTION ip6_contains(ip6r,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 502CREATE OR REPLACE FUNCTION ip4_contains(iprange,ip4) RETURNS bool AS 'MODULE_PATHNAME','iprange_contains_ip4' LANGUAGE C IMMUTABLE STRICT; 503CREATE OR REPLACE FUNCTION ip6_contains(iprange,ip6) RETURNS bool AS 'MODULE_PATHNAME','iprange_contains_ip6' LANGUAGE C IMMUTABLE STRICT; 504CREATE OR REPLACE FUNCTION ipaddress_contains(iprange,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','iprange_contains_ip' LANGUAGE C IMMUTABLE STRICT; 505 506-- btree (strict weak) ordering operators 507-- meaning of < > for ip4 and ip6 is obvious. 508-- for ipaddress, all ip4 addresses are less than all ip6 addresses 509-- for ip4r/ip6r, the order is lexicographic on (lower,upper) 510-- for iprange, the universal range is lowest, then all ip4 ranges, then ip6 511 512CREATE OR REPLACE FUNCTION ip4_eq(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 513CREATE OR REPLACE FUNCTION ip4r_eq(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 514CREATE OR REPLACE FUNCTION ip6_eq(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 515CREATE OR REPLACE FUNCTION ip6r_eq(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 516CREATE OR REPLACE FUNCTION ipaddress_eq(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_eq' LANGUAGE C IMMUTABLE STRICT; 517CREATE OR REPLACE FUNCTION iprange_eq(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 518 519ALTER EXTENSION ip4r ADD OPERATOR =(ip4,ip4); 520ALTER EXTENSION ip4r ADD OPERATOR =(ip4r,ip4r); 521CREATE OPERATOR = ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_eq, COMMUTATOR = '=', NEGATOR = '<>', RESTRICT = eqsel, JOIN = eqjoinsel, SORT1 = '<', SORT2 = '<', HASHES ); 522CREATE OPERATOR = ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_eq, COMMUTATOR = '=', NEGATOR = '<>', RESTRICT = eqsel, JOIN = eqjoinsel, SORT1 = '<', SORT2 = '<', HASHES ); 523CREATE OPERATOR = ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_eq, COMMUTATOR = '=', NEGATOR = '<>', RESTRICT = eqsel, JOIN = eqjoinsel, SORT1 = '<', SORT2 = '<', HASHES ); 524CREATE OPERATOR = ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_eq, COMMUTATOR = '=', NEGATOR = '<>', RESTRICT = eqsel, JOIN = eqjoinsel, SORT1 = '<', SORT2 = '<', HASHES ); 525 526CREATE OR REPLACE FUNCTION ip4_ge(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 527CREATE OR REPLACE FUNCTION ip4r_ge(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 528CREATE OR REPLACE FUNCTION ip6_ge(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 529CREATE OR REPLACE FUNCTION ip6r_ge(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 530CREATE OR REPLACE FUNCTION ipaddress_ge(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_ge' LANGUAGE C IMMUTABLE STRICT; 531CREATE OR REPLACE FUNCTION iprange_ge(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 532 533ALTER EXTENSION ip4r ADD OPERATOR >=(ip4,ip4); 534ALTER EXTENSION ip4r ADD OPERATOR >=(ip4r,ip4r); 535CREATE OPERATOR >= ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 536CREATE OPERATOR >= ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 537CREATE OPERATOR >= ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 538CREATE OPERATOR >= ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 539 540CREATE OR REPLACE FUNCTION ip4_gt(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 541CREATE OR REPLACE FUNCTION ip4r_gt(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 542CREATE OR REPLACE FUNCTION ip6_gt(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 543CREATE OR REPLACE FUNCTION ip6r_gt(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 544CREATE OR REPLACE FUNCTION ipaddress_gt(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_gt' LANGUAGE C IMMUTABLE STRICT; 545CREATE OR REPLACE FUNCTION iprange_gt(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 546 547ALTER EXTENSION ip4r ADD OPERATOR >(ip4,ip4); 548ALTER EXTENSION ip4r ADD OPERATOR >(ip4r,ip4r); 549CREATE OPERATOR > ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 550CREATE OPERATOR > ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 551CREATE OPERATOR > ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 552CREATE OPERATOR > ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); 553 554CREATE OR REPLACE FUNCTION ip4_le(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 555CREATE OR REPLACE FUNCTION ip4r_le(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 556CREATE OR REPLACE FUNCTION ip6_le(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 557CREATE OR REPLACE FUNCTION ip6r_le(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 558CREATE OR REPLACE FUNCTION ipaddress_le(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_le' LANGUAGE C IMMUTABLE STRICT; 559CREATE OR REPLACE FUNCTION iprange_le(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 560 561ALTER EXTENSION ip4r ADD OPERATOR <=(ip4,ip4); 562ALTER EXTENSION ip4r ADD OPERATOR <=(ip4r,ip4r); 563CREATE OPERATOR <= ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 564CREATE OPERATOR <= ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 565CREATE OPERATOR <= ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 566CREATE OPERATOR <= ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 567 568CREATE OR REPLACE FUNCTION ip4_lt(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 569CREATE OR REPLACE FUNCTION ip4r_lt(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 570CREATE OR REPLACE FUNCTION ip6_lt(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 571CREATE OR REPLACE FUNCTION ip6r_lt(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 572CREATE OR REPLACE FUNCTION ipaddress_lt(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_lt' LANGUAGE C IMMUTABLE STRICT; 573CREATE OR REPLACE FUNCTION iprange_lt(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 574 575ALTER EXTENSION ip4r ADD OPERATOR <(ip4,ip4); 576ALTER EXTENSION ip4r ADD OPERATOR <(ip4r,ip4r); 577CREATE OPERATOR < ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 578CREATE OPERATOR < ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 579CREATE OPERATOR < ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 580CREATE OPERATOR < ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); 581 582CREATE OR REPLACE FUNCTION ip4_neq(ip4,ip4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 583CREATE OR REPLACE FUNCTION ip4r_neq(ip4r,ip4r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 584CREATE OR REPLACE FUNCTION ip6_neq(ip6,ip6) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 585CREATE OR REPLACE FUNCTION ip6r_neq(ip6r,ip6r) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 586CREATE OR REPLACE FUNCTION ipaddress_neq(ipaddress,ipaddress) RETURNS bool AS 'MODULE_PATHNAME','ipaddr_neq' LANGUAGE C IMMUTABLE STRICT; 587CREATE OR REPLACE FUNCTION iprange_neq(iprange,iprange) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 588 589ALTER EXTENSION ip4r ADD OPERATOR <>(ip4,ip4); 590ALTER EXTENSION ip4r ADD OPERATOR <>(ip4r,ip4r); 591CREATE OPERATOR <> ( LEFTARG = ip6, RIGHTARG = ip6, PROCEDURE = ip6_neq, COMMUTATOR = '<>', NEGATOR = '=', RESTRICT = neqsel, JOIN = neqjoinsel ); 592CREATE OPERATOR <> ( LEFTARG = ip6r, RIGHTARG = ip6r, PROCEDURE = ip6r_neq, COMMUTATOR = '<>', NEGATOR = '=', RESTRICT = neqsel, JOIN = neqjoinsel ); 593CREATE OPERATOR <> ( LEFTARG = ipaddress, RIGHTARG = ipaddress, PROCEDURE = ipaddress_neq, COMMUTATOR = '<>', NEGATOR = '=', RESTRICT = neqsel, JOIN = neqjoinsel ); 594CREATE OPERATOR <> ( LEFTARG = iprange, RIGHTARG = iprange, PROCEDURE = iprange_neq, COMMUTATOR = '<>', NEGATOR = '=', RESTRICT = neqsel, JOIN = neqjoinsel ); 595 596-- ---------------------------------------------------------------------- 597-- Btree index 598 599CREATE OR REPLACE FUNCTION ip4_cmp(ip4,ip4) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 600CREATE OR REPLACE FUNCTION ip4r_cmp(ip4r,ip4r) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 601CREATE OR REPLACE FUNCTION ip6_cmp(ip6,ip6) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 602CREATE OR REPLACE FUNCTION ip6r_cmp(ip6r,ip6r) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 603CREATE OR REPLACE FUNCTION ipaddress_cmp(ipaddress,ipaddress) RETURNS integer AS 'MODULE_PATHNAME','ipaddr_cmp' LANGUAGE C IMMUTABLE STRICT; 604CREATE OR REPLACE FUNCTION iprange_cmp(iprange,iprange) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; 605 606ALTER EXTENSION ip4r ADD OPERATOR CLASS btree_ip4_ops USING btree; 607ALTER EXTENSION ip4r ADD OPERATOR CLASS btree_ip4r_ops USING btree; 608 609CREATE OPERATOR CLASS btree_ip6_ops DEFAULT FOR TYPE ip6 USING btree AS 610 OPERATOR 1 < , 611 OPERATOR 2 <= , 612 OPERATOR 3 = , 613 OPERATOR 4 >= , 614 OPERATOR 5 > , 615 FUNCTION 1 ip6_cmp(ip6, ip6); 616 617CREATE OPERATOR CLASS btree_ip6r_ops DEFAULT FOR TYPE ip6r USING btree AS 618 OPERATOR 1 < , 619 OPERATOR 2 <= , 620 OPERATOR 3 = , 621 OPERATOR 4 >= , 622 OPERATOR 5 > , 623 FUNCTION 1 ip6r_cmp(ip6r, ip6r); 624 625CREATE OPERATOR CLASS btree_ipaddress_ops DEFAULT FOR TYPE ipaddress USING btree AS 626 OPERATOR 1 < , 627 OPERATOR 2 <= , 628 OPERATOR 3 = , 629 OPERATOR 4 >= , 630 OPERATOR 5 > , 631 FUNCTION 1 ipaddress_cmp(ipaddress, ipaddress); 632 633CREATE OPERATOR CLASS btree_iprange_ops DEFAULT FOR TYPE iprange USING btree AS 634 OPERATOR 1 < , 635 OPERATOR 2 <= , 636 OPERATOR 3 = , 637 OPERATOR 4 >= , 638 OPERATOR 5 > , 639 FUNCTION 1 iprange_cmp(iprange, iprange); 640 641-- ---------------------------------------------------------------------- 642-- Hash index 643 644-- the hash index definitions are needed for hashagg, hashjoin, hash-distinct, hashsetop 645-- etc. even if no actual hash indexes are used. 646 647CREATE OR REPLACE FUNCTION ip4hash(ip4) RETURNS integer AS 'MODULE_PATHNAME', 'ip4hash' LANGUAGE C IMMUTABLE STRICT; 648CREATE OR REPLACE FUNCTION ip6hash(ip6) RETURNS integer AS 'MODULE_PATHNAME', 'ip6hash' LANGUAGE C IMMUTABLE STRICT; 649CREATE OR REPLACE FUNCTION ipaddresshash(ipaddress) RETURNS integer AS 'MODULE_PATHNAME', 'ipaddr_hash' LANGUAGE C IMMUTABLE STRICT; 650CREATE OR REPLACE FUNCTION ip4rhash(ip4r) RETURNS integer AS 'MODULE_PATHNAME', 'ip4rhash' LANGUAGE C IMMUTABLE STRICT; 651CREATE OR REPLACE FUNCTION ip6rhash(ip6r) RETURNS integer AS 'MODULE_PATHNAME', 'ip6rhash' LANGUAGE C IMMUTABLE STRICT; 652CREATE OR REPLACE FUNCTION iprangehash(iprange) RETURNS integer AS 'MODULE_PATHNAME', 'iprange_hash' LANGUAGE C IMMUTABLE STRICT; 653 654ALTER EXTENSION ip4r ADD OPERATOR CLASS hash_ip4_ops USING hash; 655ALTER EXTENSION ip4r ADD OPERATOR CLASS hash_ip4r_ops USING hash; 656 657CREATE OPERATOR CLASS hash_ip6_ops DEFAULT FOR TYPE ip6 USING hash AS 658 OPERATOR 1 = , 659 FUNCTION 1 ip6hash(ip6); 660 661CREATE OPERATOR CLASS hash_ip6r_ops DEFAULT FOR TYPE ip6r USING hash AS 662 OPERATOR 1 = , 663 FUNCTION 1 ip6rhash(ip6r); 664 665CREATE OPERATOR CLASS hash_ipaddress_ops DEFAULT FOR TYPE ipaddress USING hash AS 666 OPERATOR 1 = , 667 FUNCTION 1 ipaddresshash(ipaddress); 668 669CREATE OPERATOR CLASS hash_iprange_ops DEFAULT FOR TYPE iprange USING hash AS 670 OPERATOR 1 = , 671 FUNCTION 1 iprangehash(iprange); 672 673-- ---------------------------------------------------------------------- 674-- GiST 675 676-- these type declarations are actually wrong for 8.4+ (which added 677-- more args to consistent) but we ignore that because the access 678-- method code doesn't actually look at the function declaration, and 679-- the differences are handled in the C code. Having the SQL 680-- definition changing is just too much of a pain. 681 682CREATE OR REPLACE FUNCTION gip4r_consistent(internal,ip4r,int4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C; 683CREATE OR REPLACE FUNCTION gip4r_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 684CREATE OR REPLACE FUNCTION gip4r_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 685CREATE OR REPLACE FUNCTION gip4r_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C STRICT; 686CREATE OR REPLACE FUNCTION gip4r_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 687CREATE OR REPLACE FUNCTION gip4r_union(internal, internal) RETURNS ip4r AS 'MODULE_PATHNAME' LANGUAGE C; 688CREATE OR REPLACE FUNCTION gip4r_same(ip4r, ip4r, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 689 690CREATE OR REPLACE FUNCTION gip6r_consistent(internal,ip6r,int4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C; 691CREATE OR REPLACE FUNCTION gip6r_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 692CREATE OR REPLACE FUNCTION gip6r_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 693CREATE OR REPLACE FUNCTION gip6r_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C STRICT; 694CREATE OR REPLACE FUNCTION gip6r_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 695CREATE OR REPLACE FUNCTION gip6r_union(internal, internal) RETURNS ip6r AS 'MODULE_PATHNAME' LANGUAGE C; 696CREATE OR REPLACE FUNCTION gip6r_same(ip6r, ip6r, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 697 698CREATE OR REPLACE FUNCTION gipr_consistent(internal,iprange,int4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C; 699CREATE OR REPLACE FUNCTION gipr_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 700CREATE OR REPLACE FUNCTION gipr_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 701CREATE OR REPLACE FUNCTION gipr_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C STRICT; 702CREATE OR REPLACE FUNCTION gipr_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 703CREATE OR REPLACE FUNCTION gipr_union(internal, internal) RETURNS iprange AS 'MODULE_PATHNAME' LANGUAGE C; 704CREATE OR REPLACE FUNCTION gipr_same(iprange, iprange, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C; 705 706ALTER EXTENSION ip4r ADD OPERATOR CLASS gist_ip4r_ops USING gist; 707 708CREATE OPERATOR CLASS gist_ip6r_ops DEFAULT FOR TYPE ip6r USING gist AS 709 OPERATOR 1 >>= , 710 OPERATOR 2 <<= , 711 OPERATOR 3 >> , 712 OPERATOR 4 << , 713 OPERATOR 5 && , 714 OPERATOR 6 = , 715 FUNCTION 1 gip6r_consistent (internal, ip6r, int4), 716 FUNCTION 2 gip6r_union (internal, internal), 717 FUNCTION 3 gip6r_compress (internal), 718 FUNCTION 4 gip6r_decompress (internal), 719 FUNCTION 5 gip6r_penalty (internal, internal, internal), 720 FUNCTION 6 gip6r_picksplit (internal, internal), 721 FUNCTION 7 gip6r_same (ip6r, ip6r, internal); 722 723CREATE OPERATOR CLASS gist_iprange_ops DEFAULT FOR TYPE iprange USING gist AS 724 OPERATOR 1 >>= , 725 OPERATOR 2 <<= , 726 OPERATOR 3 >> , 727 OPERATOR 4 << , 728 OPERATOR 5 && , 729 OPERATOR 6 = , 730 FUNCTION 1 gipr_consistent (internal, iprange, int4), 731 FUNCTION 2 gipr_union (internal, internal), 732 FUNCTION 3 gipr_compress (internal), 733 FUNCTION 4 gipr_decompress (internal), 734 FUNCTION 5 gipr_penalty (internal, internal, internal), 735 FUNCTION 6 gipr_picksplit (internal, internal), 736 FUNCTION 7 gipr_same (iprange, iprange, internal); 737 738-- cleanup old cruft 739 740DROP OPERATOR IF EXISTS @(ip4r,ip4r); 741DROP OPERATOR IF EXISTS ~(ip4r,ip4r); 742 743DROP OPERATOR IF EXISTS &<<(ip4r,ip4r); 744DROP OPERATOR IF EXISTS &>>(ip4r,ip4r); 745DROP OPERATOR IF EXISTS <<<(ip4r,ip4r); 746DROP OPERATOR IF EXISTS >>>(ip4r,ip4r); 747 748DROP FUNCTION IF EXISTS ip4r_left_of(ip4r,ip4r); 749DROP FUNCTION IF EXISTS ip4r_left_overlap(ip4r,ip4r); 750DROP FUNCTION IF EXISTS ip4r_right_of(ip4r,ip4r); 751DROP FUNCTION IF EXISTS ip4r_right_overlap(ip4r,ip4r); 752 753-- end 754