1#---------------------------------------------------------------------- 2# 3# pg_operator.dat 4# Initial contents of the pg_operator system catalog. 5# 6# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group 7# Portions Copyright (c) 1994, Regents of the University of California 8# 9# src/include/catalog/pg_operator.dat 10# 11#---------------------------------------------------------------------- 12 13[ 14 15# Note: every entry in pg_operator.dat is expected to have a 'descr' comment. 16# If the operator is a deprecated equivalent of some other entry, be sure 17# to comment it as such so that initdb doesn't think it's a preferred name 18# for the underlying function. 19 20{ oid => '15', descr => 'equal', 21 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4', 22 oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int4)', 23 oprnegate => '<>(int4,int8)', oprcode => 'int48eq', oprrest => 'eqsel', 24 oprjoin => 'eqjoinsel' }, 25{ oid => '36', descr => 'not equal', 26 oprname => '<>', oprleft => 'int4', oprright => 'int8', oprresult => 'bool', 27 oprcom => '<>(int8,int4)', oprnegate => '=(int4,int8)', oprcode => 'int48ne', 28 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 29{ oid => '37', descr => 'less than', 30 oprname => '<', oprleft => 'int4', oprright => 'int8', oprresult => 'bool', 31 oprcom => '>(int8,int4)', oprnegate => '>=(int4,int8)', oprcode => 'int48lt', 32 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 33{ oid => '76', descr => 'greater than', 34 oprname => '>', oprleft => 'int4', oprright => 'int8', oprresult => 'bool', 35 oprcom => '<(int8,int4)', oprnegate => '<=(int4,int8)', oprcode => 'int48gt', 36 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 37{ oid => '80', descr => 'less than or equal', 38 oprname => '<=', oprleft => 'int4', oprright => 'int8', oprresult => 'bool', 39 oprcom => '>=(int8,int4)', oprnegate => '>(int4,int8)', oprcode => 'int48le', 40 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 41{ oid => '82', descr => 'greater than or equal', 42 oprname => '>=', oprleft => 'int4', oprright => 'int8', oprresult => 'bool', 43 oprcom => '<=(int8,int4)', oprnegate => '<(int4,int8)', oprcode => 'int48ge', 44 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 45 46{ oid => '58', descr => 'less than', 47 oprname => '<', oprleft => 'bool', oprright => 'bool', oprresult => 'bool', 48 oprcom => '>(bool,bool)', oprnegate => '>=(bool,bool)', oprcode => 'boollt', 49 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 50{ oid => '59', descr => 'greater than', 51 oprname => '>', oprleft => 'bool', oprright => 'bool', oprresult => 'bool', 52 oprcom => '<(bool,bool)', oprnegate => '<=(bool,bool)', oprcode => 'boolgt', 53 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 54{ oid => '85', oid_symbol => 'BooleanNotEqualOperator', descr => 'not equal', 55 oprname => '<>', oprleft => 'bool', oprright => 'bool', oprresult => 'bool', 56 oprcom => '<>(bool,bool)', oprnegate => '=(bool,bool)', oprcode => 'boolne', 57 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 58{ oid => '91', oid_symbol => 'BooleanEqualOperator', descr => 'equal', 59 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bool', 60 oprright => 'bool', oprresult => 'bool', oprcom => '=(bool,bool)', 61 oprnegate => '<>(bool,bool)', oprcode => 'booleq', oprrest => 'eqsel', 62 oprjoin => 'eqjoinsel' }, 63{ oid => '1694', descr => 'less than or equal', 64 oprname => '<=', oprleft => 'bool', oprright => 'bool', oprresult => 'bool', 65 oprcom => '>=(bool,bool)', oprnegate => '>(bool,bool)', oprcode => 'boolle', 66 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 67{ oid => '1695', descr => 'greater than or equal', 68 oprname => '>=', oprleft => 'bool', oprright => 'bool', oprresult => 'bool', 69 oprcom => '<=(bool,bool)', oprnegate => '<(bool,bool)', oprcode => 'boolge', 70 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 71 72{ oid => '92', descr => 'equal', 73 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'char', 74 oprright => 'char', oprresult => 'bool', oprcom => '=(char,char)', 75 oprnegate => '<>(char,char)', oprcode => 'chareq', oprrest => 'eqsel', 76 oprjoin => 'eqjoinsel' }, 77{ oid => '93', descr => 'equal', 78 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'name', 79 oprright => 'name', oprresult => 'bool', oprcom => '=(name,name)', 80 oprnegate => '<>(name,name)', oprcode => 'nameeq', oprrest => 'eqsel', 81 oprjoin => 'eqjoinsel' }, 82{ oid => '94', descr => 'equal', 83 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2', 84 oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int2)', 85 oprnegate => '<>(int2,int2)', oprcode => 'int2eq', oprrest => 'eqsel', 86 oprjoin => 'eqjoinsel' }, 87{ oid => '95', descr => 'less than', 88 oprname => '<', oprleft => 'int2', oprright => 'int2', oprresult => 'bool', 89 oprcom => '>(int2,int2)', oprnegate => '>=(int2,int2)', oprcode => 'int2lt', 90 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 91{ oid => '96', oid_symbol => 'Int4EqualOperator', descr => 'equal', 92 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4', 93 oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int4)', 94 oprnegate => '<>(int4,int4)', oprcode => 'int4eq', oprrest => 'eqsel', 95 oprjoin => 'eqjoinsel' }, 96{ oid => '97', oid_symbol => 'Int4LessOperator', descr => 'less than', 97 oprname => '<', oprleft => 'int4', oprright => 'int4', oprresult => 'bool', 98 oprcom => '>(int4,int4)', oprnegate => '>=(int4,int4)', oprcode => 'int4lt', 99 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 100{ oid => '98', oid_symbol => 'TextEqualOperator', descr => 'equal', 101 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'text', 102 oprright => 'text', oprresult => 'bool', oprcom => '=(text,text)', 103 oprnegate => '<>(text,text)', oprcode => 'texteq', oprrest => 'eqsel', 104 oprjoin => 'eqjoinsel' }, 105{ oid => '3877', descr => 'starts with', 106 oprname => '^@', oprleft => 'text', oprright => 'text', oprresult => 'bool', 107 oprcode => 'starts_with', oprrest => 'prefixsel', 108 oprjoin => 'prefixjoinsel' }, 109 110{ oid => '349', descr => 'append element onto end of array', 111 oprname => '||', oprleft => 'anyarray', oprright => 'anyelement', 112 oprresult => 'anyarray', oprcode => 'array_append' }, 113{ oid => '374', descr => 'prepend element onto front of array', 114 oprname => '||', oprleft => 'anyelement', oprright => 'anyarray', 115 oprresult => 'anyarray', oprcode => 'array_prepend' }, 116{ oid => '375', descr => 'concatenate', 117 oprname => '||', oprleft => 'anyarray', oprright => 'anyarray', 118 oprresult => 'anyarray', oprcode => 'array_cat' }, 119 120{ oid => '352', descr => 'equal', 121 oprname => '=', oprcanhash => 't', oprleft => 'xid', oprright => 'xid', 122 oprresult => 'bool', oprcom => '=(xid,xid)', oprnegate => '<>(xid,xid)', 123 oprcode => 'xideq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 124{ oid => '353', descr => 'equal', 125 oprname => '=', oprleft => 'xid', oprright => 'int4', oprresult => 'bool', 126 oprnegate => '<>(xid,int4)', oprcode => 'xideqint4', oprrest => 'eqsel', 127 oprjoin => 'eqjoinsel' }, 128{ oid => '3315', descr => 'not equal', 129 oprname => '<>', oprleft => 'xid', oprright => 'xid', oprresult => 'bool', 130 oprcom => '<>(xid,xid)', oprnegate => '=(xid,xid)', oprcode => 'xidneq', 131 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 132{ oid => '3316', descr => 'not equal', 133 oprname => '<>', oprleft => 'xid', oprright => 'int4', oprresult => 'bool', 134 oprnegate => '=(xid,int4)', oprcode => 'xidneqint4', oprrest => 'neqsel', 135 oprjoin => 'neqjoinsel' }, 136{ oid => '388', descr => 'factorial', 137 oprname => '!', oprkind => 'r', oprleft => 'int8', oprright => '0', 138 oprresult => 'numeric', oprcode => 'numeric_fac' }, 139{ oid => '389', descr => 'deprecated, use ! instead', 140 oprname => '!!', oprkind => 'l', oprleft => '0', oprright => 'int8', 141 oprresult => 'numeric', oprcode => 'numeric_fac' }, 142{ oid => '385', descr => 'equal', 143 oprname => '=', oprcanhash => 't', oprleft => 'cid', oprright => 'cid', 144 oprresult => 'bool', oprcom => '=(cid,cid)', oprcode => 'cideq', 145 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 146 147{ oid => '387', oid_symbol => 'TIDEqualOperator', descr => 'equal', 148 oprname => '=', oprcanmerge => 't', oprleft => 'tid', oprright => 'tid', 149 oprresult => 'bool', oprcom => '=(tid,tid)', oprnegate => '<>(tid,tid)', 150 oprcode => 'tideq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 151{ oid => '402', descr => 'not equal', 152 oprname => '<>', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', 153 oprcom => '<>(tid,tid)', oprnegate => '=(tid,tid)', oprcode => 'tidne', 154 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 155{ oid => '2799', oid_symbol => 'TIDLessOperator', descr => 'less than', 156 oprname => '<', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', 157 oprcom => '>(tid,tid)', oprnegate => '>=(tid,tid)', oprcode => 'tidlt', 158 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 159{ oid => '2800', descr => 'greater than', 160 oprname => '>', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', 161 oprcom => '<(tid,tid)', oprnegate => '<=(tid,tid)', oprcode => 'tidgt', 162 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 163{ oid => '2801', descr => 'less than or equal', 164 oprname => '<=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', 165 oprcom => '>=(tid,tid)', oprnegate => '>(tid,tid)', oprcode => 'tidle', 166 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 167{ oid => '2802', descr => 'greater than or equal', 168 oprname => '>=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool', 169 oprcom => '<=(tid,tid)', oprnegate => '<(tid,tid)', oprcode => 'tidge', 170 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 171 172{ oid => '410', descr => 'equal', 173 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8', 174 oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int8)', 175 oprnegate => '<>(int8,int8)', oprcode => 'int8eq', oprrest => 'eqsel', 176 oprjoin => 'eqjoinsel' }, 177{ oid => '411', descr => 'not equal', 178 oprname => '<>', oprleft => 'int8', oprright => 'int8', oprresult => 'bool', 179 oprcom => '<>(int8,int8)', oprnegate => '=(int8,int8)', oprcode => 'int8ne', 180 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 181{ oid => '412', oid_symbol => 'Int8LessOperator', descr => 'less than', 182 oprname => '<', oprleft => 'int8', oprright => 'int8', oprresult => 'bool', 183 oprcom => '>(int8,int8)', oprnegate => '>=(int8,int8)', oprcode => 'int8lt', 184 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 185{ oid => '413', descr => 'greater than', 186 oprname => '>', oprleft => 'int8', oprright => 'int8', oprresult => 'bool', 187 oprcom => '<(int8,int8)', oprnegate => '<=(int8,int8)', oprcode => 'int8gt', 188 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 189{ oid => '414', descr => 'less than or equal', 190 oprname => '<=', oprleft => 'int8', oprright => 'int8', oprresult => 'bool', 191 oprcom => '>=(int8,int8)', oprnegate => '>(int8,int8)', oprcode => 'int8le', 192 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 193{ oid => '415', descr => 'greater than or equal', 194 oprname => '>=', oprleft => 'int8', oprright => 'int8', oprresult => 'bool', 195 oprcom => '<=(int8,int8)', oprnegate => '<(int8,int8)', oprcode => 'int8ge', 196 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 197 198{ oid => '416', descr => 'equal', 199 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8', 200 oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int8)', 201 oprnegate => '<>(int8,int4)', oprcode => 'int84eq', oprrest => 'eqsel', 202 oprjoin => 'eqjoinsel' }, 203{ oid => '417', descr => 'not equal', 204 oprname => '<>', oprleft => 'int8', oprright => 'int4', oprresult => 'bool', 205 oprcom => '<>(int4,int8)', oprnegate => '=(int8,int4)', oprcode => 'int84ne', 206 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 207{ oid => '418', descr => 'less than', 208 oprname => '<', oprleft => 'int8', oprright => 'int4', oprresult => 'bool', 209 oprcom => '>(int4,int8)', oprnegate => '>=(int8,int4)', oprcode => 'int84lt', 210 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 211{ oid => '419', descr => 'greater than', 212 oprname => '>', oprleft => 'int8', oprright => 'int4', oprresult => 'bool', 213 oprcom => '<(int4,int8)', oprnegate => '<=(int8,int4)', oprcode => 'int84gt', 214 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 215{ oid => '420', descr => 'less than or equal', 216 oprname => '<=', oprleft => 'int8', oprright => 'int4', oprresult => 'bool', 217 oprcom => '>=(int4,int8)', oprnegate => '>(int8,int4)', oprcode => 'int84le', 218 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 219{ oid => '430', descr => 'greater than or equal', 220 oprname => '>=', oprleft => 'int8', oprright => 'int4', oprresult => 'bool', 221 oprcom => '<=(int4,int8)', oprnegate => '<(int8,int4)', oprcode => 'int84ge', 222 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 223{ oid => '439', descr => 'modulus', 224 oprname => '%', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 225 oprcode => 'int8mod' }, 226{ oid => '473', descr => 'absolute value', 227 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int8', 228 oprresult => 'int8', oprcode => 'int8abs' }, 229 230{ oid => '484', descr => 'negate', 231 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int8', 232 oprresult => 'int8', oprcode => 'int8um' }, 233{ oid => '485', descr => 'is left of', 234 oprname => '<<', oprleft => 'polygon', oprright => 'polygon', 235 oprresult => 'bool', oprcode => 'poly_left', oprrest => 'positionsel', 236 oprjoin => 'positionjoinsel' }, 237{ oid => '486', descr => 'overlaps or is left of', 238 oprname => '&<', oprleft => 'polygon', oprright => 'polygon', 239 oprresult => 'bool', oprcode => 'poly_overleft', oprrest => 'positionsel', 240 oprjoin => 'positionjoinsel' }, 241{ oid => '487', descr => 'overlaps or is right of', 242 oprname => '&>', oprleft => 'polygon', oprright => 'polygon', 243 oprresult => 'bool', oprcode => 'poly_overright', oprrest => 'positionsel', 244 oprjoin => 'positionjoinsel' }, 245{ oid => '488', descr => 'is right of', 246 oprname => '>>', oprleft => 'polygon', oprright => 'polygon', 247 oprresult => 'bool', oprcode => 'poly_right', oprrest => 'positionsel', 248 oprjoin => 'positionjoinsel' }, 249{ oid => '489', descr => 'is contained by', 250 oprname => '<@', oprleft => 'polygon', oprright => 'polygon', 251 oprresult => 'bool', oprcom => '@>(polygon,polygon)', 252 oprcode => 'poly_contained', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 253{ oid => '490', descr => 'contains', 254 oprname => '@>', oprleft => 'polygon', oprright => 'polygon', 255 oprresult => 'bool', oprcom => '<@(polygon,polygon)', 256 oprcode => 'poly_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 257{ oid => '491', descr => 'same as', 258 oprname => '~=', oprleft => 'polygon', oprright => 'polygon', 259 oprresult => 'bool', oprcom => '~=(polygon,polygon)', oprcode => 'poly_same', 260 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 261{ oid => '492', descr => 'overlaps', 262 oprname => '&&', oprleft => 'polygon', oprright => 'polygon', 263 oprresult => 'bool', oprcom => '&&(polygon,polygon)', 264 oprcode => 'poly_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' }, 265{ oid => '493', descr => 'is left of', 266 oprname => '<<', oprleft => 'box', oprright => 'box', oprresult => 'bool', 267 oprcode => 'box_left', oprrest => 'positionsel', 268 oprjoin => 'positionjoinsel' }, 269{ oid => '494', descr => 'overlaps or is left of', 270 oprname => '&<', oprleft => 'box', oprright => 'box', oprresult => 'bool', 271 oprcode => 'box_overleft', oprrest => 'positionsel', 272 oprjoin => 'positionjoinsel' }, 273{ oid => '495', descr => 'overlaps or is right of', 274 oprname => '&>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 275 oprcode => 'box_overright', oprrest => 'positionsel', 276 oprjoin => 'positionjoinsel' }, 277{ oid => '496', descr => 'is right of', 278 oprname => '>>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 279 oprcode => 'box_right', oprrest => 'positionsel', 280 oprjoin => 'positionjoinsel' }, 281{ oid => '497', descr => 'is contained by', 282 oprname => '<@', oprleft => 'box', oprright => 'box', oprresult => 'bool', 283 oprcom => '@>(box,box)', oprcode => 'box_contained', oprrest => 'contsel', 284 oprjoin => 'contjoinsel' }, 285{ oid => '498', descr => 'contains', 286 oprname => '@>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 287 oprcom => '<@(box,box)', oprcode => 'box_contain', oprrest => 'contsel', 288 oprjoin => 'contjoinsel' }, 289{ oid => '499', descr => 'same as', 290 oprname => '~=', oprleft => 'box', oprright => 'box', oprresult => 'bool', 291 oprcom => '~=(box,box)', oprcode => 'box_same', oprrest => 'eqsel', 292 oprjoin => 'eqjoinsel' }, 293{ oid => '500', descr => 'overlaps', 294 oprname => '&&', oprleft => 'box', oprright => 'box', oprresult => 'bool', 295 oprcom => '&&(box,box)', oprcode => 'box_overlap', oprrest => 'areasel', 296 oprjoin => 'areajoinsel' }, 297{ oid => '501', descr => 'greater than or equal by area', 298 oprname => '>=', oprleft => 'box', oprright => 'box', oprresult => 'bool', 299 oprcom => '<=(box,box)', oprnegate => '<(box,box)', oprcode => 'box_ge', 300 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 301{ oid => '502', descr => 'greater than by area', 302 oprname => '>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 303 oprcom => '<(box,box)', oprnegate => '<=(box,box)', oprcode => 'box_gt', 304 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 305{ oid => '503', descr => 'equal by area', 306 oprname => '=', oprleft => 'box', oprright => 'box', oprresult => 'bool', 307 oprcom => '=(box,box)', oprcode => 'box_eq', oprrest => 'eqsel', 308 oprjoin => 'eqjoinsel' }, 309{ oid => '504', descr => 'less than by area', 310 oprname => '<', oprleft => 'box', oprright => 'box', oprresult => 'bool', 311 oprcom => '>(box,box)', oprnegate => '>=(box,box)', oprcode => 'box_lt', 312 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 313{ oid => '505', descr => 'less than or equal by area', 314 oprname => '<=', oprleft => 'box', oprright => 'box', oprresult => 'bool', 315 oprcom => '>=(box,box)', oprnegate => '>(box,box)', oprcode => 'box_le', 316 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 317{ oid => '506', descr => 'is above', 318 oprname => '>^', oprleft => 'point', oprright => 'point', oprresult => 'bool', 319 oprcode => 'point_above', oprrest => 'positionsel', 320 oprjoin => 'positionjoinsel' }, 321{ oid => '507', descr => 'is left of', 322 oprname => '<<', oprleft => 'point', oprright => 'point', oprresult => 'bool', 323 oprcode => 'point_left', oprrest => 'positionsel', 324 oprjoin => 'positionjoinsel' }, 325{ oid => '508', descr => 'is right of', 326 oprname => '>>', oprleft => 'point', oprright => 'point', oprresult => 'bool', 327 oprcode => 'point_right', oprrest => 'positionsel', 328 oprjoin => 'positionjoinsel' }, 329{ oid => '509', descr => 'is below', 330 oprname => '<^', oprleft => 'point', oprright => 'point', oprresult => 'bool', 331 oprcode => 'point_below', oprrest => 'positionsel', 332 oprjoin => 'positionjoinsel' }, 333{ oid => '510', descr => 'same as', 334 oprname => '~=', oprleft => 'point', oprright => 'point', oprresult => 'bool', 335 oprcom => '~=(point,point)', oprnegate => '<>(point,point)', 336 oprcode => 'point_eq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 337{ oid => '511', descr => 'point inside box', 338 oprname => '<@', oprleft => 'point', oprright => 'box', oprresult => 'bool', 339 oprcom => '@>(box,point)', oprcode => 'on_pb', oprrest => 'contsel', 340 oprjoin => 'contjoinsel' }, 341{ oid => '433', descr => 'contains', 342 oprname => '@>', oprleft => 'box', oprright => 'point', oprresult => 'bool', 343 oprcom => '<@(point,box)', oprcode => 'box_contain_pt', oprrest => 'contsel', 344 oprjoin => 'contjoinsel' }, 345{ oid => '512', descr => 'point within closed path, or point on open path', 346 oprname => '<@', oprleft => 'point', oprright => 'path', oprresult => 'bool', 347 oprcom => '@>(path,point)', oprcode => 'on_ppath' }, 348{ oid => '513', descr => 'center of', 349 oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'box', 350 oprresult => 'point', oprcode => 'box_center' }, 351{ oid => '514', descr => 'multiply', 352 oprname => '*', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 353 oprcom => '*(int4,int4)', oprcode => 'int4mul' }, 354{ oid => '517', descr => 'distance between', 355 oprname => '<->', oprleft => 'point', oprright => 'point', 356 oprresult => 'float8', oprcom => '<->(point,point)', 357 oprcode => 'point_distance' }, 358{ oid => '518', descr => 'not equal', 359 oprname => '<>', oprleft => 'int4', oprright => 'int4', oprresult => 'bool', 360 oprcom => '<>(int4,int4)', oprnegate => '=(int4,int4)', oprcode => 'int4ne', 361 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 362{ oid => '519', descr => 'not equal', 363 oprname => '<>', oprleft => 'int2', oprright => 'int2', oprresult => 'bool', 364 oprcom => '<>(int2,int2)', oprnegate => '=(int2,int2)', oprcode => 'int2ne', 365 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 366{ oid => '520', descr => 'greater than', 367 oprname => '>', oprleft => 'int2', oprright => 'int2', oprresult => 'bool', 368 oprcom => '<(int2,int2)', oprnegate => '<=(int2,int2)', oprcode => 'int2gt', 369 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 370{ oid => '521', descr => 'greater than', 371 oprname => '>', oprleft => 'int4', oprright => 'int4', oprresult => 'bool', 372 oprcom => '<(int4,int4)', oprnegate => '<=(int4,int4)', oprcode => 'int4gt', 373 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 374{ oid => '522', descr => 'less than or equal', 375 oprname => '<=', oprleft => 'int2', oprright => 'int2', oprresult => 'bool', 376 oprcom => '>=(int2,int2)', oprnegate => '>(int2,int2)', oprcode => 'int2le', 377 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 378{ oid => '523', descr => 'less than or equal', 379 oprname => '<=', oprleft => 'int4', oprright => 'int4', oprresult => 'bool', 380 oprcom => '>=(int4,int4)', oprnegate => '>(int4,int4)', oprcode => 'int4le', 381 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 382{ oid => '524', descr => 'greater than or equal', 383 oprname => '>=', oprleft => 'int2', oprright => 'int2', oprresult => 'bool', 384 oprcom => '<=(int2,int2)', oprnegate => '<(int2,int2)', oprcode => 'int2ge', 385 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 386{ oid => '525', descr => 'greater than or equal', 387 oprname => '>=', oprleft => 'int4', oprright => 'int4', oprresult => 'bool', 388 oprcom => '<=(int4,int4)', oprnegate => '<(int4,int4)', oprcode => 'int4ge', 389 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 390{ oid => '526', descr => 'multiply', 391 oprname => '*', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 392 oprcom => '*(int2,int2)', oprcode => 'int2mul' }, 393{ oid => '527', descr => 'divide', 394 oprname => '/', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 395 oprcode => 'int2div' }, 396{ oid => '528', descr => 'divide', 397 oprname => '/', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 398 oprcode => 'int4div' }, 399{ oid => '529', descr => 'modulus', 400 oprname => '%', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 401 oprcode => 'int2mod' }, 402{ oid => '530', descr => 'modulus', 403 oprname => '%', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 404 oprcode => 'int4mod' }, 405{ oid => '531', descr => 'not equal', 406 oprname => '<>', oprleft => 'text', oprright => 'text', oprresult => 'bool', 407 oprcom => '<>(text,text)', oprnegate => '=(text,text)', oprcode => 'textne', 408 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 409{ oid => '532', descr => 'equal', 410 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2', 411 oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int2)', 412 oprnegate => '<>(int2,int4)', oprcode => 'int24eq', oprrest => 'eqsel', 413 oprjoin => 'eqjoinsel' }, 414{ oid => '533', descr => 'equal', 415 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4', 416 oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int4)', 417 oprnegate => '<>(int4,int2)', oprcode => 'int42eq', oprrest => 'eqsel', 418 oprjoin => 'eqjoinsel' }, 419{ oid => '534', descr => 'less than', 420 oprname => '<', oprleft => 'int2', oprright => 'int4', oprresult => 'bool', 421 oprcom => '>(int4,int2)', oprnegate => '>=(int2,int4)', oprcode => 'int24lt', 422 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 423{ oid => '535', descr => 'less than', 424 oprname => '<', oprleft => 'int4', oprright => 'int2', oprresult => 'bool', 425 oprcom => '>(int2,int4)', oprnegate => '>=(int4,int2)', oprcode => 'int42lt', 426 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 427{ oid => '536', descr => 'greater than', 428 oprname => '>', oprleft => 'int2', oprright => 'int4', oprresult => 'bool', 429 oprcom => '<(int4,int2)', oprnegate => '<=(int2,int4)', oprcode => 'int24gt', 430 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 431{ oid => '537', descr => 'greater than', 432 oprname => '>', oprleft => 'int4', oprright => 'int2', oprresult => 'bool', 433 oprcom => '<(int2,int4)', oprnegate => '<=(int4,int2)', oprcode => 'int42gt', 434 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 435{ oid => '538', descr => 'not equal', 436 oprname => '<>', oprleft => 'int2', oprright => 'int4', oprresult => 'bool', 437 oprcom => '<>(int4,int2)', oprnegate => '=(int2,int4)', oprcode => 'int24ne', 438 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 439{ oid => '539', descr => 'not equal', 440 oprname => '<>', oprleft => 'int4', oprright => 'int2', oprresult => 'bool', 441 oprcom => '<>(int2,int4)', oprnegate => '=(int4,int2)', oprcode => 'int42ne', 442 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 443{ oid => '540', descr => 'less than or equal', 444 oprname => '<=', oprleft => 'int2', oprright => 'int4', oprresult => 'bool', 445 oprcom => '>=(int4,int2)', oprnegate => '>(int2,int4)', oprcode => 'int24le', 446 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 447{ oid => '541', descr => 'less than or equal', 448 oprname => '<=', oprleft => 'int4', oprright => 'int2', oprresult => 'bool', 449 oprcom => '>=(int2,int4)', oprnegate => '>(int4,int2)', oprcode => 'int42le', 450 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 451{ oid => '542', descr => 'greater than or equal', 452 oprname => '>=', oprleft => 'int2', oprright => 'int4', oprresult => 'bool', 453 oprcom => '<=(int4,int2)', oprnegate => '<(int2,int4)', oprcode => 'int24ge', 454 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 455{ oid => '543', descr => 'greater than or equal', 456 oprname => '>=', oprleft => 'int4', oprright => 'int2', oprresult => 'bool', 457 oprcom => '<=(int2,int4)', oprnegate => '<(int4,int2)', oprcode => 'int42ge', 458 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 459{ oid => '544', descr => 'multiply', 460 oprname => '*', oprleft => 'int2', oprright => 'int4', oprresult => 'int4', 461 oprcom => '*(int4,int2)', oprcode => 'int24mul' }, 462{ oid => '545', descr => 'multiply', 463 oprname => '*', oprleft => 'int4', oprright => 'int2', oprresult => 'int4', 464 oprcom => '*(int2,int4)', oprcode => 'int42mul' }, 465{ oid => '546', descr => 'divide', 466 oprname => '/', oprleft => 'int2', oprright => 'int4', oprresult => 'int4', 467 oprcode => 'int24div' }, 468{ oid => '547', descr => 'divide', 469 oprname => '/', oprleft => 'int4', oprright => 'int2', oprresult => 'int4', 470 oprcode => 'int42div' }, 471{ oid => '550', descr => 'add', 472 oprname => '+', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 473 oprcom => '+(int2,int2)', oprcode => 'int2pl' }, 474{ oid => '551', descr => 'add', 475 oprname => '+', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 476 oprcom => '+(int4,int4)', oprcode => 'int4pl' }, 477{ oid => '552', descr => 'add', 478 oprname => '+', oprleft => 'int2', oprright => 'int4', oprresult => 'int4', 479 oprcom => '+(int4,int2)', oprcode => 'int24pl' }, 480{ oid => '553', descr => 'add', 481 oprname => '+', oprleft => 'int4', oprright => 'int2', oprresult => 'int4', 482 oprcom => '+(int2,int4)', oprcode => 'int42pl' }, 483{ oid => '554', descr => 'subtract', 484 oprname => '-', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 485 oprcode => 'int2mi' }, 486{ oid => '555', descr => 'subtract', 487 oprname => '-', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 488 oprcode => 'int4mi' }, 489{ oid => '556', descr => 'subtract', 490 oprname => '-', oprleft => 'int2', oprright => 'int4', oprresult => 'int4', 491 oprcode => 'int24mi' }, 492{ oid => '557', descr => 'subtract', 493 oprname => '-', oprleft => 'int4', oprright => 'int2', oprresult => 'int4', 494 oprcode => 'int42mi' }, 495{ oid => '558', descr => 'negate', 496 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int4', 497 oprresult => 'int4', oprcode => 'int4um' }, 498{ oid => '559', descr => 'negate', 499 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int2', 500 oprresult => 'int2', oprcode => 'int2um' }, 501{ oid => '560', descr => 'equal', 502 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'abstime', 503 oprright => 'abstime', oprresult => 'bool', oprcom => '=(abstime,abstime)', 504 oprnegate => '<>(abstime,abstime)', oprcode => 'abstimeeq', 505 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 506{ oid => '561', descr => 'not equal', 507 oprname => '<>', oprleft => 'abstime', oprright => 'abstime', 508 oprresult => 'bool', oprcom => '<>(abstime,abstime)', 509 oprnegate => '=(abstime,abstime)', oprcode => 'abstimene', 510 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 511{ oid => '562', descr => 'less than', 512 oprname => '<', oprleft => 'abstime', oprright => 'abstime', 513 oprresult => 'bool', oprcom => '>(abstime,abstime)', 514 oprnegate => '>=(abstime,abstime)', oprcode => 'abstimelt', 515 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 516{ oid => '563', descr => 'greater than', 517 oprname => '>', oprleft => 'abstime', oprright => 'abstime', 518 oprresult => 'bool', oprcom => '<(abstime,abstime)', 519 oprnegate => '<=(abstime,abstime)', oprcode => 'abstimegt', 520 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 521{ oid => '564', descr => 'less than or equal', 522 oprname => '<=', oprleft => 'abstime', oprright => 'abstime', 523 oprresult => 'bool', oprcom => '>=(abstime,abstime)', 524 oprnegate => '>(abstime,abstime)', oprcode => 'abstimele', 525 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 526{ oid => '565', descr => 'greater than or equal', 527 oprname => '>=', oprleft => 'abstime', oprright => 'abstime', 528 oprresult => 'bool', oprcom => '<=(abstime,abstime)', 529 oprnegate => '<(abstime,abstime)', oprcode => 'abstimege', 530 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 531{ oid => '566', descr => 'equal', 532 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'reltime', 533 oprright => 'reltime', oprresult => 'bool', oprcom => '=(reltime,reltime)', 534 oprnegate => '<>(reltime,reltime)', oprcode => 'reltimeeq', 535 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 536{ oid => '567', descr => 'not equal', 537 oprname => '<>', oprleft => 'reltime', oprright => 'reltime', 538 oprresult => 'bool', oprcom => '<>(reltime,reltime)', 539 oprnegate => '=(reltime,reltime)', oprcode => 'reltimene', 540 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 541{ oid => '568', descr => 'less than', 542 oprname => '<', oprleft => 'reltime', oprright => 'reltime', 543 oprresult => 'bool', oprcom => '>(reltime,reltime)', 544 oprnegate => '>=(reltime,reltime)', oprcode => 'reltimelt', 545 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 546{ oid => '569', descr => 'greater than', 547 oprname => '>', oprleft => 'reltime', oprright => 'reltime', 548 oprresult => 'bool', oprcom => '<(reltime,reltime)', 549 oprnegate => '<=(reltime,reltime)', oprcode => 'reltimegt', 550 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 551{ oid => '570', descr => 'less than or equal', 552 oprname => '<=', oprleft => 'reltime', oprright => 'reltime', 553 oprresult => 'bool', oprcom => '>=(reltime,reltime)', 554 oprnegate => '>(reltime,reltime)', oprcode => 'reltimele', 555 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 556{ oid => '571', descr => 'greater than or equal', 557 oprname => '>=', oprleft => 'reltime', oprright => 'reltime', 558 oprresult => 'bool', oprcom => '<=(reltime,reltime)', 559 oprnegate => '<(reltime,reltime)', oprcode => 'reltimege', 560 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 561{ oid => '572', descr => 'same as', 562 oprname => '~=', oprleft => 'tinterval', oprright => 'tinterval', 563 oprresult => 'bool', oprcom => '~=(tinterval,tinterval)', 564 oprcode => 'tintervalsame', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 565{ oid => '573', descr => 'contains', 566 oprname => '<<', oprleft => 'tinterval', oprright => 'tinterval', 567 oprresult => 'bool', oprcode => 'tintervalct' }, 568{ oid => '574', descr => 'overlaps', 569 oprname => '&&', oprleft => 'tinterval', oprright => 'tinterval', 570 oprresult => 'bool', oprcom => '&&(tinterval,tinterval)', 571 oprcode => 'tintervalov' }, 572{ oid => '575', descr => 'equal by length', 573 oprname => '#=', oprleft => 'tinterval', oprright => 'reltime', 574 oprresult => 'bool', oprnegate => '#<>(tinterval,reltime)', 575 oprcode => 'tintervalleneq' }, 576{ oid => '576', descr => 'not equal by length', 577 oprname => '#<>', oprleft => 'tinterval', oprright => 'reltime', 578 oprresult => 'bool', oprnegate => '#=(tinterval,reltime)', 579 oprcode => 'tintervallenne' }, 580{ oid => '577', descr => 'less than by length', 581 oprname => '#<', oprleft => 'tinterval', oprright => 'reltime', 582 oprresult => 'bool', oprnegate => '#>=(tinterval,reltime)', 583 oprcode => 'tintervallenlt' }, 584{ oid => '578', descr => 'greater than by length', 585 oprname => '#>', oprleft => 'tinterval', oprright => 'reltime', 586 oprresult => 'bool', oprnegate => '#<=(tinterval,reltime)', 587 oprcode => 'tintervallengt' }, 588{ oid => '579', descr => 'less than or equal by length', 589 oprname => '#<=', oprleft => 'tinterval', oprright => 'reltime', 590 oprresult => 'bool', oprnegate => '#>(tinterval,reltime)', 591 oprcode => 'tintervallenle' }, 592{ oid => '580', descr => 'greater than or equal by length', 593 oprname => '#>=', oprleft => 'tinterval', oprright => 'reltime', 594 oprresult => 'bool', oprnegate => '#<(tinterval,reltime)', 595 oprcode => 'tintervallenge' }, 596{ oid => '581', descr => 'add', 597 oprname => '+', oprleft => 'abstime', oprright => 'reltime', 598 oprresult => 'abstime', oprcode => 'timepl' }, 599{ oid => '582', descr => 'subtract', 600 oprname => '-', oprleft => 'abstime', oprright => 'reltime', 601 oprresult => 'abstime', oprcode => 'timemi' }, 602{ oid => '583', descr => 'is contained by', 603 oprname => '<?>', oprleft => 'abstime', oprright => 'tinterval', 604 oprresult => 'bool', oprcode => 'intinterval' }, 605{ oid => '584', descr => 'negate', 606 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'float4', 607 oprresult => 'float4', oprcode => 'float4um' }, 608{ oid => '585', descr => 'negate', 609 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'float8', 610 oprresult => 'float8', oprcode => 'float8um' }, 611{ oid => '586', descr => 'add', 612 oprname => '+', oprleft => 'float4', oprright => 'float4', 613 oprresult => 'float4', oprcom => '+(float4,float4)', oprcode => 'float4pl' }, 614{ oid => '587', descr => 'subtract', 615 oprname => '-', oprleft => 'float4', oprright => 'float4', 616 oprresult => 'float4', oprcode => 'float4mi' }, 617{ oid => '588', descr => 'divide', 618 oprname => '/', oprleft => 'float4', oprright => 'float4', 619 oprresult => 'float4', oprcode => 'float4div' }, 620{ oid => '589', descr => 'multiply', 621 oprname => '*', oprleft => 'float4', oprright => 'float4', 622 oprresult => 'float4', oprcom => '*(float4,float4)', oprcode => 'float4mul' }, 623{ oid => '590', descr => 'absolute value', 624 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'float4', 625 oprresult => 'float4', oprcode => 'float4abs' }, 626{ oid => '591', descr => 'add', 627 oprname => '+', oprleft => 'float8', oprright => 'float8', 628 oprresult => 'float8', oprcom => '+(float8,float8)', oprcode => 'float8pl' }, 629{ oid => '592', descr => 'subtract', 630 oprname => '-', oprleft => 'float8', oprright => 'float8', 631 oprresult => 'float8', oprcode => 'float8mi' }, 632{ oid => '593', descr => 'divide', 633 oprname => '/', oprleft => 'float8', oprright => 'float8', 634 oprresult => 'float8', oprcode => 'float8div' }, 635{ oid => '594', descr => 'multiply', 636 oprname => '*', oprleft => 'float8', oprright => 'float8', 637 oprresult => 'float8', oprcom => '*(float8,float8)', oprcode => 'float8mul' }, 638{ oid => '595', descr => 'absolute value', 639 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'float8', 640 oprresult => 'float8', oprcode => 'float8abs' }, 641{ oid => '596', descr => 'square root', 642 oprname => '|/', oprkind => 'l', oprleft => '0', oprright => 'float8', 643 oprresult => 'float8', oprcode => 'dsqrt' }, 644{ oid => '597', descr => 'cube root', 645 oprname => '||/', oprkind => 'l', oprleft => '0', oprright => 'float8', 646 oprresult => 'float8', oprcode => 'dcbrt' }, 647{ oid => '1284', descr => 'start of interval', 648 oprname => '|', oprkind => 'l', oprleft => '0', oprright => 'tinterval', 649 oprresult => 'abstime', oprcode => 'tintervalstart' }, 650{ oid => '606', descr => 'convert to tinterval', 651 oprname => '<#>', oprleft => 'abstime', oprright => 'abstime', 652 oprresult => 'tinterval', oprcode => 'mktinterval' }, 653 654{ oid => '607', descr => 'equal', 655 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'oid', 656 oprright => 'oid', oprresult => 'bool', oprcom => '=(oid,oid)', 657 oprnegate => '<>(oid,oid)', oprcode => 'oideq', oprrest => 'eqsel', 658 oprjoin => 'eqjoinsel' }, 659{ oid => '608', descr => 'not equal', 660 oprname => '<>', oprleft => 'oid', oprright => 'oid', oprresult => 'bool', 661 oprcom => '<>(oid,oid)', oprnegate => '=(oid,oid)', oprcode => 'oidne', 662 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 663{ oid => '609', descr => 'less than', 664 oprname => '<', oprleft => 'oid', oprright => 'oid', oprresult => 'bool', 665 oprcom => '>(oid,oid)', oprnegate => '>=(oid,oid)', oprcode => 'oidlt', 666 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 667{ oid => '610', descr => 'greater than', 668 oprname => '>', oprleft => 'oid', oprright => 'oid', oprresult => 'bool', 669 oprcom => '<(oid,oid)', oprnegate => '<=(oid,oid)', oprcode => 'oidgt', 670 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 671{ oid => '611', descr => 'less than or equal', 672 oprname => '<=', oprleft => 'oid', oprright => 'oid', oprresult => 'bool', 673 oprcom => '>=(oid,oid)', oprnegate => '>(oid,oid)', oprcode => 'oidle', 674 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 675{ oid => '612', descr => 'greater than or equal', 676 oprname => '>=', oprleft => 'oid', oprright => 'oid', oprresult => 'bool', 677 oprcom => '<=(oid,oid)', oprnegate => '<(oid,oid)', oprcode => 'oidge', 678 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 679 680{ oid => '644', descr => 'not equal', 681 oprname => '<>', oprleft => 'oidvector', oprright => 'oidvector', 682 oprresult => 'bool', oprcom => '<>(oidvector,oidvector)', 683 oprnegate => '=(oidvector,oidvector)', oprcode => 'oidvectorne', 684 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 685{ oid => '645', descr => 'less than', 686 oprname => '<', oprleft => 'oidvector', oprright => 'oidvector', 687 oprresult => 'bool', oprcom => '>(oidvector,oidvector)', 688 oprnegate => '>=(oidvector,oidvector)', oprcode => 'oidvectorlt', 689 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 690{ oid => '646', descr => 'greater than', 691 oprname => '>', oprleft => 'oidvector', oprright => 'oidvector', 692 oprresult => 'bool', oprcom => '<(oidvector,oidvector)', 693 oprnegate => '<=(oidvector,oidvector)', oprcode => 'oidvectorgt', 694 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 695{ oid => '647', descr => 'less than or equal', 696 oprname => '<=', oprleft => 'oidvector', oprright => 'oidvector', 697 oprresult => 'bool', oprcom => '>=(oidvector,oidvector)', 698 oprnegate => '>(oidvector,oidvector)', oprcode => 'oidvectorle', 699 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 700{ oid => '648', descr => 'greater than or equal', 701 oprname => '>=', oprleft => 'oidvector', oprright => 'oidvector', 702 oprresult => 'bool', oprcom => '<=(oidvector,oidvector)', 703 oprnegate => '<(oidvector,oidvector)', oprcode => 'oidvectorge', 704 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 705{ oid => '649', descr => 'equal', 706 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'oidvector', 707 oprright => 'oidvector', oprresult => 'bool', 708 oprcom => '=(oidvector,oidvector)', oprnegate => '<>(oidvector,oidvector)', 709 oprcode => 'oidvectoreq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 710 711{ oid => '613', descr => 'distance between', 712 oprname => '<->', oprleft => 'point', oprright => 'line', 713 oprresult => 'float8', oprcode => 'dist_pl' }, 714{ oid => '614', descr => 'distance between', 715 oprname => '<->', oprleft => 'point', oprright => 'lseg', 716 oprresult => 'float8', oprcode => 'dist_ps' }, 717{ oid => '615', descr => 'distance between', 718 oprname => '<->', oprleft => 'point', oprright => 'box', 719 oprresult => 'float8', oprcode => 'dist_pb' }, 720{ oid => '616', descr => 'distance between', 721 oprname => '<->', oprleft => 'lseg', oprright => 'line', 722 oprresult => 'float8', oprcode => 'dist_sl' }, 723{ oid => '617', descr => 'distance between', 724 oprname => '<->', oprleft => 'lseg', oprright => 'box', oprresult => 'float8', 725 oprcode => 'dist_sb' }, 726{ oid => '618', descr => 'distance between', 727 oprname => '<->', oprleft => 'point', oprright => 'path', 728 oprresult => 'float8', oprcode => 'dist_ppath' }, 729 730{ oid => '620', descr => 'equal', 731 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float4', 732 oprright => 'float4', oprresult => 'bool', oprcom => '=(float4,float4)', 733 oprnegate => '<>(float4,float4)', oprcode => 'float4eq', oprrest => 'eqsel', 734 oprjoin => 'eqjoinsel' }, 735{ oid => '621', descr => 'not equal', 736 oprname => '<>', oprleft => 'float4', oprright => 'float4', 737 oprresult => 'bool', oprcom => '<>(float4,float4)', 738 oprnegate => '=(float4,float4)', oprcode => 'float4ne', oprrest => 'neqsel', 739 oprjoin => 'neqjoinsel' }, 740{ oid => '622', descr => 'less than', 741 oprname => '<', oprleft => 'float4', oprright => 'float4', 742 oprresult => 'bool', oprcom => '>(float4,float4)', 743 oprnegate => '>=(float4,float4)', oprcode => 'float4lt', 744 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 745{ oid => '623', descr => 'greater than', 746 oprname => '>', oprleft => 'float4', oprright => 'float4', 747 oprresult => 'bool', oprcom => '<(float4,float4)', 748 oprnegate => '<=(float4,float4)', oprcode => 'float4gt', 749 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 750{ oid => '624', descr => 'less than or equal', 751 oprname => '<=', oprleft => 'float4', oprright => 'float4', 752 oprresult => 'bool', oprcom => '>=(float4,float4)', 753 oprnegate => '>(float4,float4)', oprcode => 'float4le', 754 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 755{ oid => '625', descr => 'greater than or equal', 756 oprname => '>=', oprleft => 'float4', oprright => 'float4', 757 oprresult => 'bool', oprcom => '<=(float4,float4)', 758 oprnegate => '<(float4,float4)', oprcode => 'float4ge', 759 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 760{ oid => '630', descr => 'not equal', 761 oprname => '<>', oprleft => 'char', oprright => 'char', oprresult => 'bool', 762 oprcom => '<>(char,char)', oprnegate => '=(char,char)', oprcode => 'charne', 763 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 764 765{ oid => '631', descr => 'less than', 766 oprname => '<', oprleft => 'char', oprright => 'char', oprresult => 'bool', 767 oprcom => '>(char,char)', oprnegate => '>=(char,char)', oprcode => 'charlt', 768 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 769{ oid => '632', descr => 'less than or equal', 770 oprname => '<=', oprleft => 'char', oprright => 'char', oprresult => 'bool', 771 oprcom => '>=(char,char)', oprnegate => '>(char,char)', oprcode => 'charle', 772 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 773{ oid => '633', descr => 'greater than', 774 oprname => '>', oprleft => 'char', oprright => 'char', oprresult => 'bool', 775 oprcom => '<(char,char)', oprnegate => '<=(char,char)', oprcode => 'chargt', 776 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 777{ oid => '634', descr => 'greater than or equal', 778 oprname => '>=', oprleft => 'char', oprright => 'char', oprresult => 'bool', 779 oprcom => '<=(char,char)', oprnegate => '<(char,char)', oprcode => 'charge', 780 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 781 782{ oid => '639', oid_symbol => 'OID_NAME_REGEXEQ_OP', 783 descr => 'matches regular expression, case-sensitive', 784 oprname => '~', oprleft => 'name', oprright => 'text', oprresult => 'bool', 785 oprnegate => '!~(name,text)', oprcode => 'nameregexeq', 786 oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' }, 787{ oid => '640', descr => 'does not match regular expression, case-sensitive', 788 oprname => '!~', oprleft => 'name', oprright => 'text', oprresult => 'bool', 789 oprnegate => '~(name,text)', oprcode => 'nameregexne', 790 oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' }, 791{ oid => '641', oid_symbol => 'OID_TEXT_REGEXEQ_OP', 792 descr => 'matches regular expression, case-sensitive', 793 oprname => '~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 794 oprnegate => '!~(text,text)', oprcode => 'textregexeq', 795 oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' }, 796{ oid => '642', descr => 'does not match regular expression, case-sensitive', 797 oprname => '!~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 798 oprnegate => '~(text,text)', oprcode => 'textregexne', 799 oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' }, 800{ oid => '643', descr => 'not equal', 801 oprname => '<>', oprleft => 'name', oprright => 'name', oprresult => 'bool', 802 oprcom => '<>(name,name)', oprnegate => '=(name,name)', oprcode => 'namene', 803 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 804{ oid => '654', descr => 'concatenate', 805 oprname => '||', oprleft => 'text', oprright => 'text', oprresult => 'text', 806 oprcode => 'textcat' }, 807 808{ oid => '660', descr => 'less than', 809 oprname => '<', oprleft => 'name', oprright => 'name', oprresult => 'bool', 810 oprcom => '>(name,name)', oprnegate => '>=(name,name)', oprcode => 'namelt', 811 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 812{ oid => '661', descr => 'less than or equal', 813 oprname => '<=', oprleft => 'name', oprright => 'name', oprresult => 'bool', 814 oprcom => '>=(name,name)', oprnegate => '>(name,name)', oprcode => 'namele', 815 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 816{ oid => '662', descr => 'greater than', 817 oprname => '>', oprleft => 'name', oprright => 'name', oprresult => 'bool', 818 oprcom => '<(name,name)', oprnegate => '<=(name,name)', oprcode => 'namegt', 819 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 820{ oid => '663', descr => 'greater than or equal', 821 oprname => '>=', oprleft => 'name', oprright => 'name', oprresult => 'bool', 822 oprcom => '<=(name,name)', oprnegate => '<(name,name)', oprcode => 'namege', 823 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 824{ oid => '664', descr => 'less than', 825 oprname => '<', oprleft => 'text', oprright => 'text', oprresult => 'bool', 826 oprcom => '>(text,text)', oprnegate => '>=(text,text)', oprcode => 'text_lt', 827 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 828{ oid => '665', descr => 'less than or equal', 829 oprname => '<=', oprleft => 'text', oprright => 'text', oprresult => 'bool', 830 oprcom => '>=(text,text)', oprnegate => '>(text,text)', oprcode => 'text_le', 831 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 832{ oid => '666', descr => 'greater than', 833 oprname => '>', oprleft => 'text', oprright => 'text', oprresult => 'bool', 834 oprcom => '<(text,text)', oprnegate => '<=(text,text)', oprcode => 'text_gt', 835 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 836{ oid => '667', descr => 'greater than or equal', 837 oprname => '>=', oprleft => 'text', oprright => 'text', oprresult => 'bool', 838 oprcom => '<=(text,text)', oprnegate => '<(text,text)', oprcode => 'text_ge', 839 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 840 841{ oid => '670', descr => 'equal', 842 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float8', 843 oprright => 'float8', oprresult => 'bool', oprcom => '=(float8,float8)', 844 oprnegate => '<>(float8,float8)', oprcode => 'float8eq', oprrest => 'eqsel', 845 oprjoin => 'eqjoinsel' }, 846{ oid => '671', descr => 'not equal', 847 oprname => '<>', oprleft => 'float8', oprright => 'float8', 848 oprresult => 'bool', oprcom => '<>(float8,float8)', 849 oprnegate => '=(float8,float8)', oprcode => 'float8ne', oprrest => 'neqsel', 850 oprjoin => 'neqjoinsel' }, 851{ oid => '672', oid_symbol => 'Float8LessOperator', descr => 'less than', 852 oprname => '<', oprleft => 'float8', oprright => 'float8', 853 oprresult => 'bool', oprcom => '>(float8,float8)', 854 oprnegate => '>=(float8,float8)', oprcode => 'float8lt', 855 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 856{ oid => '673', descr => 'less than or equal', 857 oprname => '<=', oprleft => 'float8', oprright => 'float8', 858 oprresult => 'bool', oprcom => '>=(float8,float8)', 859 oprnegate => '>(float8,float8)', oprcode => 'float8le', 860 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 861{ oid => '674', descr => 'greater than', 862 oprname => '>', oprleft => 'float8', oprright => 'float8', 863 oprresult => 'bool', oprcom => '<(float8,float8)', 864 oprnegate => '<=(float8,float8)', oprcode => 'float8gt', 865 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 866{ oid => '675', descr => 'greater than or equal', 867 oprname => '>=', oprleft => 'float8', oprright => 'float8', 868 oprresult => 'bool', oprcom => '<=(float8,float8)', 869 oprnegate => '<(float8,float8)', oprcode => 'float8ge', 870 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 871 872{ oid => '682', descr => 'absolute value', 873 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int2', 874 oprresult => 'int2', oprcode => 'int2abs' }, 875{ oid => '684', descr => 'add', 876 oprname => '+', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 877 oprcom => '+(int8,int8)', oprcode => 'int8pl' }, 878{ oid => '685', descr => 'subtract', 879 oprname => '-', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 880 oprcode => 'int8mi' }, 881{ oid => '686', descr => 'multiply', 882 oprname => '*', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 883 oprcom => '*(int8,int8)', oprcode => 'int8mul' }, 884{ oid => '687', descr => 'divide', 885 oprname => '/', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 886 oprcode => 'int8div' }, 887 888{ oid => '688', descr => 'add', 889 oprname => '+', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 890 oprcom => '+(int4,int8)', oprcode => 'int84pl' }, 891{ oid => '689', descr => 'subtract', 892 oprname => '-', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 893 oprcode => 'int84mi' }, 894{ oid => '690', descr => 'multiply', 895 oprname => '*', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 896 oprcom => '*(int4,int8)', oprcode => 'int84mul' }, 897{ oid => '691', descr => 'divide', 898 oprname => '/', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 899 oprcode => 'int84div' }, 900{ oid => '692', descr => 'add', 901 oprname => '+', oprleft => 'int4', oprright => 'int8', oprresult => 'int8', 902 oprcom => '+(int8,int4)', oprcode => 'int48pl' }, 903{ oid => '693', descr => 'subtract', 904 oprname => '-', oprleft => 'int4', oprright => 'int8', oprresult => 'int8', 905 oprcode => 'int48mi' }, 906{ oid => '694', descr => 'multiply', 907 oprname => '*', oprleft => 'int4', oprright => 'int8', oprresult => 'int8', 908 oprcom => '*(int8,int4)', oprcode => 'int48mul' }, 909{ oid => '695', descr => 'divide', 910 oprname => '/', oprleft => 'int4', oprright => 'int8', oprresult => 'int8', 911 oprcode => 'int48div' }, 912 913{ oid => '818', descr => 'add', 914 oprname => '+', oprleft => 'int8', oprright => 'int2', oprresult => 'int8', 915 oprcom => '+(int2,int8)', oprcode => 'int82pl' }, 916{ oid => '819', descr => 'subtract', 917 oprname => '-', oprleft => 'int8', oprright => 'int2', oprresult => 'int8', 918 oprcode => 'int82mi' }, 919{ oid => '820', descr => 'multiply', 920 oprname => '*', oprleft => 'int8', oprright => 'int2', oprresult => 'int8', 921 oprcom => '*(int2,int8)', oprcode => 'int82mul' }, 922{ oid => '821', descr => 'divide', 923 oprname => '/', oprleft => 'int8', oprright => 'int2', oprresult => 'int8', 924 oprcode => 'int82div' }, 925{ oid => '822', descr => 'add', 926 oprname => '+', oprleft => 'int2', oprright => 'int8', oprresult => 'int8', 927 oprcom => '+(int8,int2)', oprcode => 'int28pl' }, 928{ oid => '823', descr => 'subtract', 929 oprname => '-', oprleft => 'int2', oprright => 'int8', oprresult => 'int8', 930 oprcode => 'int28mi' }, 931{ oid => '824', descr => 'multiply', 932 oprname => '*', oprleft => 'int2', oprright => 'int8', oprresult => 'int8', 933 oprcom => '*(int8,int2)', oprcode => 'int28mul' }, 934{ oid => '825', descr => 'divide', 935 oprname => '/', oprleft => 'int2', oprright => 'int8', oprresult => 'int8', 936 oprcode => 'int28div' }, 937 938{ oid => '706', descr => 'distance between', 939 oprname => '<->', oprleft => 'box', oprright => 'box', oprresult => 'float8', 940 oprcom => '<->(box,box)', oprcode => 'box_distance' }, 941{ oid => '707', descr => 'distance between', 942 oprname => '<->', oprleft => 'path', oprright => 'path', 943 oprresult => 'float8', oprcom => '<->(path,path)', 944 oprcode => 'path_distance' }, 945{ oid => '708', descr => 'distance between', 946 oprname => '<->', oprleft => 'line', oprright => 'line', 947 oprresult => 'float8', oprcom => '<->(line,line)', 948 oprcode => 'line_distance' }, 949{ oid => '709', descr => 'distance between', 950 oprname => '<->', oprleft => 'lseg', oprright => 'lseg', 951 oprresult => 'float8', oprcom => '<->(lseg,lseg)', 952 oprcode => 'lseg_distance' }, 953{ oid => '712', descr => 'distance between', 954 oprname => '<->', oprleft => 'polygon', oprright => 'polygon', 955 oprresult => 'float8', oprcom => '<->(polygon,polygon)', 956 oprcode => 'poly_distance' }, 957 958{ oid => '713', descr => 'not equal', 959 oprname => '<>', oprleft => 'point', oprright => 'point', oprresult => 'bool', 960 oprcom => '<>(point,point)', oprnegate => '~=(point,point)', 961 oprcode => 'point_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 962 963# add translation/rotation/scaling operators for geometric types. - thomas 97/05/10 964{ oid => '731', descr => 'add points (translate)', 965 oprname => '+', oprleft => 'point', oprright => 'point', oprresult => 'point', 966 oprcom => '+(point,point)', oprcode => 'point_add' }, 967{ oid => '732', descr => 'subtract points (translate)', 968 oprname => '-', oprleft => 'point', oprright => 'point', oprresult => 'point', 969 oprcode => 'point_sub' }, 970{ oid => '733', descr => 'multiply points (scale/rotate)', 971 oprname => '*', oprleft => 'point', oprright => 'point', oprresult => 'point', 972 oprcom => '*(point,point)', oprcode => 'point_mul' }, 973{ oid => '734', descr => 'divide points (scale/rotate)', 974 oprname => '/', oprleft => 'point', oprright => 'point', oprresult => 'point', 975 oprcode => 'point_div' }, 976{ oid => '735', descr => 'concatenate', 977 oprname => '+', oprleft => 'path', oprright => 'path', oprresult => 'path', 978 oprcom => '+(path,path)', oprcode => 'path_add' }, 979{ oid => '736', descr => 'add (translate path)', 980 oprname => '+', oprleft => 'path', oprright => 'point', oprresult => 'path', 981 oprcode => 'path_add_pt' }, 982{ oid => '737', descr => 'subtract (translate path)', 983 oprname => '-', oprleft => 'path', oprright => 'point', oprresult => 'path', 984 oprcode => 'path_sub_pt' }, 985{ oid => '738', descr => 'multiply (rotate/scale path)', 986 oprname => '*', oprleft => 'path', oprright => 'point', oprresult => 'path', 987 oprcode => 'path_mul_pt' }, 988{ oid => '739', descr => 'divide (rotate/scale path)', 989 oprname => '/', oprleft => 'path', oprright => 'point', oprresult => 'path', 990 oprcode => 'path_div_pt' }, 991{ oid => '755', descr => 'contains', 992 oprname => '@>', oprleft => 'path', oprright => 'point', oprresult => 'bool', 993 oprcom => '<@(point,path)', oprcode => 'path_contain_pt' }, 994{ oid => '756', descr => 'is contained by', 995 oprname => '<@', oprleft => 'point', oprright => 'polygon', 996 oprresult => 'bool', oprcom => '@>(polygon,point)', 997 oprcode => 'pt_contained_poly', oprrest => 'contsel', 998 oprjoin => 'contjoinsel' }, 999{ oid => '757', descr => 'contains', 1000 oprname => '@>', oprleft => 'polygon', oprright => 'point', 1001 oprresult => 'bool', oprcom => '<@(point,polygon)', 1002 oprcode => 'poly_contain_pt', oprrest => 'contsel', 1003 oprjoin => 'contjoinsel' }, 1004{ oid => '758', descr => 'is contained by', 1005 oprname => '<@', oprleft => 'point', oprright => 'circle', 1006 oprresult => 'bool', oprcom => '@>(circle,point)', 1007 oprcode => 'pt_contained_circle', oprrest => 'contsel', 1008 oprjoin => 'contjoinsel' }, 1009{ oid => '759', descr => 'contains', 1010 oprname => '@>', oprleft => 'circle', oprright => 'point', 1011 oprresult => 'bool', oprcom => '<@(point,circle)', 1012 oprcode => 'circle_contain_pt', oprrest => 'contsel', 1013 oprjoin => 'contjoinsel' }, 1014 1015{ oid => '773', descr => 'absolute value', 1016 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int4', 1017 oprresult => 'int4', oprcode => 'int4abs' }, 1018 1019# additional operators for geometric types - thomas 1997-07-09 1020{ oid => '792', descr => 'equal', 1021 oprname => '=', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1022 oprcom => '=(path,path)', oprcode => 'path_n_eq', oprrest => 'eqsel', 1023 oprjoin => 'eqjoinsel' }, 1024{ oid => '793', descr => 'less than', 1025 oprname => '<', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1026 oprcom => '>(path,path)', oprcode => 'path_n_lt' }, 1027{ oid => '794', descr => 'greater than', 1028 oprname => '>', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1029 oprcom => '<(path,path)', oprcode => 'path_n_gt' }, 1030{ oid => '795', descr => 'less than or equal', 1031 oprname => '<=', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1032 oprcom => '>=(path,path)', oprcode => 'path_n_le' }, 1033{ oid => '796', descr => 'greater than or equal', 1034 oprname => '>=', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1035 oprcom => '<=(path,path)', oprcode => 'path_n_ge' }, 1036{ oid => '797', descr => 'number of points', 1037 oprname => '#', oprkind => 'l', oprleft => '0', oprright => 'path', 1038 oprresult => 'int4', oprcode => 'path_npoints' }, 1039{ oid => '798', descr => 'intersect', 1040 oprname => '?#', oprleft => 'path', oprright => 'path', oprresult => 'bool', 1041 oprcode => 'path_inter' }, 1042{ oid => '799', descr => 'sum of path segment lengths', 1043 oprname => '@-@', oprkind => 'l', oprleft => '0', oprright => 'path', 1044 oprresult => 'float8', oprcode => 'path_length' }, 1045{ oid => '800', descr => 'is above (allows touching)', 1046 oprname => '>^', oprleft => 'box', oprright => 'box', oprresult => 'bool', 1047 oprcode => 'box_above_eq', oprrest => 'positionsel', 1048 oprjoin => 'positionjoinsel' }, 1049{ oid => '801', descr => 'is below (allows touching)', 1050 oprname => '<^', oprleft => 'box', oprright => 'box', oprresult => 'bool', 1051 oprcode => 'box_below_eq', oprrest => 'positionsel', 1052 oprjoin => 'positionjoinsel' }, 1053{ oid => '802', descr => 'deprecated, use && instead', 1054 oprname => '?#', oprleft => 'box', oprright => 'box', oprresult => 'bool', 1055 oprcode => 'box_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' }, 1056{ oid => '803', descr => 'box intersection', 1057 oprname => '#', oprleft => 'box', oprright => 'box', oprresult => 'box', 1058 oprcode => 'box_intersect' }, 1059{ oid => '804', descr => 'add point to box (translate)', 1060 oprname => '+', oprleft => 'box', oprright => 'point', oprresult => 'box', 1061 oprcode => 'box_add' }, 1062{ oid => '805', descr => 'subtract point from box (translate)', 1063 oprname => '-', oprleft => 'box', oprright => 'point', oprresult => 'box', 1064 oprcode => 'box_sub' }, 1065{ oid => '806', descr => 'multiply box by point (scale)', 1066 oprname => '*', oprleft => 'box', oprright => 'point', oprresult => 'box', 1067 oprcode => 'box_mul' }, 1068{ oid => '807', descr => 'divide box by point (scale)', 1069 oprname => '/', oprleft => 'box', oprright => 'point', oprresult => 'box', 1070 oprcode => 'box_div' }, 1071{ oid => '808', descr => 'horizontally aligned', 1072 oprname => '?-', oprleft => 'point', oprright => 'point', oprresult => 'bool', 1073 oprcom => '?-(point,point)', oprcode => 'point_horiz' }, 1074{ oid => '809', descr => 'vertically aligned', 1075 oprname => '?|', oprleft => 'point', oprright => 'point', oprresult => 'bool', 1076 oprcom => '?|(point,point)', oprcode => 'point_vert' }, 1077 1078{ oid => '811', descr => 'equal', 1079 oprname => '=', oprcanmerge => 't', oprleft => 'tinterval', 1080 oprright => 'tinterval', oprresult => 'bool', 1081 oprcom => '=(tinterval,tinterval)', oprnegate => '<>(tinterval,tinterval)', 1082 oprcode => 'tintervaleq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1083{ oid => '812', descr => 'not equal', 1084 oprname => '<>', oprleft => 'tinterval', oprright => 'tinterval', 1085 oprresult => 'bool', oprcom => '<>(tinterval,tinterval)', 1086 oprnegate => '=(tinterval,tinterval)', oprcode => 'tintervalne', 1087 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1088{ oid => '813', descr => 'less than', 1089 oprname => '<', oprleft => 'tinterval', oprright => 'tinterval', 1090 oprresult => 'bool', oprcom => '>(tinterval,tinterval)', 1091 oprnegate => '>=(tinterval,tinterval)', oprcode => 'tintervallt', 1092 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1093{ oid => '814', descr => 'greater than', 1094 oprname => '>', oprleft => 'tinterval', oprright => 'tinterval', 1095 oprresult => 'bool', oprcom => '<(tinterval,tinterval)', 1096 oprnegate => '<=(tinterval,tinterval)', oprcode => 'tintervalgt', 1097 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1098{ oid => '815', descr => 'less than or equal', 1099 oprname => '<=', oprleft => 'tinterval', oprright => 'tinterval', 1100 oprresult => 'bool', oprcom => '>=(tinterval,tinterval)', 1101 oprnegate => '>(tinterval,tinterval)', oprcode => 'tintervalle', 1102 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1103{ oid => '816', descr => 'greater than or equal', 1104 oprname => '>=', oprleft => 'tinterval', oprright => 'tinterval', 1105 oprresult => 'bool', oprcom => '<=(tinterval,tinterval)', 1106 oprnegate => '<(tinterval,tinterval)', oprcode => 'tintervalge', 1107 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1108 1109{ oid => '843', descr => 'multiply', 1110 oprname => '*', oprleft => 'money', oprright => 'float4', 1111 oprresult => 'money', oprcom => '*(float4,money)', 1112 oprcode => 'cash_mul_flt4' }, 1113{ oid => '844', descr => 'divide', 1114 oprname => '/', oprleft => 'money', oprright => 'float4', 1115 oprresult => 'money', oprcode => 'cash_div_flt4' }, 1116{ oid => '845', descr => 'multiply', 1117 oprname => '*', oprleft => 'float4', oprright => 'money', 1118 oprresult => 'money', oprcom => '*(money,float4)', 1119 oprcode => 'flt4_mul_cash' }, 1120 1121{ oid => '900', descr => 'equal', 1122 oprname => '=', oprcanmerge => 't', oprleft => 'money', oprright => 'money', 1123 oprresult => 'bool', oprcom => '=(money,money)', 1124 oprnegate => '<>(money,money)', oprcode => 'cash_eq', oprrest => 'eqsel', 1125 oprjoin => 'eqjoinsel' }, 1126{ oid => '901', descr => 'not equal', 1127 oprname => '<>', oprleft => 'money', oprright => 'money', oprresult => 'bool', 1128 oprcom => '<>(money,money)', oprnegate => '=(money,money)', 1129 oprcode => 'cash_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1130{ oid => '902', descr => 'less than', 1131 oprname => '<', oprleft => 'money', oprright => 'money', oprresult => 'bool', 1132 oprcom => '>(money,money)', oprnegate => '>=(money,money)', 1133 oprcode => 'cash_lt', oprrest => 'scalarltsel', 1134 oprjoin => 'scalarltjoinsel' }, 1135{ oid => '903', descr => 'greater than', 1136 oprname => '>', oprleft => 'money', oprright => 'money', oprresult => 'bool', 1137 oprcom => '<(money,money)', oprnegate => '<=(money,money)', 1138 oprcode => 'cash_gt', oprrest => 'scalargtsel', 1139 oprjoin => 'scalargtjoinsel' }, 1140{ oid => '904', descr => 'less than or equal', 1141 oprname => '<=', oprleft => 'money', oprright => 'money', oprresult => 'bool', 1142 oprcom => '>=(money,money)', oprnegate => '>(money,money)', 1143 oprcode => 'cash_le', oprrest => 'scalarlesel', 1144 oprjoin => 'scalarlejoinsel' }, 1145{ oid => '905', descr => 'greater than or equal', 1146 oprname => '>=', oprleft => 'money', oprright => 'money', oprresult => 'bool', 1147 oprcom => '<=(money,money)', oprnegate => '<(money,money)', 1148 oprcode => 'cash_ge', oprrest => 'scalargesel', 1149 oprjoin => 'scalargejoinsel' }, 1150{ oid => '906', descr => 'add', 1151 oprname => '+', oprleft => 'money', oprright => 'money', oprresult => 'money', 1152 oprcom => '+(money,money)', oprcode => 'cash_pl' }, 1153{ oid => '907', descr => 'subtract', 1154 oprname => '-', oprleft => 'money', oprright => 'money', oprresult => 'money', 1155 oprcode => 'cash_mi' }, 1156{ oid => '908', descr => 'multiply', 1157 oprname => '*', oprleft => 'money', oprright => 'float8', 1158 oprresult => 'money', oprcom => '*(float8,money)', 1159 oprcode => 'cash_mul_flt8' }, 1160{ oid => '909', descr => 'divide', 1161 oprname => '/', oprleft => 'money', oprright => 'float8', 1162 oprresult => 'money', oprcode => 'cash_div_flt8' }, 1163{ oid => '3346', descr => 'multiply', 1164 oprname => '*', oprleft => 'money', oprright => 'int8', oprresult => 'money', 1165 oprcom => '*(int8,money)', oprcode => 'cash_mul_int8' }, 1166{ oid => '3347', descr => 'divide', 1167 oprname => '/', oprleft => 'money', oprright => 'int8', oprresult => 'money', 1168 oprcode => 'cash_div_int8' }, 1169{ oid => '912', descr => 'multiply', 1170 oprname => '*', oprleft => 'money', oprright => 'int4', oprresult => 'money', 1171 oprcom => '*(int4,money)', oprcode => 'cash_mul_int4' }, 1172{ oid => '913', descr => 'divide', 1173 oprname => '/', oprleft => 'money', oprright => 'int4', oprresult => 'money', 1174 oprcode => 'cash_div_int4' }, 1175{ oid => '914', descr => 'multiply', 1176 oprname => '*', oprleft => 'money', oprright => 'int2', oprresult => 'money', 1177 oprcom => '*(int2,money)', oprcode => 'cash_mul_int2' }, 1178{ oid => '915', descr => 'divide', 1179 oprname => '/', oprleft => 'money', oprright => 'int2', oprresult => 'money', 1180 oprcode => 'cash_div_int2' }, 1181{ oid => '916', descr => 'multiply', 1182 oprname => '*', oprleft => 'float8', oprright => 'money', 1183 oprresult => 'money', oprcom => '*(money,float8)', 1184 oprcode => 'flt8_mul_cash' }, 1185{ oid => '3349', descr => 'multiply', 1186 oprname => '*', oprleft => 'int8', oprright => 'money', oprresult => 'money', 1187 oprcom => '*(money,int8)', oprcode => 'int8_mul_cash' }, 1188{ oid => '917', descr => 'multiply', 1189 oprname => '*', oprleft => 'int4', oprright => 'money', oprresult => 'money', 1190 oprcom => '*(money,int4)', oprcode => 'int4_mul_cash' }, 1191{ oid => '918', descr => 'multiply', 1192 oprname => '*', oprleft => 'int2', oprright => 'money', oprresult => 'money', 1193 oprcom => '*(money,int2)', oprcode => 'int2_mul_cash' }, 1194{ oid => '3825', descr => 'divide', 1195 oprname => '/', oprleft => 'money', oprright => 'money', 1196 oprresult => 'float8', oprcode => 'cash_div_cash' }, 1197 1198{ oid => '965', descr => 'exponentiation', 1199 oprname => '^', oprleft => 'float8', oprright => 'float8', 1200 oprresult => 'float8', oprcode => 'dpow' }, 1201{ oid => '966', descr => 'add/update ACL item', 1202 oprname => '+', oprleft => '_aclitem', oprright => 'aclitem', 1203 oprresult => '_aclitem', oprcode => 'aclinsert' }, 1204{ oid => '967', descr => 'remove ACL item', 1205 oprname => '-', oprleft => '_aclitem', oprright => 'aclitem', 1206 oprresult => '_aclitem', oprcode => 'aclremove' }, 1207{ oid => '968', descr => 'contains', 1208 oprname => '@>', oprleft => '_aclitem', oprright => 'aclitem', 1209 oprresult => 'bool', oprcode => 'aclcontains' }, 1210{ oid => '974', descr => 'equal', 1211 oprname => '=', oprcanhash => 't', oprleft => 'aclitem', 1212 oprright => 'aclitem', oprresult => 'bool', oprcom => '=(aclitem,aclitem)', 1213 oprcode => 'aclitemeq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1214 1215# additional geometric operators - thomas 1997-07-09 1216{ oid => '969', descr => 'center of', 1217 oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'lseg', 1218 oprresult => 'point', oprcode => 'lseg_center' }, 1219{ oid => '970', descr => 'center of', 1220 oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'path', 1221 oprresult => 'point', oprcode => 'path_center' }, 1222{ oid => '971', descr => 'center of', 1223 oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'polygon', 1224 oprresult => 'point', oprcode => 'poly_center' }, 1225 1226{ oid => '1054', descr => 'equal', 1227 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bpchar', 1228 oprright => 'bpchar', oprresult => 'bool', oprcom => '=(bpchar,bpchar)', 1229 oprnegate => '<>(bpchar,bpchar)', oprcode => 'bpchareq', oprrest => 'eqsel', 1230 oprjoin => 'eqjoinsel' }, 1231 1232{ oid => '1055', oid_symbol => 'OID_BPCHAR_REGEXEQ_OP', 1233 descr => 'matches regular expression, case-sensitive', 1234 oprname => '~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool', 1235 oprnegate => '!~(bpchar,text)', oprcode => 'bpcharregexeq', 1236 oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' }, 1237{ oid => '1056', descr => 'does not match regular expression, case-sensitive', 1238 oprname => '!~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool', 1239 oprnegate => '~(bpchar,text)', oprcode => 'bpcharregexne', 1240 oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' }, 1241{ oid => '1057', descr => 'not equal', 1242 oprname => '<>', oprleft => 'bpchar', oprright => 'bpchar', 1243 oprresult => 'bool', oprcom => '<>(bpchar,bpchar)', 1244 oprnegate => '=(bpchar,bpchar)', oprcode => 'bpcharne', oprrest => 'neqsel', 1245 oprjoin => 'neqjoinsel' }, 1246{ oid => '1058', descr => 'less than', 1247 oprname => '<', oprleft => 'bpchar', oprright => 'bpchar', 1248 oprresult => 'bool', oprcom => '>(bpchar,bpchar)', 1249 oprnegate => '>=(bpchar,bpchar)', oprcode => 'bpcharlt', 1250 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1251{ oid => '1059', descr => 'less than or equal', 1252 oprname => '<=', oprleft => 'bpchar', oprright => 'bpchar', 1253 oprresult => 'bool', oprcom => '>=(bpchar,bpchar)', 1254 oprnegate => '>(bpchar,bpchar)', oprcode => 'bpcharle', 1255 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1256{ oid => '1060', descr => 'greater than', 1257 oprname => '>', oprleft => 'bpchar', oprright => 'bpchar', 1258 oprresult => 'bool', oprcom => '<(bpchar,bpchar)', 1259 oprnegate => '<=(bpchar,bpchar)', oprcode => 'bpchargt', 1260 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1261{ oid => '1061', descr => 'greater than or equal', 1262 oprname => '>=', oprleft => 'bpchar', oprright => 'bpchar', 1263 oprresult => 'bool', oprcom => '<=(bpchar,bpchar)', 1264 oprnegate => '<(bpchar,bpchar)', oprcode => 'bpcharge', 1265 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1266 1267# generic array comparison operators 1268{ oid => '1070', oid_symbol => 'ARRAY_EQ_OP', descr => 'equal', 1269 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyarray', 1270 oprright => 'anyarray', oprresult => 'bool', oprcom => '=(anyarray,anyarray)', 1271 oprnegate => '<>(anyarray,anyarray)', oprcode => 'array_eq', 1272 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1273{ oid => '1071', descr => 'not equal', 1274 oprname => '<>', oprleft => 'anyarray', oprright => 'anyarray', 1275 oprresult => 'bool', oprcom => '<>(anyarray,anyarray)', 1276 oprnegate => '=(anyarray,anyarray)', oprcode => 'array_ne', 1277 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1278{ oid => '1072', oid_symbol => 'ARRAY_LT_OP', descr => 'less than', 1279 oprname => '<', oprleft => 'anyarray', oprright => 'anyarray', 1280 oprresult => 'bool', oprcom => '>(anyarray,anyarray)', 1281 oprnegate => '>=(anyarray,anyarray)', oprcode => 'array_lt', 1282 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1283{ oid => '1073', oid_symbol => 'ARRAY_GT_OP', descr => 'greater than', 1284 oprname => '>', oprleft => 'anyarray', oprright => 'anyarray', 1285 oprresult => 'bool', oprcom => '<(anyarray,anyarray)', 1286 oprnegate => '<=(anyarray,anyarray)', oprcode => 'array_gt', 1287 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1288{ oid => '1074', descr => 'less than or equal', 1289 oprname => '<=', oprleft => 'anyarray', oprright => 'anyarray', 1290 oprresult => 'bool', oprcom => '>=(anyarray,anyarray)', 1291 oprnegate => '>(anyarray,anyarray)', oprcode => 'array_le', 1292 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1293{ oid => '1075', descr => 'greater than or equal', 1294 oprname => '>=', oprleft => 'anyarray', oprright => 'anyarray', 1295 oprresult => 'bool', oprcom => '<=(anyarray,anyarray)', 1296 oprnegate => '<(anyarray,anyarray)', oprcode => 'array_ge', 1297 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1298 1299# date operators 1300{ oid => '1076', descr => 'add', 1301 oprname => '+', oprleft => 'date', oprright => 'interval', 1302 oprresult => 'timestamp', oprcom => '+(interval,date)', 1303 oprcode => 'date_pl_interval' }, 1304{ oid => '1077', descr => 'subtract', 1305 oprname => '-', oprleft => 'date', oprright => 'interval', 1306 oprresult => 'timestamp', oprcode => 'date_mi_interval' }, 1307{ oid => '1093', descr => 'equal', 1308 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'date', 1309 oprright => 'date', oprresult => 'bool', oprcom => '=(date,date)', 1310 oprnegate => '<>(date,date)', oprcode => 'date_eq', oprrest => 'eqsel', 1311 oprjoin => 'eqjoinsel' }, 1312{ oid => '1094', descr => 'not equal', 1313 oprname => '<>', oprleft => 'date', oprright => 'date', oprresult => 'bool', 1314 oprcom => '<>(date,date)', oprnegate => '=(date,date)', oprcode => 'date_ne', 1315 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1316{ oid => '1095', descr => 'less than', 1317 oprname => '<', oprleft => 'date', oprright => 'date', oprresult => 'bool', 1318 oprcom => '>(date,date)', oprnegate => '>=(date,date)', oprcode => 'date_lt', 1319 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1320{ oid => '1096', descr => 'less than or equal', 1321 oprname => '<=', oprleft => 'date', oprright => 'date', oprresult => 'bool', 1322 oprcom => '>=(date,date)', oprnegate => '>(date,date)', oprcode => 'date_le', 1323 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1324{ oid => '1097', descr => 'greater than', 1325 oprname => '>', oprleft => 'date', oprright => 'date', oprresult => 'bool', 1326 oprcom => '<(date,date)', oprnegate => '<=(date,date)', oprcode => 'date_gt', 1327 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1328{ oid => '1098', descr => 'greater than or equal', 1329 oprname => '>=', oprleft => 'date', oprright => 'date', oprresult => 'bool', 1330 oprcom => '<=(date,date)', oprnegate => '<(date,date)', oprcode => 'date_ge', 1331 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1332{ oid => '1099', descr => 'subtract', 1333 oprname => '-', oprleft => 'date', oprright => 'date', oprresult => 'int4', 1334 oprcode => 'date_mi' }, 1335{ oid => '1100', descr => 'add', 1336 oprname => '+', oprleft => 'date', oprright => 'int4', oprresult => 'date', 1337 oprcom => '+(int4,date)', oprcode => 'date_pli' }, 1338{ oid => '1101', descr => 'subtract', 1339 oprname => '-', oprleft => 'date', oprright => 'int4', oprresult => 'date', 1340 oprcode => 'date_mii' }, 1341 1342# time operators 1343{ oid => '1108', descr => 'equal', 1344 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'time', 1345 oprright => 'time', oprresult => 'bool', oprcom => '=(time,time)', 1346 oprnegate => '<>(time,time)', oprcode => 'time_eq', oprrest => 'eqsel', 1347 oprjoin => 'eqjoinsel' }, 1348{ oid => '1109', descr => 'not equal', 1349 oprname => '<>', oprleft => 'time', oprright => 'time', oprresult => 'bool', 1350 oprcom => '<>(time,time)', oprnegate => '=(time,time)', oprcode => 'time_ne', 1351 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1352{ oid => '1110', descr => 'less than', 1353 oprname => '<', oprleft => 'time', oprright => 'time', oprresult => 'bool', 1354 oprcom => '>(time,time)', oprnegate => '>=(time,time)', oprcode => 'time_lt', 1355 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1356{ oid => '1111', descr => 'less than or equal', 1357 oprname => '<=', oprleft => 'time', oprright => 'time', oprresult => 'bool', 1358 oprcom => '>=(time,time)', oprnegate => '>(time,time)', oprcode => 'time_le', 1359 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1360{ oid => '1112', descr => 'greater than', 1361 oprname => '>', oprleft => 'time', oprright => 'time', oprresult => 'bool', 1362 oprcom => '<(time,time)', oprnegate => '<=(time,time)', oprcode => 'time_gt', 1363 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1364{ oid => '1113', descr => 'greater than or equal', 1365 oprname => '>=', oprleft => 'time', oprright => 'time', oprresult => 'bool', 1366 oprcom => '<=(time,time)', oprnegate => '<(time,time)', oprcode => 'time_ge', 1367 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1368 1369# timetz operators 1370{ oid => '1550', descr => 'equal', 1371 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'timetz', 1372 oprright => 'timetz', oprresult => 'bool', oprcom => '=(timetz,timetz)', 1373 oprnegate => '<>(timetz,timetz)', oprcode => 'timetz_eq', oprrest => 'eqsel', 1374 oprjoin => 'eqjoinsel' }, 1375{ oid => '1551', descr => 'not equal', 1376 oprname => '<>', oprleft => 'timetz', oprright => 'timetz', 1377 oprresult => 'bool', oprcom => '<>(timetz,timetz)', 1378 oprnegate => '=(timetz,timetz)', oprcode => 'timetz_ne', oprrest => 'neqsel', 1379 oprjoin => 'neqjoinsel' }, 1380{ oid => '1552', descr => 'less than', 1381 oprname => '<', oprleft => 'timetz', oprright => 'timetz', 1382 oprresult => 'bool', oprcom => '>(timetz,timetz)', 1383 oprnegate => '>=(timetz,timetz)', oprcode => 'timetz_lt', 1384 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1385{ oid => '1553', descr => 'less than or equal', 1386 oprname => '<=', oprleft => 'timetz', oprright => 'timetz', 1387 oprresult => 'bool', oprcom => '>=(timetz,timetz)', 1388 oprnegate => '>(timetz,timetz)', oprcode => 'timetz_le', 1389 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1390{ oid => '1554', descr => 'greater than', 1391 oprname => '>', oprleft => 'timetz', oprright => 'timetz', 1392 oprresult => 'bool', oprcom => '<(timetz,timetz)', 1393 oprnegate => '<=(timetz,timetz)', oprcode => 'timetz_gt', 1394 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1395{ oid => '1555', descr => 'greater than or equal', 1396 oprname => '>=', oprleft => 'timetz', oprright => 'timetz', 1397 oprresult => 'bool', oprcom => '<=(timetz,timetz)', 1398 oprnegate => '<(timetz,timetz)', oprcode => 'timetz_ge', 1399 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1400 1401# float48 operators 1402{ oid => '1116', descr => 'add', 1403 oprname => '+', oprleft => 'float4', oprright => 'float8', 1404 oprresult => 'float8', oprcom => '+(float8,float4)', oprcode => 'float48pl' }, 1405{ oid => '1117', descr => 'subtract', 1406 oprname => '-', oprleft => 'float4', oprright => 'float8', 1407 oprresult => 'float8', oprcode => 'float48mi' }, 1408{ oid => '1118', descr => 'divide', 1409 oprname => '/', oprleft => 'float4', oprright => 'float8', 1410 oprresult => 'float8', oprcode => 'float48div' }, 1411{ oid => '1119', descr => 'multiply', 1412 oprname => '*', oprleft => 'float4', oprright => 'float8', 1413 oprresult => 'float8', oprcom => '*(float8,float4)', 1414 oprcode => 'float48mul' }, 1415{ oid => '1120', descr => 'equal', 1416 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float4', 1417 oprright => 'float8', oprresult => 'bool', oprcom => '=(float8,float4)', 1418 oprnegate => '<>(float4,float8)', oprcode => 'float48eq', oprrest => 'eqsel', 1419 oprjoin => 'eqjoinsel' }, 1420{ oid => '1121', descr => 'not equal', 1421 oprname => '<>', oprleft => 'float4', oprright => 'float8', 1422 oprresult => 'bool', oprcom => '<>(float8,float4)', 1423 oprnegate => '=(float4,float8)', oprcode => 'float48ne', oprrest => 'neqsel', 1424 oprjoin => 'neqjoinsel' }, 1425{ oid => '1122', descr => 'less than', 1426 oprname => '<', oprleft => 'float4', oprright => 'float8', 1427 oprresult => 'bool', oprcom => '>(float8,float4)', 1428 oprnegate => '>=(float4,float8)', oprcode => 'float48lt', 1429 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1430{ oid => '1123', descr => 'greater than', 1431 oprname => '>', oprleft => 'float4', oprright => 'float8', 1432 oprresult => 'bool', oprcom => '<(float8,float4)', 1433 oprnegate => '<=(float4,float8)', oprcode => 'float48gt', 1434 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1435{ oid => '1124', descr => 'less than or equal', 1436 oprname => '<=', oprleft => 'float4', oprright => 'float8', 1437 oprresult => 'bool', oprcom => '>=(float8,float4)', 1438 oprnegate => '>(float4,float8)', oprcode => 'float48le', 1439 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1440{ oid => '1125', descr => 'greater than or equal', 1441 oprname => '>=', oprleft => 'float4', oprright => 'float8', 1442 oprresult => 'bool', oprcom => '<=(float8,float4)', 1443 oprnegate => '<(float4,float8)', oprcode => 'float48ge', 1444 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1445 1446# float84 operators 1447{ oid => '1126', descr => 'add', 1448 oprname => '+', oprleft => 'float8', oprright => 'float4', 1449 oprresult => 'float8', oprcom => '+(float4,float8)', oprcode => 'float84pl' }, 1450{ oid => '1127', descr => 'subtract', 1451 oprname => '-', oprleft => 'float8', oprright => 'float4', 1452 oprresult => 'float8', oprcode => 'float84mi' }, 1453{ oid => '1128', descr => 'divide', 1454 oprname => '/', oprleft => 'float8', oprright => 'float4', 1455 oprresult => 'float8', oprcode => 'float84div' }, 1456{ oid => '1129', descr => 'multiply', 1457 oprname => '*', oprleft => 'float8', oprright => 'float4', 1458 oprresult => 'float8', oprcom => '*(float4,float8)', 1459 oprcode => 'float84mul' }, 1460{ oid => '1130', descr => 'equal', 1461 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float8', 1462 oprright => 'float4', oprresult => 'bool', oprcom => '=(float4,float8)', 1463 oprnegate => '<>(float8,float4)', oprcode => 'float84eq', oprrest => 'eqsel', 1464 oprjoin => 'eqjoinsel' }, 1465{ oid => '1131', descr => 'not equal', 1466 oprname => '<>', oprleft => 'float8', oprright => 'float4', 1467 oprresult => 'bool', oprcom => '<>(float4,float8)', 1468 oprnegate => '=(float8,float4)', oprcode => 'float84ne', oprrest => 'neqsel', 1469 oprjoin => 'neqjoinsel' }, 1470{ oid => '1132', descr => 'less than', 1471 oprname => '<', oprleft => 'float8', oprright => 'float4', 1472 oprresult => 'bool', oprcom => '>(float4,float8)', 1473 oprnegate => '>=(float8,float4)', oprcode => 'float84lt', 1474 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1475{ oid => '1133', descr => 'greater than', 1476 oprname => '>', oprleft => 'float8', oprright => 'float4', 1477 oprresult => 'bool', oprcom => '<(float4,float8)', 1478 oprnegate => '<=(float8,float4)', oprcode => 'float84gt', 1479 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1480{ oid => '1134', descr => 'less than or equal', 1481 oprname => '<=', oprleft => 'float8', oprright => 'float4', 1482 oprresult => 'bool', oprcom => '>=(float4,float8)', 1483 oprnegate => '>(float8,float4)', oprcode => 'float84le', 1484 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1485{ oid => '1135', descr => 'greater than or equal', 1486 oprname => '>=', oprleft => 'float8', oprright => 'float4', 1487 oprresult => 'bool', oprcom => '<=(float4,float8)', 1488 oprnegate => '<(float8,float4)', oprcode => 'float84ge', 1489 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1490 1491# LIKE hacks by Keith Parks. 1492{ oid => '1207', oid_symbol => 'OID_NAME_LIKE_OP', 1493 descr => 'matches LIKE expression', 1494 oprname => '~~', oprleft => 'name', oprright => 'text', oprresult => 'bool', 1495 oprnegate => '!~~(name,text)', oprcode => 'namelike', oprrest => 'likesel', 1496 oprjoin => 'likejoinsel' }, 1497{ oid => '1208', descr => 'does not match LIKE expression', 1498 oprname => '!~~', oprleft => 'name', oprright => 'text', oprresult => 'bool', 1499 oprnegate => '~~(name,text)', oprcode => 'namenlike', oprrest => 'nlikesel', 1500 oprjoin => 'nlikejoinsel' }, 1501{ oid => '1209', oid_symbol => 'OID_TEXT_LIKE_OP', 1502 descr => 'matches LIKE expression', 1503 oprname => '~~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 1504 oprnegate => '!~~(text,text)', oprcode => 'textlike', oprrest => 'likesel', 1505 oprjoin => 'likejoinsel' }, 1506{ oid => '1210', descr => 'does not match LIKE expression', 1507 oprname => '!~~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 1508 oprnegate => '~~(text,text)', oprcode => 'textnlike', oprrest => 'nlikesel', 1509 oprjoin => 'nlikejoinsel' }, 1510{ oid => '1211', oid_symbol => 'OID_BPCHAR_LIKE_OP', 1511 descr => 'matches LIKE expression', 1512 oprname => '~~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool', 1513 oprnegate => '!~~(bpchar,text)', oprcode => 'bpcharlike', 1514 oprrest => 'likesel', oprjoin => 'likejoinsel' }, 1515{ oid => '1212', descr => 'does not match LIKE expression', 1516 oprname => '!~~', oprleft => 'bpchar', oprright => 'text', 1517 oprresult => 'bool', oprnegate => '~~(bpchar,text)', oprcode => 'bpcharnlike', 1518 oprrest => 'nlikesel', oprjoin => 'nlikejoinsel' }, 1519 1520# case-insensitive regex hacks 1521{ oid => '1226', oid_symbol => 'OID_NAME_ICREGEXEQ_OP', 1522 descr => 'matches regular expression, case-insensitive', 1523 oprname => '~*', oprleft => 'name', oprright => 'text', oprresult => 'bool', 1524 oprnegate => '!~*(name,text)', oprcode => 'nameicregexeq', 1525 oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' }, 1526{ oid => '1227', 1527 descr => 'does not match regular expression, case-insensitive', 1528 oprname => '!~*', oprleft => 'name', oprright => 'text', oprresult => 'bool', 1529 oprnegate => '~*(name,text)', oprcode => 'nameicregexne', 1530 oprrest => 'icregexnesel', oprjoin => 'icregexnejoinsel' }, 1531{ oid => '1228', oid_symbol => 'OID_TEXT_ICREGEXEQ_OP', 1532 descr => 'matches regular expression, case-insensitive', 1533 oprname => '~*', oprleft => 'text', oprright => 'text', oprresult => 'bool', 1534 oprnegate => '!~*(text,text)', oprcode => 'texticregexeq', 1535 oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' }, 1536{ oid => '1229', 1537 descr => 'does not match regular expression, case-insensitive', 1538 oprname => '!~*', oprleft => 'text', oprright => 'text', oprresult => 'bool', 1539 oprnegate => '~*(text,text)', oprcode => 'texticregexne', 1540 oprrest => 'icregexnesel', oprjoin => 'icregexnejoinsel' }, 1541{ oid => '1234', oid_symbol => 'OID_BPCHAR_ICREGEXEQ_OP', 1542 descr => 'matches regular expression, case-insensitive', 1543 oprname => '~*', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool', 1544 oprnegate => '!~*(bpchar,text)', oprcode => 'bpcharicregexeq', 1545 oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' }, 1546{ oid => '1235', 1547 descr => 'does not match regular expression, case-insensitive', 1548 oprname => '!~*', oprleft => 'bpchar', oprright => 'text', 1549 oprresult => 'bool', oprnegate => '~*(bpchar,text)', 1550 oprcode => 'bpcharicregexne', oprrest => 'icregexnesel', 1551 oprjoin => 'icregexnejoinsel' }, 1552 1553# timestamptz operators 1554{ oid => '1320', descr => 'equal', 1555 oprname => '=', oprcanmerge => 't', oprcanhash => 't', 1556 oprleft => 'timestamptz', oprright => 'timestamptz', oprresult => 'bool', 1557 oprcom => '=(timestamptz,timestamptz)', 1558 oprnegate => '<>(timestamptz,timestamptz)', oprcode => 'timestamptz_eq', 1559 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1560{ oid => '1321', descr => 'not equal', 1561 oprname => '<>', oprleft => 'timestamptz', oprright => 'timestamptz', 1562 oprresult => 'bool', oprcom => '<>(timestamptz,timestamptz)', 1563 oprnegate => '=(timestamptz,timestamptz)', oprcode => 'timestamptz_ne', 1564 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1565{ oid => '1322', descr => 'less than', 1566 oprname => '<', oprleft => 'timestamptz', oprright => 'timestamptz', 1567 oprresult => 'bool', oprcom => '>(timestamptz,timestamptz)', 1568 oprnegate => '>=(timestamptz,timestamptz)', oprcode => 'timestamptz_lt', 1569 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1570{ oid => '1323', descr => 'less than or equal', 1571 oprname => '<=', oprleft => 'timestamptz', oprright => 'timestamptz', 1572 oprresult => 'bool', oprcom => '>=(timestamptz,timestamptz)', 1573 oprnegate => '>(timestamptz,timestamptz)', oprcode => 'timestamptz_le', 1574 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1575{ oid => '1324', descr => 'greater than', 1576 oprname => '>', oprleft => 'timestamptz', oprright => 'timestamptz', 1577 oprresult => 'bool', oprcom => '<(timestamptz,timestamptz)', 1578 oprnegate => '<=(timestamptz,timestamptz)', oprcode => 'timestamptz_gt', 1579 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1580{ oid => '1325', descr => 'greater than or equal', 1581 oprname => '>=', oprleft => 'timestamptz', oprright => 'timestamptz', 1582 oprresult => 'bool', oprcom => '<=(timestamptz,timestamptz)', 1583 oprnegate => '<(timestamptz,timestamptz)', oprcode => 'timestamptz_ge', 1584 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1585{ oid => '1327', descr => 'add', 1586 oprname => '+', oprleft => 'timestamptz', oprright => 'interval', 1587 oprresult => 'timestamptz', oprcom => '+(interval,timestamptz)', 1588 oprcode => 'timestamptz_pl_interval' }, 1589{ oid => '1328', descr => 'subtract', 1590 oprname => '-', oprleft => 'timestamptz', oprright => 'timestamptz', 1591 oprresult => 'interval', oprcode => 'timestamptz_mi' }, 1592{ oid => '1329', descr => 'subtract', 1593 oprname => '-', oprleft => 'timestamptz', oprright => 'interval', 1594 oprresult => 'timestamptz', oprcode => 'timestamptz_mi_interval' }, 1595 1596# interval operators 1597{ oid => '1330', descr => 'equal', 1598 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'interval', 1599 oprright => 'interval', oprresult => 'bool', oprcom => '=(interval,interval)', 1600 oprnegate => '<>(interval,interval)', oprcode => 'interval_eq', 1601 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1602{ oid => '1331', descr => 'not equal', 1603 oprname => '<>', oprleft => 'interval', oprright => 'interval', 1604 oprresult => 'bool', oprcom => '<>(interval,interval)', 1605 oprnegate => '=(interval,interval)', oprcode => 'interval_ne', 1606 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1607{ oid => '1332', descr => 'less than', 1608 oprname => '<', oprleft => 'interval', oprright => 'interval', 1609 oprresult => 'bool', oprcom => '>(interval,interval)', 1610 oprnegate => '>=(interval,interval)', oprcode => 'interval_lt', 1611 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1612{ oid => '1333', descr => 'less than or equal', 1613 oprname => '<=', oprleft => 'interval', oprright => 'interval', 1614 oprresult => 'bool', oprcom => '>=(interval,interval)', 1615 oprnegate => '>(interval,interval)', oprcode => 'interval_le', 1616 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1617{ oid => '1334', descr => 'greater than', 1618 oprname => '>', oprleft => 'interval', oprright => 'interval', 1619 oprresult => 'bool', oprcom => '<(interval,interval)', 1620 oprnegate => '<=(interval,interval)', oprcode => 'interval_gt', 1621 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1622{ oid => '1335', descr => 'greater than or equal', 1623 oprname => '>=', oprleft => 'interval', oprright => 'interval', 1624 oprresult => 'bool', oprcom => '<=(interval,interval)', 1625 oprnegate => '<(interval,interval)', oprcode => 'interval_ge', 1626 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1627 1628{ oid => '1336', descr => 'negate', 1629 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'interval', 1630 oprresult => 'interval', oprcode => 'interval_um' }, 1631{ oid => '1337', descr => 'add', 1632 oprname => '+', oprleft => 'interval', oprright => 'interval', 1633 oprresult => 'interval', oprcom => '+(interval,interval)', 1634 oprcode => 'interval_pl' }, 1635{ oid => '1338', descr => 'subtract', 1636 oprname => '-', oprleft => 'interval', oprright => 'interval', 1637 oprresult => 'interval', oprcode => 'interval_mi' }, 1638 1639{ oid => '1360', descr => 'convert date and time to timestamp', 1640 oprname => '+', oprleft => 'date', oprright => 'time', 1641 oprresult => 'timestamp', oprcom => '+(time,date)', 1642 oprcode => 'datetime_pl' }, 1643{ oid => '1361', 1644 descr => 'convert date and time with time zone to timestamp with time zone', 1645 oprname => '+', oprleft => 'date', oprright => 'timetz', 1646 oprresult => 'timestamptz', oprcom => '+(timetz,date)', 1647 oprcode => 'datetimetz_pl' }, 1648{ oid => '1363', descr => 'convert time and date to timestamp', 1649 oprname => '+', oprleft => 'time', oprright => 'date', 1650 oprresult => 'timestamp', oprcom => '+(date,time)', 1651 oprcode => 'timedate_pl' }, 1652{ oid => '1366', 1653 descr => 'convert time with time zone and date to timestamp with time zone', 1654 oprname => '+', oprleft => 'timetz', oprright => 'date', 1655 oprresult => 'timestamptz', oprcom => '+(date,timetz)', 1656 oprcode => 'timetzdate_pl' }, 1657 1658{ oid => '1399', descr => 'subtract', 1659 oprname => '-', oprleft => 'time', oprright => 'time', 1660 oprresult => 'interval', oprcode => 'time_mi_time' }, 1661 1662# additional geometric operators - thomas 97/04/18 1663{ oid => '1420', descr => 'center of', 1664 oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'circle', 1665 oprresult => 'point', oprcode => 'circle_center' }, 1666{ oid => '1500', descr => 'equal by area', 1667 oprname => '=', oprleft => 'circle', oprright => 'circle', 1668 oprresult => 'bool', oprcom => '=(circle,circle)', 1669 oprnegate => '<>(circle,circle)', oprcode => 'circle_eq', oprrest => 'eqsel', 1670 oprjoin => 'eqjoinsel' }, 1671{ oid => '1501', descr => 'not equal by area', 1672 oprname => '<>', oprleft => 'circle', oprright => 'circle', 1673 oprresult => 'bool', oprcom => '<>(circle,circle)', 1674 oprnegate => '=(circle,circle)', oprcode => 'circle_ne', oprrest => 'neqsel', 1675 oprjoin => 'neqjoinsel' }, 1676{ oid => '1502', descr => 'less than by area', 1677 oprname => '<', oprleft => 'circle', oprright => 'circle', 1678 oprresult => 'bool', oprcom => '>(circle,circle)', 1679 oprnegate => '>=(circle,circle)', oprcode => 'circle_lt', 1680 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 1681{ oid => '1503', descr => 'greater than by area', 1682 oprname => '>', oprleft => 'circle', oprright => 'circle', 1683 oprresult => 'bool', oprcom => '<(circle,circle)', 1684 oprnegate => '<=(circle,circle)', oprcode => 'circle_gt', 1685 oprrest => 'areasel', oprjoin => 'areajoinsel' }, 1686{ oid => '1504', descr => 'less than or equal by area', 1687 oprname => '<=', oprleft => 'circle', oprright => 'circle', 1688 oprresult => 'bool', oprcom => '>=(circle,circle)', 1689 oprnegate => '>(circle,circle)', oprcode => 'circle_le', oprrest => 'areasel', 1690 oprjoin => 'areajoinsel' }, 1691{ oid => '1505', descr => 'greater than or equal by area', 1692 oprname => '>=', oprleft => 'circle', oprright => 'circle', 1693 oprresult => 'bool', oprcom => '<=(circle,circle)', 1694 oprnegate => '<(circle,circle)', oprcode => 'circle_ge', oprrest => 'areasel', 1695 oprjoin => 'areajoinsel' }, 1696 1697{ oid => '1506', descr => 'is left of', 1698 oprname => '<<', oprleft => 'circle', oprright => 'circle', 1699 oprresult => 'bool', oprcode => 'circle_left', oprrest => 'positionsel', 1700 oprjoin => 'positionjoinsel' }, 1701{ oid => '1507', descr => 'overlaps or is left of', 1702 oprname => '&<', oprleft => 'circle', oprright => 'circle', 1703 oprresult => 'bool', oprcode => 'circle_overleft', oprrest => 'positionsel', 1704 oprjoin => 'positionjoinsel' }, 1705{ oid => '1508', descr => 'overlaps or is right of', 1706 oprname => '&>', oprleft => 'circle', oprright => 'circle', 1707 oprresult => 'bool', oprcode => 'circle_overright', oprrest => 'positionsel', 1708 oprjoin => 'positionjoinsel' }, 1709{ oid => '1509', descr => 'is right of', 1710 oprname => '>>', oprleft => 'circle', oprright => 'circle', 1711 oprresult => 'bool', oprcode => 'circle_right', oprrest => 'positionsel', 1712 oprjoin => 'positionjoinsel' }, 1713{ oid => '1510', descr => 'is contained by', 1714 oprname => '<@', oprleft => 'circle', oprright => 'circle', 1715 oprresult => 'bool', oprcom => '@>(circle,circle)', 1716 oprcode => 'circle_contained', oprrest => 'contsel', 1717 oprjoin => 'contjoinsel' }, 1718{ oid => '1511', descr => 'contains', 1719 oprname => '@>', oprleft => 'circle', oprright => 'circle', 1720 oprresult => 'bool', oprcom => '<@(circle,circle)', 1721 oprcode => 'circle_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 1722{ oid => '1512', descr => 'same as', 1723 oprname => '~=', oprleft => 'circle', oprright => 'circle', 1724 oprresult => 'bool', oprcom => '~=(circle,circle)', oprcode => 'circle_same', 1725 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1726{ oid => '1513', descr => 'overlaps', 1727 oprname => '&&', oprleft => 'circle', oprright => 'circle', 1728 oprresult => 'bool', oprcom => '&&(circle,circle)', 1729 oprcode => 'circle_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' }, 1730{ oid => '1514', descr => 'is above', 1731 oprname => '|>>', oprleft => 'circle', oprright => 'circle', 1732 oprresult => 'bool', oprcode => 'circle_above', oprrest => 'positionsel', 1733 oprjoin => 'positionjoinsel' }, 1734{ oid => '1515', descr => 'is below', 1735 oprname => '<<|', oprleft => 'circle', oprright => 'circle', 1736 oprresult => 'bool', oprcode => 'circle_below', oprrest => 'positionsel', 1737 oprjoin => 'positionjoinsel' }, 1738 1739{ oid => '1516', descr => 'add', 1740 oprname => '+', oprleft => 'circle', oprright => 'point', 1741 oprresult => 'circle', oprcode => 'circle_add_pt' }, 1742{ oid => '1517', descr => 'subtract', 1743 oprname => '-', oprleft => 'circle', oprright => 'point', 1744 oprresult => 'circle', oprcode => 'circle_sub_pt' }, 1745{ oid => '1518', descr => 'multiply', 1746 oprname => '*', oprleft => 'circle', oprright => 'point', 1747 oprresult => 'circle', oprcode => 'circle_mul_pt' }, 1748{ oid => '1519', descr => 'divide', 1749 oprname => '/', oprleft => 'circle', oprright => 'point', 1750 oprresult => 'circle', oprcode => 'circle_div_pt' }, 1751 1752{ oid => '1520', descr => 'distance between', 1753 oprname => '<->', oprleft => 'circle', oprright => 'circle', 1754 oprresult => 'float8', oprcom => '<->(circle,circle)', 1755 oprcode => 'circle_distance' }, 1756{ oid => '1521', descr => 'number of points', 1757 oprname => '#', oprkind => 'l', oprleft => '0', oprright => 'polygon', 1758 oprresult => 'int4', oprcode => 'poly_npoints' }, 1759{ oid => '1522', descr => 'distance between', 1760 oprname => '<->', oprleft => 'point', oprright => 'circle', 1761 oprresult => 'float8', oprcom => '<->(circle,point)', oprcode => 'dist_pc' }, 1762{ oid => '3291', descr => 'distance between', 1763 oprname => '<->', oprleft => 'circle', oprright => 'point', 1764 oprresult => 'float8', oprcom => '<->(point,circle)', 1765 oprcode => 'dist_cpoint' }, 1766{ oid => '3276', descr => 'distance between', 1767 oprname => '<->', oprleft => 'point', oprright => 'polygon', 1768 oprresult => 'float8', oprcom => '<->(polygon,point)', 1769 oprcode => 'dist_ppoly' }, 1770{ oid => '3289', descr => 'distance between', 1771 oprname => '<->', oprleft => 'polygon', oprright => 'point', 1772 oprresult => 'float8', oprcom => '<->(point,polygon)', 1773 oprcode => 'dist_polyp' }, 1774{ oid => '1523', descr => 'distance between', 1775 oprname => '<->', oprleft => 'circle', oprright => 'polygon', 1776 oprresult => 'float8', oprcode => 'dist_cpoly' }, 1777 1778# additional geometric operators - thomas 1997-07-09 1779{ oid => '1524', descr => 'distance between', 1780 oprname => '<->', oprleft => 'line', oprright => 'box', oprresult => 'float8', 1781 oprcode => 'dist_lb' }, 1782 1783{ oid => '1525', descr => 'intersect', 1784 oprname => '?#', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1785 oprcom => '?#(lseg,lseg)', oprcode => 'lseg_intersect' }, 1786{ oid => '1526', descr => 'parallel', 1787 oprname => '?||', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1788 oprcom => '?||(lseg,lseg)', oprcode => 'lseg_parallel' }, 1789{ oid => '1527', descr => 'perpendicular', 1790 oprname => '?-|', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1791 oprcom => '?-|(lseg,lseg)', oprcode => 'lseg_perp' }, 1792{ oid => '1528', descr => 'horizontal', 1793 oprname => '?-', oprkind => 'l', oprleft => '0', oprright => 'lseg', 1794 oprresult => 'bool', oprcode => 'lseg_horizontal' }, 1795{ oid => '1529', descr => 'vertical', 1796 oprname => '?|', oprkind => 'l', oprleft => '0', oprright => 'lseg', 1797 oprresult => 'bool', oprcode => 'lseg_vertical' }, 1798{ oid => '1535', descr => 'equal', 1799 oprname => '=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1800 oprcom => '=(lseg,lseg)', oprnegate => '<>(lseg,lseg)', oprcode => 'lseg_eq', 1801 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1802{ oid => '1536', descr => 'intersection point', 1803 oprname => '#', oprleft => 'lseg', oprright => 'lseg', oprresult => 'point', 1804 oprcom => '#(lseg,lseg)', oprcode => 'lseg_interpt' }, 1805{ oid => '1537', descr => 'intersect', 1806 oprname => '?#', oprleft => 'lseg', oprright => 'line', oprresult => 'bool', 1807 oprcode => 'inter_sl' }, 1808{ oid => '1538', descr => 'intersect', 1809 oprname => '?#', oprleft => 'lseg', oprright => 'box', oprresult => 'bool', 1810 oprcode => 'inter_sb' }, 1811{ oid => '1539', descr => 'intersect', 1812 oprname => '?#', oprleft => 'line', oprright => 'box', oprresult => 'bool', 1813 oprcode => 'inter_lb' }, 1814 1815{ oid => '1546', descr => 'point on line', 1816 oprname => '<@', oprleft => 'point', oprright => 'line', oprresult => 'bool', 1817 oprcode => 'on_pl' }, 1818{ oid => '1547', descr => 'is contained by', 1819 oprname => '<@', oprleft => 'point', oprright => 'lseg', oprresult => 'bool', 1820 oprcode => 'on_ps' }, 1821{ oid => '1548', descr => 'lseg on line', 1822 oprname => '<@', oprleft => 'lseg', oprright => 'line', oprresult => 'bool', 1823 oprcode => 'on_sl' }, 1824{ oid => '1549', descr => 'is contained by', 1825 oprname => '<@', oprleft => 'lseg', oprright => 'box', oprresult => 'bool', 1826 oprcode => 'on_sb' }, 1827 1828{ oid => '1557', descr => 'closest point to A on B', 1829 oprname => '##', oprleft => 'point', oprright => 'line', oprresult => 'point', 1830 oprcode => 'close_pl' }, 1831{ oid => '1558', descr => 'closest point to A on B', 1832 oprname => '##', oprleft => 'point', oprright => 'lseg', oprresult => 'point', 1833 oprcode => 'close_ps' }, 1834{ oid => '1559', descr => 'closest point to A on B', 1835 oprname => '##', oprleft => 'point', oprright => 'box', oprresult => 'point', 1836 oprcode => 'close_pb' }, 1837 1838{ oid => '1566', descr => 'closest point to A on B', 1839 oprname => '##', oprleft => 'lseg', oprright => 'line', oprresult => 'point', 1840 oprcode => 'close_sl' }, 1841{ oid => '1567', descr => 'closest point to A on B', 1842 oprname => '##', oprleft => 'lseg', oprright => 'box', oprresult => 'point', 1843 oprcode => 'close_sb' }, 1844{ oid => '1568', descr => 'closest point to A on B', 1845 oprname => '##', oprleft => 'line', oprright => 'box', oprresult => 'point', 1846 oprcode => 'close_lb' }, 1847{ oid => '1577', descr => 'closest point to A on B', 1848 oprname => '##', oprleft => 'line', oprright => 'lseg', oprresult => 'point', 1849 oprcode => 'close_ls' }, 1850{ oid => '1578', descr => 'closest point to A on B', 1851 oprname => '##', oprleft => 'lseg', oprright => 'lseg', oprresult => 'point', 1852 oprcode => 'close_lseg' }, 1853{ oid => '1583', descr => 'multiply', 1854 oprname => '*', oprleft => 'interval', oprright => 'float8', 1855 oprresult => 'interval', oprcom => '*(float8,interval)', 1856 oprcode => 'interval_mul' }, 1857{ oid => '1584', descr => 'multiply', 1858 oprname => '*', oprleft => 'float8', oprright => 'interval', 1859 oprresult => 'interval', oprcom => '*(interval,float8)', 1860 oprcode => 'mul_d_interval' }, 1861{ oid => '1585', descr => 'divide', 1862 oprname => '/', oprleft => 'interval', oprright => 'float8', 1863 oprresult => 'interval', oprcode => 'interval_div' }, 1864 1865{ oid => '1586', descr => 'not equal', 1866 oprname => '<>', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1867 oprcom => '<>(lseg,lseg)', oprnegate => '=(lseg,lseg)', oprcode => 'lseg_ne', 1868 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1869{ oid => '1587', descr => 'less than by length', 1870 oprname => '<', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1871 oprcom => '>(lseg,lseg)', oprnegate => '>=(lseg,lseg)', 1872 oprcode => 'lseg_lt' }, 1873{ oid => '1588', descr => 'less than or equal by length', 1874 oprname => '<=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1875 oprcom => '>=(lseg,lseg)', oprnegate => '>(lseg,lseg)', 1876 oprcode => 'lseg_le' }, 1877{ oid => '1589', descr => 'greater than by length', 1878 oprname => '>', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1879 oprcom => '<(lseg,lseg)', oprnegate => '<=(lseg,lseg)', 1880 oprcode => 'lseg_gt' }, 1881{ oid => '1590', descr => 'greater than or equal by length', 1882 oprname => '>=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool', 1883 oprcom => '<=(lseg,lseg)', oprnegate => '<(lseg,lseg)', 1884 oprcode => 'lseg_ge' }, 1885 1886{ oid => '1591', descr => 'distance between endpoints', 1887 oprname => '@-@', oprkind => 'l', oprleft => '0', oprright => 'lseg', 1888 oprresult => 'float8', oprcode => 'lseg_length' }, 1889 1890{ oid => '1611', descr => 'intersect', 1891 oprname => '?#', oprleft => 'line', oprright => 'line', oprresult => 'bool', 1892 oprcom => '?#(line,line)', oprcode => 'line_intersect' }, 1893{ oid => '1612', descr => 'parallel', 1894 oprname => '?||', oprleft => 'line', oprright => 'line', oprresult => 'bool', 1895 oprcom => '?||(line,line)', oprcode => 'line_parallel' }, 1896{ oid => '1613', descr => 'perpendicular', 1897 oprname => '?-|', oprleft => 'line', oprright => 'line', oprresult => 'bool', 1898 oprcom => '?-|(line,line)', oprcode => 'line_perp' }, 1899{ oid => '1614', descr => 'horizontal', 1900 oprname => '?-', oprkind => 'l', oprleft => '0', oprright => 'line', 1901 oprresult => 'bool', oprcode => 'line_horizontal' }, 1902{ oid => '1615', descr => 'vertical', 1903 oprname => '?|', oprkind => 'l', oprleft => '0', oprright => 'line', 1904 oprresult => 'bool', oprcode => 'line_vertical' }, 1905{ oid => '1616', descr => 'equal', 1906 oprname => '=', oprleft => 'line', oprright => 'line', oprresult => 'bool', 1907 oprcom => '=(line,line)', oprcode => 'line_eq', oprrest => 'eqsel', 1908 oprjoin => 'eqjoinsel' }, 1909{ oid => '1617', descr => 'intersection point', 1910 oprname => '#', oprleft => 'line', oprright => 'line', oprresult => 'point', 1911 oprcom => '#(line,line)', oprcode => 'line_interpt' }, 1912 1913# MACADDR type 1914{ oid => '1220', descr => 'equal', 1915 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'macaddr', 1916 oprright => 'macaddr', oprresult => 'bool', oprcom => '=(macaddr,macaddr)', 1917 oprnegate => '<>(macaddr,macaddr)', oprcode => 'macaddr_eq', 1918 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1919{ oid => '1221', descr => 'not equal', 1920 oprname => '<>', oprleft => 'macaddr', oprright => 'macaddr', 1921 oprresult => 'bool', oprcom => '<>(macaddr,macaddr)', 1922 oprnegate => '=(macaddr,macaddr)', oprcode => 'macaddr_ne', 1923 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1924{ oid => '1222', descr => 'less than', 1925 oprname => '<', oprleft => 'macaddr', oprright => 'macaddr', 1926 oprresult => 'bool', oprcom => '>(macaddr,macaddr)', 1927 oprnegate => '>=(macaddr,macaddr)', oprcode => 'macaddr_lt', 1928 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1929{ oid => '1223', descr => 'less than or equal', 1930 oprname => '<=', oprleft => 'macaddr', oprright => 'macaddr', 1931 oprresult => 'bool', oprcom => '>=(macaddr,macaddr)', 1932 oprnegate => '>(macaddr,macaddr)', oprcode => 'macaddr_le', 1933 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1934{ oid => '1224', descr => 'greater than', 1935 oprname => '>', oprleft => 'macaddr', oprright => 'macaddr', 1936 oprresult => 'bool', oprcom => '<(macaddr,macaddr)', 1937 oprnegate => '<=(macaddr,macaddr)', oprcode => 'macaddr_gt', 1938 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1939{ oid => '1225', descr => 'greater than or equal', 1940 oprname => '>=', oprleft => 'macaddr', oprright => 'macaddr', 1941 oprresult => 'bool', oprcom => '<=(macaddr,macaddr)', 1942 oprnegate => '<(macaddr,macaddr)', oprcode => 'macaddr_ge', 1943 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1944 1945{ oid => '3147', descr => 'bitwise not', 1946 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'macaddr', 1947 oprresult => 'macaddr', oprcode => 'macaddr_not' }, 1948{ oid => '3148', descr => 'bitwise and', 1949 oprname => '&', oprleft => 'macaddr', oprright => 'macaddr', 1950 oprresult => 'macaddr', oprcode => 'macaddr_and' }, 1951{ oid => '3149', descr => 'bitwise or', 1952 oprname => '|', oprleft => 'macaddr', oprright => 'macaddr', 1953 oprresult => 'macaddr', oprcode => 'macaddr_or' }, 1954 1955# MACADDR8 type 1956{ oid => '3362', descr => 'equal', 1957 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'macaddr8', 1958 oprright => 'macaddr8', oprresult => 'bool', oprcom => '=(macaddr8,macaddr8)', 1959 oprnegate => '<>(macaddr8,macaddr8)', oprcode => 'macaddr8_eq', 1960 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 1961{ oid => '3363', descr => 'not equal', 1962 oprname => '<>', oprleft => 'macaddr8', oprright => 'macaddr8', 1963 oprresult => 'bool', oprcom => '<>(macaddr8,macaddr8)', 1964 oprnegate => '=(macaddr8,macaddr8)', oprcode => 'macaddr8_ne', 1965 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 1966{ oid => '3364', descr => 'less than', 1967 oprname => '<', oprleft => 'macaddr8', oprright => 'macaddr8', 1968 oprresult => 'bool', oprcom => '>(macaddr8,macaddr8)', 1969 oprnegate => '>=(macaddr8,macaddr8)', oprcode => 'macaddr8_lt', 1970 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 1971{ oid => '3365', descr => 'less than or equal', 1972 oprname => '<=', oprleft => 'macaddr8', oprright => 'macaddr8', 1973 oprresult => 'bool', oprcom => '>=(macaddr8,macaddr8)', 1974 oprnegate => '>(macaddr8,macaddr8)', oprcode => 'macaddr8_le', 1975 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 1976{ oid => '3366', descr => 'greater than', 1977 oprname => '>', oprleft => 'macaddr8', oprright => 'macaddr8', 1978 oprresult => 'bool', oprcom => '<(macaddr8,macaddr8)', 1979 oprnegate => '<=(macaddr8,macaddr8)', oprcode => 'macaddr8_gt', 1980 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 1981{ oid => '3367', descr => 'greater than or equal', 1982 oprname => '>=', oprleft => 'macaddr8', oprright => 'macaddr8', 1983 oprresult => 'bool', oprcom => '<=(macaddr8,macaddr8)', 1984 oprnegate => '<(macaddr8,macaddr8)', oprcode => 'macaddr8_ge', 1985 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 1986 1987{ oid => '3368', descr => 'bitwise not', 1988 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'macaddr8', 1989 oprresult => 'macaddr8', oprcode => 'macaddr8_not' }, 1990{ oid => '3369', descr => 'bitwise and', 1991 oprname => '&', oprleft => 'macaddr8', oprright => 'macaddr8', 1992 oprresult => 'macaddr8', oprcode => 'macaddr8_and' }, 1993{ oid => '3370', descr => 'bitwise or', 1994 oprname => '|', oprleft => 'macaddr8', oprright => 'macaddr8', 1995 oprresult => 'macaddr8', oprcode => 'macaddr8_or' }, 1996 1997# INET type (these also support CIDR via implicit cast) 1998{ oid => '1201', descr => 'equal', 1999 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'inet', 2000 oprright => 'inet', oprresult => 'bool', oprcom => '=(inet,inet)', 2001 oprnegate => '<>(inet,inet)', oprcode => 'network_eq', oprrest => 'eqsel', 2002 oprjoin => 'eqjoinsel' }, 2003{ oid => '1202', descr => 'not equal', 2004 oprname => '<>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2005 oprcom => '<>(inet,inet)', oprnegate => '=(inet,inet)', 2006 oprcode => 'network_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2007{ oid => '1203', descr => 'less than', 2008 oprname => '<', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2009 oprcom => '>(inet,inet)', oprnegate => '>=(inet,inet)', 2010 oprcode => 'network_lt', oprrest => 'scalarltsel', 2011 oprjoin => 'scalarltjoinsel' }, 2012{ oid => '1204', descr => 'less than or equal', 2013 oprname => '<=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2014 oprcom => '>=(inet,inet)', oprnegate => '>(inet,inet)', 2015 oprcode => 'network_le', oprrest => 'scalarlesel', 2016 oprjoin => 'scalarlejoinsel' }, 2017{ oid => '1205', descr => 'greater than', 2018 oprname => '>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2019 oprcom => '<(inet,inet)', oprnegate => '<=(inet,inet)', 2020 oprcode => 'network_gt', oprrest => 'scalargtsel', 2021 oprjoin => 'scalargtjoinsel' }, 2022{ oid => '1206', descr => 'greater than or equal', 2023 oprname => '>=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2024 oprcom => '<=(inet,inet)', oprnegate => '<(inet,inet)', 2025 oprcode => 'network_ge', oprrest => 'scalargesel', 2026 oprjoin => 'scalargejoinsel' }, 2027{ oid => '931', oid_symbol => 'OID_INET_SUB_OP', descr => 'is subnet', 2028 oprname => '<<', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2029 oprcom => '>>(inet,inet)', oprcode => 'network_sub', oprrest => 'networksel', 2030 oprjoin => 'networkjoinsel' }, 2031{ oid => '932', oid_symbol => 'OID_INET_SUBEQ_OP', 2032 descr => 'is subnet or equal', 2033 oprname => '<<=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2034 oprcom => '>>=(inet,inet)', oprcode => 'network_subeq', 2035 oprrest => 'networksel', oprjoin => 'networkjoinsel' }, 2036{ oid => '933', oid_symbol => 'OID_INET_SUP_OP', descr => 'is supernet', 2037 oprname => '>>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2038 oprcom => '<<(inet,inet)', oprcode => 'network_sup', oprrest => 'networksel', 2039 oprjoin => 'networkjoinsel' }, 2040{ oid => '934', oid_symbol => 'OID_INET_SUPEQ_OP', 2041 descr => 'is supernet or equal', 2042 oprname => '>>=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2043 oprcom => '<<=(inet,inet)', oprcode => 'network_supeq', 2044 oprrest => 'networksel', oprjoin => 'networkjoinsel' }, 2045{ oid => '3552', oid_symbol => 'OID_INET_OVERLAP_OP', 2046 descr => 'overlaps (is subnet or supernet)', 2047 oprname => '&&', oprleft => 'inet', oprright => 'inet', oprresult => 'bool', 2048 oprcom => '&&(inet,inet)', oprcode => 'network_overlap', 2049 oprrest => 'networksel', oprjoin => 'networkjoinsel' }, 2050 2051{ oid => '2634', descr => 'bitwise not', 2052 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'inet', 2053 oprresult => 'inet', oprcode => 'inetnot' }, 2054{ oid => '2635', descr => 'bitwise and', 2055 oprname => '&', oprleft => 'inet', oprright => 'inet', oprresult => 'inet', 2056 oprcode => 'inetand' }, 2057{ oid => '2636', descr => 'bitwise or', 2058 oprname => '|', oprleft => 'inet', oprright => 'inet', oprresult => 'inet', 2059 oprcode => 'inetor' }, 2060{ oid => '2637', descr => 'add', 2061 oprname => '+', oprleft => 'inet', oprright => 'int8', oprresult => 'inet', 2062 oprcom => '+(int8,inet)', oprcode => 'inetpl' }, 2063{ oid => '2638', descr => 'add', 2064 oprname => '+', oprleft => 'int8', oprright => 'inet', oprresult => 'inet', 2065 oprcom => '+(inet,int8)', oprcode => 'int8pl_inet' }, 2066{ oid => '2639', descr => 'subtract', 2067 oprname => '-', oprleft => 'inet', oprright => 'int8', oprresult => 'inet', 2068 oprcode => 'inetmi_int8' }, 2069{ oid => '2640', descr => 'subtract', 2070 oprname => '-', oprleft => 'inet', oprright => 'inet', oprresult => 'int8', 2071 oprcode => 'inetmi' }, 2072 2073# case-insensitive LIKE hacks 2074{ oid => '1625', oid_symbol => 'OID_NAME_ICLIKE_OP', 2075 descr => 'matches LIKE expression, case-insensitive', 2076 oprname => '~~*', oprleft => 'name', oprright => 'text', oprresult => 'bool', 2077 oprnegate => '!~~*(name,text)', oprcode => 'nameiclike', 2078 oprrest => 'iclikesel', oprjoin => 'iclikejoinsel' }, 2079{ oid => '1626', descr => 'does not match LIKE expression, case-insensitive', 2080 oprname => '!~~*', oprleft => 'name', oprright => 'text', oprresult => 'bool', 2081 oprnegate => '~~*(name,text)', oprcode => 'nameicnlike', 2082 oprrest => 'icnlikesel', oprjoin => 'icnlikejoinsel' }, 2083{ oid => '1627', oid_symbol => 'OID_TEXT_ICLIKE_OP', 2084 descr => 'matches LIKE expression, case-insensitive', 2085 oprname => '~~*', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2086 oprnegate => '!~~*(text,text)', oprcode => 'texticlike', 2087 oprrest => 'iclikesel', oprjoin => 'iclikejoinsel' }, 2088{ oid => '1628', descr => 'does not match LIKE expression, case-insensitive', 2089 oprname => '!~~*', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2090 oprnegate => '~~*(text,text)', oprcode => 'texticnlike', 2091 oprrest => 'icnlikesel', oprjoin => 'icnlikejoinsel' }, 2092{ oid => '1629', oid_symbol => 'OID_BPCHAR_ICLIKE_OP', 2093 descr => 'matches LIKE expression, case-insensitive', 2094 oprname => '~~*', oprleft => 'bpchar', oprright => 'text', 2095 oprresult => 'bool', oprnegate => '!~~*(bpchar,text)', 2096 oprcode => 'bpchariclike', oprrest => 'iclikesel', 2097 oprjoin => 'iclikejoinsel' }, 2098{ oid => '1630', descr => 'does not match LIKE expression, case-insensitive', 2099 oprname => '!~~*', oprleft => 'bpchar', oprright => 'text', 2100 oprresult => 'bool', oprnegate => '~~*(bpchar,text)', 2101 oprcode => 'bpcharicnlike', oprrest => 'icnlikesel', 2102 oprjoin => 'icnlikejoinsel' }, 2103 2104# NUMERIC type - OID's 1700-1799 2105{ oid => '1751', descr => 'negate', 2106 oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'numeric', 2107 oprresult => 'numeric', oprcode => 'numeric_uminus' }, 2108{ oid => '1752', descr => 'equal', 2109 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'numeric', 2110 oprright => 'numeric', oprresult => 'bool', oprcom => '=(numeric,numeric)', 2111 oprnegate => '<>(numeric,numeric)', oprcode => 'numeric_eq', 2112 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2113{ oid => '1753', descr => 'not equal', 2114 oprname => '<>', oprleft => 'numeric', oprright => 'numeric', 2115 oprresult => 'bool', oprcom => '<>(numeric,numeric)', 2116 oprnegate => '=(numeric,numeric)', oprcode => 'numeric_ne', 2117 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2118{ oid => '1754', descr => 'less than', 2119 oprname => '<', oprleft => 'numeric', oprright => 'numeric', 2120 oprresult => 'bool', oprcom => '>(numeric,numeric)', 2121 oprnegate => '>=(numeric,numeric)', oprcode => 'numeric_lt', 2122 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2123{ oid => '1755', descr => 'less than or equal', 2124 oprname => '<=', oprleft => 'numeric', oprright => 'numeric', 2125 oprresult => 'bool', oprcom => '>=(numeric,numeric)', 2126 oprnegate => '>(numeric,numeric)', oprcode => 'numeric_le', 2127 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2128{ oid => '1756', descr => 'greater than', 2129 oprname => '>', oprleft => 'numeric', oprright => 'numeric', 2130 oprresult => 'bool', oprcom => '<(numeric,numeric)', 2131 oprnegate => '<=(numeric,numeric)', oprcode => 'numeric_gt', 2132 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2133{ oid => '1757', descr => 'greater than or equal', 2134 oprname => '>=', oprleft => 'numeric', oprright => 'numeric', 2135 oprresult => 'bool', oprcom => '<=(numeric,numeric)', 2136 oprnegate => '<(numeric,numeric)', oprcode => 'numeric_ge', 2137 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2138{ oid => '1758', descr => 'add', 2139 oprname => '+', oprleft => 'numeric', oprright => 'numeric', 2140 oprresult => 'numeric', oprcom => '+(numeric,numeric)', 2141 oprcode => 'numeric_add' }, 2142{ oid => '1759', descr => 'subtract', 2143 oprname => '-', oprleft => 'numeric', oprright => 'numeric', 2144 oprresult => 'numeric', oprcode => 'numeric_sub' }, 2145{ oid => '1760', descr => 'multiply', 2146 oprname => '*', oprleft => 'numeric', oprright => 'numeric', 2147 oprresult => 'numeric', oprcom => '*(numeric,numeric)', 2148 oprcode => 'numeric_mul' }, 2149{ oid => '1761', descr => 'divide', 2150 oprname => '/', oprleft => 'numeric', oprright => 'numeric', 2151 oprresult => 'numeric', oprcode => 'numeric_div' }, 2152{ oid => '1762', descr => 'modulus', 2153 oprname => '%', oprleft => 'numeric', oprright => 'numeric', 2154 oprresult => 'numeric', oprcode => 'numeric_mod' }, 2155{ oid => '1038', descr => 'exponentiation', 2156 oprname => '^', oprleft => 'numeric', oprright => 'numeric', 2157 oprresult => 'numeric', oprcode => 'numeric_power' }, 2158{ oid => '1763', descr => 'absolute value', 2159 oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'numeric', 2160 oprresult => 'numeric', oprcode => 'numeric_abs' }, 2161 2162{ oid => '1784', descr => 'equal', 2163 oprname => '=', oprcanmerge => 't', oprleft => 'bit', oprright => 'bit', 2164 oprresult => 'bool', oprcom => '=(bit,bit)', oprnegate => '<>(bit,bit)', 2165 oprcode => 'biteq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2166{ oid => '1785', descr => 'not equal', 2167 oprname => '<>', oprleft => 'bit', oprright => 'bit', oprresult => 'bool', 2168 oprcom => '<>(bit,bit)', oprnegate => '=(bit,bit)', oprcode => 'bitne', 2169 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2170{ oid => '1786', descr => 'less than', 2171 oprname => '<', oprleft => 'bit', oprright => 'bit', oprresult => 'bool', 2172 oprcom => '>(bit,bit)', oprnegate => '>=(bit,bit)', oprcode => 'bitlt', 2173 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2174{ oid => '1787', descr => 'greater than', 2175 oprname => '>', oprleft => 'bit', oprright => 'bit', oprresult => 'bool', 2176 oprcom => '<(bit,bit)', oprnegate => '<=(bit,bit)', oprcode => 'bitgt', 2177 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2178{ oid => '1788', descr => 'less than or equal', 2179 oprname => '<=', oprleft => 'bit', oprright => 'bit', oprresult => 'bool', 2180 oprcom => '>=(bit,bit)', oprnegate => '>(bit,bit)', oprcode => 'bitle', 2181 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2182{ oid => '1789', descr => 'greater than or equal', 2183 oprname => '>=', oprleft => 'bit', oprright => 'bit', oprresult => 'bool', 2184 oprcom => '<=(bit,bit)', oprnegate => '<(bit,bit)', oprcode => 'bitge', 2185 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2186{ oid => '1791', descr => 'bitwise and', 2187 oprname => '&', oprleft => 'bit', oprright => 'bit', oprresult => 'bit', 2188 oprcom => '&(bit,bit)', oprcode => 'bitand' }, 2189{ oid => '1792', descr => 'bitwise or', 2190 oprname => '|', oprleft => 'bit', oprright => 'bit', oprresult => 'bit', 2191 oprcom => '|(bit,bit)', oprcode => 'bitor' }, 2192{ oid => '1793', descr => 'bitwise exclusive or', 2193 oprname => '#', oprleft => 'bit', oprright => 'bit', oprresult => 'bit', 2194 oprcom => '#(bit,bit)', oprcode => 'bitxor' }, 2195{ oid => '1794', descr => 'bitwise not', 2196 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'bit', 2197 oprresult => 'bit', oprcode => 'bitnot' }, 2198{ oid => '1795', descr => 'bitwise shift left', 2199 oprname => '<<', oprleft => 'bit', oprright => 'int4', oprresult => 'bit', 2200 oprcode => 'bitshiftleft' }, 2201{ oid => '1796', descr => 'bitwise shift right', 2202 oprname => '>>', oprleft => 'bit', oprright => 'int4', oprresult => 'bit', 2203 oprcode => 'bitshiftright' }, 2204{ oid => '1797', descr => 'concatenate', 2205 oprname => '||', oprleft => 'varbit', oprright => 'varbit', 2206 oprresult => 'varbit', oprcode => 'bitcat' }, 2207 2208{ oid => '1800', descr => 'add', 2209 oprname => '+', oprleft => 'time', oprright => 'interval', 2210 oprresult => 'time', oprcom => '+(interval,time)', 2211 oprcode => 'time_pl_interval' }, 2212{ oid => '1801', descr => 'subtract', 2213 oprname => '-', oprleft => 'time', oprright => 'interval', 2214 oprresult => 'time', oprcode => 'time_mi_interval' }, 2215{ oid => '1802', descr => 'add', 2216 oprname => '+', oprleft => 'timetz', oprright => 'interval', 2217 oprresult => 'timetz', oprcom => '+(interval,timetz)', 2218 oprcode => 'timetz_pl_interval' }, 2219{ oid => '1803', descr => 'subtract', 2220 oprname => '-', oprleft => 'timetz', oprright => 'interval', 2221 oprresult => 'timetz', oprcode => 'timetz_mi_interval' }, 2222 2223{ oid => '1804', descr => 'equal', 2224 oprname => '=', oprcanmerge => 't', oprleft => 'varbit', oprright => 'varbit', 2225 oprresult => 'bool', oprcom => '=(varbit,varbit)', 2226 oprnegate => '<>(varbit,varbit)', oprcode => 'varbiteq', oprrest => 'eqsel', 2227 oprjoin => 'eqjoinsel' }, 2228{ oid => '1805', descr => 'not equal', 2229 oprname => '<>', oprleft => 'varbit', oprright => 'varbit', 2230 oprresult => 'bool', oprcom => '<>(varbit,varbit)', 2231 oprnegate => '=(varbit,varbit)', oprcode => 'varbitne', oprrest => 'neqsel', 2232 oprjoin => 'neqjoinsel' }, 2233{ oid => '1806', descr => 'less than', 2234 oprname => '<', oprleft => 'varbit', oprright => 'varbit', 2235 oprresult => 'bool', oprcom => '>(varbit,varbit)', 2236 oprnegate => '>=(varbit,varbit)', oprcode => 'varbitlt', 2237 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2238{ oid => '1807', descr => 'greater than', 2239 oprname => '>', oprleft => 'varbit', oprright => 'varbit', 2240 oprresult => 'bool', oprcom => '<(varbit,varbit)', 2241 oprnegate => '<=(varbit,varbit)', oprcode => 'varbitgt', 2242 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2243{ oid => '1808', descr => 'less than or equal', 2244 oprname => '<=', oprleft => 'varbit', oprright => 'varbit', 2245 oprresult => 'bool', oprcom => '>=(varbit,varbit)', 2246 oprnegate => '>(varbit,varbit)', oprcode => 'varbitle', 2247 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2248{ oid => '1809', descr => 'greater than or equal', 2249 oprname => '>=', oprleft => 'varbit', oprright => 'varbit', 2250 oprresult => 'bool', oprcom => '<=(varbit,varbit)', 2251 oprnegate => '<(varbit,varbit)', oprcode => 'varbitge', 2252 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2253 2254{ oid => '1849', descr => 'add', 2255 oprname => '+', oprleft => 'interval', oprright => 'time', 2256 oprresult => 'time', oprcom => '+(time,interval)', 2257 oprcode => 'interval_pl_time' }, 2258 2259{ oid => '1862', descr => 'equal', 2260 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2', 2261 oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int2)', 2262 oprnegate => '<>(int2,int8)', oprcode => 'int28eq', oprrest => 'eqsel', 2263 oprjoin => 'eqjoinsel' }, 2264{ oid => '1863', descr => 'not equal', 2265 oprname => '<>', oprleft => 'int2', oprright => 'int8', oprresult => 'bool', 2266 oprcom => '<>(int8,int2)', oprnegate => '=(int2,int8)', oprcode => 'int28ne', 2267 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2268{ oid => '1864', descr => 'less than', 2269 oprname => '<', oprleft => 'int2', oprright => 'int8', oprresult => 'bool', 2270 oprcom => '>(int8,int2)', oprnegate => '>=(int2,int8)', oprcode => 'int28lt', 2271 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2272{ oid => '1865', descr => 'greater than', 2273 oprname => '>', oprleft => 'int2', oprright => 'int8', oprresult => 'bool', 2274 oprcom => '<(int8,int2)', oprnegate => '<=(int2,int8)', oprcode => 'int28gt', 2275 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2276{ oid => '1866', descr => 'less than or equal', 2277 oprname => '<=', oprleft => 'int2', oprright => 'int8', oprresult => 'bool', 2278 oprcom => '>=(int8,int2)', oprnegate => '>(int2,int8)', oprcode => 'int28le', 2279 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2280{ oid => '1867', descr => 'greater than or equal', 2281 oprname => '>=', oprleft => 'int2', oprright => 'int8', oprresult => 'bool', 2282 oprcom => '<=(int8,int2)', oprnegate => '<(int2,int8)', oprcode => 'int28ge', 2283 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2284 2285{ oid => '1868', descr => 'equal', 2286 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8', 2287 oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int8)', 2288 oprnegate => '<>(int8,int2)', oprcode => 'int82eq', oprrest => 'eqsel', 2289 oprjoin => 'eqjoinsel' }, 2290{ oid => '1869', descr => 'not equal', 2291 oprname => '<>', oprleft => 'int8', oprright => 'int2', oprresult => 'bool', 2292 oprcom => '<>(int2,int8)', oprnegate => '=(int8,int2)', oprcode => 'int82ne', 2293 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2294{ oid => '1870', descr => 'less than', 2295 oprname => '<', oprleft => 'int8', oprright => 'int2', oprresult => 'bool', 2296 oprcom => '>(int2,int8)', oprnegate => '>=(int8,int2)', oprcode => 'int82lt', 2297 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2298{ oid => '1871', descr => 'greater than', 2299 oprname => '>', oprleft => 'int8', oprright => 'int2', oprresult => 'bool', 2300 oprcom => '<(int2,int8)', oprnegate => '<=(int8,int2)', oprcode => 'int82gt', 2301 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2302{ oid => '1872', descr => 'less than or equal', 2303 oprname => '<=', oprleft => 'int8', oprright => 'int2', oprresult => 'bool', 2304 oprcom => '>=(int2,int8)', oprnegate => '>(int8,int2)', oprcode => 'int82le', 2305 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2306{ oid => '1873', descr => 'greater than or equal', 2307 oprname => '>=', oprleft => 'int8', oprright => 'int2', oprresult => 'bool', 2308 oprcom => '<=(int2,int8)', oprnegate => '<(int8,int2)', oprcode => 'int82ge', 2309 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2310 2311{ oid => '1874', descr => 'bitwise and', 2312 oprname => '&', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 2313 oprcom => '&(int2,int2)', oprcode => 'int2and' }, 2314{ oid => '1875', descr => 'bitwise or', 2315 oprname => '|', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 2316 oprcom => '|(int2,int2)', oprcode => 'int2or' }, 2317{ oid => '1876', descr => 'bitwise exclusive or', 2318 oprname => '#', oprleft => 'int2', oprright => 'int2', oprresult => 'int2', 2319 oprcom => '#(int2,int2)', oprcode => 'int2xor' }, 2320{ oid => '1877', descr => 'bitwise not', 2321 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int2', 2322 oprresult => 'int2', oprcode => 'int2not' }, 2323{ oid => '1878', descr => 'bitwise shift left', 2324 oprname => '<<', oprleft => 'int2', oprright => 'int4', oprresult => 'int2', 2325 oprcode => 'int2shl' }, 2326{ oid => '1879', descr => 'bitwise shift right', 2327 oprname => '>>', oprleft => 'int2', oprright => 'int4', oprresult => 'int2', 2328 oprcode => 'int2shr' }, 2329 2330{ oid => '1880', descr => 'bitwise and', 2331 oprname => '&', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 2332 oprcom => '&(int4,int4)', oprcode => 'int4and' }, 2333{ oid => '1881', descr => 'bitwise or', 2334 oprname => '|', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 2335 oprcom => '|(int4,int4)', oprcode => 'int4or' }, 2336{ oid => '1882', descr => 'bitwise exclusive or', 2337 oprname => '#', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 2338 oprcom => '#(int4,int4)', oprcode => 'int4xor' }, 2339{ oid => '1883', descr => 'bitwise not', 2340 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int4', 2341 oprresult => 'int4', oprcode => 'int4not' }, 2342{ oid => '1884', descr => 'bitwise shift left', 2343 oprname => '<<', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 2344 oprcode => 'int4shl' }, 2345{ oid => '1885', descr => 'bitwise shift right', 2346 oprname => '>>', oprleft => 'int4', oprright => 'int4', oprresult => 'int4', 2347 oprcode => 'int4shr' }, 2348 2349{ oid => '1886', descr => 'bitwise and', 2350 oprname => '&', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 2351 oprcom => '&(int8,int8)', oprcode => 'int8and' }, 2352{ oid => '1887', descr => 'bitwise or', 2353 oprname => '|', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 2354 oprcom => '|(int8,int8)', oprcode => 'int8or' }, 2355{ oid => '1888', descr => 'bitwise exclusive or', 2356 oprname => '#', oprleft => 'int8', oprright => 'int8', oprresult => 'int8', 2357 oprcom => '#(int8,int8)', oprcode => 'int8xor' }, 2358{ oid => '1889', descr => 'bitwise not', 2359 oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int8', 2360 oprresult => 'int8', oprcode => 'int8not' }, 2361{ oid => '1890', descr => 'bitwise shift left', 2362 oprname => '<<', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 2363 oprcode => 'int8shl' }, 2364{ oid => '1891', descr => 'bitwise shift right', 2365 oprname => '>>', oprleft => 'int8', oprright => 'int4', oprresult => 'int8', 2366 oprcode => 'int8shr' }, 2367 2368{ oid => '1916', descr => 'unary plus', 2369 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int8', 2370 oprresult => 'int8', oprcode => 'int8up' }, 2371{ oid => '1917', descr => 'unary plus', 2372 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int2', 2373 oprresult => 'int2', oprcode => 'int2up' }, 2374{ oid => '1918', descr => 'unary plus', 2375 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int4', 2376 oprresult => 'int4', oprcode => 'int4up' }, 2377{ oid => '1919', descr => 'unary plus', 2378 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'float4', 2379 oprresult => 'float4', oprcode => 'float4up' }, 2380{ oid => '1920', descr => 'unary plus', 2381 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'float8', 2382 oprresult => 'float8', oprcode => 'float8up' }, 2383{ oid => '1921', descr => 'unary plus', 2384 oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'numeric', 2385 oprresult => 'numeric', oprcode => 'numeric_uplus' }, 2386 2387# bytea operators 2388{ oid => '1955', descr => 'equal', 2389 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bytea', 2390 oprright => 'bytea', oprresult => 'bool', oprcom => '=(bytea,bytea)', 2391 oprnegate => '<>(bytea,bytea)', oprcode => 'byteaeq', oprrest => 'eqsel', 2392 oprjoin => 'eqjoinsel' }, 2393{ oid => '1956', descr => 'not equal', 2394 oprname => '<>', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2395 oprcom => '<>(bytea,bytea)', oprnegate => '=(bytea,bytea)', 2396 oprcode => 'byteane', oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2397{ oid => '1957', descr => 'less than', 2398 oprname => '<', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2399 oprcom => '>(bytea,bytea)', oprnegate => '>=(bytea,bytea)', 2400 oprcode => 'bytealt', oprrest => 'scalarltsel', 2401 oprjoin => 'scalarltjoinsel' }, 2402{ oid => '1958', descr => 'less than or equal', 2403 oprname => '<=', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2404 oprcom => '>=(bytea,bytea)', oprnegate => '>(bytea,bytea)', 2405 oprcode => 'byteale', oprrest => 'scalarlesel', 2406 oprjoin => 'scalarlejoinsel' }, 2407{ oid => '1959', descr => 'greater than', 2408 oprname => '>', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2409 oprcom => '<(bytea,bytea)', oprnegate => '<=(bytea,bytea)', 2410 oprcode => 'byteagt', oprrest => 'scalargtsel', 2411 oprjoin => 'scalargtjoinsel' }, 2412{ oid => '1960', descr => 'greater than or equal', 2413 oprname => '>=', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2414 oprcom => '<=(bytea,bytea)', oprnegate => '<(bytea,bytea)', 2415 oprcode => 'byteage', oprrest => 'scalargesel', 2416 oprjoin => 'scalargejoinsel' }, 2417 2418{ oid => '2016', oid_symbol => 'OID_BYTEA_LIKE_OP', 2419 descr => 'matches LIKE expression', 2420 oprname => '~~', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool', 2421 oprnegate => '!~~(bytea,bytea)', oprcode => 'bytealike', oprrest => 'likesel', 2422 oprjoin => 'likejoinsel' }, 2423{ oid => '2017', descr => 'does not match LIKE expression', 2424 oprname => '!~~', oprleft => 'bytea', oprright => 'bytea', 2425 oprresult => 'bool', oprnegate => '~~(bytea,bytea)', oprcode => 'byteanlike', 2426 oprrest => 'nlikesel', oprjoin => 'nlikejoinsel' }, 2427{ oid => '2018', descr => 'concatenate', 2428 oprname => '||', oprleft => 'bytea', oprright => 'bytea', 2429 oprresult => 'bytea', oprcode => 'byteacat' }, 2430 2431# timestamp operators 2432{ oid => '2060', descr => 'equal', 2433 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'timestamp', 2434 oprright => 'timestamp', oprresult => 'bool', 2435 oprcom => '=(timestamp,timestamp)', oprnegate => '<>(timestamp,timestamp)', 2436 oprcode => 'timestamp_eq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2437{ oid => '2061', descr => 'not equal', 2438 oprname => '<>', oprleft => 'timestamp', oprright => 'timestamp', 2439 oprresult => 'bool', oprcom => '<>(timestamp,timestamp)', 2440 oprnegate => '=(timestamp,timestamp)', oprcode => 'timestamp_ne', 2441 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2442{ oid => '2062', descr => 'less than', 2443 oprname => '<', oprleft => 'timestamp', oprright => 'timestamp', 2444 oprresult => 'bool', oprcom => '>(timestamp,timestamp)', 2445 oprnegate => '>=(timestamp,timestamp)', oprcode => 'timestamp_lt', 2446 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2447{ oid => '2063', descr => 'less than or equal', 2448 oprname => '<=', oprleft => 'timestamp', oprright => 'timestamp', 2449 oprresult => 'bool', oprcom => '>=(timestamp,timestamp)', 2450 oprnegate => '>(timestamp,timestamp)', oprcode => 'timestamp_le', 2451 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2452{ oid => '2064', descr => 'greater than', 2453 oprname => '>', oprleft => 'timestamp', oprright => 'timestamp', 2454 oprresult => 'bool', oprcom => '<(timestamp,timestamp)', 2455 oprnegate => '<=(timestamp,timestamp)', oprcode => 'timestamp_gt', 2456 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2457{ oid => '2065', descr => 'greater than or equal', 2458 oprname => '>=', oprleft => 'timestamp', oprright => 'timestamp', 2459 oprresult => 'bool', oprcom => '<=(timestamp,timestamp)', 2460 oprnegate => '<(timestamp,timestamp)', oprcode => 'timestamp_ge', 2461 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2462{ oid => '2066', descr => 'add', 2463 oprname => '+', oprleft => 'timestamp', oprright => 'interval', 2464 oprresult => 'timestamp', oprcom => '+(interval,timestamp)', 2465 oprcode => 'timestamp_pl_interval' }, 2466{ oid => '2067', descr => 'subtract', 2467 oprname => '-', oprleft => 'timestamp', oprright => 'timestamp', 2468 oprresult => 'interval', oprcode => 'timestamp_mi' }, 2469{ oid => '2068', descr => 'subtract', 2470 oprname => '-', oprleft => 'timestamp', oprright => 'interval', 2471 oprresult => 'timestamp', oprcode => 'timestamp_mi_interval' }, 2472 2473# character-by-character (not collation order) comparison operators for character types 2474{ oid => '2314', descr => 'less than', 2475 oprname => '~<~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2476 oprcom => '~>~(text,text)', oprnegate => '~>=~(text,text)', 2477 oprcode => 'text_pattern_lt', oprrest => 'scalarltsel', 2478 oprjoin => 'scalarltjoinsel' }, 2479{ oid => '2315', descr => 'less than or equal', 2480 oprname => '~<=~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2481 oprcom => '~>=~(text,text)', oprnegate => '~>~(text,text)', 2482 oprcode => 'text_pattern_le', oprrest => 'scalarlesel', 2483 oprjoin => 'scalarlejoinsel' }, 2484{ oid => '2317', descr => 'greater than or equal', 2485 oprname => '~>=~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2486 oprcom => '~<=~(text,text)', oprnegate => '~<~(text,text)', 2487 oprcode => 'text_pattern_ge', oprrest => 'scalargesel', 2488 oprjoin => 'scalargejoinsel' }, 2489{ oid => '2318', descr => 'greater than', 2490 oprname => '~>~', oprleft => 'text', oprright => 'text', oprresult => 'bool', 2491 oprcom => '~<~(text,text)', oprnegate => '~<=~(text,text)', 2492 oprcode => 'text_pattern_gt', oprrest => 'scalargtsel', 2493 oprjoin => 'scalargtjoinsel' }, 2494 2495{ oid => '2326', descr => 'less than', 2496 oprname => '~<~', oprleft => 'bpchar', oprright => 'bpchar', 2497 oprresult => 'bool', oprcom => '~>~(bpchar,bpchar)', 2498 oprnegate => '~>=~(bpchar,bpchar)', oprcode => 'bpchar_pattern_lt', 2499 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2500{ oid => '2327', descr => 'less than or equal', 2501 oprname => '~<=~', oprleft => 'bpchar', oprright => 'bpchar', 2502 oprresult => 'bool', oprcom => '~>=~(bpchar,bpchar)', 2503 oprnegate => '~>~(bpchar,bpchar)', oprcode => 'bpchar_pattern_le', 2504 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2505{ oid => '2329', descr => 'greater than or equal', 2506 oprname => '~>=~', oprleft => 'bpchar', oprright => 'bpchar', 2507 oprresult => 'bool', oprcom => '~<=~(bpchar,bpchar)', 2508 oprnegate => '~<~(bpchar,bpchar)', oprcode => 'bpchar_pattern_ge', 2509 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2510{ oid => '2330', descr => 'greater than', 2511 oprname => '~>~', oprleft => 'bpchar', oprright => 'bpchar', 2512 oprresult => 'bool', oprcom => '~<~(bpchar,bpchar)', 2513 oprnegate => '~<=~(bpchar,bpchar)', oprcode => 'bpchar_pattern_gt', 2514 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2515 2516# crosstype operations for date vs. timestamp and timestamptz 2517{ oid => '2345', descr => 'less than', 2518 oprname => '<', oprleft => 'date', oprright => 'timestamp', 2519 oprresult => 'bool', oprcom => '>(timestamp,date)', 2520 oprnegate => '>=(date,timestamp)', oprcode => 'date_lt_timestamp', 2521 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2522{ oid => '2346', descr => 'less than or equal', 2523 oprname => '<=', oprleft => 'date', oprright => 'timestamp', 2524 oprresult => 'bool', oprcom => '>=(timestamp,date)', 2525 oprnegate => '>(date,timestamp)', oprcode => 'date_le_timestamp', 2526 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2527{ oid => '2347', descr => 'equal', 2528 oprname => '=', oprcanmerge => 't', oprleft => 'date', 2529 oprright => 'timestamp', oprresult => 'bool', oprcom => '=(timestamp,date)', 2530 oprnegate => '<>(date,timestamp)', oprcode => 'date_eq_timestamp', 2531 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2532{ oid => '2348', descr => 'greater than or equal', 2533 oprname => '>=', oprleft => 'date', oprright => 'timestamp', 2534 oprresult => 'bool', oprcom => '<=(timestamp,date)', 2535 oprnegate => '<(date,timestamp)', oprcode => 'date_ge_timestamp', 2536 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2537{ oid => '2349', descr => 'greater than', 2538 oprname => '>', oprleft => 'date', oprright => 'timestamp', 2539 oprresult => 'bool', oprcom => '<(timestamp,date)', 2540 oprnegate => '<=(date,timestamp)', oprcode => 'date_gt_timestamp', 2541 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2542{ oid => '2350', descr => 'not equal', 2543 oprname => '<>', oprleft => 'date', oprright => 'timestamp', 2544 oprresult => 'bool', oprcom => '<>(timestamp,date)', 2545 oprnegate => '=(date,timestamp)', oprcode => 'date_ne_timestamp', 2546 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2547 2548{ oid => '2358', descr => 'less than', 2549 oprname => '<', oprleft => 'date', oprright => 'timestamptz', 2550 oprresult => 'bool', oprcom => '>(timestamptz,date)', 2551 oprnegate => '>=(date,timestamptz)', oprcode => 'date_lt_timestamptz', 2552 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2553{ oid => '2359', descr => 'less than or equal', 2554 oprname => '<=', oprleft => 'date', oprright => 'timestamptz', 2555 oprresult => 'bool', oprcom => '>=(timestamptz,date)', 2556 oprnegate => '>(date,timestamptz)', oprcode => 'date_le_timestamptz', 2557 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2558{ oid => '2360', descr => 'equal', 2559 oprname => '=', oprcanmerge => 't', oprleft => 'date', 2560 oprright => 'timestamptz', oprresult => 'bool', 2561 oprcom => '=(timestamptz,date)', oprnegate => '<>(date,timestamptz)', 2562 oprcode => 'date_eq_timestamptz', oprrest => 'eqsel', 2563 oprjoin => 'eqjoinsel' }, 2564{ oid => '2361', descr => 'greater than or equal', 2565 oprname => '>=', oprleft => 'date', oprright => 'timestamptz', 2566 oprresult => 'bool', oprcom => '<=(timestamptz,date)', 2567 oprnegate => '<(date,timestamptz)', oprcode => 'date_ge_timestamptz', 2568 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2569{ oid => '2362', descr => 'greater than', 2570 oprname => '>', oprleft => 'date', oprright => 'timestamptz', 2571 oprresult => 'bool', oprcom => '<(timestamptz,date)', 2572 oprnegate => '<=(date,timestamptz)', oprcode => 'date_gt_timestamptz', 2573 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2574{ oid => '2363', descr => 'not equal', 2575 oprname => '<>', oprleft => 'date', oprright => 'timestamptz', 2576 oprresult => 'bool', oprcom => '<>(timestamptz,date)', 2577 oprnegate => '=(date,timestamptz)', oprcode => 'date_ne_timestamptz', 2578 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2579 2580{ oid => '2371', descr => 'less than', 2581 oprname => '<', oprleft => 'timestamp', oprright => 'date', 2582 oprresult => 'bool', oprcom => '>(date,timestamp)', 2583 oprnegate => '>=(timestamp,date)', oprcode => 'timestamp_lt_date', 2584 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2585{ oid => '2372', descr => 'less than or equal', 2586 oprname => '<=', oprleft => 'timestamp', oprright => 'date', 2587 oprresult => 'bool', oprcom => '>=(date,timestamp)', 2588 oprnegate => '>(timestamp,date)', oprcode => 'timestamp_le_date', 2589 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2590{ oid => '2373', descr => 'equal', 2591 oprname => '=', oprcanmerge => 't', oprleft => 'timestamp', 2592 oprright => 'date', oprresult => 'bool', oprcom => '=(date,timestamp)', 2593 oprnegate => '<>(timestamp,date)', oprcode => 'timestamp_eq_date', 2594 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2595{ oid => '2374', descr => 'greater than or equal', 2596 oprname => '>=', oprleft => 'timestamp', oprright => 'date', 2597 oprresult => 'bool', oprcom => '<=(date,timestamp)', 2598 oprnegate => '<(timestamp,date)', oprcode => 'timestamp_ge_date', 2599 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2600{ oid => '2375', descr => 'greater than', 2601 oprname => '>', oprleft => 'timestamp', oprright => 'date', 2602 oprresult => 'bool', oprcom => '<(date,timestamp)', 2603 oprnegate => '<=(timestamp,date)', oprcode => 'timestamp_gt_date', 2604 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2605{ oid => '2376', descr => 'not equal', 2606 oprname => '<>', oprleft => 'timestamp', oprright => 'date', 2607 oprresult => 'bool', oprcom => '<>(date,timestamp)', 2608 oprnegate => '=(timestamp,date)', oprcode => 'timestamp_ne_date', 2609 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2610 2611{ oid => '2384', descr => 'less than', 2612 oprname => '<', oprleft => 'timestamptz', oprright => 'date', 2613 oprresult => 'bool', oprcom => '>(date,timestamptz)', 2614 oprnegate => '>=(timestamptz,date)', oprcode => 'timestamptz_lt_date', 2615 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2616{ oid => '2385', descr => 'less than or equal', 2617 oprname => '<=', oprleft => 'timestamptz', oprright => 'date', 2618 oprresult => 'bool', oprcom => '>=(date,timestamptz)', 2619 oprnegate => '>(timestamptz,date)', oprcode => 'timestamptz_le_date', 2620 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2621{ oid => '2386', descr => 'equal', 2622 oprname => '=', oprcanmerge => 't', oprleft => 'timestamptz', 2623 oprright => 'date', oprresult => 'bool', oprcom => '=(date,timestamptz)', 2624 oprnegate => '<>(timestamptz,date)', oprcode => 'timestamptz_eq_date', 2625 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2626{ oid => '2387', descr => 'greater than or equal', 2627 oprname => '>=', oprleft => 'timestamptz', oprright => 'date', 2628 oprresult => 'bool', oprcom => '<=(date,timestamptz)', 2629 oprnegate => '<(timestamptz,date)', oprcode => 'timestamptz_ge_date', 2630 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2631{ oid => '2388', descr => 'greater than', 2632 oprname => '>', oprleft => 'timestamptz', oprright => 'date', 2633 oprresult => 'bool', oprcom => '<(date,timestamptz)', 2634 oprnegate => '<=(timestamptz,date)', oprcode => 'timestamptz_gt_date', 2635 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2636{ oid => '2389', descr => 'not equal', 2637 oprname => '<>', oprleft => 'timestamptz', oprright => 'date', 2638 oprresult => 'bool', oprcom => '<>(date,timestamptz)', 2639 oprnegate => '=(timestamptz,date)', oprcode => 'timestamptz_ne_date', 2640 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2641 2642# crosstype operations for timestamp vs. timestamptz 2643{ oid => '2534', descr => 'less than', 2644 oprname => '<', oprleft => 'timestamp', oprright => 'timestamptz', 2645 oprresult => 'bool', oprcom => '>(timestamptz,timestamp)', 2646 oprnegate => '>=(timestamp,timestamptz)', 2647 oprcode => 'timestamp_lt_timestamptz', oprrest => 'scalarltsel', 2648 oprjoin => 'scalarltjoinsel' }, 2649{ oid => '2535', descr => 'less than or equal', 2650 oprname => '<=', oprleft => 'timestamp', oprright => 'timestamptz', 2651 oprresult => 'bool', oprcom => '>=(timestamptz,timestamp)', 2652 oprnegate => '>(timestamp,timestamptz)', 2653 oprcode => 'timestamp_le_timestamptz', oprrest => 'scalarlesel', 2654 oprjoin => 'scalarlejoinsel' }, 2655{ oid => '2536', descr => 'equal', 2656 oprname => '=', oprcanmerge => 't', oprleft => 'timestamp', 2657 oprright => 'timestamptz', oprresult => 'bool', 2658 oprcom => '=(timestamptz,timestamp)', 2659 oprnegate => '<>(timestamp,timestamptz)', 2660 oprcode => 'timestamp_eq_timestamptz', oprrest => 'eqsel', 2661 oprjoin => 'eqjoinsel' }, 2662{ oid => '2537', descr => 'greater than or equal', 2663 oprname => '>=', oprleft => 'timestamp', oprright => 'timestamptz', 2664 oprresult => 'bool', oprcom => '<=(timestamptz,timestamp)', 2665 oprnegate => '<(timestamp,timestamptz)', 2666 oprcode => 'timestamp_ge_timestamptz', oprrest => 'scalargesel', 2667 oprjoin => 'scalargejoinsel' }, 2668{ oid => '2538', descr => 'greater than', 2669 oprname => '>', oprleft => 'timestamp', oprright => 'timestamptz', 2670 oprresult => 'bool', oprcom => '<(timestamptz,timestamp)', 2671 oprnegate => '<=(timestamp,timestamptz)', 2672 oprcode => 'timestamp_gt_timestamptz', oprrest => 'scalargtsel', 2673 oprjoin => 'scalargtjoinsel' }, 2674{ oid => '2539', descr => 'not equal', 2675 oprname => '<>', oprleft => 'timestamp', oprright => 'timestamptz', 2676 oprresult => 'bool', oprcom => '<>(timestamptz,timestamp)', 2677 oprnegate => '=(timestamp,timestamptz)', 2678 oprcode => 'timestamp_ne_timestamptz', oprrest => 'neqsel', 2679 oprjoin => 'neqjoinsel' }, 2680 2681{ oid => '2540', descr => 'less than', 2682 oprname => '<', oprleft => 'timestamptz', oprright => 'timestamp', 2683 oprresult => 'bool', oprcom => '>(timestamp,timestamptz)', 2684 oprnegate => '>=(timestamptz,timestamp)', 2685 oprcode => 'timestamptz_lt_timestamp', oprrest => 'scalarltsel', 2686 oprjoin => 'scalarltjoinsel' }, 2687{ oid => '2541', descr => 'less than or equal', 2688 oprname => '<=', oprleft => 'timestamptz', oprright => 'timestamp', 2689 oprresult => 'bool', oprcom => '>=(timestamp,timestamptz)', 2690 oprnegate => '>(timestamptz,timestamp)', 2691 oprcode => 'timestamptz_le_timestamp', oprrest => 'scalarlesel', 2692 oprjoin => 'scalarlejoinsel' }, 2693{ oid => '2542', descr => 'equal', 2694 oprname => '=', oprcanmerge => 't', oprleft => 'timestamptz', 2695 oprright => 'timestamp', oprresult => 'bool', 2696 oprcom => '=(timestamp,timestamptz)', 2697 oprnegate => '<>(timestamptz,timestamp)', 2698 oprcode => 'timestamptz_eq_timestamp', oprrest => 'eqsel', 2699 oprjoin => 'eqjoinsel' }, 2700{ oid => '2543', descr => 'greater than or equal', 2701 oprname => '>=', oprleft => 'timestamptz', oprright => 'timestamp', 2702 oprresult => 'bool', oprcom => '<=(timestamp,timestamptz)', 2703 oprnegate => '<(timestamptz,timestamp)', 2704 oprcode => 'timestamptz_ge_timestamp', oprrest => 'scalargesel', 2705 oprjoin => 'scalargejoinsel' }, 2706{ oid => '2544', descr => 'greater than', 2707 oprname => '>', oprleft => 'timestamptz', oprright => 'timestamp', 2708 oprresult => 'bool', oprcom => '<(timestamp,timestamptz)', 2709 oprnegate => '<=(timestamptz,timestamp)', 2710 oprcode => 'timestamptz_gt_timestamp', oprrest => 'scalargtsel', 2711 oprjoin => 'scalargtjoinsel' }, 2712{ oid => '2545', descr => 'not equal', 2713 oprname => '<>', oprleft => 'timestamptz', oprright => 'timestamp', 2714 oprresult => 'bool', oprcom => '<>(timestamp,timestamptz)', 2715 oprnegate => '=(timestamptz,timestamp)', 2716 oprcode => 'timestamptz_ne_timestamp', oprrest => 'neqsel', 2717 oprjoin => 'neqjoinsel' }, 2718 2719# formerly-missing interval + datetime operators 2720{ oid => '2551', descr => 'add', 2721 oprname => '+', oprleft => 'interval', oprright => 'date', 2722 oprresult => 'timestamp', oprcom => '+(date,interval)', 2723 oprcode => 'interval_pl_date' }, 2724{ oid => '2552', descr => 'add', 2725 oprname => '+', oprleft => 'interval', oprright => 'timetz', 2726 oprresult => 'timetz', oprcom => '+(timetz,interval)', 2727 oprcode => 'interval_pl_timetz' }, 2728{ oid => '2553', descr => 'add', 2729 oprname => '+', oprleft => 'interval', oprright => 'timestamp', 2730 oprresult => 'timestamp', oprcom => '+(timestamp,interval)', 2731 oprcode => 'interval_pl_timestamp' }, 2732{ oid => '2554', descr => 'add', 2733 oprname => '+', oprleft => 'interval', oprright => 'timestamptz', 2734 oprresult => 'timestamptz', oprcom => '+(timestamptz,interval)', 2735 oprcode => 'interval_pl_timestamptz' }, 2736{ oid => '2555', descr => 'add', 2737 oprname => '+', oprleft => 'int4', oprright => 'date', oprresult => 'date', 2738 oprcom => '+(date,int4)', oprcode => 'integer_pl_date' }, 2739 2740# new operators for Y-direction rtree opfamilies 2741{ oid => '2570', descr => 'is below', 2742 oprname => '<<|', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2743 oprcode => 'box_below', oprrest => 'positionsel', 2744 oprjoin => 'positionjoinsel' }, 2745{ oid => '2571', descr => 'overlaps or is below', 2746 oprname => '&<|', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2747 oprcode => 'box_overbelow', oprrest => 'positionsel', 2748 oprjoin => 'positionjoinsel' }, 2749{ oid => '2572', descr => 'overlaps or is above', 2750 oprname => '|&>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2751 oprcode => 'box_overabove', oprrest => 'positionsel', 2752 oprjoin => 'positionjoinsel' }, 2753{ oid => '2573', descr => 'is above', 2754 oprname => '|>>', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2755 oprcode => 'box_above', oprrest => 'positionsel', 2756 oprjoin => 'positionjoinsel' }, 2757{ oid => '2574', descr => 'is below', 2758 oprname => '<<|', oprleft => 'polygon', oprright => 'polygon', 2759 oprresult => 'bool', oprcode => 'poly_below', oprrest => 'positionsel', 2760 oprjoin => 'positionjoinsel' }, 2761{ oid => '2575', descr => 'overlaps or is below', 2762 oprname => '&<|', oprleft => 'polygon', oprright => 'polygon', 2763 oprresult => 'bool', oprcode => 'poly_overbelow', oprrest => 'positionsel', 2764 oprjoin => 'positionjoinsel' }, 2765{ oid => '2576', descr => 'overlaps or is above', 2766 oprname => '|&>', oprleft => 'polygon', oprright => 'polygon', 2767 oprresult => 'bool', oprcode => 'poly_overabove', oprrest => 'positionsel', 2768 oprjoin => 'positionjoinsel' }, 2769{ oid => '2577', descr => 'is above', 2770 oprname => '|>>', oprleft => 'polygon', oprright => 'polygon', 2771 oprresult => 'bool', oprcode => 'poly_above', oprrest => 'positionsel', 2772 oprjoin => 'positionjoinsel' }, 2773{ oid => '2589', descr => 'overlaps or is below', 2774 oprname => '&<|', oprleft => 'circle', oprright => 'circle', 2775 oprresult => 'bool', oprcode => 'circle_overbelow', oprrest => 'positionsel', 2776 oprjoin => 'positionjoinsel' }, 2777{ oid => '2590', descr => 'overlaps or is above', 2778 oprname => '|&>', oprleft => 'circle', oprright => 'circle', 2779 oprresult => 'bool', oprcode => 'circle_overabove', oprrest => 'positionsel', 2780 oprjoin => 'positionjoinsel' }, 2781 2782# overlap/contains/contained for arrays 2783{ oid => '2750', oid_symbol => 'OID_ARRAY_OVERLAP_OP', descr => 'overlaps', 2784 oprname => '&&', oprleft => 'anyarray', oprright => 'anyarray', 2785 oprresult => 'bool', oprcom => '&&(anyarray,anyarray)', 2786 oprcode => 'arrayoverlap', oprrest => 'arraycontsel', 2787 oprjoin => 'arraycontjoinsel' }, 2788{ oid => '2751', oid_symbol => 'OID_ARRAY_CONTAINS_OP', descr => 'contains', 2789 oprname => '@>', oprleft => 'anyarray', oprright => 'anyarray', 2790 oprresult => 'bool', oprcom => '<@(anyarray,anyarray)', 2791 oprcode => 'arraycontains', oprrest => 'arraycontsel', 2792 oprjoin => 'arraycontjoinsel' }, 2793{ oid => '2752', oid_symbol => 'OID_ARRAY_CONTAINED_OP', 2794 descr => 'is contained by', 2795 oprname => '<@', oprleft => 'anyarray', oprright => 'anyarray', 2796 oprresult => 'bool', oprcom => '@>(anyarray,anyarray)', 2797 oprcode => 'arraycontained', oprrest => 'arraycontsel', 2798 oprjoin => 'arraycontjoinsel' }, 2799 2800# capturing operators to preserve pre-8.3 behavior of text concatenation 2801{ oid => '2779', descr => 'concatenate', 2802 oprname => '||', oprleft => 'text', oprright => 'anynonarray', 2803 oprresult => 'text', oprcode => 'textanycat' }, 2804{ oid => '2780', descr => 'concatenate', 2805 oprname => '||', oprleft => 'anynonarray', oprright => 'text', 2806 oprresult => 'text', oprcode => 'anytextcat' }, 2807 2808# obsolete names for contains/contained-by operators; remove these someday 2809{ oid => '2860', descr => 'deprecated, use <@ instead', 2810 oprname => '@', oprleft => 'polygon', oprright => 'polygon', 2811 oprresult => 'bool', oprcom => '~(polygon,polygon)', 2812 oprcode => 'poly_contained', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 2813{ oid => '2861', descr => 'deprecated, use @> instead', 2814 oprname => '~', oprleft => 'polygon', oprright => 'polygon', 2815 oprresult => 'bool', oprcom => '@(polygon,polygon)', 2816 oprcode => 'poly_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 2817{ oid => '2862', descr => 'deprecated, use <@ instead', 2818 oprname => '@', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2819 oprcom => '~(box,box)', oprcode => 'box_contained', oprrest => 'contsel', 2820 oprjoin => 'contjoinsel' }, 2821{ oid => '2863', descr => 'deprecated, use @> instead', 2822 oprname => '~', oprleft => 'box', oprright => 'box', oprresult => 'bool', 2823 oprcom => '@(box,box)', oprcode => 'box_contain', oprrest => 'contsel', 2824 oprjoin => 'contjoinsel' }, 2825{ oid => '2864', descr => 'deprecated, use <@ instead', 2826 oprname => '@', oprleft => 'circle', oprright => 'circle', 2827 oprresult => 'bool', oprcom => '~(circle,circle)', 2828 oprcode => 'circle_contained', oprrest => 'contsel', 2829 oprjoin => 'contjoinsel' }, 2830{ oid => '2865', descr => 'deprecated, use @> instead', 2831 oprname => '~', oprleft => 'circle', oprright => 'circle', 2832 oprresult => 'bool', oprcom => '@(circle,circle)', 2833 oprcode => 'circle_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 2834{ oid => '2866', descr => 'deprecated, use <@ instead', 2835 oprname => '@', oprleft => 'point', oprright => 'box', oprresult => 'bool', 2836 oprcode => 'on_pb' }, 2837{ oid => '2867', descr => 'deprecated, use <@ instead', 2838 oprname => '@', oprleft => 'point', oprright => 'path', oprresult => 'bool', 2839 oprcom => '~(path,point)', oprcode => 'on_ppath' }, 2840{ oid => '2868', descr => 'deprecated, use @> instead', 2841 oprname => '~', oprleft => 'path', oprright => 'point', oprresult => 'bool', 2842 oprcom => '@(point,path)', oprcode => 'path_contain_pt' }, 2843{ oid => '2869', descr => 'deprecated, use <@ instead', 2844 oprname => '@', oprleft => 'point', oprright => 'polygon', 2845 oprresult => 'bool', oprcom => '~(polygon,point)', 2846 oprcode => 'pt_contained_poly' }, 2847{ oid => '2870', descr => 'deprecated, use @> instead', 2848 oprname => '~', oprleft => 'polygon', oprright => 'point', 2849 oprresult => 'bool', oprcom => '@(point,polygon)', 2850 oprcode => 'poly_contain_pt' }, 2851{ oid => '2871', descr => 'deprecated, use <@ instead', 2852 oprname => '@', oprleft => 'point', oprright => 'circle', oprresult => 'bool', 2853 oprcom => '~(circle,point)', oprcode => 'pt_contained_circle' }, 2854{ oid => '2872', descr => 'deprecated, use @> instead', 2855 oprname => '~', oprleft => 'circle', oprright => 'point', oprresult => 'bool', 2856 oprcom => '@(point,circle)', oprcode => 'circle_contain_pt' }, 2857{ oid => '2873', descr => 'deprecated, use <@ instead', 2858 oprname => '@', oprleft => 'point', oprright => 'line', oprresult => 'bool', 2859 oprcode => 'on_pl' }, 2860{ oid => '2874', descr => 'deprecated, use <@ instead', 2861 oprname => '@', oprleft => 'point', oprright => 'lseg', oprresult => 'bool', 2862 oprcode => 'on_ps' }, 2863{ oid => '2875', descr => 'deprecated, use <@ instead', 2864 oprname => '@', oprleft => 'lseg', oprright => 'line', oprresult => 'bool', 2865 oprcode => 'on_sl' }, 2866{ oid => '2876', descr => 'deprecated, use <@ instead', 2867 oprname => '@', oprleft => 'lseg', oprright => 'box', oprresult => 'bool', 2868 oprcode => 'on_sb' }, 2869{ oid => '2877', descr => 'deprecated, use @> instead', 2870 oprname => '~', oprleft => '_aclitem', oprright => 'aclitem', 2871 oprresult => 'bool', oprcode => 'aclcontains' }, 2872 2873# uuid operators 2874{ oid => '2972', descr => 'equal', 2875 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'uuid', 2876 oprright => 'uuid', oprresult => 'bool', oprcom => '=(uuid,uuid)', 2877 oprnegate => '<>(uuid,uuid)', oprcode => 'uuid_eq', oprrest => 'eqsel', 2878 oprjoin => 'eqjoinsel' }, 2879{ oid => '2973', descr => 'not equal', 2880 oprname => '<>', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool', 2881 oprcom => '<>(uuid,uuid)', oprnegate => '=(uuid,uuid)', oprcode => 'uuid_ne', 2882 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2883{ oid => '2974', descr => 'less than', 2884 oprname => '<', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool', 2885 oprcom => '>(uuid,uuid)', oprnegate => '>=(uuid,uuid)', oprcode => 'uuid_lt', 2886 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2887{ oid => '2975', descr => 'greater than', 2888 oprname => '>', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool', 2889 oprcom => '<(uuid,uuid)', oprnegate => '<=(uuid,uuid)', oprcode => 'uuid_gt', 2890 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2891{ oid => '2976', descr => 'less than or equal', 2892 oprname => '<=', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool', 2893 oprcom => '>=(uuid,uuid)', oprnegate => '>(uuid,uuid)', oprcode => 'uuid_le', 2894 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2895{ oid => '2977', descr => 'greater than or equal', 2896 oprname => '>=', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool', 2897 oprcom => '<=(uuid,uuid)', oprnegate => '<(uuid,uuid)', oprcode => 'uuid_ge', 2898 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2899 2900# pg_lsn operators 2901{ oid => '3222', descr => 'equal', 2902 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'pg_lsn', 2903 oprright => 'pg_lsn', oprresult => 'bool', oprcom => '=(pg_lsn,pg_lsn)', 2904 oprnegate => '<>(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_eq', oprrest => 'eqsel', 2905 oprjoin => 'eqjoinsel' }, 2906{ oid => '3223', descr => 'not equal', 2907 oprname => '<>', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2908 oprresult => 'bool', oprcom => '<>(pg_lsn,pg_lsn)', 2909 oprnegate => '=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_ne', oprrest => 'neqsel', 2910 oprjoin => 'neqjoinsel' }, 2911{ oid => '3224', descr => 'less than', 2912 oprname => '<', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2913 oprresult => 'bool', oprcom => '>(pg_lsn,pg_lsn)', 2914 oprnegate => '>=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_lt', 2915 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2916{ oid => '3225', descr => 'greater than', 2917 oprname => '>', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2918 oprresult => 'bool', oprcom => '<(pg_lsn,pg_lsn)', 2919 oprnegate => '<=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_gt', 2920 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2921{ oid => '3226', descr => 'less than or equal', 2922 oprname => '<=', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2923 oprresult => 'bool', oprcom => '>=(pg_lsn,pg_lsn)', 2924 oprnegate => '>(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_le', 2925 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2926{ oid => '3227', descr => 'greater than or equal', 2927 oprname => '>=', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2928 oprresult => 'bool', oprcom => '<=(pg_lsn,pg_lsn)', 2929 oprnegate => '<(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_ge', 2930 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2931{ oid => '3228', descr => 'minus', 2932 oprname => '-', oprleft => 'pg_lsn', oprright => 'pg_lsn', 2933 oprresult => 'numeric', oprcode => 'pg_lsn_mi' }, 2934 2935# enum operators 2936{ oid => '3516', descr => 'equal', 2937 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyenum', 2938 oprright => 'anyenum', oprresult => 'bool', oprcom => '=(anyenum,anyenum)', 2939 oprnegate => '<>(anyenum,anyenum)', oprcode => 'enum_eq', oprrest => 'eqsel', 2940 oprjoin => 'eqjoinsel' }, 2941{ oid => '3517', descr => 'not equal', 2942 oprname => '<>', oprleft => 'anyenum', oprright => 'anyenum', 2943 oprresult => 'bool', oprcom => '<>(anyenum,anyenum)', 2944 oprnegate => '=(anyenum,anyenum)', oprcode => 'enum_ne', oprrest => 'neqsel', 2945 oprjoin => 'neqjoinsel' }, 2946{ oid => '3518', descr => 'less than', 2947 oprname => '<', oprleft => 'anyenum', oprright => 'anyenum', 2948 oprresult => 'bool', oprcom => '>(anyenum,anyenum)', 2949 oprnegate => '>=(anyenum,anyenum)', oprcode => 'enum_lt', 2950 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2951{ oid => '3519', descr => 'greater than', 2952 oprname => '>', oprleft => 'anyenum', oprright => 'anyenum', 2953 oprresult => 'bool', oprcom => '<(anyenum,anyenum)', 2954 oprnegate => '<=(anyenum,anyenum)', oprcode => 'enum_gt', 2955 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2956{ oid => '3520', descr => 'less than or equal', 2957 oprname => '<=', oprleft => 'anyenum', oprright => 'anyenum', 2958 oprresult => 'bool', oprcom => '>=(anyenum,anyenum)', 2959 oprnegate => '>(anyenum,anyenum)', oprcode => 'enum_le', 2960 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2961{ oid => '3521', descr => 'greater than or equal', 2962 oprname => '>=', oprleft => 'anyenum', oprright => 'anyenum', 2963 oprresult => 'bool', oprcom => '<=(anyenum,anyenum)', 2964 oprnegate => '<(anyenum,anyenum)', oprcode => 'enum_ge', 2965 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2966 2967# tsearch operations 2968{ oid => '3627', descr => 'less than', 2969 oprname => '<', oprleft => 'tsvector', oprright => 'tsvector', 2970 oprresult => 'bool', oprcom => '>(tsvector,tsvector)', 2971 oprnegate => '>=(tsvector,tsvector)', oprcode => 'tsvector_lt', 2972 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 2973{ oid => '3628', descr => 'less than or equal', 2974 oprname => '<=', oprleft => 'tsvector', oprright => 'tsvector', 2975 oprresult => 'bool', oprcom => '>=(tsvector,tsvector)', 2976 oprnegate => '>(tsvector,tsvector)', oprcode => 'tsvector_le', 2977 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 2978{ oid => '3629', descr => 'equal', 2979 oprname => '=', oprcanmerge => 't', oprleft => 'tsvector', 2980 oprright => 'tsvector', oprresult => 'bool', oprcom => '=(tsvector,tsvector)', 2981 oprnegate => '<>(tsvector,tsvector)', oprcode => 'tsvector_eq', 2982 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 2983{ oid => '3630', descr => 'not equal', 2984 oprname => '<>', oprleft => 'tsvector', oprright => 'tsvector', 2985 oprresult => 'bool', oprcom => '<>(tsvector,tsvector)', 2986 oprnegate => '=(tsvector,tsvector)', oprcode => 'tsvector_ne', 2987 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 2988{ oid => '3631', descr => 'greater than or equal', 2989 oprname => '>=', oprleft => 'tsvector', oprright => 'tsvector', 2990 oprresult => 'bool', oprcom => '<=(tsvector,tsvector)', 2991 oprnegate => '<(tsvector,tsvector)', oprcode => 'tsvector_ge', 2992 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 2993{ oid => '3632', descr => 'greater than', 2994 oprname => '>', oprleft => 'tsvector', oprright => 'tsvector', 2995 oprresult => 'bool', oprcom => '<(tsvector,tsvector)', 2996 oprnegate => '<=(tsvector,tsvector)', oprcode => 'tsvector_gt', 2997 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 2998{ oid => '3633', descr => 'concatenate', 2999 oprname => '||', oprleft => 'tsvector', oprright => 'tsvector', 3000 oprresult => 'tsvector', oprcode => 'tsvector_concat' }, 3001{ oid => '3636', descr => 'text search match', 3002 oprname => '@@', oprleft => 'tsvector', oprright => 'tsquery', 3003 oprresult => 'bool', oprcom => '@@(tsquery,tsvector)', 3004 oprcode => 'ts_match_vq', oprrest => 'tsmatchsel', 3005 oprjoin => 'tsmatchjoinsel' }, 3006{ oid => '3637', descr => 'text search match', 3007 oprname => '@@', oprleft => 'tsquery', oprright => 'tsvector', 3008 oprresult => 'bool', oprcom => '@@(tsvector,tsquery)', 3009 oprcode => 'ts_match_qv', oprrest => 'tsmatchsel', 3010 oprjoin => 'tsmatchjoinsel' }, 3011{ oid => '3660', descr => 'deprecated, use @@ instead', 3012 oprname => '@@@', oprleft => 'tsvector', oprright => 'tsquery', 3013 oprresult => 'bool', oprcom => '@@@(tsquery,tsvector)', 3014 oprcode => 'ts_match_vq', oprrest => 'tsmatchsel', 3015 oprjoin => 'tsmatchjoinsel' }, 3016{ oid => '3661', descr => 'deprecated, use @@ instead', 3017 oprname => '@@@', oprleft => 'tsquery', oprright => 'tsvector', 3018 oprresult => 'bool', oprcom => '@@@(tsvector,tsquery)', 3019 oprcode => 'ts_match_qv', oprrest => 'tsmatchsel', 3020 oprjoin => 'tsmatchjoinsel' }, 3021{ oid => '3674', descr => 'less than', 3022 oprname => '<', oprleft => 'tsquery', oprright => 'tsquery', 3023 oprresult => 'bool', oprcom => '>(tsquery,tsquery)', 3024 oprnegate => '>=(tsquery,tsquery)', oprcode => 'tsquery_lt', 3025 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 3026{ oid => '3675', descr => 'less than or equal', 3027 oprname => '<=', oprleft => 'tsquery', oprright => 'tsquery', 3028 oprresult => 'bool', oprcom => '>=(tsquery,tsquery)', 3029 oprnegate => '>(tsquery,tsquery)', oprcode => 'tsquery_le', 3030 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 3031{ oid => '3676', descr => 'equal', 3032 oprname => '=', oprcanmerge => 't', oprleft => 'tsquery', 3033 oprright => 'tsquery', oprresult => 'bool', oprcom => '=(tsquery,tsquery)', 3034 oprnegate => '<>(tsquery,tsquery)', oprcode => 'tsquery_eq', 3035 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 3036{ oid => '3677', descr => 'not equal', 3037 oprname => '<>', oprleft => 'tsquery', oprright => 'tsquery', 3038 oprresult => 'bool', oprcom => '<>(tsquery,tsquery)', 3039 oprnegate => '=(tsquery,tsquery)', oprcode => 'tsquery_ne', 3040 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 3041{ oid => '3678', descr => 'greater than or equal', 3042 oprname => '>=', oprleft => 'tsquery', oprright => 'tsquery', 3043 oprresult => 'bool', oprcom => '<=(tsquery,tsquery)', 3044 oprnegate => '<(tsquery,tsquery)', oprcode => 'tsquery_ge', 3045 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 3046{ oid => '3679', descr => 'greater than', 3047 oprname => '>', oprleft => 'tsquery', oprright => 'tsquery', 3048 oprresult => 'bool', oprcom => '<(tsquery,tsquery)', 3049 oprnegate => '<=(tsquery,tsquery)', oprcode => 'tsquery_gt', 3050 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 3051{ oid => '3680', descr => 'AND-concatenate', 3052 oprname => '&&', oprleft => 'tsquery', oprright => 'tsquery', 3053 oprresult => 'tsquery', oprcode => 'tsquery_and' }, 3054{ oid => '3681', descr => 'OR-concatenate', 3055 oprname => '||', oprleft => 'tsquery', oprright => 'tsquery', 3056 oprresult => 'tsquery', oprcode => 'tsquery_or' }, 3057{ oid => '5005', descr => 'phrase-concatenate', 3058 oprname => '<->', oprleft => 'tsquery', oprright => 'tsquery', 3059 oprresult => 'tsquery', oprcode => 'tsquery_phrase(tsquery,tsquery)' }, 3060{ oid => '3682', descr => 'NOT tsquery', 3061 oprname => '!!', oprkind => 'l', oprleft => '0', oprright => 'tsquery', 3062 oprresult => 'tsquery', oprcode => 'tsquery_not' }, 3063{ oid => '3693', descr => 'contains', 3064 oprname => '@>', oprleft => 'tsquery', oprright => 'tsquery', 3065 oprresult => 'bool', oprcom => '<@(tsquery,tsquery)', 3066 oprcode => 'tsq_mcontains', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3067{ oid => '3694', descr => 'is contained by', 3068 oprname => '<@', oprleft => 'tsquery', oprright => 'tsquery', 3069 oprresult => 'bool', oprcom => '@>(tsquery,tsquery)', 3070 oprcode => 'tsq_mcontained', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3071{ oid => '3762', descr => 'text search match', 3072 oprname => '@@', oprleft => 'text', oprright => 'text', oprresult => 'bool', 3073 oprcode => 'ts_match_tt', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3074{ oid => '3763', descr => 'text search match', 3075 oprname => '@@', oprleft => 'text', oprright => 'tsquery', 3076 oprresult => 'bool', oprcode => 'ts_match_tq', oprrest => 'contsel', 3077 oprjoin => 'contjoinsel' }, 3078 3079# generic record comparison operators 3080{ oid => '2988', oid_symbol => 'RECORD_EQ_OP', descr => 'equal', 3081 oprname => '=', oprcanmerge => 't', oprleft => 'record', oprright => 'record', 3082 oprresult => 'bool', oprcom => '=(record,record)', 3083 oprnegate => '<>(record,record)', oprcode => 'record_eq', oprrest => 'eqsel', 3084 oprjoin => 'eqjoinsel' }, 3085{ oid => '2989', descr => 'not equal', 3086 oprname => '<>', oprleft => 'record', oprright => 'record', 3087 oprresult => 'bool', oprcom => '<>(record,record)', 3088 oprnegate => '=(record,record)', oprcode => 'record_ne', oprrest => 'neqsel', 3089 oprjoin => 'neqjoinsel' }, 3090{ oid => '2990', oid_symbol => 'RECORD_LT_OP', descr => 'less than', 3091 oprname => '<', oprleft => 'record', oprright => 'record', 3092 oprresult => 'bool', oprcom => '>(record,record)', 3093 oprnegate => '>=(record,record)', oprcode => 'record_lt', 3094 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 3095{ oid => '2991', oid_symbol => 'RECORD_GT_OP', descr => 'greater than', 3096 oprname => '>', oprleft => 'record', oprright => 'record', 3097 oprresult => 'bool', oprcom => '<(record,record)', 3098 oprnegate => '<=(record,record)', oprcode => 'record_gt', 3099 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 3100{ oid => '2992', descr => 'less than or equal', 3101 oprname => '<=', oprleft => 'record', oprright => 'record', 3102 oprresult => 'bool', oprcom => '>=(record,record)', 3103 oprnegate => '>(record,record)', oprcode => 'record_le', 3104 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 3105{ oid => '2993', descr => 'greater than or equal', 3106 oprname => '>=', oprleft => 'record', oprright => 'record', 3107 oprresult => 'bool', oprcom => '<=(record,record)', 3108 oprnegate => '<(record,record)', oprcode => 'record_ge', 3109 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 3110 3111# byte-oriented tests for identical rows and fast sorting 3112{ oid => '3188', descr => 'identical', 3113 oprname => '*=', oprcanmerge => 't', oprleft => 'record', 3114 oprright => 'record', oprresult => 'bool', oprcom => '*=(record,record)', 3115 oprnegate => '*<>(record,record)', oprcode => 'record_image_eq', 3116 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 3117{ oid => '3189', descr => 'not identical', 3118 oprname => '*<>', oprleft => 'record', oprright => 'record', 3119 oprresult => 'bool', oprcom => '*<>(record,record)', 3120 oprnegate => '*=(record,record)', oprcode => 'record_image_ne', 3121 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 3122{ oid => '3190', descr => 'less than', 3123 oprname => '*<', oprleft => 'record', oprright => 'record', 3124 oprresult => 'bool', oprcom => '*>(record,record)', 3125 oprnegate => '*>=(record,record)', oprcode => 'record_image_lt', 3126 oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' }, 3127{ oid => '3191', descr => 'greater than', 3128 oprname => '*>', oprleft => 'record', oprright => 'record', 3129 oprresult => 'bool', oprcom => '*<(record,record)', 3130 oprnegate => '*<=(record,record)', oprcode => 'record_image_gt', 3131 oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' }, 3132{ oid => '3192', descr => 'less than or equal', 3133 oprname => '*<=', oprleft => 'record', oprright => 'record', 3134 oprresult => 'bool', oprcom => '*>=(record,record)', 3135 oprnegate => '*>(record,record)', oprcode => 'record_image_le', 3136 oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' }, 3137{ oid => '3193', descr => 'greater than or equal', 3138 oprname => '*>=', oprleft => 'record', oprright => 'record', 3139 oprresult => 'bool', oprcom => '*<=(record,record)', 3140 oprnegate => '*<(record,record)', oprcode => 'record_image_ge', 3141 oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' }, 3142 3143# generic range type operators 3144{ oid => '3882', descr => 'equal', 3145 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyrange', 3146 oprright => 'anyrange', oprresult => 'bool', oprcom => '=(anyrange,anyrange)', 3147 oprnegate => '<>(anyrange,anyrange)', oprcode => 'range_eq', 3148 oprrest => 'eqsel', oprjoin => 'eqjoinsel' }, 3149{ oid => '3883', descr => 'not equal', 3150 oprname => '<>', oprleft => 'anyrange', oprright => 'anyrange', 3151 oprresult => 'bool', oprcom => '<>(anyrange,anyrange)', 3152 oprnegate => '=(anyrange,anyrange)', oprcode => 'range_ne', 3153 oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 3154{ oid => '3884', oid_symbol => 'OID_RANGE_LESS_OP', descr => 'less than', 3155 oprname => '<', oprleft => 'anyrange', oprright => 'anyrange', 3156 oprresult => 'bool', oprcom => '>(anyrange,anyrange)', 3157 oprnegate => '>=(anyrange,anyrange)', oprcode => 'range_lt', 3158 oprrest => 'rangesel', oprjoin => 'scalarltjoinsel' }, 3159{ oid => '3885', oid_symbol => 'OID_RANGE_LESS_EQUAL_OP', 3160 descr => 'less than or equal', 3161 oprname => '<=', oprleft => 'anyrange', oprright => 'anyrange', 3162 oprresult => 'bool', oprcom => '>=(anyrange,anyrange)', 3163 oprnegate => '>(anyrange,anyrange)', oprcode => 'range_le', 3164 oprrest => 'rangesel', oprjoin => 'scalarlejoinsel' }, 3165{ oid => '3886', oid_symbol => 'OID_RANGE_GREATER_EQUAL_OP', 3166 descr => 'greater than or equal', 3167 oprname => '>=', oprleft => 'anyrange', oprright => 'anyrange', 3168 oprresult => 'bool', oprcom => '<=(anyrange,anyrange)', 3169 oprnegate => '<(anyrange,anyrange)', oprcode => 'range_ge', 3170 oprrest => 'rangesel', oprjoin => 'scalargejoinsel' }, 3171{ oid => '3887', oid_symbol => 'OID_RANGE_GREATER_OP', 3172 descr => 'greater than', 3173 oprname => '>', oprleft => 'anyrange', oprright => 'anyrange', 3174 oprresult => 'bool', oprcom => '<(anyrange,anyrange)', 3175 oprnegate => '<=(anyrange,anyrange)', oprcode => 'range_gt', 3176 oprrest => 'rangesel', oprjoin => 'scalargtjoinsel' }, 3177{ oid => '3888', oid_symbol => 'OID_RANGE_OVERLAP_OP', descr => 'overlaps', 3178 oprname => '&&', oprleft => 'anyrange', oprright => 'anyrange', 3179 oprresult => 'bool', oprcom => '&&(anyrange,anyrange)', 3180 oprcode => 'range_overlaps', oprrest => 'rangesel', 3181 oprjoin => 'areajoinsel' }, 3182{ oid => '3889', oid_symbol => 'OID_RANGE_CONTAINS_ELEM_OP', 3183 descr => 'contains', 3184 oprname => '@>', oprleft => 'anyrange', oprright => 'anyelement', 3185 oprresult => 'bool', oprcom => '<@(anyelement,anyrange)', 3186 oprcode => 'range_contains_elem', oprrest => 'rangesel', 3187 oprjoin => 'contjoinsel' }, 3188{ oid => '3890', oid_symbol => 'OID_RANGE_CONTAINS_OP', descr => 'contains', 3189 oprname => '@>', oprleft => 'anyrange', oprright => 'anyrange', 3190 oprresult => 'bool', oprcom => '<@(anyrange,anyrange)', 3191 oprcode => 'range_contains', oprrest => 'rangesel', 3192 oprjoin => 'contjoinsel' }, 3193{ oid => '3891', oid_symbol => 'OID_RANGE_ELEM_CONTAINED_OP', 3194 descr => 'is contained by', 3195 oprname => '<@', oprleft => 'anyelement', oprright => 'anyrange', 3196 oprresult => 'bool', oprcom => '@>(anyrange,anyelement)', 3197 oprcode => 'elem_contained_by_range', oprrest => 'rangesel', 3198 oprjoin => 'contjoinsel' }, 3199{ oid => '3892', oid_symbol => 'OID_RANGE_CONTAINED_OP', 3200 descr => 'is contained by', 3201 oprname => '<@', oprleft => 'anyrange', oprright => 'anyrange', 3202 oprresult => 'bool', oprcom => '@>(anyrange,anyrange)', 3203 oprcode => 'range_contained_by', oprrest => 'rangesel', 3204 oprjoin => 'contjoinsel' }, 3205{ oid => '3893', oid_symbol => 'OID_RANGE_LEFT_OP', descr => 'is left of', 3206 oprname => '<<', oprleft => 'anyrange', oprright => 'anyrange', 3207 oprresult => 'bool', oprcom => '>>(anyrange,anyrange)', 3208 oprcode => 'range_before', oprrest => 'rangesel', 3209 oprjoin => 'scalarltjoinsel' }, 3210{ oid => '3894', oid_symbol => 'OID_RANGE_RIGHT_OP', descr => 'is right of', 3211 oprname => '>>', oprleft => 'anyrange', oprright => 'anyrange', 3212 oprresult => 'bool', oprcom => '<<(anyrange,anyrange)', 3213 oprcode => 'range_after', oprrest => 'rangesel', 3214 oprjoin => 'scalargtjoinsel' }, 3215{ oid => '3895', oid_symbol => 'OID_RANGE_OVERLAPS_LEFT_OP', 3216 descr => 'overlaps or is left of', 3217 oprname => '&<', oprleft => 'anyrange', oprright => 'anyrange', 3218 oprresult => 'bool', oprcode => 'range_overleft', oprrest => 'rangesel', 3219 oprjoin => 'scalarltjoinsel' }, 3220{ oid => '3896', oid_symbol => 'OID_RANGE_OVERLAPS_RIGHT_OP', 3221 descr => 'overlaps or is right of', 3222 oprname => '&>', oprleft => 'anyrange', oprright => 'anyrange', 3223 oprresult => 'bool', oprcode => 'range_overright', oprrest => 'rangesel', 3224 oprjoin => 'scalargtjoinsel' }, 3225{ oid => '3897', descr => 'is adjacent to', 3226 oprname => '-|-', oprleft => 'anyrange', oprright => 'anyrange', 3227 oprresult => 'bool', oprcom => '-|-(anyrange,anyrange)', 3228 oprcode => 'range_adjacent', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3229{ oid => '3898', descr => 'range union', 3230 oprname => '+', oprleft => 'anyrange', oprright => 'anyrange', 3231 oprresult => 'anyrange', oprcom => '+(anyrange,anyrange)', 3232 oprcode => 'range_union' }, 3233{ oid => '3899', descr => 'range difference', 3234 oprname => '-', oprleft => 'anyrange', oprright => 'anyrange', 3235 oprresult => 'anyrange', oprcode => 'range_minus' }, 3236{ oid => '3900', descr => 'range intersection', 3237 oprname => '*', oprleft => 'anyrange', oprright => 'anyrange', 3238 oprresult => 'anyrange', oprcom => '*(anyrange,anyrange)', 3239 oprcode => 'range_intersect' }, 3240{ oid => '3962', descr => 'get json object field', 3241 oprname => '->', oprleft => 'json', oprright => 'text', oprresult => 'json', 3242 oprcode => 'json_object_field' }, 3243{ oid => '3963', descr => 'get json object field as text', 3244 oprname => '->>', oprleft => 'json', oprright => 'text', oprresult => 'text', 3245 oprcode => 'json_object_field_text' }, 3246{ oid => '3964', descr => 'get json array element', 3247 oprname => '->', oprleft => 'json', oprright => 'int4', oprresult => 'json', 3248 oprcode => 'json_array_element' }, 3249{ oid => '3965', descr => 'get json array element as text', 3250 oprname => '->>', oprleft => 'json', oprright => 'int4', oprresult => 'text', 3251 oprcode => 'json_array_element_text' }, 3252{ oid => '3966', descr => 'get value from json with path elements', 3253 oprname => '#>', oprleft => 'json', oprright => '_text', oprresult => 'json', 3254 oprcode => 'json_extract_path' }, 3255{ oid => '3967', descr => 'get value from json as text with path elements', 3256 oprname => '#>>', oprleft => 'json', oprright => '_text', oprresult => 'text', 3257 oprcode => 'json_extract_path_text' }, 3258{ oid => '3211', descr => 'get jsonb object field', 3259 oprname => '->', oprleft => 'jsonb', oprright => 'text', oprresult => 'jsonb', 3260 oprcode => 'jsonb_object_field' }, 3261{ oid => '3477', descr => 'get jsonb object field as text', 3262 oprname => '->>', oprleft => 'jsonb', oprright => 'text', oprresult => 'text', 3263 oprcode => 'jsonb_object_field_text' }, 3264{ oid => '3212', descr => 'get jsonb array element', 3265 oprname => '->', oprleft => 'jsonb', oprright => 'int4', oprresult => 'jsonb', 3266 oprcode => 'jsonb_array_element' }, 3267{ oid => '3481', descr => 'get jsonb array element as text', 3268 oprname => '->>', oprleft => 'jsonb', oprright => 'int4', oprresult => 'text', 3269 oprcode => 'jsonb_array_element_text' }, 3270{ oid => '3213', descr => 'get value from jsonb with path elements', 3271 oprname => '#>', oprleft => 'jsonb', oprright => '_text', 3272 oprresult => 'jsonb', oprcode => 'jsonb_extract_path' }, 3273{ oid => '3206', descr => 'get value from jsonb as text with path elements', 3274 oprname => '#>>', oprleft => 'jsonb', oprright => '_text', 3275 oprresult => 'text', oprcode => 'jsonb_extract_path_text' }, 3276{ oid => '3240', descr => 'equal', 3277 oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'jsonb', 3278 oprright => 'jsonb', oprresult => 'bool', oprcom => '=(jsonb,jsonb)', 3279 oprnegate => '<>(jsonb,jsonb)', oprcode => 'jsonb_eq', oprrest => 'eqsel', 3280 oprjoin => 'eqjoinsel' }, 3281{ oid => '3241', descr => 'not equal', 3282 oprname => '<>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3283 oprcom => '<>(jsonb,jsonb)', oprnegate => '=(jsonb,jsonb)', 3284 oprcode => 'jsonb_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' }, 3285{ oid => '3242', descr => 'less than', 3286 oprname => '<', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3287 oprcom => '>(jsonb,jsonb)', oprnegate => '>=(jsonb,jsonb)', 3288 oprcode => 'jsonb_lt', oprrest => 'scalarltsel', 3289 oprjoin => 'scalarltjoinsel' }, 3290{ oid => '3243', descr => 'greater than', 3291 oprname => '>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3292 oprcom => '<(jsonb,jsonb)', oprnegate => '<=(jsonb,jsonb)', 3293 oprcode => 'jsonb_gt', oprrest => 'scalargtsel', 3294 oprjoin => 'scalargtjoinsel' }, 3295{ oid => '3244', descr => 'less than or equal', 3296 oprname => '<=', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3297 oprcom => '>=(jsonb,jsonb)', oprnegate => '>(jsonb,jsonb)', 3298 oprcode => 'jsonb_le', oprrest => 'scalarlesel', 3299 oprjoin => 'scalarlejoinsel' }, 3300{ oid => '3245', descr => 'greater than or equal', 3301 oprname => '>=', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3302 oprcom => '<=(jsonb,jsonb)', oprnegate => '<(jsonb,jsonb)', 3303 oprcode => 'jsonb_ge', oprrest => 'scalargesel', 3304 oprjoin => 'scalargejoinsel' }, 3305{ oid => '3246', descr => 'contains', 3306 oprname => '@>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3307 oprcom => '<@(jsonb,jsonb)', oprcode => 'jsonb_contains', 3308 oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3309{ oid => '3247', descr => 'key exists', 3310 oprname => '?', oprleft => 'jsonb', oprright => 'text', oprresult => 'bool', 3311 oprcode => 'jsonb_exists', oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3312{ oid => '3248', descr => 'any key exists', 3313 oprname => '?|', oprleft => 'jsonb', oprright => '_text', oprresult => 'bool', 3314 oprcode => 'jsonb_exists_any', oprrest => 'contsel', 3315 oprjoin => 'contjoinsel' }, 3316{ oid => '3249', descr => 'all keys exist', 3317 oprname => '?&', oprleft => 'jsonb', oprright => '_text', oprresult => 'bool', 3318 oprcode => 'jsonb_exists_all', oprrest => 'contsel', 3319 oprjoin => 'contjoinsel' }, 3320{ oid => '3250', descr => 'is contained by', 3321 oprname => '<@', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool', 3322 oprcom => '@>(jsonb,jsonb)', oprcode => 'jsonb_contained', 3323 oprrest => 'contsel', oprjoin => 'contjoinsel' }, 3324{ oid => '3284', descr => 'concatenate', 3325 oprname => '||', oprleft => 'jsonb', oprright => 'jsonb', 3326 oprresult => 'jsonb', oprcode => 'jsonb_concat' }, 3327{ oid => '3285', descr => 'delete object field', 3328 oprname => '-', oprleft => 'jsonb', oprright => 'text', oprresult => 'jsonb', 3329 oprcode => 'jsonb_delete(jsonb,text)' }, 3330{ oid => '3398', descr => 'delete object fields', 3331 oprname => '-', oprleft => 'jsonb', oprright => '_text', oprresult => 'jsonb', 3332 oprcode => 'jsonb_delete(jsonb,_text)' }, 3333{ oid => '3286', descr => 'delete array element', 3334 oprname => '-', oprleft => 'jsonb', oprright => 'int4', oprresult => 'jsonb', 3335 oprcode => 'jsonb_delete(jsonb,int4)' }, 3336{ oid => '3287', descr => 'delete path', 3337 oprname => '#-', oprleft => 'jsonb', oprright => '_text', 3338 oprresult => 'jsonb', oprcode => 'jsonb_delete_path' }, 3339 3340] 3341