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