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