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