summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/network.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-06-17 02:05:20 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-06-17 02:05:20 +0000
commit1f1ca182be3b7a675467c82c92e05853e67c5d3a (patch)
tree33094e5103f6d4661af7e2a4a7f82ffcaf0c04b9 /src/backend/utils/adt/network.c
parent2917f0a5dd041295bd7e19f6bf868827640d44b0 (diff)
Make inet/cidr << and <<= operators indexable. From Alex Pilosov <alex@pilosoft.com>.
Diffstat (limited to 'src/backend/utils/adt/network.c')
-rw-r--r--src/backend/utils/adt/network.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c
index 126883a7696..5859e08fbaa 100644
--- a/src/backend/utils/adt/network.c
+++ b/src/backend/utils/adt/network.c
@@ -3,7 +3,7 @@
* is for IP V4 CIDR notation, but prepared for V6: just
* add the necessary bits where the comments indicate.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.31 2001/06/13 21:08:59 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.32 2001/06/17 02:05:20 tgl Exp $
*
* Jon Postel RIP 16 Oct 1998
*/
@@ -707,3 +707,31 @@ v4addressOK(unsigned long a1, int bits)
return true;
return false;
}
+
+
+/*
+ * These functions are used by planner to generate indexscan limits
+ * for clauses a << b and a <<= b
+ */
+
+/* return the minimal value for an IP on a given network */
+Datum
+network_scan_first(Datum in)
+{
+ return DirectFunctionCall1(network_network, in);
+}
+
+/*
+ * return "last" IP on a given network. It's the broadcast address,
+ * however, masklen has to be set to 32, since
+ * 192.168.0.255/24 is considered less than 192.168.0.255/32
+ *
+ * NB: this is not IPv6 ready ...
+ */
+Datum
+network_scan_last(Datum in)
+{
+ return DirectFunctionCall2(inet_set_masklen,
+ DirectFunctionCall1(network_broadcast, in),
+ Int32GetDatum(32));
+}