pg_operator.dat 186 KB

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