On Tue, May 6, 2014 at 10:49 PM, Michael Paquier
<michael.paqu...@gmail.com> wrote:
> Makes sense, especially knowing operators needed for btree processing
> are already defined. Patch attached solves that.
Please find attached an updated patch, I completely forgot that the
compare function needs to return {-1, 0, 1}.
-- 
Michael

diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index e2b528a..baf789a 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -150,6 +150,28 @@ pg_lsn_ge(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(lsn1 >= lsn2);
 }
 
+/* handler for btree index operator */
+Datum
+pg_lsn_cmp(PG_FUNCTION_ARGS)
+{
+       XLogRecPtr lsn1 = PG_GETARG_LSN(0);
+       XLogRecPtr lsn2 = PG_GETARG_LSN(1);
+
+       if (lsn1 < lsn2)
+               PG_RETURN_INT32(-1);
+       if (lsn1 > lsn2)
+               PG_RETURN_INT32(1);
+       PG_RETURN_INT32(0);
+}
+
+/* hash index support */
+Datum
+pg_lsn_hash(PG_FUNCTION_ARGS)
+{
+       XLogRecPtr lsn = PG_GETARG_LSN(0);
+
+       return hashint8(lsn);
+}
 
 /*----------------------------------------------------------
  *     Arithmetic operators on PostgreSQL LSNs.
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 8efd3be..5cd170d 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -513,6 +513,16 @@ DATA(insert (      2968  2950 2950 4 s 2977        403 0 
));
 DATA(insert (  2968  2950 2950 5 s 2975        403 0 ));
 
 /*
+ * btree pglsn_ops
+ */
+
+DATA(insert (  3260  3220 3220 1 s 3224        403 0 ));
+DATA(insert (  3260  3220 3220 2 s 3226        403 0 ));
+DATA(insert (  3260  3220 3220 3 s 3222        403 0 ));
+DATA(insert (  3260  3220 3220 4 s 3227        403 0 ));
+DATA(insert (  3260  3220 3220 5 s 3225        403 0 ));
+
+/*
  *     hash index _ops
  */
 
@@ -581,6 +591,8 @@ DATA(insert (       2231   1042 1042 1 s 1054 405 0 ));
 DATA(insert (  2235   1033 1033 1 s  974 405 0 ));
 /* uuid_ops */
 DATA(insert (  2969   2950 2950 1 s 2972 405 0 ));
+/* pglsn_ops */
+DATA(insert (  3261   3220 3220 1 s 3222 405 0 ));
 /* numeric_ops */
 DATA(insert (  1998   1700 1700 1 s 1752 405 0 ));
 /* array_ops */
diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h
index 198b126..369adb9 100644
--- a/src/include/catalog/pg_amproc.h
+++ b/src/include/catalog/pg_amproc.h
@@ -134,6 +134,7 @@ DATA(insert (       2789   27 27 1 2794 ));
 DATA(insert (  2968   2950 2950 1 2960 ));
 DATA(insert (  2994   2249 2249 1 2987 ));
 DATA(insert (  3194   2249 2249 1 3187 ));
+DATA(insert (  3260   3220 3220 1 3263 ));
 DATA(insert (  3522   3500 3500 1 3514 ));
 DATA(insert (  3626   3614 3614 1 3622 ));
 DATA(insert (  3683   3615 3615 1 3668 ));
@@ -174,6 +175,7 @@ DATA(insert (       2229   25 25 1 400 ));
 DATA(insert (  2231   1042 1042 1 1080 ));
 DATA(insert (  2235   1033 1033 1 329 ));
 DATA(insert (  2969   2950 2950 1 2963 ));
+DATA(insert (  3261   3220 3220 1 3262 ));
 DATA(insert (  3523   3500 3500 1 3515 ));
 DATA(insert (  3903   3831 3831 1 3902 ));
 DATA(insert (  4034   3802 3802 1 4045 ));
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index 49b2410..cbcdacd 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -215,6 +215,8 @@ DATA(insert (       2742    _reltime_ops            PGNSP 
PGUID 2745  1024 t 703 ));
 DATA(insert (  2742    _tinterval_ops          PGNSP PGUID 2745  1025 t 704 ));
 DATA(insert (  403             uuid_ops                        PGNSP PGUID 
2968  2950 t 0 ));
 DATA(insert (  405             uuid_ops                        PGNSP PGUID 
2969  2950 t 0 ));
+DATA(insert (  403             pglsn_ops                       PGNSP PGUID 
3260  3220 t 0 ));
+DATA(insert (  405             pglsn_ops                       PGNSP PGUID 
3261  3220 t 0 ));
 DATA(insert (  403             enum_ops                        PGNSP PGUID 
3522  3500 t 0 ));
 DATA(insert (  405             enum_ops                        PGNSP PGUID 
3523  3500 t 0 ));
 DATA(insert (  403             tsvector_ops            PGNSP PGUID 3626  3614 
t 0 ));
diff --git a/src/include/catalog/pg_operator.h 
b/src/include/catalog/pg_operator.h
index f280af4..87ee4eb 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -1595,7 +1595,7 @@ DATA(insert OID = 2977 (  ">="       PGNSP PGUID b f f 
2950 2950 16 2976 2974 uuid_
 DESCR("greater than or equal");
 
 /* pg_lsn operators */
-DATA(insert OID = 3222 (  "="     PGNSP PGUID b f f 3220 3220 16 3222 3223 
pg_lsn_eq eqsel eqjoinsel ));
+DATA(insert OID = 3222 (  "="     PGNSP PGUID b t t 3220 3220 16 3222 3223 
pg_lsn_eq eqsel eqjoinsel ));
 DESCR("equal");
 DATA(insert OID = 3223 (  "<>"    PGNSP PGUID b f f 3220 3220 16 3223 3222 
pg_lsn_ne neqsel neqjoinsel ));
 DESCR("not equal");
diff --git a/src/include/catalog/pg_opfamily.h 
b/src/include/catalog/pg_opfamily.h
index 9e8f4ac..29089d5 100644
--- a/src/include/catalog/pg_opfamily.h
+++ b/src/include/catalog/pg_opfamily.h
@@ -134,6 +134,8 @@ DATA(insert OID = 1029 (    783             point_ops       
        PGNSP PGUID ));
 DATA(insert OID = 2745 (       2742    array_ops               PGNSP PGUID ));
 DATA(insert OID = 2968 (       403             uuid_ops                PGNSP 
PGUID ));
 DATA(insert OID = 2969 (       405             uuid_ops                PGNSP 
PGUID ));
+DATA(insert OID = 3260 (       403             pglsn_ops               PGNSP 
PGUID ));
+DATA(insert OID = 3261 (       405             pglsn_ops               PGNSP 
PGUID ));
 DATA(insert OID = 3522 (       403             enum_ops                PGNSP 
PGUID ));
 DATA(insert OID = 3523 (       405             enum_ops                PGNSP 
PGUID ));
 DATA(insert OID = 3626 (       403             tsvector_ops    PGNSP PGUID ));
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 98c183b..f82463b 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -4293,6 +4293,10 @@ DATA(insert OID = 3238 (  pg_lsn_recv    PGNSP PGUID 12 
1 0 0 0 f f f f t f i 1 0 3
 DESCR("I/O");
 DATA(insert OID = 3239 (  pg_lsn_send  PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 
0 17 "3220" _null_ _null_ _null_ _null_ pg_lsn_send _null_ _null_ _null_ ));
 DESCR("I/O");
+DATA(insert OID = 3262 (  pg_lsn_hash  PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 
0 23 "3220" _null_ _null_ _null_ _null_ pg_lsn_hash _null_ _null_ _null_ ));
+DESCR("hash");
+DATA(insert OID = 3263 (  pg_lsn_cmp   PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 
0 23 "3220 3220" _null_ _null_ _null_ _null_ pg_lsn_cmp _null_ _null_ _null_ ));
+DESCR("less-equal-greater");
 
 /* enum related procs */
 DATA(insert OID = 3504 (  anyenum_in   PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 
0 3500 "2275" _null_ _null_ _null_ _null_ anyenum_in _null_ _null_ _null_ ));
diff --git a/src/include/utils/pg_lsn.h b/src/include/utils/pg_lsn.h
index 981fcd6..7dd932d 100644
--- a/src/include/utils/pg_lsn.h
+++ b/src/include/utils/pg_lsn.h
@@ -29,6 +29,8 @@ extern Datum pg_lsn_lt(PG_FUNCTION_ARGS);
 extern Datum pg_lsn_gt(PG_FUNCTION_ARGS);
 extern Datum pg_lsn_le(PG_FUNCTION_ARGS);
 extern Datum pg_lsn_ge(PG_FUNCTION_ARGS);
+extern Datum pg_lsn_cmp(PG_FUNCTION_ARGS);
+extern Datum pg_lsn_hash(PG_FUNCTION_ARGS);
 
 extern Datum pg_lsn_mi(PG_FUNCTION_ARGS);
 
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to