Please find enclosed a patch that adds a '<>' operator for tid types (per TODO item). Patch is against current sources (beta4).

If I have understood the requirement properly, the relevant function 'tidne' already existed in src/backend/utils/adt/tid.c, just needed an ifdef NOT_USED removed. The '<>' operator however, needed to be added.

I have renumbered the OIDs for the various tid functions in order to keep them together with the 'new' tidne one in pg_proc.h - as we have run out of OIDs in the old range. Similarly for the '=' operator in pg_operator.h.

with the patch applied, all 98 regression tests pass, plus it seems to work ok :-)


test=# select ctid, id from foo where ctid != '(0,1)';
 ctid  | id
-------+----
 (0,2) |  2
 (0,3) |  3
(2 rows)

regards

Mark
Index: src/include/catalog/pg_proc.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/catalog/pg_proc.h,v
retrieving revision 1.387
diff -c -r1.387 pg_proc.h
*** src/include/catalog/pg_proc.h       15 Oct 2005 02:49:42 -0000      1.387
--- src/include/catalog/pg_proc.h       24 Oct 2005 02:34:49 -0000
***************
*** 1625,1637 ****
  DATA(insert OID = 1291 (  array_length_coerce PGNSP PGUID 12 f f t f s 3 2277 
"2277 23 16" _null_ _null_ _null_ array_length_coerce - _null_ ));
  DESCR("adjust any array to new element typmod");
  
- DATA(insert OID = 1292 ( tideq                           PGNSP PGUID 12 f f t 
f i 2 16 "27 27" _null_ _null_ _null_ tideq - _null_ ));
- DESCR("equal");
- DATA(insert OID = 1293 ( currtid                 PGNSP PGUID 12 f f t f v 2 
27 "26 27" _null_ _null_ _null_ currtid_byreloid - _null_ ));
- DESCR("latest tid of a tuple");
- DATA(insert OID = 1294 ( currtid2                PGNSP PGUID 12 f f t f v 2 
27 "25 27" _null_ _null_ _null_ currtid_byrelname - _null_ ));
- DESCR("latest tid of a tuple");
- 
  DATA(insert OID = 2168 ( pg_database_size             PGNSP PGUID 12 f f t f 
v 1 20 "19" _null_ _null_ _null_ pg_database_size_name - _null_ ));
  DESCR("Calculate total disk space usage for the specified database");
  
--- 1625,1630 ----
***************
*** 3765,3770 ****
--- 3758,3772 ----
  DATA(insert OID = 2592 (  gist_circle_compress        PGNSP PGUID 12 f f t f 
i 1 2281 "2281" _null_ _null_ _null_ gist_circle_compress - _null_ ));
  DESCR("GiST support");
  
+ /* Tid functions */
+ DATA(insert OID = 2601 ( tideq                           PGNSP PGUID 12 f f t 
f i 2 16 "27 27" _null_ _null_ _null_ tideq - _null_ ));
+ DESCR("equal");
+ DATA(insert OID = 2602 ( currtid                 PGNSP PGUID 12 f f t f v 2 
27 "26 27" _null_ _null_ _null_ currtid_byreloid - _null_ ));
+ DESCR("latest tid of a tuple");
+ DATA(insert OID = 2603 ( currtid2                PGNSP PGUID 12 f f t f v 2 
27 "25 27" _null_ _null_ _null_ currtid_byrelname - _null_ ));
+ DESCR("latest tid of a tuple");
+ DATA(insert OID = 2604 ( tidne                           PGNSP PGUID 12 f f t 
f i 2 16 "27 27" _null_ _null_ _null_ tidne - _null_ ));
+ DESCR("not equal");
  
  /*
   * Symbolic values for provolatile column: these indicate whether the result
Index: src/include/catalog/pg_operator.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/catalog/pg_operator.h,v
retrieving revision 1.137
diff -c -r1.137 pg_operator.h
*** src/include/catalog/pg_operator.h   15 Oct 2005 02:49:42 -0000      1.137
--- src/include/catalog/pg_operator.h   24 Oct 2005 02:34:50 -0000
***************
*** 128,135 ****
  DATA(insert OID = 389 (  "!!"    PGNSP PGUID l f       0      20      1700   
0   0   0   0  0   0 numeric_fac - - ));
  DATA(insert OID = 385 (  "="     PGNSP PGUID b t      29      29      16 385  
 0       0       0       0       0 cideq eqsel eqjoinsel ));
  DATA(insert OID = 386 (  "="     PGNSP PGUID b t      22      22      16 386  
 0       0       0       0       0 int2vectoreq eqsel eqjoinsel ));
! DATA(insert OID = 387 (  "="     PGNSP PGUID b f      27      27      16 387  
 0       0       0       0       0 tideq eqsel eqjoinsel ));
! #define TIDEqualOperator   387
  
  DATA(insert OID = 410 ( "="              PGNSP PGUID b t      20      20      
16 410 411 412 412 412 413 int8eq eqsel eqjoinsel ));
  DATA(insert OID = 411 ( "<>"     PGNSP PGUID b f      20      20      16 411 
410 0 0 0 0 int8ne neqsel neqjoinsel ));
--- 128,136 ----
  DATA(insert OID = 389 (  "!!"    PGNSP PGUID l f       0      20      1700   
0   0   0   0  0   0 numeric_fac - - ));
  DATA(insert OID = 385 (  "="     PGNSP PGUID b t      29      29      16 385  
 0       0       0       0       0 cideq eqsel eqjoinsel ));
  DATA(insert OID = 386 (  "="     PGNSP PGUID b t      22      22      16 386  
 0       0       0       0       0 int2vectoreq eqsel eqjoinsel ));
! DATA(insert OID = 390 (  "<>"    PGNSP PGUID b f      27      27      16 390  
 0       0       0       0       0 tidne neqsel neqjoinsel ));
! DATA(insert OID = 391 (  "="     PGNSP PGUID b f      27      27      16 391  
 0       0       0       0       0 tideq eqsel eqjoinsel ));
! #define TIDEqualOperator   391
  
  DATA(insert OID = 410 ( "="              PGNSP PGUID b t      20      20      
16 410 411 412 412 412 413 int8eq eqsel eqjoinsel ));
  DATA(insert OID = 411 ( "<>"     PGNSP PGUID b f      20      20      16 411 
410 0 0 0 0 int8ne neqsel neqjoinsel ));
Index: src/backend/utils/adt/tid.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/tid.c,v
retrieving revision 1.49
diff -c -r1.49 tid.c
*** src/backend/utils/adt/tid.c 27 May 2005 00:57:49 -0000      1.49
--- src/backend/utils/adt/tid.c 24 Oct 2005 02:34:51 -0000
***************
*** 174,180 ****
                                   arg1->ip_posid == arg2->ip_posid);
  }
  
- #ifdef NOT_USED
  Datum
  tidne(PG_FUNCTION_ARGS)
  {
--- 174,179 ----
***************
*** 185,191 ****
                                   BlockIdGetBlockNumber(&(arg2->ip_blkid)) ||
                                   arg1->ip_posid != arg2->ip_posid);
  }
- #endif
  
  /*
   *    Functions to get latest tid of a specified tuple.
--- 184,189 ----
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to