range.slt 177 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. #
  10. # meta
  11. # Ensure range sorts of null correctly
  12. query B
  13. SELECT ARRAY['(,)']::int4range[] < ARRAY[NULL]::int4range[];
  14. ----
  15. true
  16. #
  17. # int4range
  18. query T
  19. select '[0,100)'::int4range;
  20. ----
  21. [0,100)
  22. query T
  23. select pg_typeof('[0,100)'::int4range);
  24. ----
  25. int4range
  26. query error invalid input syntax for type range
  27. select '栬艷^Ằ['::int4range
  28. query T
  29. select 'empty'::int4range;
  30. ----
  31. empty
  32. query T
  33. select pg_typeof('empty'::int4range);
  34. ----
  35. int4range
  36. query T
  37. select null::int4range
  38. ----
  39. NULL
  40. query error integer out of range
  41. SELECT '[2,2147483647]'::int4range;
  42. query error integer out of range
  43. SELECT '(2147483647,2147483647]'::int4range;
  44. # Parameterized input on
  45. # xjoin(["(","["],
  46. # xjoin([null,-1,0,1],
  47. # xjoin(
  48. # [null,-1,0,1],
  49. # ["),"]"]
  50. # )
  51. # )
  52. # )
  53. query T
  54. SELECT '(,)'::int4range;
  55. ----
  56. (,)
  57. query T
  58. SELECT '(,-1)'::int4range;
  59. ----
  60. (,-1)
  61. query T
  62. SELECT '(,0)'::int4range;
  63. ----
  64. (,0)
  65. query T
  66. SELECT '(,1)'::int4range;
  67. ----
  68. (,1)
  69. query T
  70. SELECT '(,]'::int4range;
  71. ----
  72. (,)
  73. query T
  74. SELECT '(,-1]'::int4range;
  75. ----
  76. (,0)
  77. query T
  78. SELECT '(,0]'::int4range;
  79. ----
  80. (,1)
  81. query T
  82. SELECT '(,1]'::int4range;
  83. ----
  84. (,2)
  85. query T
  86. SELECT '(-1,)'::int4range;
  87. ----
  88. [0,)
  89. query T
  90. SELECT '(-1,-1)'::int4range;
  91. ----
  92. empty
  93. query T
  94. SELECT '(-1,0)'::int4range;
  95. ----
  96. empty
  97. query T
  98. SELECT '(-1,1)'::int4range;
  99. ----
  100. [0,1)
  101. query T
  102. SELECT '(-1,]'::int4range;
  103. ----
  104. [0,)
  105. query T
  106. SELECT '(-1,-1]'::int4range;
  107. ----
  108. empty
  109. query T
  110. SELECT '(-1,0]'::int4range;
  111. ----
  112. [0,1)
  113. query T
  114. SELECT '(-1,1]'::int4range;
  115. ----
  116. [0,2)
  117. query T
  118. SELECT '(0,)'::int4range;
  119. ----
  120. [1,)
  121. query error range lower bound must be less than or equal to range upper bound
  122. SELECT '(0,-1)'::int4range;
  123. query T
  124. SELECT '(0,0)'::int4range;
  125. ----
  126. empty
  127. query T
  128. SELECT '(0,1)'::int4range;
  129. ----
  130. empty
  131. query T
  132. SELECT '(0,]'::int4range;
  133. ----
  134. [1,)
  135. query error range lower bound must be less than or equal to range upper bound
  136. SELECT '(0,-1]'::int4range;
  137. query T
  138. SELECT '(0,0]'::int4range;
  139. ----
  140. empty
  141. query T
  142. SELECT '(0,1]'::int4range;
  143. ----
  144. [1,2)
  145. query T
  146. SELECT '(1,)'::int4range;
  147. ----
  148. [2,)
  149. query error range lower bound must be less than or equal to range upper bound
  150. SELECT '(1,-1)'::int4range;
  151. query error range lower bound must be less than or equal to range upper bound
  152. SELECT '(1,0)'::int4range;
  153. query T
  154. SELECT '(1,1)'::int4range;
  155. ----
  156. empty
  157. query T
  158. SELECT '(1,]'::int4range;
  159. ----
  160. [2,)
  161. query error range lower bound must be less than or equal to range upper bound
  162. SELECT '(1,-1]'::int4range;
  163. query error range lower bound must be less than or equal to range upper bound
  164. SELECT '(1,0]'::int4range;
  165. query T
  166. SELECT '(1,1]'::int4range;
  167. ----
  168. empty
  169. query T
  170. SELECT '[,)'::int4range;
  171. ----
  172. (,)
  173. query T
  174. SELECT '[,-1)'::int4range;
  175. ----
  176. (,-1)
  177. query T
  178. SELECT '[,0)'::int4range;
  179. ----
  180. (,0)
  181. query T
  182. SELECT '[,1)'::int4range;
  183. ----
  184. (,1)
  185. query T
  186. SELECT '[,]'::int4range;
  187. ----
  188. (,)
  189. query T
  190. SELECT '[,-1]'::int4range;
  191. ----
  192. (,0)
  193. query T
  194. SELECT '[,0]'::int4range;
  195. ----
  196. (,1)
  197. query T
  198. SELECT '[,1]'::int4range;
  199. ----
  200. (,2)
  201. query T
  202. SELECT '[-1,)'::int4range;
  203. ----
  204. [-1,)
  205. query T
  206. SELECT '[-1,-1)'::int4range;
  207. ----
  208. empty
  209. query T
  210. SELECT '[-1,0)'::int4range;
  211. ----
  212. [-1,0)
  213. query T
  214. SELECT '[-1,1)'::int4range;
  215. ----
  216. [-1,1)
  217. query T
  218. SELECT '[-1,]'::int4range;
  219. ----
  220. [-1,)
  221. query T
  222. SELECT '[-1,-1]'::int4range;
  223. ----
  224. [-1,0)
  225. query T
  226. SELECT '[-1,0]'::int4range;
  227. ----
  228. [-1,1)
  229. query T
  230. SELECT '[-1,1]'::int4range;
  231. ----
  232. [-1,2)
  233. query T
  234. SELECT '[0,)'::int4range;
  235. ----
  236. [0,)
  237. query error range lower bound must be less than or equal to range upper bound
  238. SELECT '[0,-1)'::int4range;
  239. query T
  240. SELECT '[0,0)'::int4range;
  241. ----
  242. empty
  243. query T
  244. SELECT '[0,1)'::int4range;
  245. ----
  246. [0,1)
  247. query T
  248. SELECT '[0,]'::int4range;
  249. ----
  250. [0,)
  251. query error range lower bound must be less than or equal to range upper bound
  252. SELECT '[0,-1]'::int4range;
  253. query T
  254. SELECT '[0,0]'::int4range;
  255. ----
  256. [0,1)
  257. query T
  258. SELECT '[0,1]'::int4range;
  259. ----
  260. [0,2)
  261. query T
  262. SELECT '[1,)'::int4range;
  263. ----
  264. [1,)
  265. query error range lower bound must be less than or equal to range upper bound
  266. SELECT '[1,-1)'::int4range;
  267. query error range lower bound must be less than or equal to range upper bound
  268. SELECT '[1,0)'::int4range;
  269. query T
  270. SELECT '[1,1)'::int4range;
  271. ----
  272. empty
  273. query T
  274. SELECT '[1,]'::int4range;
  275. ----
  276. [1,)
  277. # Range bound errors
  278. query error range lower bound must be less than or equal to range upper bound
  279. SELECT '[1,-1]'::int4range;
  280. query error range lower bound must be less than or equal to range upper bound
  281. SELECT '[1,0]'::int4range;
  282. # Whitespace handling
  283. query T
  284. SELECT
  285. DISTINCT column1::int4range
  286. FROM
  287. (
  288. VALUES
  289. (' empty'),
  290. ('empty '),
  291. (' [1,)'),
  292. ('[ 1,)'),
  293. ('[1 ,)'),
  294. ('[ 1 ,)'),
  295. ('[1, 2)'),
  296. ('[1,2 )'),
  297. ('[1, 2 )'),
  298. ('[1,) '),
  299. (' (,1)'),
  300. ('(, 1)'),
  301. (' (,) ')
  302. ) t;
  303. ----
  304. empty
  305. (,)
  306. (,1)
  307. [1,)
  308. [1,2)
  309. # Input errors
  310. query error invalid input syntax for type range
  311. SELECT '[1, )'::int4range
  312. query error invalid input syntax for type range
  313. SELECT '( ,1)'::int4range
  314. query error invalid input syntax for type range
  315. SELECT '( , )'::int4range
  316. query error invalid input syntax for type range
  317. SELECT 'emptyy'::int4range;
  318. query error invalid input syntax for type range
  319. SELECT ''::int4range;
  320. query error invalid input syntax for type range
  321. SELECT '1'::int4range;
  322. query error invalid input syntax for type range
  323. SELECT 'd'::int4range;
  324. query error invalid input syntax for type range
  325. SELECT ','::int4range;
  326. query error invalid input syntax for type range
  327. SELECT ')'::int4range;
  328. query error invalid input syntax for type range
  329. SELECT '{'::int4range;
  330. query error invalid input syntax for type range
  331. SELECT '('::int4range;
  332. query error invalid input syntax for type range
  333. SELECT '['::int4range;
  334. query error invalid input syntax for type range
  335. SELECT '(1)'::int4range;
  336. query error invalid input syntax for type range
  337. SELECT '[1]'::int4range;
  338. query error invalid input syntax for type range
  339. SELECT '(1,'::int4range;
  340. query error invalid input syntax for type range
  341. SELECT '[1,'::int4range;
  342. query error invalid input syntax for type range
  343. SELECT '(1,1'::int4range;
  344. query error invalid input syntax for type range
  345. SELECT '[1,1'::int4range;
  346. query error invalid input syntax for type range
  347. SELECT '(1,1]1'::int4range;
  348. query error invalid input syntax for type range
  349. SELECT '[1,1]a'::int4range;
  350. query error invalid input syntax for type range
  351. SELECT '(1,1]]'::int4range;
  352. query error invalid input syntax for type range
  353. SELECT '[1,1]}'::int4range;
  354. query error invalid input syntax for type range
  355. SELECT '(1,1] ]'::int4range;
  356. query error invalid input syntax for type range
  357. SELECT '[1,1] }'::int4range;
  358. statement ok
  359. CREATE TABLE int4range_values (a int4range);
  360. statement ok
  361. INSERT INTO int4range_values VALUES
  362. (null),
  363. ('empty'),
  364. ('[,1)'::int4range),
  365. ('[,1]'::int4range),
  366. ('[,)'::int4range),
  367. ('[,]'::int4range),
  368. ('(,1)'::int4range),
  369. ('(,1]'::int4range),
  370. ('(,)'::int4range),
  371. ('(,]'::int4range),
  372. ('[-1,1)'::int4range),
  373. ('[-1,1]'::int4range),
  374. ('(-1,1)'::int4range),
  375. ('(-1,1]'::int4range),
  376. ('[0,0)'::int4range),
  377. ('[0,0]'::int4range),
  378. ('(0,0)'::int4range),
  379. ('(0,0]'::int4range),
  380. ('[1,)'::int4range),
  381. ('[1,]'::int4range),
  382. ('(1,)'::int4range),
  383. ('(1,]'::int4range);
  384. query T
  385. SELECT a AS t FROM int4range_values ORDER BY a;
  386. ----
  387. empty
  388. empty
  389. empty
  390. empty
  391. (,1)
  392. (,1)
  393. (,2)
  394. (,2)
  395. (,)
  396. (,)
  397. (,)
  398. (,)
  399. [-1,1)
  400. [-1,2)
  401. [0,1)
  402. [0,1)
  403. [0,2)
  404. [1,)
  405. [1,)
  406. [2,)
  407. [2,)
  408. NULL
  409. query T
  410. SELECT a AS t FROM int4range_values EXCEPT SELECT column1 FROM (VALUES
  411. (int4range(null,1)),
  412. (int4range(null,1, '[]')),
  413. (int4range(null,null)),
  414. (int4range(null,null, '[]')),
  415. (int4range(null,1, '()')),
  416. (int4range(null,1, '(]')),
  417. (int4range(null,null, '()')),
  418. (int4range(null,null,'(]')),
  419. (int4range(-1,1)),
  420. (int4range(-1,1, '[]')),
  421. (int4range(-1,1, '()')),
  422. (int4range(-1,1,'(]')),
  423. (int4range(0,0)),
  424. (int4range(0,0, '[]')),
  425. (int4range(0,0,'()')),
  426. (int4range(0,0,'(]')),
  427. (int4range(1,null)),
  428. (int4range(1,null, '[]')),
  429. (int4range(1,null,'()')),
  430. (int4range(1,null,'(]'))
  431. ) t;
  432. ----
  433. NULL
  434. query error operator does not exist: int4range @> numeric
  435. SELECT int4range(-1,1) @> 0.1;
  436. query error operator does not exist: int4range @> double precision
  437. SELECT int4range(-1,1) @> 0.1::float;
  438. query error range constructor flags argument must not be null
  439. SELECT int4range(1,2,null);
  440. query error range constructor flags argument must not be null
  441. SELECT int4range(null,null,null);
  442. #
  443. # int4range upper, lower
  444. query TT
  445. SELECT DISTINCT lower(a), upper(a) FROM int4range_values
  446. ORDER BY 1, 2;
  447. ----
  448. -1
  449. 1
  450. -1
  451. 2
  452. 0
  453. 1
  454. 0
  455. 2
  456. 1
  457. NULL
  458. 2
  459. NULL
  460. NULL
  461. 1
  462. NULL
  463. 2
  464. NULL
  465. NULL
  466. # test that lower and upper roundtrip through range constructor function
  467. query T
  468. SELECT
  469. a
  470. FROM
  471. int4range_values
  472. WHERE
  473. (NOT isempty(a))
  474. AND (
  475. a
  476. != int4range(
  477. lower(a),
  478. upper(a),
  479. CASE
  480. WHEN lower_inc(a) THEN '['
  481. ELSE '('
  482. END
  483. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  484. )
  485. );
  486. ----
  487. query T
  488. SELECT DISTINCT a FROM int4range_values WHERE lower_inf(a) AND upper_inf(a);
  489. ----
  490. (,)
  491. query error invalid range bound flags
  492. SELECT int4range(null,null,' (]');
  493. query error invalid range bound flags
  494. SELECT int4range(null,null,'(] ');
  495. query error invalid range bound flags
  496. SELECT int4range(null,null,'( ]');
  497. query error invalid range bound flags
  498. SELECT int4range(null,null,'(,]');
  499. query error invalid range bound flags
  500. SELECT int4range(null,null,'a()');
  501. query error invalid range bound flags
  502. SELECT int4range(null,null,'(a)');
  503. query error invalid range bound flags
  504. SELECT int4range(null,null,'()a');
  505. query error invalid range bound flags
  506. SELECT int4range(null,null,'(()');
  507. query error invalid range bound flags
  508. SELECT int4range(null,null,'())');
  509. # Test range in list
  510. query T
  511. SELECT LIST['(,)', 'empty', '[-1,1]']::int4range list::text;
  512. ----
  513. {"(,)",empty,"[-1,2)"}
  514. query T
  515. SELECT '{"(,)","empty","[-1,1]"}'::int4range list::text;
  516. ----
  517. {"(,)",empty,"[-1,2)"}
  518. # Test range in array
  519. query T
  520. SELECT ARRAY['(,)', 'empty', '[-1,1]']::_int4range;
  521. ----
  522. {"(,)",empty,"[-1,2)"}
  523. query T
  524. SELECT '{"(,)","empty","[-1,1]"}'::_int4range;
  525. ----
  526. {"(,)",empty,"[-1,2)"}
  527. # Test builtin functions
  528. query B
  529. select '(,)'::int4range = '(,)'::int4range;
  530. ----
  531. true
  532. query B
  533. select '(,)'::int4range != 'empty'::int4range;
  534. ----
  535. true
  536. query B
  537. select '(,)'::int4range > 'empty'::int4range;
  538. ----
  539. true
  540. query B
  541. select '(,)'::int4range >= 'empty'::int4range;
  542. ----
  543. true
  544. query B
  545. select '(,)'::int4range < 'empty'::int4range;
  546. ----
  547. false
  548. query B
  549. select '(,)'::int4range <= 'empty'::int4range;
  550. ----
  551. false
  552. statement ok
  553. CREATE TABLE int4range_test_values (v int4range);
  554. statement ok
  555. INSERT INTO int4range_test_values VALUES ('empty'),
  556. ('(,)'),
  557. ('(,1)'),
  558. ('(-1,)'),
  559. ('[-1,1)'),
  560. ('[-99,-50)'),
  561. ('[50,99)');
  562. #
  563. # int4range contains
  564. query TT
  565. SELECT a t, array_agg(v ORDER BY v) FROM (
  566. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  567. ) int4range_values(a), int4range_test_values WHERE a @> v GROUP BY a ORDER BY a;
  568. ----
  569. empty
  570. {empty}
  571. (,1)
  572. {empty,"(,1)","[-99,-50)","[-1,1)"}
  573. (,2)
  574. {empty,"(,1)","[-99,-50)","[-1,1)"}
  575. (,)
  576. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  577. [-1,1)
  578. {empty,"[-1,1)"}
  579. [-1,2)
  580. {empty,"[-1,1)"}
  581. [0,1)
  582. {empty}
  583. [0,2)
  584. {empty}
  585. [1,)
  586. {empty,"[50,99)"}
  587. [2,)
  588. {empty,"[50,99)"}
  589. #
  590. # int4range contained by
  591. query TT
  592. SELECT a t, array_agg(v ORDER BY v) FROM (
  593. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  594. ) int4range_values(a), int4range_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  595. ----
  596. empty
  597. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  598. (,1)
  599. {"(,1)","(,)"}
  600. (,2)
  601. {"(,)"}
  602. (,)
  603. {"(,)"}
  604. [-1,1)
  605. {"(,1)","(,)","[-1,1)"}
  606. [-1,2)
  607. {"(,)"}
  608. [0,1)
  609. {"(,1)","(,)","[-1,1)","[0,)"}
  610. [0,2)
  611. {"(,)","[0,)"}
  612. [1,)
  613. {"(,)","[0,)"}
  614. [2,)
  615. {"(,)","[0,)"}
  616. #
  617. # int4range contained overlaps
  618. query TT
  619. SELECT a t, array_agg(v ORDER BY v) FROM (
  620. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  621. ) int4range_values(a), int4range_test_values WHERE a && v GROUP BY a ORDER BY a;
  622. ----
  623. (,1)
  624. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  625. (,2)
  626. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  627. (,)
  628. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  629. [-1,1)
  630. {"(,1)","(,)","[-1,1)","[0,)"}
  631. [-1,2)
  632. {"(,1)","(,)","[-1,1)","[0,)"}
  633. [0,1)
  634. {"(,1)","(,)","[-1,1)","[0,)"}
  635. [0,2)
  636. {"(,1)","(,)","[-1,1)","[0,)"}
  637. [1,)
  638. {"(,)","[0,)","[50,99)"}
  639. [2,)
  640. {"(,)","[0,)","[50,99)"}
  641. #
  642. # int4range before
  643. query TT
  644. SELECT a t, array_agg(v ORDER BY v) FROM (
  645. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  646. ) int4range_values(a), int4range_test_values WHERE a << v GROUP BY a ORDER BY a;
  647. ----
  648. (,1)
  649. {"[50,99)"}
  650. (,2)
  651. {"[50,99)"}
  652. [-1,1)
  653. {"[50,99)"}
  654. [-1,2)
  655. {"[50,99)"}
  656. [0,1)
  657. {"[50,99)"}
  658. [0,2)
  659. {"[50,99)"}
  660. #
  661. # int4range after
  662. query TT
  663. SELECT a t, array_agg(v ORDER BY v) FROM (
  664. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  665. ) int4range_values(a), int4range_test_values WHERE a >> v GROUP BY a ORDER BY a;
  666. ----
  667. [-1,1)
  668. {"[-99,-50)"}
  669. [-1,2)
  670. {"[-99,-50)"}
  671. [0,1)
  672. {"[-99,-50)"}
  673. [0,2)
  674. {"[-99,-50)"}
  675. [1,)
  676. {"(,1)","[-99,-50)","[-1,1)"}
  677. [2,)
  678. {"(,1)","[-99,-50)","[-1,1)"}
  679. #
  680. # int4range overleft
  681. query TT
  682. SELECT a t, array_agg(v ORDER BY v) FROM (
  683. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  684. ) int4range_values(a), int4range_test_values WHERE a &< v GROUP BY a ORDER BY a;
  685. ----
  686. (,1)
  687. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  688. (,2)
  689. {"(,)","[0,)","[50,99)"}
  690. (,)
  691. {"(,)","[0,)"}
  692. [-1,1)
  693. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  694. [-1,2)
  695. {"(,)","[0,)","[50,99)"}
  696. [0,1)
  697. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  698. [0,2)
  699. {"(,)","[0,)","[50,99)"}
  700. [1,)
  701. {"(,)","[0,)"}
  702. [2,)
  703. {"(,)","[0,)"}
  704. #
  705. # int4range overright
  706. query TT
  707. SELECT a t, array_agg(v ORDER BY v) FROM (
  708. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  709. ) int4range_values(a), int4range_test_values WHERE a &> v GROUP BY a ORDER BY a;
  710. ----
  711. (,1)
  712. {"(,1)","(,)"}
  713. (,2)
  714. {"(,1)","(,)"}
  715. (,)
  716. {"(,1)","(,)"}
  717. [-1,1)
  718. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  719. [-1,2)
  720. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  721. [0,1)
  722. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  723. [0,2)
  724. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  725. [1,)
  726. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  727. [2,)
  728. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  729. #
  730. # int4range adjacent
  731. query TT
  732. SELECT a t, array_agg(v ORDER BY v) FROM (
  733. SELECT DISTINCT a FROM int4range_values WHERE a IS NOT NULL
  734. ) int4range_values(a), int4range_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  735. ----
  736. [1,)
  737. {"(,1)","[-1,1)"}
  738. #
  739. # int4range union
  740. query T
  741. SELECT null + 'empty'::int4range
  742. ----
  743. NULL
  744. query T
  745. SELECT 'empty'::int4range + 'empty'::int4range
  746. ----
  747. empty
  748. query T
  749. SELECT 'empty'::int4range + '(,-1)'::int4range
  750. ----
  751. (,-1)
  752. query T
  753. SELECT '(,-1)'::int4range + 'empty'::int4range
  754. ----
  755. (,-1)
  756. query T
  757. SELECT '(,-1)'::int4range + '(,-1)'::int4range
  758. ----
  759. (,-1)
  760. query T
  761. SELECT 'empty'::int4range + '[-2,2)'::int4range
  762. ----
  763. [-2,2)
  764. query T
  765. SELECT 'empty'::int4range + '[1,)'::int4range
  766. ----
  767. [1,)
  768. query T
  769. SELECT 'empty'::int4range + '(,)'::int4range
  770. ----
  771. (,)
  772. query T
  773. SELECT '(,-1)'::int4range + '[-2,2)'::int4range
  774. ----
  775. (,2)
  776. query error result of range union would not be contiguous
  777. SELECT '(,-1)'::int4range + '[1,)'::int4range
  778. query T
  779. SELECT '(,-1)'::int4range + '(,)'::int4range
  780. ----
  781. (,)
  782. query T
  783. SELECT '[-2,2)'::int4range + 'empty'::int4range
  784. ----
  785. [-2,2)
  786. query T
  787. SELECT '[-2,2)'::int4range + '(,-1)'::int4range
  788. ----
  789. (,2)
  790. query T
  791. SELECT '[-2,2)'::int4range + '[1,)'::int4range
  792. ----
  793. [-2,)
  794. query T
  795. SELECT '[-2,2)'::int4range + '(,)'::int4range
  796. ----
  797. (,)
  798. query T
  799. SELECT '[1,)'::int4range + 'empty'::int4range
  800. ----
  801. [1,)
  802. query error result of range union would not be contiguous
  803. SELECT '[1,)'::int4range + '(,-1)'::int4range
  804. query T
  805. SELECT '[1,)'::int4range + '[-2,2)'::int4range
  806. ----
  807. [-2,)
  808. query T
  809. SELECT '[1,)'::int4range + '(,)'::int4range
  810. ----
  811. (,)
  812. query T
  813. SELECT '(,)'::int4range + 'empty'::int4range
  814. ----
  815. (,)
  816. query T
  817. SELECT '(,)'::int4range + '(,-1)'::int4range
  818. ----
  819. (,)
  820. query T
  821. SELECT '(,)'::int4range + '[-2,2)'::int4range
  822. ----
  823. (,)
  824. query T
  825. SELECT '(,)'::int4range + '[1,)'::int4range
  826. ----
  827. (,)
  828. #
  829. # int4range intersection
  830. query T
  831. SELECT null * 'empty'::int4range
  832. ----
  833. NULL
  834. query T
  835. SELECT 'empty'::int4range * 'empty'::int4range
  836. ----
  837. empty
  838. query T
  839. SELECT 'empty'::int4range * '(,-1)'::int4range
  840. ----
  841. empty
  842. query T
  843. SELECT '(,-1)'::int4range * 'empty'::int4range
  844. ----
  845. empty
  846. query T
  847. SELECT '(,-1)'::int4range * '(,-1)'::int4range
  848. ----
  849. (,-1)
  850. query T
  851. SELECT 'empty'::int4range * '[-2,2)'::int4range
  852. ----
  853. empty
  854. query T
  855. SELECT 'empty'::int4range * '[1,)'::int4range
  856. ----
  857. empty
  858. query T
  859. SELECT 'empty'::int4range * '(,)'::int4range
  860. ----
  861. empty
  862. query T
  863. SELECT '(,-1)'::int4range * '[-2,2)'::int4range
  864. ----
  865. [-2,-1)
  866. query T
  867. SELECT '(,-1)'::int4range * '[1,)'::int4range
  868. ----
  869. empty
  870. query T
  871. SELECT '(,-1)'::int4range * '(,)'::int4range
  872. ----
  873. (,-1)
  874. query T
  875. SELECT '[-2,2)'::int4range * 'empty'::int4range
  876. ----
  877. empty
  878. query T
  879. SELECT '[-2,2)'::int4range * '(,-1)'::int4range
  880. ----
  881. [-2,-1)
  882. query T
  883. SELECT '[-2,2)'::int4range * '[1,)'::int4range
  884. ----
  885. [1,2)
  886. query T
  887. SELECT '[-2,2)'::int4range * '(,)'::int4range
  888. ----
  889. [-2,2)
  890. query T
  891. SELECT '[1,)'::int4range * 'empty'::int4range
  892. ----
  893. empty
  894. query T
  895. SELECT '[1,)'::int4range * '(,-1)'::int4range
  896. ----
  897. empty
  898. query T
  899. SELECT '[1,)'::int4range * '[-2,2)'::int4range
  900. ----
  901. [1,2)
  902. query T
  903. SELECT '[1,)'::int4range * '(,)'::int4range
  904. ----
  905. [1,)
  906. query T
  907. SELECT '(,)'::int4range * 'empty'::int4range
  908. ----
  909. empty
  910. query T
  911. SELECT '(,)'::int4range * '(,-1)'::int4range
  912. ----
  913. (,-1)
  914. query T
  915. SELECT '(,)'::int4range * '[-2,2)'::int4range
  916. ----
  917. [-2,2)
  918. query T
  919. SELECT '(,)'::int4range * '[1,)'::int4range
  920. ----
  921. [1,)
  922. #
  923. # int4range difference
  924. query T
  925. SELECT null - 'empty'::int4range
  926. ----
  927. NULL
  928. query T
  929. SELECT 'empty'::int4range - 'empty'::int4range
  930. ----
  931. empty
  932. query T
  933. SELECT 'empty'::int4range - '(,-1)'::int4range
  934. ----
  935. empty
  936. query T
  937. SELECT '(,-1)'::int4range - 'empty'::int4range
  938. ----
  939. (,-1)
  940. query T
  941. SELECT '(,-1)'::int4range - '(,-1)'::int4range
  942. ----
  943. empty
  944. query T
  945. SELECT 'empty'::int4range - '[-2,2)'::int4range
  946. ----
  947. empty
  948. query T
  949. SELECT 'empty'::int4range - '[1,)'::int4range
  950. ----
  951. empty
  952. query T
  953. SELECT 'empty'::int4range - '(,)'::int4range
  954. ----
  955. empty
  956. query T
  957. SELECT '(,-1)'::int4range - '[-2,2)'::int4range
  958. ----
  959. (,-2)
  960. query T
  961. SELECT '(,-1)'::int4range - '[1,)'::int4range
  962. ----
  963. (,-1)
  964. query T
  965. SELECT '(,-1)'::int4range - '(,)'::int4range
  966. ----
  967. empty
  968. query T
  969. SELECT '[-2,2)'::int4range - 'empty'::int4range
  970. ----
  971. [-2,2)
  972. query T
  973. SELECT '[-2,2)'::int4range - '(,-1)'::int4range
  974. ----
  975. [-1,2)
  976. query T
  977. SELECT '[-2,2)'::int4range - '[1,)'::int4range
  978. ----
  979. [-2,1)
  980. query T
  981. SELECT '[-2,2)'::int4range - '(,)'::int4range
  982. ----
  983. empty
  984. query T
  985. SELECT '[1,)'::int4range - 'empty'::int4range
  986. ----
  987. [1,)
  988. query T
  989. SELECT '[1,)'::int4range - '(,-1)'::int4range
  990. ----
  991. [1,)
  992. query T
  993. SELECT '[1,)'::int4range - '[-2,2)'::int4range
  994. ----
  995. [2,)
  996. query T
  997. SELECT '[1,)'::int4range - '(,)'::int4range
  998. ----
  999. empty
  1000. query T
  1001. SELECT '(,)'::int4range - 'empty'::int4range
  1002. ----
  1003. (,)
  1004. query T
  1005. SELECT '(,)'::int4range - '(,-1)'::int4range
  1006. ----
  1007. [-1,)
  1008. query error result of range difference would not be contiguous
  1009. SELECT '(,)'::int4range - '[-2,2)'::int4range
  1010. query T
  1011. SELECT '(,)'::int4range - '[1,)'::int4range
  1012. ----
  1013. (,1)
  1014. #
  1015. # int8range
  1016. query T
  1017. select '[0,100)'::int8range;
  1018. ----
  1019. [0,100)
  1020. query T
  1021. select pg_typeof('[0,100)'::int8range);
  1022. ----
  1023. int8range
  1024. query T
  1025. select 'empty'::int8range;
  1026. ----
  1027. empty
  1028. query T
  1029. select pg_typeof('empty'::int8range);
  1030. ----
  1031. int8range
  1032. query T
  1033. select null::int8range
  1034. ----
  1035. NULL
  1036. query error bigint out of range
  1037. SELECT '[2,9223372036854775807]'::int8range;
  1038. query error bigint out of range
  1039. SELECT '(9223372036854775807,9223372036854775807]'::int8range;
  1040. # Parameterized input on
  1041. # xjoin(["(","["],
  1042. # xjoin([null,-1,0,1],
  1043. # xjoin(
  1044. # [null,-1,0,1],
  1045. # ["),"]"]
  1046. # )
  1047. # )
  1048. # )
  1049. query T
  1050. SELECT '(,)'::int8range;
  1051. ----
  1052. (,)
  1053. query T
  1054. SELECT '(,-1)'::int8range;
  1055. ----
  1056. (,-1)
  1057. query T
  1058. SELECT '(,0)'::int8range;
  1059. ----
  1060. (,0)
  1061. query T
  1062. SELECT '(,1)'::int8range;
  1063. ----
  1064. (,1)
  1065. query T
  1066. SELECT '(,]'::int8range;
  1067. ----
  1068. (,)
  1069. query T
  1070. SELECT '(,-1]'::int8range;
  1071. ----
  1072. (,0)
  1073. query T
  1074. SELECT '(,0]'::int8range;
  1075. ----
  1076. (,1)
  1077. query T
  1078. SELECT '(,1]'::int8range;
  1079. ----
  1080. (,2)
  1081. query T
  1082. SELECT '(-1,)'::int8range;
  1083. ----
  1084. [0,)
  1085. query T
  1086. SELECT '(-1,-1)'::int8range;
  1087. ----
  1088. empty
  1089. query T
  1090. SELECT '(-1,0)'::int8range;
  1091. ----
  1092. empty
  1093. query T
  1094. SELECT '(-1,1)'::int8range;
  1095. ----
  1096. [0,1)
  1097. query T
  1098. SELECT '(-1,]'::int8range;
  1099. ----
  1100. [0,)
  1101. query T
  1102. SELECT '(-1,-1]'::int8range;
  1103. ----
  1104. empty
  1105. query T
  1106. SELECT '(-1,0]'::int8range;
  1107. ----
  1108. [0,1)
  1109. query T
  1110. SELECT '(-1,1]'::int8range;
  1111. ----
  1112. [0,2)
  1113. query T
  1114. SELECT '(0,)'::int8range;
  1115. ----
  1116. [1,)
  1117. query error range lower bound must be less than or equal to range upper bound
  1118. SELECT '(0,-1)'::int8range;
  1119. query T
  1120. SELECT '(0,0)'::int8range;
  1121. ----
  1122. empty
  1123. query T
  1124. SELECT '(0,1)'::int8range;
  1125. ----
  1126. empty
  1127. query T
  1128. SELECT '(0,]'::int8range;
  1129. ----
  1130. [1,)
  1131. query error range lower bound must be less than or equal to range upper bound
  1132. SELECT '(0,-1]'::int8range;
  1133. query T
  1134. SELECT '(0,0]'::int8range;
  1135. ----
  1136. empty
  1137. query T
  1138. SELECT '(0,1]'::int8range;
  1139. ----
  1140. [1,2)
  1141. query T
  1142. SELECT '(1,)'::int8range;
  1143. ----
  1144. [2,)
  1145. query error range lower bound must be less than or equal to range upper bound
  1146. SELECT '(1,-1)'::int8range;
  1147. query error range lower bound must be less than or equal to range upper bound
  1148. SELECT '(1,0)'::int8range;
  1149. query T
  1150. SELECT '(1,1)'::int8range;
  1151. ----
  1152. empty
  1153. query T
  1154. SELECT '(1,]'::int8range;
  1155. ----
  1156. [2,)
  1157. query error range lower bound must be less than or equal to range upper bound
  1158. SELECT '(1,-1]'::int8range;
  1159. query error range lower bound must be less than or equal to range upper bound
  1160. SELECT '(1,0]'::int8range;
  1161. query T
  1162. SELECT '(1,1]'::int8range;
  1163. ----
  1164. empty
  1165. query T
  1166. SELECT '[,)'::int8range;
  1167. ----
  1168. (,)
  1169. query T
  1170. SELECT '[,-1)'::int8range;
  1171. ----
  1172. (,-1)
  1173. query T
  1174. SELECT '[,0)'::int8range;
  1175. ----
  1176. (,0)
  1177. query T
  1178. SELECT '[,1)'::int8range;
  1179. ----
  1180. (,1)
  1181. query T
  1182. SELECT '[,]'::int8range;
  1183. ----
  1184. (,)
  1185. query T
  1186. SELECT '[,-1]'::int8range;
  1187. ----
  1188. (,0)
  1189. query T
  1190. SELECT '[,0]'::int8range;
  1191. ----
  1192. (,1)
  1193. query T
  1194. SELECT '[,1]'::int8range;
  1195. ----
  1196. (,2)
  1197. query T
  1198. SELECT '[-1,)'::int8range;
  1199. ----
  1200. [-1,)
  1201. query T
  1202. SELECT '[-1,-1)'::int8range;
  1203. ----
  1204. empty
  1205. query T
  1206. SELECT '[-1,0)'::int8range;
  1207. ----
  1208. [-1,0)
  1209. query T
  1210. SELECT '[-1,1)'::int8range;
  1211. ----
  1212. [-1,1)
  1213. query T
  1214. SELECT '[-1,]'::int8range;
  1215. ----
  1216. [-1,)
  1217. query T
  1218. SELECT '[-1,-1]'::int8range;
  1219. ----
  1220. [-1,0)
  1221. query T
  1222. SELECT '[-1,0]'::int8range;
  1223. ----
  1224. [-1,1)
  1225. query T
  1226. SELECT '[-1,1]'::int8range;
  1227. ----
  1228. [-1,2)
  1229. query T
  1230. SELECT '[0,)'::int8range;
  1231. ----
  1232. [0,)
  1233. query error range lower bound must be less than or equal to range upper bound
  1234. SELECT '[0,-1)'::int8range;
  1235. query T
  1236. SELECT '[0,0)'::int8range;
  1237. ----
  1238. empty
  1239. query T
  1240. SELECT '[0,1)'::int8range;
  1241. ----
  1242. [0,1)
  1243. query T
  1244. SELECT '[0,]'::int8range;
  1245. ----
  1246. [0,)
  1247. query error range lower bound must be less than or equal to range upper bound
  1248. SELECT '[0,-1]'::int8range;
  1249. query T
  1250. SELECT '[0,0]'::int8range;
  1251. ----
  1252. [0,1)
  1253. query T
  1254. SELECT '[0,1]'::int8range;
  1255. ----
  1256. [0,2)
  1257. query T
  1258. SELECT '[1,)'::int8range;
  1259. ----
  1260. [1,)
  1261. query error range lower bound must be less than or equal to range upper bound
  1262. SELECT '[1,-1)'::int8range;
  1263. query error range lower bound must be less than or equal to range upper bound
  1264. SELECT '[1,0)'::int8range;
  1265. query T
  1266. SELECT '[1,1)'::int8range;
  1267. ----
  1268. empty
  1269. query T
  1270. SELECT '[1,]'::int8range;
  1271. ----
  1272. [1,)
  1273. # Range bound errors
  1274. query error range lower bound must be less than or equal to range upper bound
  1275. SELECT '[1,-1]'::int8range;
  1276. query error range lower bound must be less than or equal to range upper bound
  1277. SELECT '[1,0]'::int8range;
  1278. # Input errors
  1279. query error invalid input syntax for type range
  1280. SELECT '[1, )'::int8range
  1281. query error invalid input syntax for type range
  1282. SELECT '( ,1)'::int8range
  1283. query error invalid input syntax for type range
  1284. SELECT '( , )'::int8range
  1285. query error invalid input syntax for type range
  1286. SELECT 'emptyy'::int8range;
  1287. query error invalid input syntax for type range
  1288. SELECT ''::int8range;
  1289. query error invalid input syntax for type range
  1290. SELECT '1'::int8range;
  1291. query error invalid input syntax for type range
  1292. SELECT 'd'::int8range;
  1293. query error invalid input syntax for type range
  1294. SELECT ','::int8range;
  1295. query error invalid input syntax for type range
  1296. SELECT ')'::int8range;
  1297. query error invalid input syntax for type range
  1298. SELECT '{'::int8range;
  1299. query error invalid input syntax for type range
  1300. SELECT '('::int8range;
  1301. query error invalid input syntax for type range
  1302. SELECT '['::int8range;
  1303. query error invalid input syntax for type range
  1304. SELECT '(1)'::int8range;
  1305. query error invalid input syntax for type range
  1306. SELECT '[1]'::int8range;
  1307. query error invalid input syntax for type range
  1308. SELECT '(1,'::int8range;
  1309. query error invalid input syntax for type range
  1310. SELECT '[1,'::int8range;
  1311. query error invalid input syntax for type range
  1312. SELECT '(1,1'::int8range;
  1313. query error invalid input syntax for type range
  1314. SELECT '[1,1'::int8range;
  1315. query error invalid input syntax for type range
  1316. SELECT '(1,1]1'::int8range;
  1317. query error invalid input syntax for type range
  1318. SELECT '[1,1]a'::int8range;
  1319. query error invalid input syntax for type range
  1320. SELECT '(1,1]]'::int8range;
  1321. query error invalid input syntax for type range
  1322. SELECT '[1,1]}'::int8range;
  1323. query error invalid input syntax for type range
  1324. SELECT '(1,1] ]'::int8range;
  1325. query error invalid input syntax for type range
  1326. SELECT '[1,1] }'::int8range;
  1327. statement ok
  1328. CREATE TABLE int8range_values (a int8range);
  1329. statement ok
  1330. INSERT INTO int8range_values VALUES
  1331. (null),
  1332. ('empty'),
  1333. ('[,1)'::int8range),
  1334. ('[,1]'::int8range),
  1335. ('[,)'::int8range),
  1336. ('[,]'::int8range),
  1337. ('(,1)'::int8range),
  1338. ('(,1]'::int8range),
  1339. ('(,)'::int8range),
  1340. ('(,]'::int8range),
  1341. ('[-1,1)'::int8range),
  1342. ('[-1,1]'::int8range),
  1343. ('(-1,1)'::int8range),
  1344. ('(-1,1]'::int8range),
  1345. ('[0,0)'::int8range),
  1346. ('[0,0]'::int8range),
  1347. ('(0,0)'::int8range),
  1348. ('(0,0]'::int8range),
  1349. ('[1,)'::int8range),
  1350. ('[1,]'::int8range),
  1351. ('(1,)'::int8range),
  1352. ('(1,]'::int8range);
  1353. query T
  1354. SELECT a AS t FROM int8range_values ORDER BY a;
  1355. ----
  1356. empty
  1357. empty
  1358. empty
  1359. empty
  1360. (,1)
  1361. (,1)
  1362. (,2)
  1363. (,2)
  1364. (,)
  1365. (,)
  1366. (,)
  1367. (,)
  1368. [-1,1)
  1369. [-1,2)
  1370. [0,1)
  1371. [0,1)
  1372. [0,2)
  1373. [1,)
  1374. [1,)
  1375. [2,)
  1376. [2,)
  1377. NULL
  1378. query T
  1379. SELECT a AS t FROM int8range_values EXCEPT SELECT column1 FROM (VALUES
  1380. (int8range(null,1)),
  1381. (int8range(null,1, '[]')),
  1382. (int8range(null,null)),
  1383. (int8range(null,null, '[]')),
  1384. (int8range(null,1, '()')),
  1385. (int8range(null,1, '(]')),
  1386. (int8range(null,null, '()')),
  1387. (int8range(null,null,'(]')),
  1388. (int8range(-1,1)),
  1389. (int8range(-1,1, '[]')),
  1390. (int8range(-1,1, '()')),
  1391. (int8range(-1,1,'(]')),
  1392. (int8range(0,0)),
  1393. (int8range(0,0, '[]')),
  1394. (int8range(0,0,'()')),
  1395. (int8range(0,0,'(]')),
  1396. (int8range(1,null)),
  1397. (int8range(1,null, '[]')),
  1398. (int8range(1,null,'()')),
  1399. (int8range(1,null,'(]'))
  1400. ) t;
  1401. ----
  1402. NULL
  1403. query error operator does not exist: int8range @> numeric
  1404. SELECT int8range(-1,1) @> 0.1;
  1405. query error operator does not exist: int8range @> double precision
  1406. SELECT int8range(-1,1) @> 0.1::float;
  1407. query error range constructor flags argument must not be null
  1408. SELECT int8range(1,2,null);
  1409. query error range constructor flags argument must not be null
  1410. SELECT int8range(null,null,null);
  1411. #
  1412. # int8range upper, lower
  1413. query TT
  1414. SELECT DISTINCT lower(a), upper(a) FROM int8range_values
  1415. ORDER BY 1, 2;
  1416. ----
  1417. -1
  1418. 1
  1419. -1
  1420. 2
  1421. 0
  1422. 1
  1423. 0
  1424. 2
  1425. 1
  1426. NULL
  1427. 2
  1428. NULL
  1429. NULL
  1430. 1
  1431. NULL
  1432. 2
  1433. NULL
  1434. NULL
  1435. # test that lower and upper roundtrip through range constructor function
  1436. query T
  1437. SELECT
  1438. a
  1439. FROM
  1440. int8range_values
  1441. WHERE
  1442. (NOT isempty(a))
  1443. AND (
  1444. a
  1445. != int8range(
  1446. lower(a),
  1447. upper(a),
  1448. CASE
  1449. WHEN lower_inc(a) THEN '['
  1450. ELSE '('
  1451. END
  1452. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  1453. )
  1454. );
  1455. ----
  1456. query T
  1457. SELECT DISTINCT a FROM int8range_values WHERE lower_inf(a) AND upper_inf(a);
  1458. ----
  1459. (,)
  1460. # Test range in list
  1461. query T
  1462. SELECT LIST['(,)', 'empty', '[-1,1]']::int8range list::text;
  1463. ----
  1464. {"(,)",empty,"[-1,2)"}
  1465. query T
  1466. SELECT '{"(,)","empty","[-1,1]"}'::int8range list::text;
  1467. ----
  1468. {"(,)",empty,"[-1,2)"}
  1469. # Test range in array
  1470. query T
  1471. SELECT ARRAY['(,)', 'empty', '[-1,1]']::_int8range;
  1472. ----
  1473. {"(,)",empty,"[-1,2)"}
  1474. query T
  1475. SELECT '{"(,)","empty","[-1,1]"}'::_int8range;
  1476. ----
  1477. {"(,)",empty,"[-1,2)"}
  1478. # Test builtin functions
  1479. query B
  1480. select '(,)'::int8range = '(,)'::int8range;
  1481. ----
  1482. true
  1483. query B
  1484. select '(,)'::int8range != 'empty'::int8range;
  1485. ----
  1486. true
  1487. query B
  1488. select '(,)'::int8range > 'empty'::int8range;
  1489. ----
  1490. true
  1491. query B
  1492. select '(,)'::int8range >= 'empty'::int8range;
  1493. ----
  1494. true
  1495. query B
  1496. select '(,)'::int8range < 'empty'::int8range;
  1497. ----
  1498. false
  1499. query B
  1500. select '(,)'::int8range <= 'empty'::int8range;
  1501. ----
  1502. false
  1503. statement ok
  1504. CREATE TABLE int8range_test_values (v int8range);
  1505. statement ok
  1506. INSERT INTO int8range_test_values VALUES ('empty'),
  1507. ('(,)'),
  1508. ('(,1)'),
  1509. ('(-1,)'),
  1510. ('[-1,1)'),
  1511. ('[-99,-50)'),
  1512. ('[50,99)');
  1513. #
  1514. # int8range contains
  1515. query TT
  1516. SELECT a t, array_agg(v ORDER BY v) FROM (
  1517. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1518. ) int8range_values(a), int8range_test_values WHERE a @> v GROUP BY a ORDER BY a;
  1519. ----
  1520. empty
  1521. {empty}
  1522. (,1)
  1523. {empty,"(,1)","[-99,-50)","[-1,1)"}
  1524. (,2)
  1525. {empty,"(,1)","[-99,-50)","[-1,1)"}
  1526. (,)
  1527. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  1528. [-1,1)
  1529. {empty,"[-1,1)"}
  1530. [-1,2)
  1531. {empty,"[-1,1)"}
  1532. [0,1)
  1533. {empty}
  1534. [0,2)
  1535. {empty}
  1536. [1,)
  1537. {empty,"[50,99)"}
  1538. [2,)
  1539. {empty,"[50,99)"}
  1540. #
  1541. # int8range contained by
  1542. query TT
  1543. SELECT a t, array_agg(v ORDER BY v) FROM (
  1544. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1545. ) int8range_values(a), int8range_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  1546. ----
  1547. empty
  1548. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  1549. (,1)
  1550. {"(,1)","(,)"}
  1551. (,2)
  1552. {"(,)"}
  1553. (,)
  1554. {"(,)"}
  1555. [-1,1)
  1556. {"(,1)","(,)","[-1,1)"}
  1557. [-1,2)
  1558. {"(,)"}
  1559. [0,1)
  1560. {"(,1)","(,)","[-1,1)","[0,)"}
  1561. [0,2)
  1562. {"(,)","[0,)"}
  1563. [1,)
  1564. {"(,)","[0,)"}
  1565. [2,)
  1566. {"(,)","[0,)"}
  1567. #
  1568. # int8range overlaps
  1569. query TT
  1570. SELECT a t, array_agg(v ORDER BY v) FROM (
  1571. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1572. ) int8range_values(a), int8range_test_values WHERE a && v GROUP BY a ORDER BY a;
  1573. ----
  1574. (,1)
  1575. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1576. (,2)
  1577. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1578. (,)
  1579. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)","[50,99)"}
  1580. [-1,1)
  1581. {"(,1)","(,)","[-1,1)","[0,)"}
  1582. [-1,2)
  1583. {"(,1)","(,)","[-1,1)","[0,)"}
  1584. [0,1)
  1585. {"(,1)","(,)","[-1,1)","[0,)"}
  1586. [0,2)
  1587. {"(,1)","(,)","[-1,1)","[0,)"}
  1588. [1,)
  1589. {"(,)","[0,)","[50,99)"}
  1590. [2,)
  1591. {"(,)","[0,)","[50,99)"}
  1592. #
  1593. # int8range before
  1594. query TT
  1595. SELECT a t, array_agg(v ORDER BY v) FROM (
  1596. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1597. ) int8range_values(a), int8range_test_values WHERE a << v GROUP BY a ORDER BY a;
  1598. ----
  1599. (,1)
  1600. {"[50,99)"}
  1601. (,2)
  1602. {"[50,99)"}
  1603. [-1,1)
  1604. {"[50,99)"}
  1605. [-1,2)
  1606. {"[50,99)"}
  1607. [0,1)
  1608. {"[50,99)"}
  1609. [0,2)
  1610. {"[50,99)"}
  1611. #
  1612. # int8range after
  1613. query TT
  1614. SELECT a t, array_agg(v ORDER BY v) FROM (
  1615. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1616. ) int8range_values(a), int8range_test_values WHERE a >> v GROUP BY a ORDER BY a;
  1617. ----
  1618. [-1,1)
  1619. {"[-99,-50)"}
  1620. [-1,2)
  1621. {"[-99,-50)"}
  1622. [0,1)
  1623. {"[-99,-50)"}
  1624. [0,2)
  1625. {"[-99,-50)"}
  1626. [1,)
  1627. {"(,1)","[-99,-50)","[-1,1)"}
  1628. [2,)
  1629. {"(,1)","[-99,-50)","[-1,1)"}
  1630. #
  1631. # int8range overleft
  1632. query TT
  1633. SELECT a t, array_agg(v ORDER BY v) FROM (
  1634. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1635. ) int8range_values(a), int8range_test_values WHERE a &< v GROUP BY a ORDER BY a;
  1636. ----
  1637. (,1)
  1638. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  1639. (,2)
  1640. {"(,)","[0,)","[50,99)"}
  1641. (,)
  1642. {"(,)","[0,)"}
  1643. [-1,1)
  1644. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  1645. [-1,2)
  1646. {"(,)","[0,)","[50,99)"}
  1647. [0,1)
  1648. {"(,1)","(,)","[-1,1)","[0,)","[50,99)"}
  1649. [0,2)
  1650. {"(,)","[0,)","[50,99)"}
  1651. [1,)
  1652. {"(,)","[0,)"}
  1653. [2,)
  1654. {"(,)","[0,)"}
  1655. #
  1656. # int8range overright
  1657. query TT
  1658. SELECT a t, array_agg(v ORDER BY v) FROM (
  1659. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1660. ) int8range_values(a), int8range_test_values WHERE a &> v GROUP BY a ORDER BY a;
  1661. ----
  1662. (,1)
  1663. {"(,1)","(,)"}
  1664. (,2)
  1665. {"(,1)","(,)"}
  1666. (,)
  1667. {"(,1)","(,)"}
  1668. [-1,1)
  1669. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  1670. [-1,2)
  1671. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  1672. [0,1)
  1673. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1674. [0,2)
  1675. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1676. [1,)
  1677. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1678. [2,)
  1679. {"(,1)","(,)","[-99,-50)","[-1,1)","[0,)"}
  1680. #
  1681. # int8range adjacent
  1682. query TT
  1683. SELECT a t, array_agg(v ORDER BY v) FROM (
  1684. SELECT DISTINCT a FROM int8range_values WHERE a IS NOT NULL
  1685. ) int8range_values(a), int8range_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  1686. ----
  1687. [1,)
  1688. {"(,1)","[-1,1)"}
  1689. #
  1690. # int8range union
  1691. query T
  1692. SELECT null + 'empty'::int8range
  1693. ----
  1694. NULL
  1695. query T
  1696. SELECT 'empty'::int8range + 'empty'::int8range
  1697. ----
  1698. empty
  1699. query T
  1700. SELECT 'empty'::int8range + '(,-1)'::int8range
  1701. ----
  1702. (,-1)
  1703. query T
  1704. SELECT '(,-1)'::int8range + 'empty'::int8range
  1705. ----
  1706. (,-1)
  1707. query T
  1708. SELECT '(,-1)'::int8range + '(,-1)'::int8range
  1709. ----
  1710. (,-1)
  1711. query T
  1712. SELECT 'empty'::int8range + '[-2,2)'::int8range
  1713. ----
  1714. [-2,2)
  1715. query T
  1716. SELECT 'empty'::int8range + '[1,)'::int8range
  1717. ----
  1718. [1,)
  1719. query T
  1720. SELECT 'empty'::int8range + '(,)'::int8range
  1721. ----
  1722. (,)
  1723. query T
  1724. SELECT '(,-1)'::int8range + '[-2,2)'::int8range
  1725. ----
  1726. (,2)
  1727. query error result of range union would not be contiguous
  1728. SELECT '(,-1)'::int8range + '[1,)'::int8range
  1729. query T
  1730. SELECT '(,-1)'::int8range + '(,)'::int8range
  1731. ----
  1732. (,)
  1733. query T
  1734. SELECT '[-2,2)'::int8range + 'empty'::int8range
  1735. ----
  1736. [-2,2)
  1737. query T
  1738. SELECT '[-2,2)'::int8range + '(,-1)'::int8range
  1739. ----
  1740. (,2)
  1741. query T
  1742. SELECT '[-2,2)'::int8range + '[1,)'::int8range
  1743. ----
  1744. [-2,)
  1745. query T
  1746. SELECT '[-2,2)'::int8range + '(,)'::int8range
  1747. ----
  1748. (,)
  1749. query T
  1750. SELECT '[1,)'::int8range + 'empty'::int8range
  1751. ----
  1752. [1,)
  1753. query error result of range union would not be contiguous
  1754. SELECT '[1,)'::int8range + '(,-1)'::int8range
  1755. query T
  1756. SELECT '[1,)'::int8range + '[-2,2)'::int8range
  1757. ----
  1758. [-2,)
  1759. query T
  1760. SELECT '[1,)'::int8range + '(,)'::int8range
  1761. ----
  1762. (,)
  1763. query T
  1764. SELECT '(,)'::int8range + 'empty'::int8range
  1765. ----
  1766. (,)
  1767. query T
  1768. SELECT '(,)'::int8range + '(,-1)'::int8range
  1769. ----
  1770. (,)
  1771. query T
  1772. SELECT '(,)'::int8range + '[-2,2)'::int8range
  1773. ----
  1774. (,)
  1775. query T
  1776. SELECT '(,)'::int8range + '[1,)'::int8range
  1777. ----
  1778. (,)
  1779. #
  1780. # int8range intersection
  1781. query T
  1782. SELECT null * 'empty'::int8range
  1783. ----
  1784. NULL
  1785. query T
  1786. SELECT 'empty'::int8range * 'empty'::int8range
  1787. ----
  1788. empty
  1789. query T
  1790. SELECT 'empty'::int8range * '(,-1)'::int8range
  1791. ----
  1792. empty
  1793. query T
  1794. SELECT '(,-1)'::int8range * 'empty'::int8range
  1795. ----
  1796. empty
  1797. query T
  1798. SELECT '(,-1)'::int8range * '(,-1)'::int8range
  1799. ----
  1800. (,-1)
  1801. query T
  1802. SELECT 'empty'::int8range * '[-2,2)'::int8range
  1803. ----
  1804. empty
  1805. query T
  1806. SELECT 'empty'::int8range * '[1,)'::int8range
  1807. ----
  1808. empty
  1809. query T
  1810. SELECT 'empty'::int8range * '(,)'::int8range
  1811. ----
  1812. empty
  1813. query T
  1814. SELECT '(,-1)'::int8range * '[-2,2)'::int8range
  1815. ----
  1816. [-2,-1)
  1817. query T
  1818. SELECT '(,-1)'::int8range * '[1,)'::int8range
  1819. ----
  1820. empty
  1821. query T
  1822. SELECT '(,-1)'::int8range * '(,)'::int8range
  1823. ----
  1824. (,-1)
  1825. query T
  1826. SELECT '[-2,2)'::int8range * 'empty'::int8range
  1827. ----
  1828. empty
  1829. query T
  1830. SELECT '[-2,2)'::int8range * '(,-1)'::int8range
  1831. ----
  1832. [-2,-1)
  1833. query T
  1834. SELECT '[-2,2)'::int8range * '[1,)'::int8range
  1835. ----
  1836. [1,2)
  1837. query T
  1838. SELECT '[-2,2)'::int8range * '(,)'::int8range
  1839. ----
  1840. [-2,2)
  1841. query T
  1842. SELECT '[1,)'::int8range * 'empty'::int8range
  1843. ----
  1844. empty
  1845. query T
  1846. SELECT '[1,)'::int8range * '(,-1)'::int8range
  1847. ----
  1848. empty
  1849. query T
  1850. SELECT '[1,)'::int8range * '[-2,2)'::int8range
  1851. ----
  1852. [1,2)
  1853. query T
  1854. SELECT '[1,)'::int8range * '(,)'::int8range
  1855. ----
  1856. [1,)
  1857. query T
  1858. SELECT '(,)'::int8range * 'empty'::int8range
  1859. ----
  1860. empty
  1861. query T
  1862. SELECT '(,)'::int8range * '(,-1)'::int8range
  1863. ----
  1864. (,-1)
  1865. query T
  1866. SELECT '(,)'::int8range * '[-2,2)'::int8range
  1867. ----
  1868. [-2,2)
  1869. query T
  1870. SELECT '(,)'::int8range * '[1,)'::int8range
  1871. ----
  1872. [1,)
  1873. #
  1874. # int8range difference
  1875. query T
  1876. SELECT null - 'empty'::int8range
  1877. ----
  1878. NULL
  1879. query T
  1880. SELECT 'empty'::int8range - 'empty'::int8range
  1881. ----
  1882. empty
  1883. query T
  1884. SELECT 'empty'::int8range - '(,-1)'::int8range
  1885. ----
  1886. empty
  1887. query T
  1888. SELECT '(,-1)'::int8range - 'empty'::int8range
  1889. ----
  1890. (,-1)
  1891. query T
  1892. SELECT '(,-1)'::int8range - '(,-1)'::int8range
  1893. ----
  1894. empty
  1895. query T
  1896. SELECT 'empty'::int8range - '[-2,2)'::int8range
  1897. ----
  1898. empty
  1899. query T
  1900. SELECT 'empty'::int8range - '[1,)'::int8range
  1901. ----
  1902. empty
  1903. query T
  1904. SELECT 'empty'::int8range - '(,)'::int8range
  1905. ----
  1906. empty
  1907. query T
  1908. SELECT '(,-1)'::int8range - '[-2,2)'::int8range
  1909. ----
  1910. (,-2)
  1911. query T
  1912. SELECT '(,-1)'::int8range - '[1,)'::int8range
  1913. ----
  1914. (,-1)
  1915. query T
  1916. SELECT '(,-1)'::int8range - '(,)'::int8range
  1917. ----
  1918. empty
  1919. query T
  1920. SELECT '[-2,2)'::int8range - 'empty'::int8range
  1921. ----
  1922. [-2,2)
  1923. query T
  1924. SELECT '[-2,2)'::int8range - '(,-1)'::int8range
  1925. ----
  1926. [-1,2)
  1927. query T
  1928. SELECT '[-2,2)'::int8range - '[1,)'::int8range
  1929. ----
  1930. [-2,1)
  1931. query T
  1932. SELECT '[-2,2)'::int8range - '(,)'::int8range
  1933. ----
  1934. empty
  1935. query T
  1936. SELECT '[1,)'::int8range - 'empty'::int8range
  1937. ----
  1938. [1,)
  1939. query T
  1940. SELECT '[1,)'::int8range - '(,-1)'::int8range
  1941. ----
  1942. [1,)
  1943. query T
  1944. SELECT '[1,)'::int8range - '[-2,2)'::int8range
  1945. ----
  1946. [2,)
  1947. query T
  1948. SELECT '[1,)'::int8range - '(,)'::int8range
  1949. ----
  1950. empty
  1951. query T
  1952. SELECT '(,)'::int8range - 'empty'::int8range
  1953. ----
  1954. (,)
  1955. query T
  1956. SELECT '(,)'::int8range - '(,-1)'::int8range
  1957. ----
  1958. [-1,)
  1959. query error result of range difference would not be contiguous
  1960. SELECT '(,)'::int8range - '[-2,2)'::int8range
  1961. query T
  1962. SELECT '(,)'::int8range - '[1,)'::int8range
  1963. ----
  1964. (,1)
  1965. #
  1966. # daterange
  1967. query T
  1968. select '[1970-01-01,62143-12-30)'::daterange;
  1969. ----
  1970. [1970-01-01,62143-12-30)
  1971. query T
  1972. select pg_typeof('[1970-01-01,62143-12-30)'::daterange);
  1973. ----
  1974. daterange
  1975. query T
  1976. select 'empty'::daterange;
  1977. ----
  1978. empty
  1979. query T
  1980. select pg_typeof('empty'::daterange);
  1981. ----
  1982. daterange
  1983. query T
  1984. select null::daterange
  1985. ----
  1986. NULL
  1987. # Test incrementing max date
  1988. query error date out of range
  1989. SELECT daterange(('0001-01-01'::date + '262141years 11months 30days'::interval)::date, null, '()');
  1990. #parameterized input
  1991. query T
  1992. SELECT '(,)'::daterange;
  1993. ----
  1994. (,)
  1995. query T
  1996. SELECT '(,1969-12-31)'::daterange;
  1997. ----
  1998. (,1969-12-31)
  1999. query T
  2000. SELECT '(,1970-01-01)'::daterange;
  2001. ----
  2002. (,1970-01-01)
  2003. query T
  2004. SELECT '(,1970-01-02)'::daterange;
  2005. ----
  2006. (,1970-01-02)
  2007. query T
  2008. SELECT '(,]'::daterange;
  2009. ----
  2010. (,)
  2011. query T
  2012. SELECT '(,1969-12-31]'::daterange;
  2013. ----
  2014. (,1970-01-01)
  2015. query T
  2016. SELECT '(,1970-01-01]'::daterange;
  2017. ----
  2018. (,1970-01-02)
  2019. query T
  2020. SELECT '(,1970-01-02]'::daterange;
  2021. ----
  2022. (,1970-01-03)
  2023. query T
  2024. SELECT '(1969-12-31,)'::daterange;
  2025. ----
  2026. [1970-01-01,)
  2027. query T
  2028. SELECT '(1969-12-31,1969-12-31)'::daterange;
  2029. ----
  2030. empty
  2031. query T
  2032. SELECT '(1969-12-31,1970-01-01)'::daterange;
  2033. ----
  2034. empty
  2035. query T
  2036. SELECT '(1969-12-31,1970-01-02)'::daterange;
  2037. ----
  2038. [1970-01-01,1970-01-02)
  2039. query T
  2040. SELECT '(1969-12-31,]'::daterange;
  2041. ----
  2042. [1970-01-01,)
  2043. query T
  2044. SELECT '(1969-12-31,1969-12-31]'::daterange;
  2045. ----
  2046. empty
  2047. query T
  2048. SELECT '(1969-12-31,1970-01-01]'::daterange;
  2049. ----
  2050. [1970-01-01,1970-01-02)
  2051. query T
  2052. SELECT '(1969-12-31,1970-01-02]'::daterange;
  2053. ----
  2054. [1970-01-01,1970-01-03)
  2055. query T
  2056. SELECT '(1970-01-01,)'::daterange;
  2057. ----
  2058. [1970-01-02,)
  2059. query error lower bound must be less than or equal to range upper bound
  2060. SELECT '(1970-01-01,1969-12-31)'::daterange;
  2061. query T
  2062. SELECT '(1970-01-01,1970-01-01)'::daterange;
  2063. ----
  2064. empty
  2065. query T
  2066. SELECT '(1970-01-01,1970-01-02)'::daterange;
  2067. ----
  2068. empty
  2069. query T
  2070. SELECT '(1970-01-01,]'::daterange;
  2071. ----
  2072. [1970-01-02,)
  2073. query error lower bound must be less than or equal to range upper bound
  2074. SELECT '(1970-01-01,1969-12-31]'::daterange;
  2075. query T
  2076. SELECT '(1970-01-01,1970-01-01]'::daterange;
  2077. ----
  2078. empty
  2079. query T
  2080. SELECT '(1970-01-01,1970-01-02]'::daterange;
  2081. ----
  2082. [1970-01-02,1970-01-03)
  2083. query T
  2084. SELECT '(1970-01-02,)'::daterange;
  2085. ----
  2086. [1970-01-03,)
  2087. query error lower bound must be less than or equal to range upper bound
  2088. SELECT '(1970-01-02,1969-12-31)'::daterange;
  2089. query error lower bound must be less than or equal to range upper bound
  2090. SELECT '(1970-01-02,1970-01-01)'::daterange;
  2091. query T
  2092. SELECT '(1970-01-02,1970-01-02)'::daterange;
  2093. ----
  2094. empty
  2095. query T
  2096. SELECT '(1970-01-02,]'::daterange;
  2097. ----
  2098. [1970-01-03,)
  2099. query error lower bound must be less than or equal to range upper bound
  2100. SELECT '(1970-01-02,1969-12-31]'::daterange;
  2101. query error lower bound must be less than or equal to range upper bound
  2102. SELECT '(1970-01-02,1970-01-01]'::daterange;
  2103. query T
  2104. SELECT '(1970-01-02,1970-01-02]'::daterange;
  2105. ----
  2106. empty
  2107. query T
  2108. SELECT '[,)'::daterange;
  2109. ----
  2110. (,)
  2111. query T
  2112. SELECT '[,1969-12-31)'::daterange;
  2113. ----
  2114. (,1969-12-31)
  2115. query T
  2116. SELECT '[,1970-01-01)'::daterange;
  2117. ----
  2118. (,1970-01-01)
  2119. query T
  2120. SELECT '[,1970-01-02)'::daterange;
  2121. ----
  2122. (,1970-01-02)
  2123. query T
  2124. SELECT '[,]'::daterange;
  2125. ----
  2126. (,)
  2127. query T
  2128. SELECT '[,1969-12-31]'::daterange;
  2129. ----
  2130. (,1970-01-01)
  2131. query T
  2132. SELECT '[,1970-01-01]'::daterange;
  2133. ----
  2134. (,1970-01-02)
  2135. query T
  2136. SELECT '[,1970-01-02]'::daterange;
  2137. ----
  2138. (,1970-01-03)
  2139. query T
  2140. SELECT '[1969-12-31,)'::daterange;
  2141. ----
  2142. [1969-12-31,)
  2143. query T
  2144. SELECT '[1969-12-31,1969-12-31)'::daterange;
  2145. ----
  2146. empty
  2147. query T
  2148. SELECT '[1969-12-31,1970-01-01)'::daterange;
  2149. ----
  2150. [1969-12-31,1970-01-01)
  2151. query T
  2152. SELECT '[1969-12-31,1970-01-02)'::daterange;
  2153. ----
  2154. [1969-12-31,1970-01-02)
  2155. query T
  2156. SELECT '[1969-12-31,]'::daterange;
  2157. ----
  2158. [1969-12-31,)
  2159. query T
  2160. SELECT '[1969-12-31,1969-12-31]'::daterange;
  2161. ----
  2162. [1969-12-31,1970-01-01)
  2163. query T
  2164. SELECT '[1969-12-31,1970-01-01]'::daterange;
  2165. ----
  2166. [1969-12-31,1970-01-02)
  2167. query T
  2168. SELECT '[1969-12-31,1970-01-02]'::daterange;
  2169. ----
  2170. [1969-12-31,1970-01-03)
  2171. query T
  2172. SELECT '[1970-01-01,)'::daterange;
  2173. ----
  2174. [1970-01-01,)
  2175. query error lower bound must be less than or equal to range upper bound
  2176. SELECT '[1970-01-01,1969-12-31)'::daterange;
  2177. query T
  2178. SELECT '[1970-01-01,1970-01-01)'::daterange;
  2179. ----
  2180. empty
  2181. query T
  2182. SELECT '[1970-01-01,1970-01-02)'::daterange;
  2183. ----
  2184. [1970-01-01,1970-01-02)
  2185. query T
  2186. SELECT '[1970-01-01,]'::daterange;
  2187. ----
  2188. [1970-01-01,)
  2189. query error lower bound must be less than or equal to range upper bound
  2190. SELECT '[1970-01-01,1969-12-31]'::daterange;
  2191. query T
  2192. SELECT '[1970-01-01,1970-01-01]'::daterange;
  2193. ----
  2194. [1970-01-01,1970-01-02)
  2195. query T
  2196. SELECT '[1970-01-01,1970-01-02]'::daterange;
  2197. ----
  2198. [1970-01-01,1970-01-03)
  2199. query T
  2200. SELECT '[1970-01-02,)'::daterange;
  2201. ----
  2202. [1970-01-02,)
  2203. query error lower bound must be less than or equal to range upper bound
  2204. SELECT '[1970-01-02,1969-12-31)'::daterange;
  2205. query error lower bound must be less than or equal to range upper bound
  2206. SELECT '[1970-01-02,1970-01-01)'::daterange;
  2207. query T
  2208. SELECT '[1970-01-02,1970-01-02)'::daterange;
  2209. ----
  2210. empty
  2211. query T
  2212. SELECT '[1970-01-02,]'::daterange;
  2213. ----
  2214. [1970-01-02,)
  2215. query error lower bound must be less than or equal to range upper bound
  2216. SELECT '[1970-01-02,1969-12-31]'::daterange;
  2217. query error lower bound must be less than or equal to range upper bound
  2218. SELECT '[1970-01-02,1970-01-01]'::daterange;
  2219. query T
  2220. SELECT '[1970-01-02,1970-01-02]'::daterange;
  2221. ----
  2222. [1970-01-02,1970-01-03)
  2223. # Whitespace handling
  2224. query T
  2225. SELECT
  2226. DISTINCT column1::daterange
  2227. FROM
  2228. (
  2229. VALUES
  2230. (' empty'),
  2231. ('empty '),
  2232. (' [1970-01-01,)'),
  2233. ('[ 1970-01-01,)'),
  2234. ('[1970-01-01 ,)'),
  2235. ('[ 1970-01-01 ,)'),
  2236. ('[1970-01-01, 1970-01-01)'),
  2237. ('[1970-01-01,1970-01-01 )'),
  2238. ('[1970-01-01, 1970-01-01 )'),
  2239. ('[1970-01-01,) '),
  2240. (' (,1970-01-01)'),
  2241. ('(, 1970-01-01)'),
  2242. (' (,) ')
  2243. ) t;
  2244. ----
  2245. empty
  2246. (,)
  2247. (,1970-01-01)
  2248. [1970-01-01,)
  2249. # Input errors
  2250. query error invalid input syntax for type range
  2251. SELECT '[1,)'::daterange
  2252. query error invalid input syntax for type range
  2253. SELECT '(,1)'::daterange
  2254. statement ok
  2255. CREATE TABLE daterange_values (a daterange);
  2256. statement ok
  2257. INSERT INTO daterange_values VALUES
  2258. (null),
  2259. ('empty'),
  2260. ('[,)'::daterange),
  2261. ('[,1970-01-01]'::daterange),
  2262. ('[,)'::daterange),
  2263. ('[,]'::daterange),
  2264. ('(,1970-01-01)'::daterange),
  2265. ('(,1970-01-01]'::daterange),
  2266. ('(,)'::daterange),
  2267. ('(,]'::daterange),
  2268. ('[1969-12-31,1970-01-01)'::daterange),
  2269. ('[1969-12-31,1970-01-01]'::daterange),
  2270. ('(1969-12-31,1970-01-01)'::daterange),
  2271. ('(1969-12-31,1970-01-01]'::daterange),
  2272. ('[1970-01-01,)'::daterange),
  2273. ('[1970-01-01,]'::daterange),
  2274. ('(1970-01-01,)'::daterange),
  2275. ('(1970-01-01,]'::daterange);
  2276. query T
  2277. SELECT a AS t FROM daterange_values ORDER BY a;
  2278. ----
  2279. empty
  2280. empty
  2281. (,1970-01-01)
  2282. (,1970-01-02)
  2283. (,1970-01-02)
  2284. (,)
  2285. (,)
  2286. (,)
  2287. (,)
  2288. (,)
  2289. [1969-12-31,1970-01-01)
  2290. [1969-12-31,1970-01-02)
  2291. [1970-01-01,1970-01-02)
  2292. [1970-01-01,)
  2293. [1970-01-01,)
  2294. [1970-01-02,)
  2295. [1970-01-02,)
  2296. NULL
  2297. mode cockroach
  2298. #
  2299. # daterange upper, lower
  2300. query TT rowsort
  2301. SELECT DISTINCT lower(a), upper(a) FROM daterange_values;
  2302. ----
  2303. NULL NULL
  2304. NULL 1970-01-01
  2305. NULL 1970-01-02
  2306. 1970-01-01 NULL
  2307. 1970-01-02 NULL
  2308. 1969-12-31 1970-01-01
  2309. 1969-12-31 1970-01-02
  2310. 1970-01-01 1970-01-02
  2311. mode standard
  2312. # test that lower and upper roundtrip through range constructor function
  2313. query T
  2314. SELECT
  2315. a
  2316. FROM
  2317. daterange_values
  2318. WHERE
  2319. (NOT isempty(a))
  2320. AND (
  2321. a
  2322. != daterange(
  2323. lower(a),
  2324. upper(a),
  2325. CASE
  2326. WHEN lower_inc(a) THEN '['
  2327. ELSE '('
  2328. END
  2329. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  2330. )
  2331. );
  2332. ----
  2333. query T
  2334. SELECT DISTINCT a FROM daterange_values WHERE lower_inf(a) AND upper_inf(a);
  2335. ----
  2336. (,)
  2337. query T
  2338. SELECT a AS t FROM daterange_values EXCEPT SELECT column1 FROM (VALUES
  2339. (daterange(null,'1970-01-01')),
  2340. (daterange(null,'1970-01-01', '[]')),
  2341. (daterange(null,null)),
  2342. (daterange(null,null, '[]')),
  2343. (daterange(null,'1970-01-01', '()')),
  2344. (daterange(null,'1970-01-01', '(]')),
  2345. (daterange(null,null, '()')),
  2346. (daterange(null,null,'(]')),
  2347. (daterange('1969-12-31','1970-01-01')),
  2348. (daterange('1969-12-31','1970-01-01', '[]')),
  2349. (daterange('1969-12-31','1970-01-01', '()')),
  2350. (daterange('1969-12-31','1970-01-01','(]')),
  2351. (daterange('1970-01-01',null)),
  2352. (daterange('1970-01-01',null, '[]')),
  2353. (daterange('1970-01-01',null,'()')),
  2354. (daterange('1970-01-01',null,'(]'))
  2355. ) t;
  2356. ----
  2357. NULL
  2358. query error range constructor flags argument must not be null
  2359. SELECT daterange('1970-01-01','1970-01-01',null);
  2360. query error range constructor flags argument must not be null
  2361. SELECT daterange(null,null,null);
  2362. # Test range in list
  2363. query T
  2364. SELECT LIST['(,)', 'empty', '[1970-01-01,1970-01-03]']::daterange list::text;
  2365. ----
  2366. {"(,)",empty,"[1970-01-01,1970-01-04)"}
  2367. query T
  2368. SELECT '{"(,)","empty","[1970-01-01,1970-01-03]"}'::daterange list::text;
  2369. ----
  2370. {"(,)",empty,"[1970-01-01,1970-01-04)"}
  2371. # Test range in array
  2372. query T
  2373. SELECT ARRAY['(,)', 'empty', '[1970-01-01,1970-01-03]']::_daterange;
  2374. ----
  2375. {"(,)",empty,"[1970-01-01,1970-01-04)"}
  2376. query T
  2377. SELECT '{"(,)","empty","[1970-01-01,1970-01-03]"}'::_daterange;
  2378. ----
  2379. {"(,)",empty,"[1970-01-01,1970-01-04)"}
  2380. # Test builtin functions
  2381. query B
  2382. select '(,)'::daterange = '(,)'::daterange;
  2383. ----
  2384. true
  2385. query B
  2386. select '(,)'::daterange != 'empty'::daterange;
  2387. ----
  2388. true
  2389. query B
  2390. select '(,)'::daterange > 'empty'::daterange;
  2391. ----
  2392. true
  2393. query B
  2394. select '(,)'::daterange >= 'empty'::daterange;
  2395. ----
  2396. true
  2397. query B
  2398. select '(,)'::daterange < 'empty'::daterange;
  2399. ----
  2400. false
  2401. query B
  2402. select '(,)'::daterange <= 'empty'::daterange;
  2403. ----
  2404. false
  2405. statement ok
  2406. CREATE TABLE daterange_test_values (v daterange);
  2407. statement ok
  2408. INSERT INTO daterange_test_values VALUES ('empty'),
  2409. ('(,)'),
  2410. ('(,1970-01-02)'),
  2411. ('(1969-12-31,)'),
  2412. ('[1969-12-31,1970-01-02)'),
  2413. ('[1969-01-01,1969-01-02)'),
  2414. ('[1971-01-01,1971-01-02)');
  2415. #
  2416. # daterange contains
  2417. query TT
  2418. SELECT a t, array_agg(v ORDER BY v) FROM (
  2419. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2420. ) daterange_values(a), daterange_test_values WHERE a @> v GROUP BY a ORDER BY a;
  2421. ----
  2422. empty
  2423. {empty}
  2424. (,1970-01-01)
  2425. {empty,"[1969-01-01,1969-01-02)"}
  2426. (,1970-01-02)
  2427. {empty,"(,1970-01-02)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)"}
  2428. (,)
  2429. {empty,"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2430. [1969-12-31,1970-01-01)
  2431. {empty}
  2432. [1969-12-31,1970-01-02)
  2433. {empty,"[1969-12-31,1970-01-02)"}
  2434. [1970-01-01,1970-01-02)
  2435. {empty}
  2436. [1970-01-01,)
  2437. {empty,"[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2438. [1970-01-02,)
  2439. {empty,"[1971-01-01,1971-01-02)"}
  2440. #
  2441. # daterange contained by
  2442. query TT
  2443. SELECT a t, array_agg(v ORDER BY v) FROM (
  2444. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2445. ) daterange_values(a), daterange_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  2446. ----
  2447. empty
  2448. {empty,"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2449. (,1970-01-01)
  2450. {"(,1970-01-02)","(,)"}
  2451. (,1970-01-02)
  2452. {"(,1970-01-02)","(,)"}
  2453. (,)
  2454. {"(,)"}
  2455. [1969-12-31,1970-01-01)
  2456. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)"}
  2457. [1969-12-31,1970-01-02)
  2458. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)"}
  2459. [1970-01-01,1970-01-02)
  2460. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2461. [1970-01-01,)
  2462. {"(,)","[1970-01-01,)"}
  2463. [1970-01-02,)
  2464. {"(,)","[1970-01-01,)"}
  2465. #
  2466. # daterange overlaps
  2467. query TT
  2468. SELECT a t, array_agg(v ORDER BY v) FROM (
  2469. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2470. ) daterange_values(a), daterange_test_values WHERE a && v GROUP BY a ORDER BY a;
  2471. ----
  2472. (,1970-01-01)
  2473. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)"}
  2474. (,1970-01-02)
  2475. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2476. (,)
  2477. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2478. [1969-12-31,1970-01-01)
  2479. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)"}
  2480. [1969-12-31,1970-01-02)
  2481. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2482. [1970-01-01,1970-01-02)
  2483. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2484. [1970-01-01,)
  2485. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2486. [1970-01-02,)
  2487. {"(,)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2488. #
  2489. # daterange before
  2490. query TT
  2491. SELECT a t, array_agg(v ORDER BY v) FROM (
  2492. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2493. ) daterange_values(a), daterange_test_values WHERE a << v GROUP BY a ORDER BY a;
  2494. ----
  2495. (,1970-01-01)
  2496. {"[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2497. (,1970-01-02)
  2498. {"[1971-01-01,1971-01-02)"}
  2499. [1969-12-31,1970-01-01)
  2500. {"[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2501. [1969-12-31,1970-01-02)
  2502. {"[1971-01-01,1971-01-02)"}
  2503. [1970-01-01,1970-01-02)
  2504. {"[1971-01-01,1971-01-02)"}
  2505. #
  2506. # daterange after
  2507. query TT
  2508. SELECT a t, array_agg(v ORDER BY v) FROM (
  2509. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2510. ) daterange_values(a), daterange_test_values WHERE a >> v GROUP BY a ORDER BY a;
  2511. ----
  2512. [1969-12-31,1970-01-01)
  2513. {"[1969-01-01,1969-01-02)"}
  2514. [1969-12-31,1970-01-02)
  2515. {"[1969-01-01,1969-01-02)"}
  2516. [1970-01-01,1970-01-02)
  2517. {"[1969-01-01,1969-01-02)"}
  2518. [1970-01-01,)
  2519. {"[1969-01-01,1969-01-02)"}
  2520. [1970-01-02,)
  2521. {"(,1970-01-02)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)"}
  2522. #
  2523. # daterange overleft
  2524. query TT
  2525. SELECT a t, array_agg(v ORDER BY v) FROM (
  2526. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2527. ) daterange_values(a), daterange_test_values WHERE a &< v GROUP BY a ORDER BY a;
  2528. ----
  2529. (,1970-01-01)
  2530. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2531. (,1970-01-02)
  2532. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2533. (,)
  2534. {"(,)","[1970-01-01,)"}
  2535. [1969-12-31,1970-01-01)
  2536. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2537. [1969-12-31,1970-01-02)
  2538. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2539. [1970-01-01,1970-01-02)
  2540. {"(,1970-01-02)","(,)","[1969-12-31,1970-01-02)","[1970-01-01,)","[1971-01-01,1971-01-02)"}
  2541. [1970-01-01,)
  2542. {"(,)","[1970-01-01,)"}
  2543. [1970-01-02,)
  2544. {"(,)","[1970-01-01,)"}
  2545. #
  2546. # daterange overright
  2547. query TT
  2548. SELECT a t, array_agg(v ORDER BY v) FROM (
  2549. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2550. ) daterange_values(a), daterange_test_values WHERE a &> v GROUP BY a ORDER BY a;
  2551. ----
  2552. (,1970-01-01)
  2553. {"(,1970-01-02)","(,)"}
  2554. (,1970-01-02)
  2555. {"(,1970-01-02)","(,)"}
  2556. (,)
  2557. {"(,1970-01-02)","(,)"}
  2558. [1969-12-31,1970-01-01)
  2559. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)"}
  2560. [1969-12-31,1970-01-02)
  2561. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)"}
  2562. [1970-01-01,1970-01-02)
  2563. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2564. [1970-01-01,)
  2565. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2566. [1970-01-02,)
  2567. {"(,1970-01-02)","(,)","[1969-01-01,1969-01-02)","[1969-12-31,1970-01-02)","[1970-01-01,)"}
  2568. #
  2569. # daterange adjacent
  2570. query TT
  2571. SELECT a t, array_agg(v ORDER BY v) FROM (
  2572. SELECT DISTINCT a FROM daterange_values WHERE a IS NOT NULL
  2573. ) daterange_values(a), daterange_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  2574. ----
  2575. (,1970-01-01)
  2576. {"[1970-01-01,)"}
  2577. [1969-12-31,1970-01-01)
  2578. {"[1970-01-01,)"}
  2579. [1970-01-02,)
  2580. {"(,1970-01-02)","[1969-12-31,1970-01-02)"}
  2581. #
  2582. # daterange union
  2583. query T
  2584. SELECT 'empty'::daterange + 'empty'::daterange
  2585. ----
  2586. empty
  2587. query T
  2588. SELECT 'empty'::daterange + '(,1969-12-31)'::daterange
  2589. ----
  2590. (,1969-12-31)
  2591. query T
  2592. SELECT '(,1969-12-31)'::daterange + 'empty'::daterange
  2593. ----
  2594. (,1969-12-31)
  2595. query T
  2596. SELECT '(,1969-12-31)'::daterange + '(,1969-12-31)'::daterange
  2597. ----
  2598. (,1969-12-31)
  2599. query T
  2600. SELECT 'empty'::daterange + '[1969-12-30,1970-01-03)'::daterange
  2601. ----
  2602. [1969-12-30,1970-01-03)
  2603. query T
  2604. SELECT 'empty'::daterange + '[1970-01-02,)'::daterange
  2605. ----
  2606. [1970-01-02,)
  2607. query T
  2608. SELECT 'empty'::daterange + '(,)'::daterange
  2609. ----
  2610. (,)
  2611. query T
  2612. SELECT '(,1969-12-31)'::daterange + '[1969-12-30,1970-01-03)'::daterange
  2613. ----
  2614. (,1970-01-03)
  2615. query error result of range union would not be contiguous
  2616. SELECT '(,1969-12-31)'::daterange + '[1970-01-02,)'::daterange
  2617. query T
  2618. SELECT '(,1969-12-31)'::daterange + '(,)'::daterange
  2619. ----
  2620. (,)
  2621. query T
  2622. SELECT '[1969-12-30,1970-01-03)'::daterange + 'empty'::daterange
  2623. ----
  2624. [1969-12-30,1970-01-03)
  2625. query T
  2626. SELECT '[1969-12-30,1970-01-03)'::daterange + '(,1969-12-31)'::daterange
  2627. ----
  2628. (,1970-01-03)
  2629. query T
  2630. SELECT '[1969-12-30,1970-01-03)'::daterange + '[1970-01-02,)'::daterange
  2631. ----
  2632. [1969-12-30,)
  2633. query T
  2634. SELECT '[1969-12-30,1970-01-03)'::daterange + '(,)'::daterange
  2635. ----
  2636. (,)
  2637. query T
  2638. SELECT '[1970-01-02,)'::daterange + 'empty'::daterange
  2639. ----
  2640. [1970-01-02,)
  2641. query error result of range union would not be contiguous
  2642. SELECT '[1970-01-02,)'::daterange + '(,1969-12-31)'::daterange
  2643. query T
  2644. SELECT '[1970-01-02,)'::daterange + '[1969-12-30,1970-01-03)'::daterange
  2645. ----
  2646. [1969-12-30,)
  2647. query T
  2648. SELECT '[1970-01-02,)'::daterange + '(,)'::daterange
  2649. ----
  2650. (,)
  2651. query T
  2652. SELECT '(,)'::daterange + 'empty'::daterange
  2653. ----
  2654. (,)
  2655. query T
  2656. SELECT '(,)'::daterange + '(,1969-12-31)'::daterange
  2657. ----
  2658. (,)
  2659. query T
  2660. SELECT '(,)'::daterange + '[1969-12-30,1970-01-03)'::daterange
  2661. ----
  2662. (,)
  2663. query T
  2664. SELECT '(,)'::daterange + '[1970-01-02,)'::daterange
  2665. ----
  2666. (,)
  2667. #
  2668. # daterange intersection
  2669. query T
  2670. SELECT 'empty'::daterange * 'empty'::daterange
  2671. ----
  2672. empty
  2673. query T
  2674. SELECT 'empty'::daterange * '(,1969-12-31)'::daterange
  2675. ----
  2676. empty
  2677. query T
  2678. SELECT '(,1969-12-31)'::daterange * 'empty'::daterange
  2679. ----
  2680. empty
  2681. query T
  2682. SELECT '(,1969-12-31)'::daterange * '(,1969-12-31)'::daterange
  2683. ----
  2684. (,1969-12-31)
  2685. query T
  2686. SELECT 'empty'::daterange * '[1969-12-30,1970-01-03)'::daterange
  2687. ----
  2688. empty
  2689. query T
  2690. SELECT 'empty'::daterange * '[1970-01-02,)'::daterange
  2691. ----
  2692. empty
  2693. query T
  2694. SELECT 'empty'::daterange * '(,)'::daterange
  2695. ----
  2696. empty
  2697. query T
  2698. SELECT '(,1969-12-31)'::daterange * '[1969-12-30,1970-01-03)'::daterange
  2699. ----
  2700. [1969-12-30,1969-12-31)
  2701. query T
  2702. SELECT '(,1969-12-31)'::daterange * '[1970-01-02,)'::daterange
  2703. ----
  2704. empty
  2705. query T
  2706. SELECT '(,1969-12-31)'::daterange * '(,)'::daterange
  2707. ----
  2708. (,1969-12-31)
  2709. query T
  2710. SELECT '[1969-12-30,1970-01-03)'::daterange * 'empty'::daterange
  2711. ----
  2712. empty
  2713. query T
  2714. SELECT '[1969-12-30,1970-01-03)'::daterange * '(,1969-12-31)'::daterange
  2715. ----
  2716. [1969-12-30,1969-12-31)
  2717. query T
  2718. SELECT '[1969-12-30,1970-01-03)'::daterange * '[1970-01-02,)'::daterange
  2719. ----
  2720. [1970-01-02,1970-01-03)
  2721. query T
  2722. SELECT '[1969-12-30,1970-01-03)'::daterange * '(,)'::daterange
  2723. ----
  2724. [1969-12-30,1970-01-03)
  2725. query T
  2726. SELECT '[1970-01-02,)'::daterange * 'empty'::daterange
  2727. ----
  2728. empty
  2729. query T
  2730. SELECT '[1970-01-02,)'::daterange * '(,1969-12-31)'::daterange
  2731. ----
  2732. empty
  2733. query T
  2734. SELECT '[1970-01-02,)'::daterange * '[1969-12-30,1970-01-03)'::daterange
  2735. ----
  2736. [1970-01-02,1970-01-03)
  2737. query T
  2738. SELECT '[1970-01-02,)'::daterange * '(,)'::daterange
  2739. ----
  2740. [1970-01-02,)
  2741. query T
  2742. SELECT '(,)'::daterange * 'empty'::daterange
  2743. ----
  2744. empty
  2745. query T
  2746. SELECT '(,)'::daterange * '(,1969-12-31)'::daterange
  2747. ----
  2748. (,1969-12-31)
  2749. query T
  2750. SELECT '(,)'::daterange * '[1969-12-30,1970-01-03)'::daterange
  2751. ----
  2752. [1969-12-30,1970-01-03)
  2753. query T
  2754. SELECT '(,)'::daterange * '[1970-01-02,)'::daterange
  2755. ----
  2756. [1970-01-02,)
  2757. #
  2758. # daterange difference
  2759. query T
  2760. SELECT 'empty'::daterange - 'empty'::daterange
  2761. ----
  2762. empty
  2763. query T
  2764. SELECT 'empty'::daterange - '(,1969-12-31)'::daterange
  2765. ----
  2766. empty
  2767. query T
  2768. SELECT '(,1969-12-31)'::daterange - 'empty'::daterange
  2769. ----
  2770. (,1969-12-31)
  2771. query T
  2772. SELECT '(,1969-12-31)'::daterange - '(,1969-12-31)'::daterange
  2773. ----
  2774. empty
  2775. query T
  2776. SELECT 'empty'::daterange - '[1969-12-30,1970-01-03)'::daterange
  2777. ----
  2778. empty
  2779. query T
  2780. SELECT 'empty'::daterange - '[1970-01-02,)'::daterange
  2781. ----
  2782. empty
  2783. query T
  2784. SELECT 'empty'::daterange - '(,)'::daterange
  2785. ----
  2786. empty
  2787. query T
  2788. SELECT '(,1969-12-31)'::daterange - '[1969-12-30,1970-01-03)'::daterange
  2789. ----
  2790. (,1969-12-30)
  2791. query T
  2792. SELECT '(,1969-12-31)'::daterange - '[1970-01-02,)'::daterange
  2793. ----
  2794. (,1969-12-31)
  2795. query T
  2796. SELECT '(,1969-12-31)'::daterange - '(,)'::daterange
  2797. ----
  2798. empty
  2799. query T
  2800. SELECT '[1969-12-30,1970-01-03)'::daterange - 'empty'::daterange
  2801. ----
  2802. [1969-12-30,1970-01-03)
  2803. query T
  2804. SELECT '[1969-12-30,1970-01-03)'::daterange - '(,1969-12-31)'::daterange
  2805. ----
  2806. [1969-12-31,1970-01-03)
  2807. query T
  2808. SELECT '[1969-12-30,1970-01-03)'::daterange - '[1970-01-02,)'::daterange
  2809. ----
  2810. [1969-12-30,1970-01-02)
  2811. query T
  2812. SELECT '[1969-12-30,1970-01-03)'::daterange - '(,)'::daterange
  2813. ----
  2814. empty
  2815. query T
  2816. SELECT '[1970-01-02,)'::daterange - 'empty'::daterange
  2817. ----
  2818. [1970-01-02,)
  2819. query T
  2820. SELECT '[1970-01-02,)'::daterange - '(,1969-12-31)'::daterange
  2821. ----
  2822. [1970-01-02,)
  2823. query T
  2824. SELECT '[1970-01-02,)'::daterange - '[1969-12-30,1970-01-03)'::daterange
  2825. ----
  2826. [1970-01-03,)
  2827. query T
  2828. SELECT '[1970-01-02,)'::daterange - '(,)'::daterange
  2829. ----
  2830. empty
  2831. query T
  2832. SELECT '(,)'::daterange - 'empty'::daterange
  2833. ----
  2834. (,)
  2835. query T
  2836. SELECT '(,)'::daterange - '(,1969-12-31)'::daterange
  2837. ----
  2838. [1969-12-31,)
  2839. query error result of range difference would not be contiguous
  2840. SELECT '(,)'::daterange - '[1969-12-30,1970-01-03)'::daterange
  2841. query T
  2842. SELECT '(,)'::daterange - '[1970-01-02,)'::daterange
  2843. ----
  2844. (,1970-01-02)
  2845. #
  2846. # numrange
  2847. query T
  2848. select '[0,100)'::numrange;
  2849. ----
  2850. [0,100)
  2851. query T
  2852. select pg_typeof('[0,100)'::numrange);
  2853. ----
  2854. numrange
  2855. query T
  2856. select 'empty'::numrange;
  2857. ----
  2858. empty
  2859. query T
  2860. select pg_typeof('empty'::numrange);
  2861. ----
  2862. numrange
  2863. query T
  2864. select null::numrange
  2865. ----
  2866. NULL
  2867. # Parameterized input on
  2868. # xjoin(["(","["],
  2869. # xjoin([null,-1,0,1],
  2870. # xjoin(
  2871. # [null,-1,0,1],
  2872. # ["),"]"]
  2873. # )
  2874. # )
  2875. # )
  2876. query T
  2877. SELECT '(,)'::numrange;
  2878. ----
  2879. (,)
  2880. query T
  2881. SELECT '(,-1)'::numrange;
  2882. ----
  2883. (,-1)
  2884. query T
  2885. SELECT '(,0)'::numrange;
  2886. ----
  2887. (,0)
  2888. query T
  2889. SELECT '(,1)'::numrange;
  2890. ----
  2891. (,1)
  2892. query T
  2893. SELECT '(,]'::numrange;
  2894. ----
  2895. (,)
  2896. query T
  2897. SELECT '(,-1]'::numrange;
  2898. ----
  2899. (,-1]
  2900. query T
  2901. SELECT '(,0]'::numrange;
  2902. ----
  2903. (,0]
  2904. query T
  2905. SELECT '(,1]'::numrange;
  2906. ----
  2907. (,1]
  2908. query T
  2909. SELECT '(-1,)'::numrange;
  2910. ----
  2911. (-1,)
  2912. query T
  2913. SELECT '(-1,-1)'::numrange;
  2914. ----
  2915. empty
  2916. query T
  2917. SELECT '(-1,0)'::numrange;
  2918. ----
  2919. (-1,0)
  2920. query T
  2921. SELECT '(-1,1)'::numrange;
  2922. ----
  2923. (-1,1)
  2924. query T
  2925. SELECT '(-1,]'::numrange;
  2926. ----
  2927. (-1,)
  2928. query T
  2929. SELECT '(-1,-1]'::numrange;
  2930. ----
  2931. empty
  2932. query T
  2933. SELECT '(-1,0]'::numrange;
  2934. ----
  2935. (-1,0]
  2936. query T
  2937. SELECT '(-1,1]'::numrange;
  2938. ----
  2939. (-1,1]
  2940. query T
  2941. SELECT '(0,)'::numrange;
  2942. ----
  2943. (0,)
  2944. query error range lower bound must be less than or equal to range upper bound
  2945. SELECT '(0,-1)'::numrange;
  2946. query T
  2947. SELECT '(0,0)'::numrange;
  2948. ----
  2949. empty
  2950. query T
  2951. SELECT '(0,1)'::numrange;
  2952. ----
  2953. (0,1)
  2954. query T
  2955. SELECT '(0,]'::numrange;
  2956. ----
  2957. (0,)
  2958. query error range lower bound must be less than or equal to range upper bound
  2959. SELECT '(0,-1]'::numrange;
  2960. query T
  2961. SELECT '(0,0]'::numrange;
  2962. ----
  2963. empty
  2964. query T
  2965. SELECT '(0,1]'::numrange;
  2966. ----
  2967. (0,1]
  2968. query T
  2969. SELECT '(1,)'::numrange;
  2970. ----
  2971. (1,)
  2972. query error range lower bound must be less than or equal to range upper bound
  2973. SELECT '(1,-1)'::numrange;
  2974. query error range lower bound must be less than or equal to range upper bound
  2975. SELECT '(1,0)'::numrange;
  2976. query T
  2977. SELECT '(1,1)'::numrange;
  2978. ----
  2979. empty
  2980. query T
  2981. SELECT '(1,]'::numrange;
  2982. ----
  2983. (1,)
  2984. query error range lower bound must be less than or equal to range upper bound
  2985. SELECT '(1,-1]'::numrange;
  2986. query error range lower bound must be less than or equal to range upper bound
  2987. SELECT '(1,0]'::numrange;
  2988. query T
  2989. SELECT '(1,1]'::numrange;
  2990. ----
  2991. empty
  2992. query T
  2993. SELECT '[,)'::numrange;
  2994. ----
  2995. (,)
  2996. query T
  2997. SELECT '[,-1)'::numrange;
  2998. ----
  2999. (,-1)
  3000. query T
  3001. SELECT '[,0)'::numrange;
  3002. ----
  3003. (,0)
  3004. query T
  3005. SELECT '[,1)'::numrange;
  3006. ----
  3007. (,1)
  3008. query T
  3009. SELECT '[,]'::numrange;
  3010. ----
  3011. (,)
  3012. query T
  3013. SELECT '[,-1]'::numrange;
  3014. ----
  3015. (,-1]
  3016. query T
  3017. SELECT '[,0]'::numrange;
  3018. ----
  3019. (,0]
  3020. query T
  3021. SELECT '[,1]'::numrange;
  3022. ----
  3023. (,1]
  3024. query T
  3025. SELECT '[-1,)'::numrange;
  3026. ----
  3027. [-1,)
  3028. query T
  3029. SELECT '[-1,-1)'::numrange;
  3030. ----
  3031. empty
  3032. query T
  3033. SELECT '[-1,0)'::numrange;
  3034. ----
  3035. [-1,0)
  3036. query T
  3037. SELECT '[-1,1)'::numrange;
  3038. ----
  3039. [-1,1)
  3040. query T
  3041. SELECT '[-1,]'::numrange;
  3042. ----
  3043. [-1,)
  3044. query T
  3045. SELECT '[-1,-1]'::numrange;
  3046. ----
  3047. [-1,-1]
  3048. query T
  3049. SELECT '[-1,0]'::numrange;
  3050. ----
  3051. [-1,0]
  3052. query T
  3053. SELECT '[-1,1]'::numrange;
  3054. ----
  3055. [-1,1]
  3056. query T
  3057. SELECT '[0,)'::numrange;
  3058. ----
  3059. [0,)
  3060. query error range lower bound must be less than or equal to range upper bound
  3061. SELECT '[0,-1)'::numrange;
  3062. query T
  3063. SELECT '[0,0)'::numrange;
  3064. ----
  3065. empty
  3066. query T
  3067. SELECT '[0,1)'::numrange;
  3068. ----
  3069. [0,1)
  3070. query T
  3071. SELECT '[0,]'::numrange;
  3072. ----
  3073. [0,)
  3074. query error range lower bound must be less than or equal to range upper bound
  3075. SELECT '[0,-1]'::numrange;
  3076. query T
  3077. SELECT '[0,0]'::numrange;
  3078. ----
  3079. [0,0]
  3080. query T
  3081. SELECT '[0,1]'::numrange;
  3082. ----
  3083. [0,1]
  3084. query T
  3085. SELECT '[1,)'::numrange;
  3086. ----
  3087. [1,)
  3088. query error range lower bound must be less than or equal to range upper bound
  3089. SELECT '[1,-1)'::numrange;
  3090. query error range lower bound must be less than or equal to range upper bound
  3091. SELECT '[1,0)'::numrange;
  3092. query T
  3093. SELECT '[1,1)'::numrange;
  3094. ----
  3095. empty
  3096. query T
  3097. SELECT '[1,]'::numrange;
  3098. ----
  3099. [1,)
  3100. # Range bound errors
  3101. query error range lower bound must be less than or equal to range upper bound
  3102. SELECT '[1,-1]'::numrange;
  3103. query error range lower bound must be less than or equal to range upper bound
  3104. SELECT '[1,0]'::numrange;
  3105. # Whitespace handling
  3106. query T
  3107. SELECT
  3108. DISTINCT column1::numrange
  3109. FROM
  3110. (
  3111. VALUES
  3112. (' empty'),
  3113. ('empty '),
  3114. (' [1,)'),
  3115. ('[ 1,)'),
  3116. ('[1 ,)'),
  3117. ('[ 1 ,)'),
  3118. ('[1, 2)'),
  3119. ('[1,2 )'),
  3120. ('[1, 2 )'),
  3121. ('[1,) '),
  3122. (' (,1)'),
  3123. ('(, 1)'),
  3124. (' (,) ')
  3125. ) t;
  3126. ----
  3127. empty
  3128. (,)
  3129. (,1)
  3130. [1,)
  3131. [1,2)
  3132. # Input errors
  3133. query error invalid input syntax for type range
  3134. SELECT '[1, )'::numrange
  3135. query error invalid input syntax for type range
  3136. SELECT '( ,1)'::numrange
  3137. query error invalid input syntax for type range
  3138. SELECT '( , )'::numrange
  3139. query error invalid input syntax for type range
  3140. SELECT 'emptyy'::numrange;
  3141. query error invalid input syntax for type range
  3142. SELECT ''::numrange;
  3143. query error invalid input syntax for type range
  3144. SELECT '1'::numrange;
  3145. query error invalid input syntax for type range
  3146. SELECT 'd'::numrange;
  3147. query error invalid input syntax for type range
  3148. SELECT ','::numrange;
  3149. query error invalid input syntax for type range
  3150. SELECT ')'::numrange;
  3151. query error invalid input syntax for type range
  3152. SELECT '{'::numrange;
  3153. query error invalid input syntax for type range
  3154. SELECT '('::numrange;
  3155. query error invalid input syntax for type range
  3156. SELECT '['::numrange;
  3157. query error invalid input syntax for type range
  3158. SELECT '(1)'::numrange;
  3159. query error invalid input syntax for type range
  3160. SELECT '[1]'::numrange;
  3161. query error invalid input syntax for type range
  3162. SELECT '(1,'::numrange;
  3163. query error invalid input syntax for type range
  3164. SELECT '[1,'::numrange;
  3165. query error invalid input syntax for type range
  3166. SELECT '(1,1'::numrange;
  3167. query error invalid input syntax for type range
  3168. SELECT '[1,1'::numrange;
  3169. query error invalid input syntax for type range
  3170. SELECT '(1,1]1'::numrange;
  3171. query error invalid input syntax for type range
  3172. SELECT '[1,1]a'::numrange;
  3173. query error invalid input syntax for type range
  3174. SELECT '(1,1]]'::numrange;
  3175. query error invalid input syntax for type range
  3176. SELECT '[1,1]}'::numrange;
  3177. query error invalid input syntax for type range
  3178. SELECT '(1,1] ]'::numrange;
  3179. query error invalid input syntax for type range
  3180. SELECT '[1,1] }'::numrange;
  3181. statement ok
  3182. CREATE TABLE numrange_values (a numrange);
  3183. statement ok
  3184. INSERT INTO numrange_values VALUES
  3185. (null),
  3186. ('empty'),
  3187. ('[,1)'::numrange),
  3188. ('[,1]'::numrange),
  3189. ('[,)'::numrange),
  3190. ('[,]'::numrange),
  3191. ('(,1)'::numrange),
  3192. ('(,1]'::numrange),
  3193. ('(,)'::numrange),
  3194. ('(,]'::numrange),
  3195. ('[-1,1)'::numrange),
  3196. ('[-1,1]'::numrange),
  3197. ('(-1,1)'::numrange),
  3198. ('(-1,1]'::numrange),
  3199. ('[0,0)'::numrange),
  3200. ('[0,0]'::numrange),
  3201. ('(0,0)'::numrange),
  3202. ('(0,0]'::numrange),
  3203. ('[1,)'::numrange),
  3204. ('[1,]'::numrange),
  3205. ('(1,)'::numrange),
  3206. ('(1,]'::numrange);
  3207. query T
  3208. SELECT a AS t FROM numrange_values ORDER BY a;
  3209. ----
  3210. empty
  3211. empty
  3212. empty
  3213. empty
  3214. (,1)
  3215. (,1)
  3216. (,1]
  3217. (,1]
  3218. (,)
  3219. (,)
  3220. (,)
  3221. (,)
  3222. [-1,1)
  3223. [-1,1]
  3224. (-1,1)
  3225. (-1,1]
  3226. [0,0]
  3227. [1,)
  3228. [1,)
  3229. (1,)
  3230. (1,)
  3231. NULL
  3232. query T
  3233. SELECT a AS t FROM numrange_values EXCEPT SELECT column1 FROM (VALUES
  3234. (numrange(null,1)),
  3235. (numrange(null,1, '[]')),
  3236. (numrange(null,null)),
  3237. (numrange(null,null, '[]')),
  3238. (numrange(null,1, '()')),
  3239. (numrange(null,1, '(]')),
  3240. (numrange(null,null, '()')),
  3241. (numrange(null,null,'(]')),
  3242. (numrange(-1,1)),
  3243. (numrange(-1,1, '[]')),
  3244. (numrange(-1,1, '()')),
  3245. (numrange(-1,1,'(]')),
  3246. (numrange(0,0)),
  3247. (numrange(0,0, '[]')),
  3248. (numrange(0,0,'()')),
  3249. (numrange(0,0,'(]')),
  3250. (numrange(1,null)),
  3251. (numrange(1,null, '[]')),
  3252. (numrange(1,null,'()')),
  3253. (numrange(1,null,'(]'))
  3254. ) t;
  3255. ----
  3256. NULL
  3257. query error operator does not exist: numrange @> double precision
  3258. SELECT numrange(-1.0,1.0) @> 0.1::float;
  3259. query error range constructor flags argument must not be null
  3260. SELECT numrange(1,2,null);
  3261. query error range constructor flags argument must not be null
  3262. SELECT numrange(null,null,null);
  3263. mode cockroach
  3264. #
  3265. # numrange upper, lower
  3266. query TT rowsort
  3267. SELECT DISTINCT lower(a), upper(a) FROM numrange_values;
  3268. ----
  3269. NULL NULL
  3270. NULL 1
  3271. 1 NULL
  3272. 0 0
  3273. -1 1
  3274. mode standard
  3275. # test that lower and upper roundtrip through range constructor function
  3276. query T
  3277. SELECT
  3278. a
  3279. FROM
  3280. numrange_values
  3281. WHERE
  3282. (NOT isempty(a))
  3283. AND (
  3284. a
  3285. != numrange(
  3286. lower(a),
  3287. upper(a),
  3288. CASE
  3289. WHEN lower_inc(a) THEN '['
  3290. ELSE '('
  3291. END
  3292. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  3293. )
  3294. );
  3295. ----
  3296. query T
  3297. SELECT DISTINCT a FROM numrange_values WHERE lower_inf(a) AND upper_inf(a);
  3298. ----
  3299. (,)
  3300. query error invalid range bound flags
  3301. SELECT numrange(null,null,' (]');
  3302. query error invalid range bound flags
  3303. SELECT numrange(null,null,'(] ');
  3304. query error invalid range bound flags
  3305. SELECT numrange(null,null,'( ]');
  3306. query error invalid range bound flags
  3307. SELECT numrange(null,null,'(,]');
  3308. query error invalid range bound flags
  3309. SELECT numrange(null,null,'a()');
  3310. query error invalid range bound flags
  3311. SELECT numrange(null,null,'(a)');
  3312. query error invalid range bound flags
  3313. SELECT numrange(null,null,'()a');
  3314. query error invalid range bound flags
  3315. SELECT numrange(null,null,'(()');
  3316. query error invalid range bound flags
  3317. SELECT numrange(null,null,'())');
  3318. # Test range in list
  3319. query T
  3320. SELECT LIST['(,)', 'empty', '[-1,1]']::numrange list::text;
  3321. ----
  3322. {"(,)",empty,"[-1,1]"}
  3323. query T
  3324. SELECT '{"(,)","empty","[-1,1]"}'::numrange list::text;
  3325. ----
  3326. {"(,)",empty,"[-1,1]"}
  3327. # Test range in array
  3328. query T
  3329. SELECT ARRAY['(,)', 'empty', '[-1,1]']::_numrange;
  3330. ----
  3331. {"(,)",empty,"[-1,1]"}
  3332. query T
  3333. SELECT '{"(,)","empty","[-1,1]"}'::_numrange;
  3334. ----
  3335. {"(,)",empty,"[-1,1]"}
  3336. # Test builtin functions
  3337. query B
  3338. select '(,)'::numrange = '(,)'::numrange;
  3339. ----
  3340. true
  3341. query B
  3342. select '(,)'::numrange != 'empty'::numrange;
  3343. ----
  3344. true
  3345. query B
  3346. select '(,)'::numrange > 'empty'::numrange;
  3347. ----
  3348. true
  3349. query B
  3350. select '(,)'::numrange >= 'empty'::numrange;
  3351. ----
  3352. true
  3353. query B
  3354. select '(,)'::numrange < 'empty'::numrange;
  3355. ----
  3356. false
  3357. query B
  3358. select '(,)'::numrange <= 'empty'::numrange;
  3359. ----
  3360. false
  3361. query B
  3362. select '(1,2)'::numrange < '(3,4)'::numrange;
  3363. ----
  3364. true
  3365. query B
  3366. select '(1,2)'::numrange <= '(3,4)'::numrange;
  3367. ----
  3368. true
  3369. query B
  3370. select '(1,2)'::numrange = '(3,4)'::numrange;
  3371. ----
  3372. false
  3373. query B
  3374. select '(1,2)'::numrange >= '(3,4)'::numrange;
  3375. ----
  3376. false
  3377. query B
  3378. select '(1,2)'::numrange > '(3,4)'::numrange;
  3379. ----
  3380. false
  3381. query B
  3382. select '(3,4)'::numrange >= '(3,4)'::numrange;
  3383. ----
  3384. true
  3385. query B
  3386. select '(3,4)'::numrange = '(3,4)'::numrange;
  3387. ----
  3388. true
  3389. query B
  3390. select '(3,4)'::numrange <= '(3,4)'::numrange;
  3391. ----
  3392. true
  3393. query B
  3394. select '(3,4)'::numrange < '(3,4)'::numrange;
  3395. ----
  3396. false
  3397. query B
  3398. select '(3,4)'::numrange > '(3,4)'::numrange;
  3399. ----
  3400. false
  3401. query B
  3402. select '(5,6)'::numrange < '(3,4)'::numrange;
  3403. ----
  3404. false
  3405. query B
  3406. select '(5,6)'::numrange <= '(3,4)'::numrange;
  3407. ----
  3408. false
  3409. query B
  3410. select '(5,6)'::numrange = '(3,4)'::numrange;
  3411. ----
  3412. false
  3413. query B
  3414. select '(5,6)'::numrange >= '(3,4)'::numrange;
  3415. ----
  3416. true
  3417. query B
  3418. select '(5,6)'::numrange > '(3,4)'::numrange;
  3419. ----
  3420. true
  3421. statement ok
  3422. CREATE TABLE numrange_test_values (v numrange);
  3423. statement ok
  3424. INSERT INTO numrange_test_values VALUES
  3425. ('empty'),
  3426. ('(,)'),
  3427. ('(,1)'),
  3428. ('(-1,)'),
  3429. ('[-1,1)'),
  3430. ('[-99,-50)'),
  3431. ('[50,99)');
  3432. #
  3433. # numrange contains
  3434. query TT
  3435. SELECT a t, array_agg(v ORDER BY v) FROM (
  3436. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3437. ) numrange_values(a), numrange_test_values WHERE a @> v GROUP BY a ORDER BY a;
  3438. ----
  3439. empty
  3440. {empty}
  3441. (,1)
  3442. {empty,"(,1)","[-99,-50)","[-1,1)"}
  3443. (,1]
  3444. {empty,"(,1)","[-99,-50)","[-1,1)"}
  3445. (,)
  3446. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)","[50,99)"}
  3447. [-1,1)
  3448. {empty,"[-1,1)"}
  3449. [-1,1]
  3450. {empty,"[-1,1)"}
  3451. (-1,1)
  3452. {empty}
  3453. (-1,1]
  3454. {empty}
  3455. [0,0]
  3456. {empty}
  3457. [1,)
  3458. {empty,"[50,99)"}
  3459. (1,)
  3460. {empty,"[50,99)"}
  3461. #
  3462. # numrange contained by
  3463. query TT
  3464. SELECT a t, array_agg(v ORDER BY v) FROM (
  3465. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3466. ) numrange_values(a), numrange_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  3467. ----
  3468. empty
  3469. {empty,"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)","[50,99)"}
  3470. (,1)
  3471. {"(,1)","(,)"}
  3472. (,1]
  3473. {"(,)"}
  3474. (,)
  3475. {"(,)"}
  3476. [-1,1)
  3477. {"(,1)","(,)","[-1,1)"}
  3478. [-1,1]
  3479. {"(,)"}
  3480. (-1,1)
  3481. {"(,1)","(,)","[-1,1)","(-1,)"}
  3482. (-1,1]
  3483. {"(,)","(-1,)"}
  3484. [0,0]
  3485. {"(,1)","(,)","[-1,1)","(-1,)"}
  3486. [1,)
  3487. {"(,)","(-1,)"}
  3488. (1,)
  3489. {"(,)","(-1,)"}
  3490. #
  3491. # numrange overlaps
  3492. query TT
  3493. SELECT a t, array_agg(v ORDER BY v) FROM (
  3494. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3495. ) numrange_values(a), numrange_test_values WHERE a && v GROUP BY a ORDER BY a;
  3496. ----
  3497. (,1)
  3498. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3499. (,1]
  3500. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3501. (,)
  3502. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)","[50,99)"}
  3503. [-1,1)
  3504. {"(,1)","(,)","[-1,1)","(-1,)"}
  3505. [-1,1]
  3506. {"(,1)","(,)","[-1,1)","(-1,)"}
  3507. (-1,1)
  3508. {"(,1)","(,)","[-1,1)","(-1,)"}
  3509. (-1,1]
  3510. {"(,1)","(,)","[-1,1)","(-1,)"}
  3511. [0,0]
  3512. {"(,1)","(,)","[-1,1)","(-1,)"}
  3513. [1,)
  3514. {"(,)","(-1,)","[50,99)"}
  3515. (1,)
  3516. {"(,)","(-1,)","[50,99)"}
  3517. #
  3518. # numrange before
  3519. query TT
  3520. SELECT a t, array_agg(v ORDER BY v) FROM (
  3521. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3522. ) numrange_values(a), numrange_test_values WHERE a << v GROUP BY a ORDER BY a;
  3523. ----
  3524. (,1)
  3525. {"[50,99)"}
  3526. (,1]
  3527. {"[50,99)"}
  3528. [-1,1)
  3529. {"[50,99)"}
  3530. [-1,1]
  3531. {"[50,99)"}
  3532. (-1,1)
  3533. {"[50,99)"}
  3534. (-1,1]
  3535. {"[50,99)"}
  3536. [0,0]
  3537. {"[50,99)"}
  3538. #
  3539. # numrange after
  3540. query TT
  3541. SELECT a t, array_agg(v ORDER BY v) FROM (
  3542. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3543. ) numrange_values(a), numrange_test_values WHERE a >> v GROUP BY a ORDER BY a;
  3544. ----
  3545. [-1,1)
  3546. {"[-99,-50)"}
  3547. [-1,1]
  3548. {"[-99,-50)"}
  3549. (-1,1)
  3550. {"[-99,-50)"}
  3551. (-1,1]
  3552. {"[-99,-50)"}
  3553. [0,0]
  3554. {"[-99,-50)"}
  3555. [1,)
  3556. {"(,1)","[-99,-50)","[-1,1)"}
  3557. (1,)
  3558. {"(,1)","[-99,-50)","[-1,1)"}
  3559. #
  3560. # numrange overleft
  3561. query TT
  3562. SELECT a t, array_agg(v ORDER BY v) FROM (
  3563. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3564. ) numrange_values(a), numrange_test_values WHERE a &< v GROUP BY a ORDER BY a;
  3565. ----
  3566. (,1)
  3567. {"(,1)","(,)","[-1,1)","(-1,)","[50,99)"}
  3568. (,1]
  3569. {"(,)","(-1,)","[50,99)"}
  3570. (,)
  3571. {"(,)","(-1,)"}
  3572. [-1,1)
  3573. {"(,1)","(,)","[-1,1)","(-1,)","[50,99)"}
  3574. [-1,1]
  3575. {"(,)","(-1,)","[50,99)"}
  3576. (-1,1)
  3577. {"(,1)","(,)","[-1,1)","(-1,)","[50,99)"}
  3578. (-1,1]
  3579. {"(,)","(-1,)","[50,99)"}
  3580. [0,0]
  3581. {"(,1)","(,)","[-1,1)","(-1,)","[50,99)"}
  3582. [1,)
  3583. {"(,)","(-1,)"}
  3584. (1,)
  3585. {"(,)","(-1,)"}
  3586. #
  3587. # numrange overright
  3588. query TT
  3589. SELECT a t, array_agg(v ORDER BY v) FROM (
  3590. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3591. ) numrange_values(a), numrange_test_values WHERE a &> v GROUP BY a ORDER BY a;
  3592. ----
  3593. (,1)
  3594. {"(,1)","(,)"}
  3595. (,1]
  3596. {"(,1)","(,)"}
  3597. (,)
  3598. {"(,1)","(,)"}
  3599. [-1,1)
  3600. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  3601. [-1,1]
  3602. {"(,1)","(,)","[-99,-50)","[-1,1)"}
  3603. (-1,1)
  3604. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3605. (-1,1]
  3606. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3607. [0,0]
  3608. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3609. [1,)
  3610. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3611. (1,)
  3612. {"(,1)","(,)","[-99,-50)","[-1,1)","(-1,)"}
  3613. #
  3614. # numrange adjacent
  3615. query TT
  3616. SELECT a t, array_agg(v ORDER BY v) FROM (
  3617. SELECT DISTINCT a FROM numrange_values WHERE a IS NOT NULL
  3618. ) numrange_values(a), numrange_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  3619. ----
  3620. [1,)
  3621. {"(,1)","[-1,1)"}
  3622. query T
  3623. SELECT '[1.1,1.1]'::numrange;
  3624. ----
  3625. [1.1,1.1]
  3626. query T
  3627. SELECT '[1.1,1.2]'::numrange;
  3628. ----
  3629. [1.1,1.2]
  3630. query T
  3631. SELECT '[1.1,1.1)'::numrange;
  3632. ----
  3633. empty
  3634. query T
  3635. SELECT numrange(1.1::numeric(38,1),1.2::numeric(38,2));
  3636. ----
  3637. [1.1,1.2)
  3638. query T
  3639. SELECT numrange(1.1::numeric(38,2),1.2::numeric(38,1));
  3640. ----
  3641. [1.1,1.2)
  3642. query T
  3643. SELECT numrange(-1.1::numeric(38,10),1.2::numeric(38,0));
  3644. ----
  3645. [-1.1,1)
  3646. query T
  3647. SELECT numrange(-1.1::numeric(38,0),1.2::numeric(38,10));
  3648. ----
  3649. [-1,1.2)
  3650. query error range lower bound must be less than or equal to range upper bound
  3651. SELECT numrange(1.1::numeric(38,2),1.2::numeric(38,0));
  3652. #
  3653. # numrange union
  3654. query T
  3655. SELECT 'empty'::numrange + 'empty'::numrange
  3656. ----
  3657. empty
  3658. query T
  3659. SELECT 'empty'::numrange + '(,-1]'::numrange
  3660. ----
  3661. (,-1]
  3662. query T
  3663. SELECT '(,-1]'::numrange + '(,-1]'::numrange
  3664. ----
  3665. (,-1]
  3666. query T
  3667. SELECT 'empty'::numrange + '(,-1)'::numrange
  3668. ----
  3669. (,-1)
  3670. query T
  3671. SELECT 'empty'::numrange + '(-2,2)'::numrange
  3672. ----
  3673. (-2,2)
  3674. query T
  3675. SELECT 'empty'::numrange + '[-2,2]'::numrange
  3676. ----
  3677. [-2,2]
  3678. query T
  3679. SELECT 'empty'::numrange + '[1,)'::numrange
  3680. ----
  3681. [1,)
  3682. query T
  3683. SELECT 'empty'::numrange + '(1,)'::numrange
  3684. ----
  3685. (1,)
  3686. query T
  3687. SELECT 'empty'::numrange + '(,)'::numrange
  3688. ----
  3689. (,)
  3690. query T
  3691. SELECT '(,-1]'::numrange + 'empty'::numrange
  3692. ----
  3693. (,-1]
  3694. query T
  3695. SELECT '(,-1]'::numrange + '(,-1)'::numrange
  3696. ----
  3697. (,-1]
  3698. query T
  3699. SELECT '(,-1]'::numrange + '(-2,2)'::numrange
  3700. ----
  3701. (,2)
  3702. query T
  3703. SELECT '(,-1]'::numrange + '[-2,2]'::numrange
  3704. ----
  3705. (,2]
  3706. query error result of range union would not be contiguous
  3707. SELECT '(,-1]'::numrange + '[1,)'::numrange
  3708. query error result of range union would not be contiguous
  3709. SELECT '(,-1]'::numrange + '(1,)'::numrange
  3710. query T
  3711. SELECT '(,-1]'::numrange + '(,)'::numrange
  3712. ----
  3713. (,)
  3714. query T
  3715. SELECT '(,-1)'::numrange + 'empty'::numrange
  3716. ----
  3717. (,-1)
  3718. query T
  3719. SELECT '(,-1)'::numrange + '(,-1]'::numrange
  3720. ----
  3721. (,-1]
  3722. query T
  3723. SELECT '(,-1)'::numrange + '(-2,2)'::numrange
  3724. ----
  3725. (,2)
  3726. query T
  3727. SELECT '(,-1)'::numrange + '[-2,2]'::numrange
  3728. ----
  3729. (,2]
  3730. query error result of range union would not be contiguous
  3731. SELECT '(,-1)'::numrange + '[1,)'::numrange
  3732. query error result of range union would not be contiguous
  3733. SELECT '(,-1)'::numrange + '(1,)'::numrange
  3734. query T
  3735. SELECT '(,-1)'::numrange + '(,)'::numrange
  3736. ----
  3737. (,)
  3738. query T
  3739. SELECT '(-2,2)'::numrange + 'empty'::numrange
  3740. ----
  3741. (-2,2)
  3742. query T
  3743. SELECT '(-2,2)'::numrange + '(,-1]'::numrange
  3744. ----
  3745. (,2)
  3746. query T
  3747. SELECT '(-2,2)'::numrange + '(,-1)'::numrange
  3748. ----
  3749. (,2)
  3750. query T
  3751. SELECT '(-2,2)'::numrange + '[-2,2]'::numrange
  3752. ----
  3753. [-2,2]
  3754. query T
  3755. SELECT '(-2,2)'::numrange + '[1,)'::numrange
  3756. ----
  3757. (-2,)
  3758. query T
  3759. SELECT '(-2,2)'::numrange + '(1,)'::numrange
  3760. ----
  3761. (-2,)
  3762. query T
  3763. SELECT '(-2,2)'::numrange + '(,)'::numrange
  3764. ----
  3765. (,)
  3766. query T
  3767. SELECT '[-2,2]'::numrange + 'empty'::numrange
  3768. ----
  3769. [-2,2]
  3770. query T
  3771. SELECT '[-2,2]'::numrange + '(,-1]'::numrange
  3772. ----
  3773. (,2]
  3774. query T
  3775. SELECT '[-2,2]'::numrange + '(,-1)'::numrange
  3776. ----
  3777. (,2]
  3778. query T
  3779. SELECT '[-2,2]'::numrange + '(-2,2)'::numrange
  3780. ----
  3781. [-2,2]
  3782. query T
  3783. SELECT '[-2,2]'::numrange + '[1,)'::numrange
  3784. ----
  3785. [-2,)
  3786. query T
  3787. SELECT '[-2,2]'::numrange + '(1,)'::numrange
  3788. ----
  3789. [-2,)
  3790. query T
  3791. SELECT '[-2,2]'::numrange + '(,)'::numrange
  3792. ----
  3793. (,)
  3794. query T
  3795. SELECT '[1,)'::numrange + 'empty'::numrange
  3796. ----
  3797. [1,)
  3798. query error result of range union would not be contiguous
  3799. SELECT '[1,)'::numrange + '(,-1]'::numrange
  3800. query error result of range union would not be contiguous
  3801. SELECT '[1,)'::numrange + '(,-1)'::numrange
  3802. query T
  3803. SELECT '[1,)'::numrange + '(-2,2)'::numrange
  3804. ----
  3805. (-2,)
  3806. query T
  3807. SELECT '[1,)'::numrange + '[-2,2]'::numrange
  3808. ----
  3809. [-2,)
  3810. query T
  3811. SELECT '[1,)'::numrange + '(1,)'::numrange
  3812. ----
  3813. [1,)
  3814. query T
  3815. SELECT '[1,)'::numrange + '(,)'::numrange
  3816. ----
  3817. (,)
  3818. query T
  3819. SELECT '(1,)'::numrange + 'empty'::numrange
  3820. ----
  3821. (1,)
  3822. query error result of range union would not be contiguous
  3823. SELECT '(1,)'::numrange + '(,-1]'::numrange
  3824. query error result of range union would not be contiguous
  3825. SELECT '(1,)'::numrange + '(,-1)'::numrange
  3826. query T
  3827. SELECT '(1,)'::numrange + '(-2,2)'::numrange
  3828. ----
  3829. (-2,)
  3830. query T
  3831. SELECT '(1,)'::numrange + '[-2,2]'::numrange
  3832. ----
  3833. [-2,)
  3834. query T
  3835. SELECT '(1,)'::numrange + '[1,)'::numrange
  3836. ----
  3837. [1,)
  3838. query T
  3839. SELECT '(1,)'::numrange + '(,)'::numrange
  3840. ----
  3841. (,)
  3842. query T
  3843. SELECT '(,)'::numrange + 'empty'::numrange
  3844. ----
  3845. (,)
  3846. query T
  3847. SELECT '(,)'::numrange + '(,-1]'::numrange
  3848. ----
  3849. (,)
  3850. query T
  3851. SELECT '(,)'::numrange + '(,-1)'::numrange
  3852. ----
  3853. (,)
  3854. query T
  3855. SELECT '(,)'::numrange + '(-2,2)'::numrange
  3856. ----
  3857. (,)
  3858. query T
  3859. SELECT '(,)'::numrange + '[-2,2]'::numrange
  3860. ----
  3861. (,)
  3862. query T
  3863. SELECT '(,)'::numrange + '[1,)'::numrange
  3864. ----
  3865. (,)
  3866. query T
  3867. SELECT '(,)'::numrange + '(1,)'::numrange
  3868. ----
  3869. (,)
  3870. #
  3871. # numrange intersection
  3872. query T
  3873. SELECT 'empty'::numrange * 'empty'::numrange
  3874. ----
  3875. empty
  3876. query T
  3877. SELECT 'empty'::numrange * '(,-1]'::numrange
  3878. ----
  3879. empty
  3880. query T
  3881. SELECT '(,-1]'::numrange * 'empty'::numrange
  3882. ----
  3883. empty
  3884. query T
  3885. SELECT '(,-1]'::numrange * '(,-1]'::numrange
  3886. ----
  3887. (,-1]
  3888. query T
  3889. SELECT 'empty'::numrange * '(,-1)'::numrange
  3890. ----
  3891. empty
  3892. query T
  3893. SELECT 'empty'::numrange * '(-2,2)'::numrange
  3894. ----
  3895. empty
  3896. query T
  3897. SELECT 'empty'::numrange * '[-2,2]'::numrange
  3898. ----
  3899. empty
  3900. query T
  3901. SELECT 'empty'::numrange * '[1,)'::numrange
  3902. ----
  3903. empty
  3904. query T
  3905. SELECT 'empty'::numrange * '(1,)'::numrange
  3906. ----
  3907. empty
  3908. query T
  3909. SELECT 'empty'::numrange * '(,)'::numrange
  3910. ----
  3911. empty
  3912. query T
  3913. SELECT '(,-1]'::numrange * '(,-1)'::numrange
  3914. ----
  3915. (,-1)
  3916. query T
  3917. SELECT '(,-1]'::numrange * '(-2,2)'::numrange
  3918. ----
  3919. (-2,-1]
  3920. query T
  3921. SELECT '(,-1]'::numrange * '[-2,2]'::numrange
  3922. ----
  3923. [-2,-1]
  3924. query T
  3925. SELECT '(,-1]'::numrange * '[1,)'::numrange
  3926. ----
  3927. empty
  3928. query T
  3929. SELECT '(,-1]'::numrange * '(1,)'::numrange
  3930. ----
  3931. empty
  3932. query T
  3933. SELECT '(,-1]'::numrange * '(,)'::numrange
  3934. ----
  3935. (,-1]
  3936. query T
  3937. SELECT '(,-1)'::numrange * 'empty'::numrange
  3938. ----
  3939. empty
  3940. query T
  3941. SELECT '(,-1)'::numrange * '(,-1]'::numrange
  3942. ----
  3943. (,-1)
  3944. query T
  3945. SELECT '(,-1)'::numrange * '(-2,2)'::numrange
  3946. ----
  3947. (-2,-1)
  3948. query T
  3949. SELECT '(,-1)'::numrange * '[-2,2]'::numrange
  3950. ----
  3951. [-2,-1)
  3952. query T
  3953. SELECT '(,-1)'::numrange * '[1,)'::numrange
  3954. ----
  3955. empty
  3956. query T
  3957. SELECT '(,-1)'::numrange * '(1,)'::numrange
  3958. ----
  3959. empty
  3960. query T
  3961. SELECT '(,-1)'::numrange * '(,)'::numrange
  3962. ----
  3963. (,-1)
  3964. query T
  3965. SELECT '(-2,2)'::numrange * 'empty'::numrange
  3966. ----
  3967. empty
  3968. query T
  3969. SELECT '(-2,2)'::numrange * '(,-1]'::numrange
  3970. ----
  3971. (-2,-1]
  3972. query T
  3973. SELECT '(-2,2)'::numrange * '(,-1)'::numrange
  3974. ----
  3975. (-2,-1)
  3976. query T
  3977. SELECT '(-2,2)'::numrange * '[-2,2]'::numrange
  3978. ----
  3979. (-2,2)
  3980. query T
  3981. SELECT '(-2,2)'::numrange * '[1,)'::numrange
  3982. ----
  3983. [1,2)
  3984. query T
  3985. SELECT '(-2,2)'::numrange * '(1,)'::numrange
  3986. ----
  3987. (1,2)
  3988. query T
  3989. SELECT '(-2,2)'::numrange * '(,)'::numrange
  3990. ----
  3991. (-2,2)
  3992. query T
  3993. SELECT '[-2,2]'::numrange * 'empty'::numrange
  3994. ----
  3995. empty
  3996. query T
  3997. SELECT '[-2,2]'::numrange * '(,-1]'::numrange
  3998. ----
  3999. [-2,-1]
  4000. query T
  4001. SELECT '[-2,2]'::numrange * '(,-1)'::numrange
  4002. ----
  4003. [-2,-1)
  4004. query T
  4005. SELECT '[-2,2]'::numrange * '(-2,2)'::numrange
  4006. ----
  4007. (-2,2)
  4008. query T
  4009. SELECT '[-2,2]'::numrange * '[1,)'::numrange
  4010. ----
  4011. [1,2]
  4012. query T
  4013. SELECT '[-2,2]'::numrange * '(1,)'::numrange
  4014. ----
  4015. (1,2]
  4016. query T
  4017. SELECT '[-2,2]'::numrange * '(,)'::numrange
  4018. ----
  4019. [-2,2]
  4020. query T
  4021. SELECT '[1,)'::numrange * 'empty'::numrange
  4022. ----
  4023. empty
  4024. query T
  4025. SELECT '[1,)'::numrange * '(,-1]'::numrange
  4026. ----
  4027. empty
  4028. query T
  4029. SELECT '[1,)'::numrange * '(,-1)'::numrange
  4030. ----
  4031. empty
  4032. query T
  4033. SELECT '[1,)'::numrange * '(-2,2)'::numrange
  4034. ----
  4035. [1,2)
  4036. query T
  4037. SELECT '[1,)'::numrange * '[-2,2]'::numrange
  4038. ----
  4039. [1,2]
  4040. query T
  4041. SELECT '[1,)'::numrange * '(1,)'::numrange
  4042. ----
  4043. (1,)
  4044. query T
  4045. SELECT '[1,)'::numrange * '(,)'::numrange
  4046. ----
  4047. [1,)
  4048. query T
  4049. SELECT '(1,)'::numrange * 'empty'::numrange
  4050. ----
  4051. empty
  4052. query T
  4053. SELECT '(1,)'::numrange * '(,-1]'::numrange
  4054. ----
  4055. empty
  4056. query T
  4057. SELECT '(1,)'::numrange * '(,-1)'::numrange
  4058. ----
  4059. empty
  4060. query T
  4061. SELECT '(1,)'::numrange * '(-2,2)'::numrange
  4062. ----
  4063. (1,2)
  4064. query T
  4065. SELECT '(1,)'::numrange * '[-2,2]'::numrange
  4066. ----
  4067. (1,2]
  4068. query T
  4069. SELECT '(1,)'::numrange * '[1,)'::numrange
  4070. ----
  4071. (1,)
  4072. query T
  4073. SELECT '(1,)'::numrange * '(,)'::numrange
  4074. ----
  4075. (1,)
  4076. query T
  4077. SELECT '(,)'::numrange * 'empty'::numrange
  4078. ----
  4079. empty
  4080. query T
  4081. SELECT '(,)'::numrange * '(,-1]'::numrange
  4082. ----
  4083. (,-1]
  4084. query T
  4085. SELECT '(,)'::numrange * '(,-1)'::numrange
  4086. ----
  4087. (,-1)
  4088. query T
  4089. SELECT '(,)'::numrange * '(-2,2)'::numrange
  4090. ----
  4091. (-2,2)
  4092. query T
  4093. SELECT '(,)'::numrange * '[-2,2]'::numrange
  4094. ----
  4095. [-2,2]
  4096. query T
  4097. SELECT '(,)'::numrange * '[1,)'::numrange
  4098. ----
  4099. [1,)
  4100. query T
  4101. SELECT '(,)'::numrange * '(1,)'::numrange
  4102. ----
  4103. (1,)
  4104. #
  4105. # numrange difference
  4106. query T
  4107. SELECT 'empty'::numrange - 'empty'::numrange
  4108. ----
  4109. empty
  4110. query T
  4111. SELECT 'empty'::numrange - '(,-1]'::numrange
  4112. ----
  4113. empty
  4114. query T
  4115. SELECT '(,-1]'::numrange - '(,-1]'::numrange
  4116. ----
  4117. empty
  4118. query T
  4119. SELECT 'empty'::numrange - '(,-1)'::numrange
  4120. ----
  4121. empty
  4122. query T
  4123. SELECT 'empty'::numrange - '(-2,2)'::numrange
  4124. ----
  4125. empty
  4126. query T
  4127. SELECT 'empty'::numrange - '[-2,2]'::numrange
  4128. ----
  4129. empty
  4130. query T
  4131. SELECT 'empty'::numrange - '[1,)'::numrange
  4132. ----
  4133. empty
  4134. query T
  4135. SELECT 'empty'::numrange - '(1,)'::numrange
  4136. ----
  4137. empty
  4138. query T
  4139. SELECT 'empty'::numrange - '(,)'::numrange
  4140. ----
  4141. empty
  4142. query T
  4143. SELECT '(,-1]'::numrange - 'empty'::numrange
  4144. ----
  4145. (,-1]
  4146. query T
  4147. SELECT '(,-1]'::numrange - '(,-1)'::numrange
  4148. ----
  4149. [-1,-1]
  4150. query T
  4151. SELECT '(,-1]'::numrange - '(-2,2)'::numrange
  4152. ----
  4153. (,-2]
  4154. query T
  4155. SELECT '(,-1]'::numrange - '[-2,2]'::numrange
  4156. ----
  4157. (,-2)
  4158. query T
  4159. SELECT '(,-1]'::numrange - '[1,)'::numrange
  4160. ----
  4161. (,-1]
  4162. query T
  4163. SELECT '(,-1]'::numrange - '(1,)'::numrange
  4164. ----
  4165. (,-1]
  4166. query T
  4167. SELECT '(,-1]'::numrange - '(,)'::numrange
  4168. ----
  4169. empty
  4170. query T
  4171. SELECT '(,-1)'::numrange - 'empty'::numrange
  4172. ----
  4173. (,-1)
  4174. query T
  4175. SELECT '(,-1)'::numrange - '(,-1]'::numrange
  4176. ----
  4177. empty
  4178. query T
  4179. SELECT '(,-1)'::numrange - '(-2,2)'::numrange
  4180. ----
  4181. (,-2]
  4182. query T
  4183. SELECT '(,-1)'::numrange - '[-2,2]'::numrange
  4184. ----
  4185. (,-2)
  4186. query T
  4187. SELECT '(,-1)'::numrange - '[1,)'::numrange
  4188. ----
  4189. (,-1)
  4190. query T
  4191. SELECT '(,-1)'::numrange - '(1,)'::numrange
  4192. ----
  4193. (,-1)
  4194. query T
  4195. SELECT '(,-1)'::numrange - '(,)'::numrange
  4196. ----
  4197. empty
  4198. query T
  4199. SELECT '(-2,2)'::numrange - 'empty'::numrange
  4200. ----
  4201. (-2,2)
  4202. query T
  4203. SELECT '(-2,2)'::numrange - '(,-1]'::numrange
  4204. ----
  4205. (-1,2)
  4206. query T
  4207. SELECT '(-2,2)'::numrange - '(,-1)'::numrange
  4208. ----
  4209. [-1,2)
  4210. query T
  4211. SELECT '(-2,2)'::numrange - '[-2,2]'::numrange
  4212. ----
  4213. empty
  4214. query T
  4215. SELECT '(-2,2)'::numrange - '[1,)'::numrange
  4216. ----
  4217. (-2,1)
  4218. query T
  4219. SELECT '(-2,2)'::numrange - '(1,)'::numrange
  4220. ----
  4221. (-2,1]
  4222. query T
  4223. SELECT '(-2,2)'::numrange - '(,)'::numrange
  4224. ----
  4225. empty
  4226. query T
  4227. SELECT '[-2,2]'::numrange - 'empty'::numrange
  4228. ----
  4229. [-2,2]
  4230. query T
  4231. SELECT '[-2,2]'::numrange - '(,-1]'::numrange
  4232. ----
  4233. (-1,2]
  4234. query T
  4235. SELECT '[-2,2]'::numrange - '(,-1)'::numrange
  4236. ----
  4237. [-1,2]
  4238. query error result of range difference would not be contiguous
  4239. SELECT '[-2,2]'::numrange - '(-2,2)'::numrange
  4240. query T
  4241. SELECT '[-2,2]'::numrange - '[1,)'::numrange
  4242. ----
  4243. [-2,1)
  4244. query T
  4245. SELECT '[-2,2]'::numrange - '(1,)'::numrange
  4246. ----
  4247. [-2,1]
  4248. query T
  4249. SELECT '[-2,2]'::numrange - '(,)'::numrange
  4250. ----
  4251. empty
  4252. query T
  4253. SELECT '[1,)'::numrange - 'empty'::numrange
  4254. ----
  4255. [1,)
  4256. query T
  4257. SELECT '[1,)'::numrange - '(,-1]'::numrange
  4258. ----
  4259. [1,)
  4260. query T
  4261. SELECT '[1,)'::numrange - '(,-1)'::numrange
  4262. ----
  4263. [1,)
  4264. query T
  4265. SELECT '[1,)'::numrange - '(-2,2)'::numrange
  4266. ----
  4267. [2,)
  4268. query T
  4269. SELECT '[1,)'::numrange - '[-2,2]'::numrange
  4270. ----
  4271. (2,)
  4272. query T
  4273. SELECT '[1,)'::numrange - '(1,)'::numrange
  4274. ----
  4275. [1,1]
  4276. query T
  4277. SELECT '[1,)'::numrange - '(,)'::numrange
  4278. ----
  4279. empty
  4280. query T
  4281. SELECT '(1,)'::numrange - 'empty'::numrange
  4282. ----
  4283. (1,)
  4284. query T
  4285. SELECT '(1,)'::numrange - '(,-1]'::numrange
  4286. ----
  4287. (1,)
  4288. query T
  4289. SELECT '(1,)'::numrange - '(,-1)'::numrange
  4290. ----
  4291. (1,)
  4292. query T
  4293. SELECT '(1,)'::numrange - '(-2,2)'::numrange
  4294. ----
  4295. [2,)
  4296. query T
  4297. SELECT '(1,)'::numrange - '[-2,2]'::numrange
  4298. ----
  4299. (2,)
  4300. query T
  4301. SELECT '(1,)'::numrange - '[1,)'::numrange
  4302. ----
  4303. empty
  4304. query T
  4305. SELECT '(1,)'::numrange - '(,)'::numrange
  4306. ----
  4307. empty
  4308. query T
  4309. SELECT '(,)'::numrange - 'empty'::numrange
  4310. ----
  4311. (,)
  4312. query T
  4313. SELECT '(,)'::numrange - '(,-1]'::numrange
  4314. ----
  4315. (-1,)
  4316. query T
  4317. SELECT '(,)'::numrange - '(,-1)'::numrange
  4318. ----
  4319. [-1,)
  4320. query error result of range difference would not be contiguous
  4321. SELECT '(,)'::numrange - '(-2,2)'::numrange
  4322. query error result of range difference would not be contiguous
  4323. SELECT '(,)'::numrange - '[-2,2]'::numrange
  4324. query T
  4325. SELECT '(,)'::numrange - '[1,)'::numrange
  4326. ----
  4327. (,1)
  4328. query T
  4329. SELECT '(,)'::numrange - '(1,)'::numrange
  4330. ----
  4331. (,1]
  4332. #
  4333. # tsrange
  4334. query T
  4335. select '[1970-01-01 00:00:00,1971-01-01 00:00:00)'::tsrange;
  4336. ----
  4337. ["1970-01-01 00:00:00","1971-01-01 00:00:00")
  4338. query T
  4339. select pg_typeof('[1970-01-01 00:00:00,1971-01-01 00:00:00)'::tsrange);
  4340. ----
  4341. tsrange
  4342. query T
  4343. select 'empty'::tsrange;
  4344. ----
  4345. empty
  4346. query T
  4347. select pg_typeof('empty'::tsrange);
  4348. ----
  4349. tsrange
  4350. query T
  4351. select null::tsrange
  4352. ----
  4353. NULL
  4354. query T
  4355. SELECT '(,)'::tsrange;
  4356. ----
  4357. (,)
  4358. query T
  4359. SELECT '(,1969-12-31 11:59:59)'::tsrange;
  4360. ----
  4361. (,"1969-12-31 11:59:59")
  4362. query T
  4363. SELECT '(,1970-01-01 00:00:00)'::tsrange;
  4364. ----
  4365. (,"1970-01-01 00:00:00")
  4366. query T
  4367. SELECT '(,1970-01-01 00:00:01)'::tsrange;
  4368. ----
  4369. (,"1970-01-01 00:00:01")
  4370. query T
  4371. SELECT '(,]'::tsrange;
  4372. ----
  4373. (,)
  4374. query T
  4375. SELECT '(,1969-12-31 11:59:59]'::tsrange;
  4376. ----
  4377. (,"1969-12-31 11:59:59"]
  4378. query T
  4379. SELECT '(,1970-01-01 00:00:00]'::tsrange;
  4380. ----
  4381. (,"1970-01-01 00:00:00"]
  4382. query T
  4383. SELECT '(,1970-01-01 00:00:01]'::tsrange;
  4384. ----
  4385. (,"1970-01-01 00:00:01"]
  4386. query T
  4387. SELECT '(1969-12-31 11:59:59,)'::tsrange;
  4388. ----
  4389. ("1969-12-31 11:59:59",)
  4390. query T
  4391. SELECT '(1969-12-31 11:59:59,1969-12-31 11:59:59)'::tsrange;
  4392. ----
  4393. empty
  4394. query T
  4395. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:00)'::tsrange;
  4396. ----
  4397. ("1969-12-31 11:59:59","1970-01-01 00:00:00")
  4398. query T
  4399. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:01)'::tsrange;
  4400. ----
  4401. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4402. query T
  4403. SELECT '(1969-12-31 11:59:59,]'::tsrange;
  4404. ----
  4405. ("1969-12-31 11:59:59",)
  4406. query T
  4407. SELECT '(1969-12-31 11:59:59,1969-12-31 11:59:59]'::tsrange;
  4408. ----
  4409. empty
  4410. query T
  4411. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:00]'::tsrange;
  4412. ----
  4413. ("1969-12-31 11:59:59","1970-01-01 00:00:00"]
  4414. query T
  4415. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:01]'::tsrange;
  4416. ----
  4417. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4418. query T
  4419. SELECT '(1970-01-01 00:00:00,)'::tsrange;
  4420. ----
  4421. ("1970-01-01 00:00:00",)
  4422. query error range lower bound must be less than or equal to range upper bound
  4423. SELECT '(1970-01-01 00:00:00,1969-12-31 11:59:59)'::tsrange;
  4424. query T
  4425. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:00)'::tsrange;
  4426. ----
  4427. empty
  4428. query T
  4429. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:01)'::tsrange;
  4430. ----
  4431. ("1970-01-01 00:00:00","1970-01-01 00:00:01")
  4432. query T
  4433. SELECT '(1970-01-01 00:00:00,]'::tsrange;
  4434. ----
  4435. ("1970-01-01 00:00:00",)
  4436. query error range lower bound must be less than or equal to range upper bound
  4437. SELECT '(1970-01-01 00:00:00,1969-12-31 11:59:59]'::tsrange;
  4438. query T
  4439. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:00]'::tsrange;
  4440. ----
  4441. empty
  4442. query T
  4443. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:01]'::tsrange;
  4444. ----
  4445. ("1970-01-01 00:00:00","1970-01-01 00:00:01"]
  4446. query T
  4447. SELECT '(1970-01-01 00:00:01,)'::tsrange;
  4448. ----
  4449. ("1970-01-01 00:00:01",)
  4450. query error range lower bound must be less than or equal to range upper bound
  4451. SELECT '(1970-01-01 00:00:01,1969-12-31 11:59:59)'::tsrange;
  4452. query error range lower bound must be less than or equal to range upper bound
  4453. SELECT '(1970-01-01 00:00:01,1970-01-01 00:00:00)'::tsrange;
  4454. query T
  4455. SELECT '(1970-01-01 00:00:01.1,1970-01-01 00:00:01.1)'::tsrange;
  4456. ----
  4457. empty
  4458. query T
  4459. SELECT '(1970-01-01 00:00:01,]'::tsrange;
  4460. ----
  4461. ("1970-01-01 00:00:01",)
  4462. query error range lower bound must be less than or equal to range upper bound
  4463. SELECT '(1970-01-01 00:00:01,1969-12-31 11:59:59]'::tsrange;
  4464. query error range lower bound must be less than or equal to range upper bound
  4465. SELECT '(1970-01-01 00:00:01,1970-01-01 00:00:00]'::tsrange;
  4466. query T
  4467. SELECT '(1970-01-01 00:00:01.1, 1970-01-01 00:00:01.1]'::tsrange;
  4468. ----
  4469. empty
  4470. query T
  4471. SELECT '[,)'::tsrange;
  4472. ----
  4473. (,)
  4474. query T
  4475. SELECT '[,1969-12-31 11:59:59)'::tsrange;
  4476. ----
  4477. (,"1969-12-31 11:59:59")
  4478. query T
  4479. SELECT '[,1970-01-01 00:00:00)'::tsrange;
  4480. ----
  4481. (,"1970-01-01 00:00:00")
  4482. query T
  4483. SELECT '[,1970-01-01 00:00:01)'::tsrange;
  4484. ----
  4485. (,"1970-01-01 00:00:01")
  4486. query T
  4487. SELECT '[,]'::tsrange;
  4488. ----
  4489. (,)
  4490. query T
  4491. SELECT '[,1969-12-31 11:59:59]'::tsrange;
  4492. ----
  4493. (,"1969-12-31 11:59:59"]
  4494. query T
  4495. SELECT '[,1970-01-01 00:00:00]'::tsrange;
  4496. ----
  4497. (,"1970-01-01 00:00:00"]
  4498. query T
  4499. SELECT '[,1970-01-01 00:00:01]'::tsrange;
  4500. ----
  4501. (,"1970-01-01 00:00:01"]
  4502. query T
  4503. SELECT '[1969-12-31 11:59:59,)'::tsrange;
  4504. ----
  4505. ["1969-12-31 11:59:59",)
  4506. query T
  4507. SELECT '[1969-12-31 11:59:59,1969-12-31 11:59:59)'::tsrange;
  4508. ----
  4509. empty
  4510. query T
  4511. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:00)'::tsrange;
  4512. ----
  4513. ["1969-12-31 11:59:59","1970-01-01 00:00:00")
  4514. query T
  4515. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:01)'::tsrange;
  4516. ----
  4517. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4518. query T
  4519. SELECT '[1969-12-31 11:59:59,]'::tsrange;
  4520. ----
  4521. ["1969-12-31 11:59:59",)
  4522. query T
  4523. SELECT '[1969-12-31 11:59:59,1969-12-31 11:59:59]'::tsrange;
  4524. ----
  4525. ["1969-12-31 11:59:59","1969-12-31 11:59:59"]
  4526. query T
  4527. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:00]'::tsrange;
  4528. ----
  4529. ["1969-12-31 11:59:59","1970-01-01 00:00:00"]
  4530. query T
  4531. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:01]'::tsrange;
  4532. ----
  4533. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4534. query T
  4535. SELECT '[1970-01-01 00:00:00,)'::tsrange;
  4536. ----
  4537. ["1970-01-01 00:00:00",)
  4538. query error range lower bound must be less than or equal to range upper bound
  4539. SELECT '[1970-01-01 00:00:00,1969-12-31 11:59:59)'::tsrange;
  4540. query T
  4541. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:00)'::tsrange;
  4542. ----
  4543. empty
  4544. query T
  4545. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:01)'::tsrange;
  4546. ----
  4547. ["1970-01-01 00:00:00","1970-01-01 00:00:01")
  4548. query T
  4549. SELECT '[1970-01-01 00:00:00,]'::tsrange;
  4550. ----
  4551. ["1970-01-01 00:00:00",)
  4552. query error range lower bound must be less than or equal to range upper bound
  4553. SELECT '[1970-01-01 00:00:00,1969-12-31 11:59:59]'::tsrange;
  4554. query T
  4555. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:00]'::tsrange;
  4556. ----
  4557. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4558. query T
  4559. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:01]'::tsrange;
  4560. ----
  4561. ["1970-01-01 00:00:00","1970-01-01 00:00:01"]
  4562. query T
  4563. SELECT '[1970-01-01 00:00:01,)'::tsrange;
  4564. ----
  4565. ["1970-01-01 00:00:01",)
  4566. query error range lower bound must be less than or equal to range upper bound
  4567. SELECT '[1970-01-01 00:00:01,1969-12-31 11:59:59)'::tsrange;
  4568. query error range lower bound must be less than or equal to range upper bound
  4569. SELECT '[1970-01-01 00:00:01,1970-01-01 00:00:00)'::tsrange;
  4570. query T
  4571. SELECT '[1970-01-01 00:00:01.1, 1970-01-01 00:00:01.1)'::tsrange;
  4572. ----
  4573. empty
  4574. query T
  4575. SELECT '[1970-01-01 00:00:01,]'::tsrange;
  4576. ----
  4577. ["1970-01-01 00:00:01",)
  4578. # Range bound errors
  4579. query error range lower bound must be less than or equal to range upper bound
  4580. SELECT '[1970-01-01 00:00:01,1969-12-31 11:59:59]'::tsrange;
  4581. query error range lower bound must be less than or equal to range upper bound
  4582. SELECT '[1970-01-01 00:00:01,1970-01-01 00:00:00]'::tsrange;
  4583. # Whitespace handling
  4584. query T
  4585. SELECT
  4586. DISTINCT column1::tsrange
  4587. FROM
  4588. (
  4589. VALUES
  4590. (' empty'),
  4591. ('empty '),
  4592. (' [1970-01-01 00:00:01,)'),
  4593. ('[ 1970-01-01 00:00:01,)'),
  4594. ('[1970-01-01 00:00:01 ,)'),
  4595. ('[ 1970-01-01 00:00:01 ,)'),
  4596. ('[1970-01-01 00:00:01, 1970-01-01 00:00:02)'),
  4597. ('[1970-01-01 00:00:01,1970-01-01 00:00:02 )'),
  4598. ('[1970-01-01 00:00:01, 1970-01-01 00:00:02 )'),
  4599. ('[1970-01-01 00:00:01,) '),
  4600. (' (,1970-01-01 00:00:01)'),
  4601. ('(, 1970-01-01 00:00:01)'),
  4602. (' (,) ')
  4603. ) t;
  4604. ----
  4605. empty
  4606. (,)
  4607. (,"1970-01-01 00:00:01")
  4608. ["1970-01-01 00:00:01",)
  4609. ["1970-01-01 00:00:01","1970-01-01 00:00:02")
  4610. # Input errors
  4611. query error invalid input syntax for type range
  4612. SELECT '[1970-01-01 00:00:01, )'::tsrange
  4613. query error invalid input syntax for type range
  4614. SELECT '( ,1970-01-01 00:00:01)'::tsrange
  4615. query error invalid input syntax for type range
  4616. SELECT '( , )'::tsrange
  4617. query error invalid input syntax for type range
  4618. SELECT 'emptyy'::tsrange;
  4619. query error invalid input syntax for type range
  4620. SELECT ''::tsrange;
  4621. query error invalid input syntax for type range
  4622. SELECT '1'::tsrange;
  4623. query error invalid input syntax for type range
  4624. SELECT 'd'::tsrange;
  4625. query error invalid input syntax for type range
  4626. SELECT ','::tsrange;
  4627. query error invalid input syntax for type range
  4628. SELECT ')'::tsrange;
  4629. query error invalid input syntax for type range
  4630. SELECT '{'::tsrange;
  4631. query error invalid input syntax for type range
  4632. SELECT '('::tsrange;
  4633. query error invalid input syntax for type range
  4634. SELECT '['::tsrange;
  4635. query error invalid input syntax for type range
  4636. SELECT '(1970-01-01 00:00:01)'::tsrange;
  4637. query error invalid input syntax for type range
  4638. SELECT '[1970-01-01 00:00:01]'::tsrange;
  4639. query error invalid input syntax for type range
  4640. SELECT '(1970-01-01 00:00:01,'::tsrange;
  4641. query error invalid input syntax for type range
  4642. SELECT '[1970-01-01 00:00:01,'::tsrange;
  4643. query error invalid input syntax for type range
  4644. SELECT '(1970-01-01 00:00:01,1'::tsrange;
  4645. query error invalid input syntax for type range
  4646. SELECT '[1970-01-01 00:00:01,1'::tsrange;
  4647. query error invalid input syntax for type range
  4648. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1]1'::tsrange;
  4649. query error invalid input syntax for type range
  4650. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1]a'::tsrange;
  4651. query error invalid input syntax for type range
  4652. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1]]'::tsrange;
  4653. query error invalid input syntax for type range
  4654. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1]}'::tsrange;
  4655. query error invalid input syntax for type range
  4656. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1] ]'::tsrange;
  4657. query error invalid input syntax for type range
  4658. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1] }'::tsrange;
  4659. statement ok
  4660. CREATE TABLE tsrange_values (a tsrange);
  4661. statement ok
  4662. INSERT INTO tsrange_values VALUES
  4663. (null),
  4664. ('empty'),
  4665. ('[,1970-01-01 00:00:01)'::tsrange),
  4666. ('[,1970-01-01 00:00:01]'::tsrange),
  4667. ('[,)'::tsrange),
  4668. ('[,]'::tsrange),
  4669. ('(,1970-01-01 00:00:01)'::tsrange),
  4670. ('(,1970-01-01 00:00:01]'::tsrange),
  4671. ('(,)'::tsrange),
  4672. ('(,]'::tsrange),
  4673. ('[1969-12-31 11:59:59,1970-01-01 00:00:01)'::tsrange),
  4674. ('[1969-12-31 11:59:59,1970-01-01 00:00:01]'::tsrange),
  4675. ('(1969-12-31 11:59:59,1970-01-01 00:00:01)'::tsrange),
  4676. ('(1969-12-31 11:59:59,1970-01-01 00:00:01]'::tsrange),
  4677. ('[1970-01-01 00:00:00,1970-01-01 00:00:00)'::tsrange),
  4678. ('[1970-01-01 00:00:00,1970-01-01 00:00:00]'::tsrange),
  4679. ('(1970-01-01 00:00:00,1970-01-01 00:00:00)'::tsrange),
  4680. ('(1970-01-01 00:00:00,1970-01-01 00:00:00]'::tsrange),
  4681. ('[1970-01-01 00:00:01,)'::tsrange),
  4682. ('[1970-01-01 00:00:01,]'::tsrange),
  4683. ('(1970-01-01 00:00:01,)'::tsrange),
  4684. ('(1970-01-01 00:00:01,]'::tsrange);
  4685. query T
  4686. SELECT a AS t FROM tsrange_values ORDER BY a;
  4687. ----
  4688. empty
  4689. empty
  4690. empty
  4691. empty
  4692. (,"1970-01-01 00:00:01")
  4693. (,"1970-01-01 00:00:01")
  4694. (,"1970-01-01 00:00:01"]
  4695. (,"1970-01-01 00:00:01"]
  4696. (,)
  4697. (,)
  4698. (,)
  4699. (,)
  4700. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4701. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4702. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4703. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4704. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4705. ["1970-01-01 00:00:01",)
  4706. ["1970-01-01 00:00:01",)
  4707. ("1970-01-01 00:00:01",)
  4708. ("1970-01-01 00:00:01",)
  4709. NULL
  4710. query T
  4711. SELECT a AS t FROM tsrange_values EXCEPT SELECT column1 FROM (VALUES
  4712. (tsrange(null,'1970-01-01 00:00:01')),
  4713. (tsrange(null,'1970-01-01 00:00:01', '[]')),
  4714. (tsrange(null,null)),
  4715. (tsrange(null,null, '[]')),
  4716. (tsrange(null,'1970-01-01 00:00:01', '()')),
  4717. (tsrange(null,'1970-01-01 00:00:01', '(]')),
  4718. (tsrange(null,null, '()')),
  4719. (tsrange(null,null,'(]')),
  4720. (tsrange('1969-12-31 11:59:59','1970-01-01 00:00:01')),
  4721. (tsrange('1969-12-31 11:59:59','1970-01-01 00:00:01', '[]')),
  4722. (tsrange('1969-12-31 11:59:59','1970-01-01 00:00:01', '()')),
  4723. (tsrange('1969-12-31 11:59:59','1970-01-01 00:00:01','(]')),
  4724. (tsrange('1970-01-01 00:00:00','1970-01-01 00:00:00')),
  4725. (tsrange('1970-01-01 00:00:00','1970-01-01 00:00:00', '[]')),
  4726. (tsrange('1970-01-01 00:00:00','1970-01-01 00:00:00','()')),
  4727. (tsrange('1970-01-01 00:00:00','1970-01-01 00:00:00','(]')),
  4728. (tsrange('1970-01-01 00:00:01',null)),
  4729. (tsrange('1970-01-01 00:00:01',null, '[]')),
  4730. (tsrange('1970-01-01 00:00:01',null,'()')),
  4731. (tsrange('1970-01-01 00:00:01',null,'(]'))
  4732. ) t;
  4733. ----
  4734. NULL
  4735. query error range constructor flags argument must not be null
  4736. SELECT tsrange('1970-01-01 00:00:01','1970-01-01 00:00:01',null);
  4737. query error range constructor flags argument must not be null
  4738. SELECT tsrange(null,null,null);
  4739. #
  4740. # tsrange upper, lower
  4741. query TT
  4742. SELECT DISTINCT lower(a), upper(a) FROM tsrange_values ORDER BY 1, 2;
  4743. ----
  4744. 1969-12-31 11:59:59
  4745. 1970-01-01 00:00:01
  4746. 1970-01-01 00:00:00
  4747. 1970-01-01 00:00:00
  4748. 1970-01-01 00:00:01
  4749. NULL
  4750. NULL
  4751. 1970-01-01 00:00:01
  4752. NULL
  4753. NULL
  4754. # test that lower and upper roundtrip through range constructor function
  4755. query T
  4756. SELECT
  4757. a
  4758. FROM
  4759. tsrange_values
  4760. WHERE
  4761. (NOT isempty(a))
  4762. AND (
  4763. a
  4764. != tsrange(
  4765. lower(a),
  4766. upper(a),
  4767. CASE
  4768. WHEN lower_inc(a) THEN '['
  4769. ELSE '('
  4770. END
  4771. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  4772. )
  4773. );
  4774. ----
  4775. query T
  4776. SELECT DISTINCT a FROM tsrange_values WHERE lower_inf(a) AND upper_inf(a);
  4777. ----
  4778. (,)
  4779. query error invalid range bound flags
  4780. SELECT tsrange(null,null,' (]');
  4781. query error invalid range bound flags
  4782. SELECT tsrange(null,null,'(] ');
  4783. query error invalid range bound flags
  4784. SELECT tsrange(null,null,'( ]');
  4785. query error invalid range bound flags
  4786. SELECT tsrange(null,null,'(,]');
  4787. query error invalid range bound flags
  4788. SELECT tsrange(null,null,'a()');
  4789. query error invalid range bound flags
  4790. SELECT tsrange(null,null,'(a)');
  4791. query error invalid range bound flags
  4792. SELECT tsrange(null,null,'()a');
  4793. query error invalid range bound flags
  4794. SELECT tsrange(null,null,'(()');
  4795. query error invalid range bound flags
  4796. SELECT tsrange(null,null,'())');
  4797. # Test range in list
  4798. query T
  4799. SELECT LIST['(,)', 'empty', '[1969-12-31 11:59:59,1970-01-01 00:00:01]']::tsrange list::text;
  4800. ----
  4801. {"(,)",empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\"]"}
  4802. query T
  4803. SELECT '{"(,)","empty","[1969-12-31 11:59:59,1970-01-01 00:00:01]"}'::tsrange list::text;
  4804. ----
  4805. {"(,)",empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\"]"}
  4806. # Test range in array
  4807. query T
  4808. SELECT ARRAY['(,)', 'empty', '[1969-12-31 11:59:59,1970-01-01 00:00:01]']::_tsrange;
  4809. ----
  4810. {"(,)",empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\"]"}
  4811. query T
  4812. SELECT '{"(,)","empty","[1969-12-31 11:59:59,1970-01-01 00:00:01]"}'::_tsrange;
  4813. ----
  4814. {"(,)",empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\"]"}
  4815. # Test builtin functions
  4816. query B
  4817. select '(,)'::tsrange = '(,)'::tsrange;
  4818. ----
  4819. true
  4820. query B
  4821. select '(,)'::tsrange != 'empty'::tsrange;
  4822. ----
  4823. true
  4824. query B
  4825. select '(,)'::tsrange > 'empty'::tsrange;
  4826. ----
  4827. true
  4828. query B
  4829. select '(,)'::tsrange >= 'empty'::tsrange;
  4830. ----
  4831. true
  4832. query B
  4833. select '(,)'::tsrange < 'empty'::tsrange;
  4834. ----
  4835. false
  4836. query B
  4837. select '(,)'::tsrange <= 'empty'::tsrange;
  4838. ----
  4839. false
  4840. statement ok
  4841. CREATE TABLE tsrange_test_values (v tsrange);
  4842. statement ok
  4843. INSERT INTO tsrange_test_values VALUES
  4844. ('empty'),
  4845. ('(,)'),
  4846. ('(,1970-01-01 00:00:01)'),
  4847. ('(1969-12-31 11:59:59,)'),
  4848. ('[1969-12-31 11:59:59,1970-01-01 00:00:01)'),
  4849. ('[1969-01-01 00:00:00,1969-06-01 00:00:00)'),
  4850. ('[1971-01-01 00:00:00,1971-06-01 00:00:00)');
  4851. #
  4852. # tsrange contains
  4853. query TT
  4854. SELECT a t, array_agg(v ORDER BY v) FROM (
  4855. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4856. ) tsrange_values(a), tsrange_test_values WHERE a @> v GROUP BY a ORDER BY a;
  4857. ----
  4858. empty
  4859. {empty}
  4860. (,"1970-01-01 00:00:01")
  4861. {empty,"(,\"1970-01-01 00:00:01\")","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4862. (,"1970-01-01 00:00:01"]
  4863. {empty,"(,\"1970-01-01 00:00:01\")","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4864. (,)
  4865. {empty,"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4866. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4867. {empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4868. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4869. {empty,"[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4870. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4871. {empty}
  4872. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4873. {empty}
  4874. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4875. {empty}
  4876. ["1970-01-01 00:00:01",)
  4877. {empty,"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4878. ("1970-01-01 00:00:01",)
  4879. {empty,"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4880. #
  4881. # tsrange contained by
  4882. query TT
  4883. SELECT a t, array_agg(v ORDER BY v) FROM (
  4884. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4885. ) tsrange_values(a), tsrange_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  4886. ----
  4887. empty
  4888. {empty,"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4889. (,"1970-01-01 00:00:01")
  4890. {"(,\"1970-01-01 00:00:01\")","(,)"}
  4891. (,"1970-01-01 00:00:01"]
  4892. {"(,)"}
  4893. (,)
  4894. {"(,)"}
  4895. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4896. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4897. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4898. {"(,)"}
  4899. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4900. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4901. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4902. {"(,)","(\"1969-12-31 11:59:59\",)"}
  4903. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4904. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4905. ["1970-01-01 00:00:01",)
  4906. {"(,)","(\"1969-12-31 11:59:59\",)"}
  4907. ("1970-01-01 00:00:01",)
  4908. {"(,)","(\"1969-12-31 11:59:59\",)"}
  4909. #
  4910. # tsrange overlaps
  4911. query TT
  4912. SELECT a t, array_agg(v ORDER BY v) FROM (
  4913. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4914. ) tsrange_values(a), tsrange_test_values WHERE a && v GROUP BY a ORDER BY a;
  4915. ----
  4916. (,"1970-01-01 00:00:01")
  4917. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4918. (,"1970-01-01 00:00:01"]
  4919. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4920. (,)
  4921. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4922. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4923. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4924. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4925. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4926. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4927. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4928. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4929. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4930. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4931. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  4932. ["1970-01-01 00:00:01",)
  4933. {"(,)","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4934. ("1970-01-01 00:00:01",)
  4935. {"(,)","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4936. #
  4937. # tsrange before
  4938. query TT
  4939. SELECT a t, array_agg(v ORDER BY v) FROM (
  4940. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4941. ) tsrange_values(a), tsrange_test_values WHERE a << v GROUP BY a ORDER BY a;
  4942. ----
  4943. (,"1970-01-01 00:00:01")
  4944. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4945. (,"1970-01-01 00:00:01"]
  4946. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4947. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4948. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4949. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4950. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4951. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4952. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4953. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4954. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4955. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4956. {"[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4957. #
  4958. # tsrange after
  4959. query TT
  4960. SELECT a t, array_agg(v ORDER BY v) FROM (
  4961. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4962. ) tsrange_values(a), tsrange_test_values WHERE a >> v GROUP BY a ORDER BY a;
  4963. ----
  4964. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4965. {"[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")"}
  4966. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4967. {"[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")"}
  4968. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4969. {"[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")"}
  4970. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4971. {"[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")"}
  4972. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  4973. {"[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")"}
  4974. ["1970-01-01 00:00:01",)
  4975. {"(,\"1970-01-01 00:00:01\")","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4976. ("1970-01-01 00:00:01",)
  4977. {"(,\"1970-01-01 00:00:01\")","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  4978. #
  4979. # tsrange overleft
  4980. query TT
  4981. SELECT a t, array_agg(v ORDER BY v) FROM (
  4982. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  4983. ) tsrange_values(a), tsrange_test_values WHERE a &< v GROUP BY a ORDER BY a;
  4984. ----
  4985. (,"1970-01-01 00:00:01")
  4986. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4987. (,"1970-01-01 00:00:01"]
  4988. {"(,)","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4989. (,)
  4990. {"(,)","(\"1969-12-31 11:59:59\",)"}
  4991. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  4992. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4993. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4994. {"(,)","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4995. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  4996. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4997. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  4998. {"(,)","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  4999. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  5000. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)","[\"1971-01-01 00:00:00\",\"1971-06-01 00:00:00\")"}
  5001. ["1970-01-01 00:00:01",)
  5002. {"(,)","(\"1969-12-31 11:59:59\",)"}
  5003. ("1970-01-01 00:00:01",)
  5004. {"(,)","(\"1969-12-31 11:59:59\",)"}
  5005. #
  5006. # tsrange overright
  5007. query TT
  5008. SELECT a t, array_agg(v ORDER BY v) FROM (
  5009. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  5010. ) tsrange_values(a), tsrange_test_values WHERE a &> v GROUP BY a ORDER BY a;
  5011. ----
  5012. (,"1970-01-01 00:00:01")
  5013. {"(,\"1970-01-01 00:00:01\")","(,)"}
  5014. (,"1970-01-01 00:00:01"]
  5015. {"(,\"1970-01-01 00:00:01\")","(,)"}
  5016. (,)
  5017. {"(,\"1970-01-01 00:00:01\")","(,)"}
  5018. ["1969-12-31 11:59:59","1970-01-01 00:00:01")
  5019. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  5020. ["1969-12-31 11:59:59","1970-01-01 00:00:01"]
  5021. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  5022. ("1969-12-31 11:59:59","1970-01-01 00:00:01")
  5023. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  5024. ("1969-12-31 11:59:59","1970-01-01 00:00:01"]
  5025. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  5026. ["1970-01-01 00:00:00","1970-01-01 00:00:00"]
  5027. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  5028. ["1970-01-01 00:00:01",)
  5029. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  5030. ("1970-01-01 00:00:01",)
  5031. {"(,\"1970-01-01 00:00:01\")","(,)","[\"1969-01-01 00:00:00\",\"1969-06-01 00:00:00\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")","(\"1969-12-31 11:59:59\",)"}
  5032. #
  5033. # tsrange adjacent
  5034. query TT
  5035. SELECT a t, array_agg(v ORDER BY v) FROM (
  5036. SELECT DISTINCT a FROM tsrange_values WHERE a IS NOT NULL
  5037. ) tsrange_values(a), tsrange_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  5038. ----
  5039. ["1970-01-01 00:00:01",)
  5040. {"(,\"1970-01-01 00:00:01\")","[\"1969-12-31 11:59:59\",\"1970-01-01 00:00:01\")"}
  5041. query T
  5042. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:01.1]'::tsrange;
  5043. ----
  5044. ["1970-01-01 00:00:01.1","1970-01-01 00:00:01.1"]
  5045. query T
  5046. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:02]'::tsrange;
  5047. ----
  5048. ["1970-01-01 00:00:01.1","1970-01-01 00:00:02"]
  5049. query T
  5050. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:01.1)'::tsrange;
  5051. ----
  5052. empty
  5053. query T
  5054. SELECT tsrange('1970-01-01 00:00:01.1','1970-01-01 00:00:01.2');
  5055. ----
  5056. ["1970-01-01 00:00:01.1","1970-01-01 00:00:01.2")
  5057. query T
  5058. SELECT tsrange('1969-12-31 11:59:59.1','1970-01-01 00:00:01.2');
  5059. ----
  5060. ["1969-12-31 11:59:59.1","1970-01-01 00:00:01.2")
  5061. #
  5062. # tsrange union
  5063. query T
  5064. SELECT 'empty'::tsrange + 'empty'::tsrange
  5065. ----
  5066. empty
  5067. query T
  5068. SELECT 'empty'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5069. ----
  5070. (,"1969-12-31 11:59:59"]
  5071. query T
  5072. SELECT '(,1969-12-31 11:59:59]'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5073. ----
  5074. (,"1969-12-31 11:59:59"]
  5075. query T
  5076. SELECT 'empty'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5077. ----
  5078. (,"1969-12-31 11:59:59")
  5079. query T
  5080. SELECT 'empty'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5081. ----
  5082. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5083. query T
  5084. SELECT 'empty'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5085. ----
  5086. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5087. query T
  5088. SELECT 'empty'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5089. ----
  5090. ["1970-01-01 00:00:01",)
  5091. query T
  5092. SELECT 'empty'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5093. ----
  5094. ("1970-01-01 00:00:01",)
  5095. query T
  5096. SELECT 'empty'::tsrange + '(,)'::tsrange
  5097. ----
  5098. (,)
  5099. query T
  5100. SELECT '(,1969-12-31 11:59:59]'::tsrange + 'empty'::tsrange
  5101. ----
  5102. (,"1969-12-31 11:59:59"]
  5103. query T
  5104. SELECT '(,1969-12-31 11:59:59]'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5105. ----
  5106. (,"1969-12-31 11:59:59"]
  5107. query T
  5108. SELECT '(,1969-12-31 11:59:59]'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5109. ----
  5110. (,"1970-01-01 00:00:02")
  5111. query T
  5112. SELECT '(,1969-12-31 11:59:59]'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5113. ----
  5114. (,"1970-01-01 00:00:02"]
  5115. query error result of range union would not be contiguous
  5116. SELECT '(,1969-12-31 11:59:59]'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5117. query error result of range union would not be contiguous
  5118. SELECT '(,1969-12-31 11:59:59]'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5119. query T
  5120. SELECT '(,1969-12-31 11:59:59]'::tsrange + '(,)'::tsrange
  5121. ----
  5122. (,)
  5123. query T
  5124. SELECT '(,1969-12-31 11:59:59)'::tsrange + 'empty'::tsrange
  5125. ----
  5126. (,"1969-12-31 11:59:59")
  5127. query T
  5128. SELECT '(,1969-12-31 11:59:59)'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5129. ----
  5130. (,"1969-12-31 11:59:59"]
  5131. query T
  5132. SELECT '(,1969-12-31 11:59:59)'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5133. ----
  5134. (,"1970-01-01 00:00:02")
  5135. query T
  5136. SELECT '(,1969-12-31 11:59:59)'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5137. ----
  5138. (,"1970-01-01 00:00:02"]
  5139. query error result of range union would not be contiguous
  5140. SELECT '(,1969-12-31 11:59:59)'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5141. query error result of range union would not be contiguous
  5142. SELECT '(,1969-12-31 11:59:59)'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5143. query T
  5144. SELECT '(,1969-12-31 11:59:59)'::tsrange + '(,)'::tsrange
  5145. ----
  5146. (,)
  5147. query T
  5148. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + 'empty'::tsrange
  5149. ----
  5150. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5151. query T
  5152. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5153. ----
  5154. (,"1970-01-01 00:00:02")
  5155. query T
  5156. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5157. ----
  5158. (,"1970-01-01 00:00:02")
  5159. query T
  5160. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5161. ----
  5162. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5163. query T
  5164. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5165. ----
  5166. ("1969-12-31 11:59:58",)
  5167. query T
  5168. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5169. ----
  5170. ("1969-12-31 11:59:58",)
  5171. query T
  5172. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange + '(,)'::tsrange
  5173. ----
  5174. (,)
  5175. query T
  5176. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + 'empty'::tsrange
  5177. ----
  5178. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5179. query T
  5180. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5181. ----
  5182. (,"1970-01-01 00:00:02"]
  5183. query T
  5184. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5185. ----
  5186. (,"1970-01-01 00:00:02"]
  5187. query T
  5188. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5189. ----
  5190. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5191. query T
  5192. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5193. ----
  5194. ["1969-12-31 11:59:58",)
  5195. query T
  5196. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5197. ----
  5198. ["1969-12-31 11:59:58",)
  5199. query T
  5200. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange + '(,)'::tsrange
  5201. ----
  5202. (,)
  5203. query T
  5204. SELECT '[1970-01-01 00:00:01,)'::tsrange + 'empty'::tsrange
  5205. ----
  5206. ["1970-01-01 00:00:01",)
  5207. query error result of range union would not be contiguous
  5208. SELECT '[1970-01-01 00:00:01,)'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5209. query error result of range union would not be contiguous
  5210. SELECT '[1970-01-01 00:00:01,)'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5211. query T
  5212. SELECT '[1970-01-01 00:00:01,)'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5213. ----
  5214. ("1969-12-31 11:59:58",)
  5215. query T
  5216. SELECT '[1970-01-01 00:00:01,)'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5217. ----
  5218. ["1969-12-31 11:59:58",)
  5219. query T
  5220. SELECT '[1970-01-01 00:00:01,)'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5221. ----
  5222. ["1970-01-01 00:00:01",)
  5223. query T
  5224. SELECT '[1970-01-01 00:00:01,)'::tsrange + '(,)'::tsrange
  5225. ----
  5226. (,)
  5227. query T
  5228. SELECT '(1970-01-01 00:00:01,)'::tsrange + 'empty'::tsrange
  5229. ----
  5230. ("1970-01-01 00:00:01",)
  5231. query error result of range union would not be contiguous
  5232. SELECT '(1970-01-01 00:00:01,)'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5233. query error result of range union would not be contiguous
  5234. SELECT '(1970-01-01 00:00:01,)'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5235. query T
  5236. SELECT '(1970-01-01 00:00:01,)'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5237. ----
  5238. ("1969-12-31 11:59:58",)
  5239. query T
  5240. SELECT '(1970-01-01 00:00:01,)'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5241. ----
  5242. ["1969-12-31 11:59:58",)
  5243. query T
  5244. SELECT '(1970-01-01 00:00:01,)'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5245. ----
  5246. ["1970-01-01 00:00:01",)
  5247. query T
  5248. SELECT '(1970-01-01 00:00:01,)'::tsrange + '(,)'::tsrange
  5249. ----
  5250. (,)
  5251. query T
  5252. SELECT '(,)'::tsrange + 'empty'::tsrange
  5253. ----
  5254. (,)
  5255. query T
  5256. SELECT '(,)'::tsrange + '(,1969-12-31 11:59:59]'::tsrange
  5257. ----
  5258. (,)
  5259. query T
  5260. SELECT '(,)'::tsrange + '(,1969-12-31 11:59:59)'::tsrange
  5261. ----
  5262. (,)
  5263. query T
  5264. SELECT '(,)'::tsrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5265. ----
  5266. (,)
  5267. query T
  5268. SELECT '(,)'::tsrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5269. ----
  5270. (,)
  5271. query T
  5272. SELECT '(,)'::tsrange + '[1970-01-01 00:00:01,)'::tsrange
  5273. ----
  5274. (,)
  5275. query T
  5276. SELECT '(,)'::tsrange + '(1970-01-01 00:00:01,)'::tsrange
  5277. ----
  5278. (,)
  5279. #
  5280. # tsrange intersection
  5281. query T
  5282. SELECT 'empty'::tsrange * 'empty'::tsrange
  5283. ----
  5284. empty
  5285. query T
  5286. SELECT 'empty'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5287. ----
  5288. empty
  5289. query T
  5290. SELECT '(,1969-12-31 11:59:59]'::tsrange * 'empty'::tsrange
  5291. ----
  5292. empty
  5293. query T
  5294. SELECT '(,1969-12-31 11:59:59]'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5295. ----
  5296. (,"1969-12-31 11:59:59"]
  5297. query T
  5298. SELECT 'empty'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5299. ----
  5300. empty
  5301. query T
  5302. SELECT 'empty'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5303. ----
  5304. empty
  5305. query T
  5306. SELECT 'empty'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5307. ----
  5308. empty
  5309. query T
  5310. SELECT 'empty'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5311. ----
  5312. empty
  5313. query T
  5314. SELECT 'empty'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5315. ----
  5316. empty
  5317. query T
  5318. SELECT 'empty'::tsrange * '(,)'::tsrange
  5319. ----
  5320. empty
  5321. query T
  5322. SELECT '(,1969-12-31 11:59:59]'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5323. ----
  5324. (,"1969-12-31 11:59:59")
  5325. query T
  5326. SELECT '(,1969-12-31 11:59:59]'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5327. ----
  5328. ("1969-12-31 11:59:58","1969-12-31 11:59:59"]
  5329. query T
  5330. SELECT '(,1969-12-31 11:59:59]'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5331. ----
  5332. ["1969-12-31 11:59:58","1969-12-31 11:59:59"]
  5333. query T
  5334. SELECT '(,1969-12-31 11:59:59]'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5335. ----
  5336. empty
  5337. query T
  5338. SELECT '(,1969-12-31 11:59:59]'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5339. ----
  5340. empty
  5341. query T
  5342. SELECT '(,1969-12-31 11:59:59]'::tsrange * '(,)'::tsrange
  5343. ----
  5344. (,"1969-12-31 11:59:59"]
  5345. query T
  5346. SELECT '(,1969-12-31 11:59:59)'::tsrange * 'empty'::tsrange
  5347. ----
  5348. empty
  5349. query T
  5350. SELECT '(,1969-12-31 11:59:59)'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5351. ----
  5352. (,"1969-12-31 11:59:59")
  5353. query T
  5354. SELECT '(,1969-12-31 11:59:59)'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5355. ----
  5356. ("1969-12-31 11:59:58","1969-12-31 11:59:59")
  5357. query T
  5358. SELECT '(,1969-12-31 11:59:59)'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5359. ----
  5360. ["1969-12-31 11:59:58","1969-12-31 11:59:59")
  5361. query T
  5362. SELECT '(,1969-12-31 11:59:59)'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5363. ----
  5364. empty
  5365. query T
  5366. SELECT '(,1969-12-31 11:59:59)'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5367. ----
  5368. empty
  5369. query T
  5370. SELECT '(,1969-12-31 11:59:59)'::tsrange * '(,)'::tsrange
  5371. ----
  5372. (,"1969-12-31 11:59:59")
  5373. query T
  5374. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * 'empty'::tsrange
  5375. ----
  5376. empty
  5377. query T
  5378. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5379. ----
  5380. ("1969-12-31 11:59:58","1969-12-31 11:59:59"]
  5381. query T
  5382. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5383. ----
  5384. ("1969-12-31 11:59:58","1969-12-31 11:59:59")
  5385. query T
  5386. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5387. ----
  5388. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5389. query T
  5390. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5391. ----
  5392. ["1970-01-01 00:00:01","1970-01-01 00:00:02")
  5393. query T
  5394. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5395. ----
  5396. ("1970-01-01 00:00:01","1970-01-01 00:00:02")
  5397. query T
  5398. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange * '(,)'::tsrange
  5399. ----
  5400. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5401. query T
  5402. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * 'empty'::tsrange
  5403. ----
  5404. empty
  5405. query T
  5406. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5407. ----
  5408. ["1969-12-31 11:59:58","1969-12-31 11:59:59"]
  5409. query T
  5410. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5411. ----
  5412. ["1969-12-31 11:59:58","1969-12-31 11:59:59")
  5413. query T
  5414. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5415. ----
  5416. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5417. query T
  5418. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5419. ----
  5420. ["1970-01-01 00:00:01","1970-01-01 00:00:02"]
  5421. query T
  5422. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5423. ----
  5424. ("1970-01-01 00:00:01","1970-01-01 00:00:02"]
  5425. query T
  5426. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange * '(,)'::tsrange
  5427. ----
  5428. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5429. query T
  5430. SELECT '[1970-01-01 00:00:01,)'::tsrange * 'empty'::tsrange
  5431. ----
  5432. empty
  5433. query T
  5434. SELECT '[1970-01-01 00:00:01,)'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5435. ----
  5436. empty
  5437. query T
  5438. SELECT '[1970-01-01 00:00:01,)'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5439. ----
  5440. empty
  5441. query T
  5442. SELECT '[1970-01-01 00:00:01,)'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5443. ----
  5444. ["1970-01-01 00:00:01","1970-01-01 00:00:02")
  5445. query T
  5446. SELECT '[1970-01-01 00:00:01,)'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5447. ----
  5448. ["1970-01-01 00:00:01","1970-01-01 00:00:02"]
  5449. query T
  5450. SELECT '[1970-01-01 00:00:01,)'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5451. ----
  5452. ("1970-01-01 00:00:01",)
  5453. query T
  5454. SELECT '[1970-01-01 00:00:01,)'::tsrange * '(,)'::tsrange
  5455. ----
  5456. ["1970-01-01 00:00:01",)
  5457. query T
  5458. SELECT '(1970-01-01 00:00:01,)'::tsrange * 'empty'::tsrange
  5459. ----
  5460. empty
  5461. query T
  5462. SELECT '(1970-01-01 00:00:01,)'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5463. ----
  5464. empty
  5465. query T
  5466. SELECT '(1970-01-01 00:00:01,)'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5467. ----
  5468. empty
  5469. query T
  5470. SELECT '(1970-01-01 00:00:01,)'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5471. ----
  5472. ("1970-01-01 00:00:01","1970-01-01 00:00:02")
  5473. query T
  5474. SELECT '(1970-01-01 00:00:01,)'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5475. ----
  5476. ("1970-01-01 00:00:01","1970-01-01 00:00:02"]
  5477. query T
  5478. SELECT '(1970-01-01 00:00:01,)'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5479. ----
  5480. ("1970-01-01 00:00:01",)
  5481. query T
  5482. SELECT '(1970-01-01 00:00:01,)'::tsrange * '(,)'::tsrange
  5483. ----
  5484. ("1970-01-01 00:00:01",)
  5485. query T
  5486. SELECT '(,)'::tsrange * 'empty'::tsrange
  5487. ----
  5488. empty
  5489. query T
  5490. SELECT '(,)'::tsrange * '(,1969-12-31 11:59:59]'::tsrange
  5491. ----
  5492. (,"1969-12-31 11:59:59"]
  5493. query T
  5494. SELECT '(,)'::tsrange * '(,1969-12-31 11:59:59)'::tsrange
  5495. ----
  5496. (,"1969-12-31 11:59:59")
  5497. query T
  5498. SELECT '(,)'::tsrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5499. ----
  5500. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5501. query T
  5502. SELECT '(,)'::tsrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5503. ----
  5504. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5505. query T
  5506. SELECT '(,)'::tsrange * '[1970-01-01 00:00:01,)'::tsrange
  5507. ----
  5508. ["1970-01-01 00:00:01",)
  5509. query T
  5510. SELECT '(,)'::tsrange * '(1970-01-01 00:00:01,)'::tsrange
  5511. ----
  5512. ("1970-01-01 00:00:01",)
  5513. #
  5514. # tsrange difference
  5515. query T
  5516. SELECT 'empty'::tsrange - 'empty'::tsrange
  5517. ----
  5518. empty
  5519. query T
  5520. SELECT 'empty'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5521. ----
  5522. empty
  5523. query T
  5524. SELECT '(,1969-12-31 11:59:59]'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5525. ----
  5526. empty
  5527. query T
  5528. SELECT 'empty'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5529. ----
  5530. empty
  5531. query T
  5532. SELECT 'empty'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5533. ----
  5534. empty
  5535. query T
  5536. SELECT 'empty'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5537. ----
  5538. empty
  5539. query T
  5540. SELECT 'empty'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5541. ----
  5542. empty
  5543. query T
  5544. SELECT 'empty'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5545. ----
  5546. empty
  5547. query T
  5548. SELECT 'empty'::tsrange - '(,)'::tsrange
  5549. ----
  5550. empty
  5551. query T
  5552. SELECT '(,1969-12-31 11:59:59]'::tsrange - 'empty'::tsrange
  5553. ----
  5554. (,"1969-12-31 11:59:59"]
  5555. query T
  5556. SELECT '(,1969-12-31 11:59:59]'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5557. ----
  5558. ["1969-12-31 11:59:59","1969-12-31 11:59:59"]
  5559. query T
  5560. SELECT '(,1969-12-31 11:59:59]'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5561. ----
  5562. (,"1969-12-31 11:59:58"]
  5563. query T
  5564. SELECT '(,1969-12-31 11:59:59]'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5565. ----
  5566. (,"1969-12-31 11:59:58")
  5567. query T
  5568. SELECT '(,1969-12-31 11:59:59]'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5569. ----
  5570. (,"1969-12-31 11:59:59"]
  5571. query T
  5572. SELECT '(,1969-12-31 11:59:59]'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5573. ----
  5574. (,"1969-12-31 11:59:59"]
  5575. query T
  5576. SELECT '(,1969-12-31 11:59:59]'::tsrange - '(,)'::tsrange
  5577. ----
  5578. empty
  5579. query T
  5580. SELECT '(,1969-12-31 11:59:59)'::tsrange - 'empty'::tsrange
  5581. ----
  5582. (,"1969-12-31 11:59:59")
  5583. query T
  5584. SELECT '(,1969-12-31 11:59:59)'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5585. ----
  5586. empty
  5587. query T
  5588. SELECT '(,1969-12-31 11:59:59)'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5589. ----
  5590. (,"1969-12-31 11:59:58"]
  5591. query T
  5592. SELECT '(,1969-12-31 11:59:59)'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5593. ----
  5594. (,"1969-12-31 11:59:58")
  5595. query T
  5596. SELECT '(,1969-12-31 11:59:59)'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5597. ----
  5598. (,"1969-12-31 11:59:59")
  5599. query T
  5600. SELECT '(,1969-12-31 11:59:59)'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5601. ----
  5602. (,"1969-12-31 11:59:59")
  5603. query T
  5604. SELECT '(,1969-12-31 11:59:59)'::tsrange - '(,)'::tsrange
  5605. ----
  5606. empty
  5607. query T
  5608. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - 'empty'::tsrange
  5609. ----
  5610. ("1969-12-31 11:59:58","1970-01-01 00:00:02")
  5611. query T
  5612. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5613. ----
  5614. ("1969-12-31 11:59:59","1970-01-01 00:00:02")
  5615. query T
  5616. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5617. ----
  5618. ["1969-12-31 11:59:59","1970-01-01 00:00:02")
  5619. query T
  5620. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5621. ----
  5622. empty
  5623. query T
  5624. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5625. ----
  5626. ("1969-12-31 11:59:58","1970-01-01 00:00:01")
  5627. query T
  5628. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5629. ----
  5630. ("1969-12-31 11:59:58","1970-01-01 00:00:01"]
  5631. query T
  5632. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange - '(,)'::tsrange
  5633. ----
  5634. empty
  5635. query T
  5636. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - 'empty'::tsrange
  5637. ----
  5638. ["1969-12-31 11:59:58","1970-01-01 00:00:02"]
  5639. query T
  5640. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5641. ----
  5642. ("1969-12-31 11:59:59","1970-01-01 00:00:02"]
  5643. query T
  5644. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5645. ----
  5646. ["1969-12-31 11:59:59","1970-01-01 00:00:02"]
  5647. query error result of range difference would not be contiguous
  5648. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5649. query T
  5650. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5651. ----
  5652. ["1969-12-31 11:59:58","1970-01-01 00:00:01")
  5653. query T
  5654. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5655. ----
  5656. ["1969-12-31 11:59:58","1970-01-01 00:00:01"]
  5657. query T
  5658. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange - '(,)'::tsrange
  5659. ----
  5660. empty
  5661. query T
  5662. SELECT '[1970-01-01 00:00:01,)'::tsrange - 'empty'::tsrange
  5663. ----
  5664. ["1970-01-01 00:00:01",)
  5665. query T
  5666. SELECT '[1970-01-01 00:00:01,)'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5667. ----
  5668. ["1970-01-01 00:00:01",)
  5669. query T
  5670. SELECT '[1970-01-01 00:00:01,)'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5671. ----
  5672. ["1970-01-01 00:00:01",)
  5673. query T
  5674. SELECT '[1970-01-01 00:00:01,)'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5675. ----
  5676. ["1970-01-01 00:00:02",)
  5677. query T
  5678. SELECT '[1970-01-01 00:00:01,)'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5679. ----
  5680. ("1970-01-01 00:00:02",)
  5681. query T
  5682. SELECT '[1970-01-01 00:00:01,)'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5683. ----
  5684. ["1970-01-01 00:00:01","1970-01-01 00:00:01"]
  5685. query T
  5686. SELECT '[1970-01-01 00:00:01,)'::tsrange - '(,)'::tsrange
  5687. ----
  5688. empty
  5689. query T
  5690. SELECT '(1970-01-01 00:00:01,)'::tsrange - 'empty'::tsrange
  5691. ----
  5692. ("1970-01-01 00:00:01",)
  5693. query T
  5694. SELECT '(1970-01-01 00:00:01,)'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5695. ----
  5696. ("1970-01-01 00:00:01",)
  5697. query T
  5698. SELECT '(1970-01-01 00:00:01,)'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5699. ----
  5700. ("1970-01-01 00:00:01",)
  5701. query T
  5702. SELECT '(1970-01-01 00:00:01,)'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5703. ----
  5704. ["1970-01-01 00:00:02",)
  5705. query T
  5706. SELECT '(1970-01-01 00:00:01,)'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5707. ----
  5708. ("1970-01-01 00:00:02",)
  5709. query T
  5710. SELECT '(1970-01-01 00:00:01,)'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5711. ----
  5712. empty
  5713. query T
  5714. SELECT '(1970-01-01 00:00:01,)'::tsrange - '(,)'::tsrange
  5715. ----
  5716. empty
  5717. query T
  5718. SELECT '(,)'::tsrange - 'empty'::tsrange
  5719. ----
  5720. (,)
  5721. query T
  5722. SELECT '(,)'::tsrange - '(,1969-12-31 11:59:59]'::tsrange
  5723. ----
  5724. ("1969-12-31 11:59:59",)
  5725. query T
  5726. SELECT '(,)'::tsrange - '(,1969-12-31 11:59:59)'::tsrange
  5727. ----
  5728. ["1969-12-31 11:59:59",)
  5729. query error result of range difference would not be contiguous
  5730. SELECT '(,)'::tsrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tsrange
  5731. query error result of range difference would not be contiguous
  5732. SELECT '(,)'::tsrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tsrange
  5733. query T
  5734. SELECT '(,)'::tsrange - '[1970-01-01 00:00:01,)'::tsrange
  5735. ----
  5736. (,"1970-01-01 00:00:01")
  5737. query T
  5738. SELECT '(,)'::tsrange - '(1970-01-01 00:00:01,)'::tsrange
  5739. ----
  5740. (,"1970-01-01 00:00:01"]
  5741. #
  5742. # tstzrange
  5743. query T
  5744. select '[1970-01-01 00:00:00,1971-01-01 00:00:00)'::tstzrange;
  5745. ----
  5746. ["1970-01-01 00:00:00+00","1971-01-01 00:00:00+00")
  5747. query T
  5748. select pg_typeof('[1970-01-01 00:00:00,1971-01-01 00:00:00)'::tstzrange);
  5749. ----
  5750. tstzrange
  5751. query T
  5752. select 'empty'::tstzrange;
  5753. ----
  5754. empty
  5755. query T
  5756. select pg_typeof('empty'::tstzrange);
  5757. ----
  5758. tstzrange
  5759. query T
  5760. select null::tstzrange
  5761. ----
  5762. NULL
  5763. query T
  5764. SELECT '(,)'::tstzrange;
  5765. ----
  5766. (,)
  5767. query T
  5768. SELECT '(,1969-12-31 11:59:59)'::tstzrange;
  5769. ----
  5770. (,"1969-12-31 11:59:59+00")
  5771. query T
  5772. SELECT '(,1970-01-01 00:00:00)'::tstzrange;
  5773. ----
  5774. (,"1970-01-01 00:00:00+00")
  5775. query T
  5776. SELECT '(,1970-01-01 00:00:01)'::tstzrange;
  5777. ----
  5778. (,"1970-01-01 00:00:01+00")
  5779. query T
  5780. SELECT '(,]'::tstzrange;
  5781. ----
  5782. (,)
  5783. query T
  5784. SELECT '(,1969-12-31 11:59:59]'::tstzrange;
  5785. ----
  5786. (,"1969-12-31 11:59:59+00"]
  5787. query T
  5788. SELECT '(,1970-01-01 00:00:00]'::tstzrange;
  5789. ----
  5790. (,"1970-01-01 00:00:00+00"]
  5791. query T
  5792. SELECT '(,1970-01-01 00:00:01]'::tstzrange;
  5793. ----
  5794. (,"1970-01-01 00:00:01+00"]
  5795. query T
  5796. SELECT '(1969-12-31 11:59:59,)'::tstzrange;
  5797. ----
  5798. ("1969-12-31 11:59:59+00",)
  5799. query T
  5800. SELECT '(1969-12-31 11:59:59,1969-12-31 11:59:59)'::tstzrange;
  5801. ----
  5802. empty
  5803. query T
  5804. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:00)'::tstzrange;
  5805. ----
  5806. ("1969-12-31 11:59:59+00","1970-01-01 00:00:00+00")
  5807. query T
  5808. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:01)'::tstzrange;
  5809. ----
  5810. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  5811. query T
  5812. SELECT '(1969-12-31 11:59:59,]'::tstzrange;
  5813. ----
  5814. ("1969-12-31 11:59:59+00",)
  5815. query T
  5816. SELECT '(1969-12-31 11:59:59,1969-12-31 11:59:59]'::tstzrange;
  5817. ----
  5818. empty
  5819. query T
  5820. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:00]'::tstzrange;
  5821. ----
  5822. ("1969-12-31 11:59:59+00","1970-01-01 00:00:00+00"]
  5823. query T
  5824. SELECT '(1969-12-31 11:59:59,1970-01-01 00:00:01]'::tstzrange;
  5825. ----
  5826. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  5827. query T
  5828. SELECT '(1970-01-01 00:00:00,)'::tstzrange;
  5829. ----
  5830. ("1970-01-01 00:00:00+00",)
  5831. query error range lower bound must be less than or equal to range upper bound
  5832. SELECT '(1970-01-01 00:00:00,1969-12-31 11:59:59)'::tstzrange;
  5833. query T
  5834. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:00)'::tstzrange;
  5835. ----
  5836. empty
  5837. query T
  5838. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:01)'::tstzrange;
  5839. ----
  5840. ("1970-01-01 00:00:00+00","1970-01-01 00:00:01+00")
  5841. query T
  5842. SELECT '(1970-01-01 00:00:00,]'::tstzrange;
  5843. ----
  5844. ("1970-01-01 00:00:00+00",)
  5845. query error range lower bound must be less than or equal to range upper bound
  5846. SELECT '(1970-01-01 00:00:00,1969-12-31 11:59:59]'::tstzrange;
  5847. query T
  5848. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:00]'::tstzrange;
  5849. ----
  5850. empty
  5851. query T
  5852. SELECT '(1970-01-01 00:00:00,1970-01-01 00:00:01]'::tstzrange;
  5853. ----
  5854. ("1970-01-01 00:00:00+00","1970-01-01 00:00:01+00"]
  5855. query T
  5856. SELECT '(1970-01-01 00:00:01,)'::tstzrange;
  5857. ----
  5858. ("1970-01-01 00:00:01+00",)
  5859. query error range lower bound must be less than or equal to range upper bound
  5860. SELECT '(1970-01-01 00:00:01,1969-12-31 11:59:59)'::tstzrange;
  5861. query error range lower bound must be less than or equal to range upper bound
  5862. SELECT '(1970-01-01 00:00:01,1970-01-01 00:00:00)'::tstzrange;
  5863. query T
  5864. SELECT '(1970-01-01 00:00:01.1,1970-01-01 00:00:01.1)'::tstzrange;
  5865. ----
  5866. empty
  5867. query T
  5868. SELECT '(1970-01-01 00:00:01,]'::tstzrange;
  5869. ----
  5870. ("1970-01-01 00:00:01+00",)
  5871. query error range lower bound must be less than or equal to range upper bound
  5872. SELECT '(1970-01-01 00:00:01,1969-12-31 11:59:59]'::tstzrange;
  5873. query error range lower bound must be less than or equal to range upper bound
  5874. SELECT '(1970-01-01 00:00:01,1970-01-01 00:00:00]'::tstzrange;
  5875. query T
  5876. SELECT '(1970-01-01 00:00:01.1, 1970-01-01 00:00:01.1]'::tstzrange;
  5877. ----
  5878. empty
  5879. query T
  5880. SELECT '[,)'::tstzrange;
  5881. ----
  5882. (,)
  5883. query T
  5884. SELECT '[,1969-12-31 11:59:59)'::tstzrange;
  5885. ----
  5886. (,"1969-12-31 11:59:59+00")
  5887. query T
  5888. SELECT '[,1970-01-01 00:00:00)'::tstzrange;
  5889. ----
  5890. (,"1970-01-01 00:00:00+00")
  5891. query T
  5892. SELECT '[,1970-01-01 00:00:01)'::tstzrange;
  5893. ----
  5894. (,"1970-01-01 00:00:01+00")
  5895. query T
  5896. SELECT '[,]'::tstzrange;
  5897. ----
  5898. (,)
  5899. query T
  5900. SELECT '[,1969-12-31 11:59:59]'::tstzrange;
  5901. ----
  5902. (,"1969-12-31 11:59:59+00"]
  5903. query T
  5904. SELECT '[,1970-01-01 00:00:00]'::tstzrange;
  5905. ----
  5906. (,"1970-01-01 00:00:00+00"]
  5907. query T
  5908. SELECT '[,1970-01-01 00:00:01]'::tstzrange;
  5909. ----
  5910. (,"1970-01-01 00:00:01+00"]
  5911. query T
  5912. SELECT '[1969-12-31 11:59:59,)'::tstzrange;
  5913. ----
  5914. ["1969-12-31 11:59:59+00",)
  5915. query T
  5916. SELECT '[1969-12-31 11:59:59,1969-12-31 11:59:59)'::tstzrange;
  5917. ----
  5918. empty
  5919. query T
  5920. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:00)'::tstzrange;
  5921. ----
  5922. ["1969-12-31 11:59:59+00","1970-01-01 00:00:00+00")
  5923. query T
  5924. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:01)'::tstzrange;
  5925. ----
  5926. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  5927. query T
  5928. SELECT '[1969-12-31 11:59:59,]'::tstzrange;
  5929. ----
  5930. ["1969-12-31 11:59:59+00",)
  5931. query T
  5932. SELECT '[1969-12-31 11:59:59,1969-12-31 11:59:59]'::tstzrange;
  5933. ----
  5934. ["1969-12-31 11:59:59+00","1969-12-31 11:59:59+00"]
  5935. query T
  5936. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:00]'::tstzrange;
  5937. ----
  5938. ["1969-12-31 11:59:59+00","1970-01-01 00:00:00+00"]
  5939. query T
  5940. SELECT '[1969-12-31 11:59:59,1970-01-01 00:00:01]'::tstzrange;
  5941. ----
  5942. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  5943. query T
  5944. SELECT '[1970-01-01 00:00:00,)'::tstzrange;
  5945. ----
  5946. ["1970-01-01 00:00:00+00",)
  5947. query error range lower bound must be less than or equal to range upper bound
  5948. SELECT '[1970-01-01 00:00:00,1969-12-31 11:59:59)'::tstzrange;
  5949. query T
  5950. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:00)'::tstzrange;
  5951. ----
  5952. empty
  5953. query T
  5954. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:01)'::tstzrange;
  5955. ----
  5956. ["1970-01-01 00:00:00+00","1970-01-01 00:00:01+00")
  5957. query T
  5958. SELECT '[1970-01-01 00:00:00,]'::tstzrange;
  5959. ----
  5960. ["1970-01-01 00:00:00+00",)
  5961. query error range lower bound must be less than or equal to range upper bound
  5962. SELECT '[1970-01-01 00:00:00,1969-12-31 11:59:59]'::tstzrange;
  5963. query T
  5964. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:00]'::tstzrange;
  5965. ----
  5966. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  5967. query T
  5968. SELECT '[1970-01-01 00:00:00,1970-01-01 00:00:01]'::tstzrange;
  5969. ----
  5970. ["1970-01-01 00:00:00+00","1970-01-01 00:00:01+00"]
  5971. query T
  5972. SELECT '[1970-01-01 00:00:01,)'::tstzrange;
  5973. ----
  5974. ["1970-01-01 00:00:01+00",)
  5975. query error range lower bound must be less than or equal to range upper bound
  5976. SELECT '[1970-01-01 00:00:01,1969-12-31 11:59:59)'::tstzrange;
  5977. query error range lower bound must be less than or equal to range upper bound
  5978. SELECT '[1970-01-01 00:00:01,1970-01-01 00:00:00)'::tstzrange;
  5979. query T
  5980. SELECT '[1970-01-01 00:00:01.1, 1970-01-01 00:00:01.1)'::tstzrange;
  5981. ----
  5982. empty
  5983. query T
  5984. SELECT '[1970-01-01 00:00:01,]'::tstzrange;
  5985. ----
  5986. ["1970-01-01 00:00:01+00",)
  5987. query T
  5988. SELECT '["2024-02-13 17:01:58.37848+00",)'::tstzrange;
  5989. ----
  5990. ["2024-02-13 17:01:58.37848+00",)
  5991. query T
  5992. SELECT '["?!?2024-02-13 17:01:58.37848+00!?!",)'::tstzrange;
  5993. ----
  5994. ["2024-02-13 17:01:58.37848+00",)
  5995. # Range bound errors
  5996. query error range lower bound must be less than or equal to range upper bound
  5997. SELECT '[1970-01-01 00:00:01,1969-12-31 11:59:59]'::tstzrange;
  5998. query error range lower bound must be less than or equal to range upper bound
  5999. SELECT '[1970-01-01 00:00:01,1970-01-01 00:00:00]'::tstzrange;
  6000. # Whitespace handling
  6001. query T
  6002. SELECT
  6003. DISTINCT column1::tstzrange
  6004. FROM
  6005. (
  6006. VALUES
  6007. (' empty'),
  6008. ('empty '),
  6009. (' [1970-01-01 00:00:01,)'),
  6010. ('[ 1970-01-01 00:00:01,)'),
  6011. ('[1970-01-01 00:00:01 ,)'),
  6012. ('[ 1970-01-01 00:00:01 ,)'),
  6013. ('[1970-01-01 00:00:01, 1970-01-01 00:00:02)'),
  6014. ('[1970-01-01 00:00:01,1970-01-01 00:00:02 )'),
  6015. ('[1970-01-01 00:00:01, 1970-01-01 00:00:02 )'),
  6016. ('[1970-01-01 00:00:01,) '),
  6017. (' (,1970-01-01 00:00:01)'),
  6018. ('(, 1970-01-01 00:00:01)'),
  6019. (' (,) ')
  6020. ) t;
  6021. ----
  6022. empty
  6023. (,)
  6024. (,"1970-01-01 00:00:01+00")
  6025. ["1970-01-01 00:00:01+00",)
  6026. ["1970-01-01 00:00:01+00","1970-01-01 00:00:02+00")
  6027. # Input errors
  6028. query error invalid input syntax for type range
  6029. SELECT '[1970-01-01 00:00:01, )'::tstzrange
  6030. query error invalid input syntax for type range
  6031. SELECT '( ,1970-01-01 00:00:01)'::tstzrange
  6032. query error invalid input syntax for type range
  6033. SELECT '( , )'::tstzrange
  6034. query error invalid input syntax for type range
  6035. SELECT 'emptyy'::tstzrange;
  6036. query error invalid input syntax for type range
  6037. SELECT ''::tstzrange;
  6038. query error invalid input syntax for type range
  6039. SELECT '1'::tstzrange;
  6040. query error invalid input syntax for type range
  6041. SELECT 'd'::tstzrange;
  6042. query error invalid input syntax for type range
  6043. SELECT ','::tstzrange;
  6044. query error invalid input syntax for type range
  6045. SELECT ')'::tstzrange;
  6046. query error invalid input syntax for type range
  6047. SELECT '{'::tstzrange;
  6048. query error invalid input syntax for type range
  6049. SELECT '('::tstzrange;
  6050. query error invalid input syntax for type range
  6051. SELECT '['::tstzrange;
  6052. query error invalid input syntax for type range
  6053. SELECT '(1970-01-01 00:00:01)'::tstzrange;
  6054. query error invalid input syntax for type range
  6055. SELECT '[1970-01-01 00:00:01]'::tstzrange;
  6056. query error invalid input syntax for type range
  6057. SELECT '(1970-01-01 00:00:01,'::tstzrange;
  6058. query error invalid input syntax for type range
  6059. SELECT '[1970-01-01 00:00:01,'::tstzrange;
  6060. query error invalid input syntax for type range
  6061. SELECT '(1970-01-01 00:00:01,1'::tstzrange;
  6062. query error invalid input syntax for type range
  6063. SELECT '[1970-01-01 00:00:01,1'::tstzrange;
  6064. query error invalid input syntax for type range
  6065. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1]1'::tstzrange;
  6066. query error invalid input syntax for type range
  6067. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1]a'::tstzrange;
  6068. query error invalid input syntax for type range
  6069. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1]]'::tstzrange;
  6070. query error invalid input syntax for type range
  6071. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1]}'::tstzrange;
  6072. query error invalid input syntax for type range
  6073. SELECT '(1970-01-01 00:00:01970-01-01 00:00:01.1] ]'::tstzrange;
  6074. query error invalid input syntax for type range
  6075. SELECT '[1970-01-01 00:00:01970-01-01 00:00:01.1] }'::tstzrange;
  6076. statement ok
  6077. CREATE TABLE tstzrange_values (a tstzrange);
  6078. statement ok
  6079. INSERT INTO tstzrange_values VALUES
  6080. (null),
  6081. ('empty'),
  6082. ('[,1970-01-01 00:00:01)'::tstzrange),
  6083. ('[,1970-01-01 00:00:01]'::tstzrange),
  6084. ('[,)'::tstzrange),
  6085. ('[,]'::tstzrange),
  6086. ('(,1970-01-01 00:00:01)'::tstzrange),
  6087. ('(,1970-01-01 00:00:01]'::tstzrange),
  6088. ('(,)'::tstzrange),
  6089. ('(,]'::tstzrange),
  6090. ('[1969-12-31 11:59:59,1970-01-01 00:00:01)'::tstzrange),
  6091. ('[1969-12-31 11:59:59,1970-01-01 00:00:01]'::tstzrange),
  6092. ('(1969-12-31 11:59:59,1970-01-01 00:00:01)'::tstzrange),
  6093. ('(1969-12-31 11:59:59,1970-01-01 00:00:01]'::tstzrange),
  6094. ('[1970-01-01 00:00:00,1970-01-01 00:00:00)'::tstzrange),
  6095. ('[1970-01-01 00:00:00,1970-01-01 00:00:00]'::tstzrange),
  6096. ('(1970-01-01 00:00:00,1970-01-01 00:00:00)'::tstzrange),
  6097. ('(1970-01-01 00:00:00,1970-01-01 00:00:00]'::tstzrange),
  6098. ('[1970-01-01 00:00:01,)'::tstzrange),
  6099. ('[1970-01-01 00:00:01,]'::tstzrange),
  6100. ('(1970-01-01 00:00:01,)'::tstzrange),
  6101. ('(1970-01-01 00:00:01,]'::tstzrange);
  6102. query T
  6103. SELECT a AS t FROM tstzrange_values ORDER BY a;
  6104. ----
  6105. empty
  6106. empty
  6107. empty
  6108. empty
  6109. (,"1970-01-01 00:00:01+00")
  6110. (,"1970-01-01 00:00:01+00")
  6111. (,"1970-01-01 00:00:01+00"]
  6112. (,"1970-01-01 00:00:01+00"]
  6113. (,)
  6114. (,)
  6115. (,)
  6116. (,)
  6117. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6118. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6119. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6120. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6121. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6122. ["1970-01-01 00:00:01+00",)
  6123. ["1970-01-01 00:00:01+00",)
  6124. ("1970-01-01 00:00:01+00",)
  6125. ("1970-01-01 00:00:01+00",)
  6126. NULL
  6127. query T
  6128. SELECT a AS t FROM tstzrange_values EXCEPT SELECT column1 FROM (VALUES
  6129. (tstzrange(null,'1970-01-01 00:00:01')),
  6130. (tstzrange(null,'1970-01-01 00:00:01', '[]')),
  6131. (tstzrange(null,null)),
  6132. (tstzrange(null,null, '[]')),
  6133. (tstzrange(null,'1970-01-01 00:00:01', '()')),
  6134. (tstzrange(null,'1970-01-01 00:00:01', '(]')),
  6135. (tstzrange(null,null, '()')),
  6136. (tstzrange(null,null,'(]')),
  6137. (tstzrange('1969-12-31 11:59:59','1970-01-01 00:00:01')),
  6138. (tstzrange('1969-12-31 11:59:59','1970-01-01 00:00:01', '[]')),
  6139. (tstzrange('1969-12-31 11:59:59','1970-01-01 00:00:01', '()')),
  6140. (tstzrange('1969-12-31 11:59:59','1970-01-01 00:00:01','(]')),
  6141. (tstzrange('1970-01-01 00:00:00','1970-01-01 00:00:00')),
  6142. (tstzrange('1970-01-01 00:00:00','1970-01-01 00:00:00', '[]')),
  6143. (tstzrange('1970-01-01 00:00:00','1970-01-01 00:00:00','()')),
  6144. (tstzrange('1970-01-01 00:00:00','1970-01-01 00:00:00','(]')),
  6145. (tstzrange('1970-01-01 00:00:01',null)),
  6146. (tstzrange('1970-01-01 00:00:01',null, '[]')),
  6147. (tstzrange('1970-01-01 00:00:01',null,'()')),
  6148. (tstzrange('1970-01-01 00:00:01',null,'(]'))
  6149. ) t;
  6150. ----
  6151. NULL
  6152. query error range constructor flags argument must not be null
  6153. SELECT tstzrange('1970-01-01 00:00:01','1970-01-01 00:00:01',null);
  6154. query error range constructor flags argument must not be null
  6155. SELECT tstzrange(null,null,null);
  6156. #
  6157. # tstzrange upper, lower
  6158. query TT
  6159. SELECT DISTINCT lower(a), upper(a) FROM tstzrange_values ORDER BY 1, 2;
  6160. ----
  6161. 1969-12-31 11:59:59+00
  6162. 1970-01-01 00:00:01+00
  6163. 1970-01-01 00:00:00+00
  6164. 1970-01-01 00:00:00+00
  6165. 1970-01-01 00:00:01+00
  6166. NULL
  6167. NULL
  6168. 1970-01-01 00:00:01+00
  6169. NULL
  6170. NULL
  6171. # test that lower and upper roundtrip through range constructor function
  6172. query T
  6173. SELECT
  6174. a
  6175. FROM
  6176. tstzrange_values
  6177. WHERE
  6178. (NOT isempty(a))
  6179. AND (
  6180. a
  6181. != tstzrange(
  6182. lower(a),
  6183. upper(a),
  6184. CASE
  6185. WHEN lower_inc(a) THEN '['
  6186. ELSE '('
  6187. END
  6188. || CASE WHEN upper_inc(a) THEN ']' ELSE ')' END
  6189. )
  6190. );
  6191. ----
  6192. query T
  6193. SELECT DISTINCT a FROM tstzrange_values WHERE lower_inf(a) AND upper_inf(a);
  6194. ----
  6195. (,)
  6196. query error invalid range bound flags
  6197. SELECT tstzrange(null,null,' (]');
  6198. query error invalid range bound flags
  6199. SELECT tstzrange(null,null,'(] ');
  6200. query error invalid range bound flags
  6201. SELECT tstzrange(null,null,'( ]');
  6202. query error invalid range bound flags
  6203. SELECT tstzrange(null,null,'(,]');
  6204. query error invalid range bound flags
  6205. SELECT tstzrange(null,null,'a()');
  6206. query error invalid range bound flags
  6207. SELECT tstzrange(null,null,'(a)');
  6208. query error invalid range bound flags
  6209. SELECT tstzrange(null,null,'()a');
  6210. query error invalid range bound flags
  6211. SELECT tstzrange(null,null,'(()');
  6212. query error invalid range bound flags
  6213. SELECT tstzrange(null,null,'())');
  6214. # Test range in list
  6215. query T
  6216. SELECT LIST['(,)', 'empty', '[1969-12-31 11:59:59,1970-01-01 00:00:01]']::tstzrange list::text;
  6217. ----
  6218. {"(,)",empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\"]"}
  6219. query T
  6220. SELECT '{"(,)","empty","[1969-12-31 11:59:59,1970-01-01 00:00:01]"}'::tstzrange list::text;
  6221. ----
  6222. {"(,)",empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\"]"}
  6223. # Test range in array
  6224. query T
  6225. SELECT ARRAY['(,)', 'empty', '[1969-12-31 11:59:59,1970-01-01 00:00:01]']::_tstzrange;
  6226. ----
  6227. {"(,)",empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\"]"}
  6228. query T
  6229. SELECT '{"(,)","empty","[1969-12-31 11:59:59,1970-01-01 00:00:01]"}'::_tstzrange;
  6230. ----
  6231. {"(,)",empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\"]"}
  6232. # Test builtin functions
  6233. query B
  6234. select '(,)'::tstzrange = '(,)'::tstzrange;
  6235. ----
  6236. true
  6237. query B
  6238. select '(,)'::tstzrange != 'empty'::tstzrange;
  6239. ----
  6240. true
  6241. query B
  6242. select '(,)'::tstzrange > 'empty'::tstzrange;
  6243. ----
  6244. true
  6245. query B
  6246. select '(,)'::tstzrange >= 'empty'::tstzrange;
  6247. ----
  6248. true
  6249. query B
  6250. select '(,)'::tstzrange < 'empty'::tstzrange;
  6251. ----
  6252. false
  6253. query B
  6254. select '(,)'::tstzrange <= 'empty'::tstzrange;
  6255. ----
  6256. false
  6257. statement ok
  6258. CREATE TABLE tstzrange_test_values (v tstzrange);
  6259. statement ok
  6260. INSERT INTO tstzrange_test_values VALUES
  6261. ('empty'),
  6262. ('(,)'),
  6263. ('(,1970-01-01 00:00:01)'),
  6264. ('(1969-12-31 11:59:59,)'),
  6265. ('[1969-12-31 11:59:59,1970-01-01 00:00:01)'),
  6266. ('[1969-01-01 00:00:00,1969-06-01 00:00:00)'),
  6267. ('[1971-01-01 00:00:00,1971-06-01 00:00:00)');
  6268. #
  6269. # tstzrange contains
  6270. query TT
  6271. SELECT a t, array_agg(v ORDER BY v) FROM (
  6272. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6273. ) tstzrange_values(a), tstzrange_test_values WHERE a @> v GROUP BY a ORDER BY a;
  6274. ----
  6275. empty
  6276. {empty}
  6277. (,"1970-01-01 00:00:01+00")
  6278. {empty,"(,\"1970-01-01 00:00:01+00\")","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6279. (,"1970-01-01 00:00:01+00"]
  6280. {empty,"(,\"1970-01-01 00:00:01+00\")","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6281. (,)
  6282. {empty,"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6283. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6284. {empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6285. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6286. {empty,"[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6287. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6288. {empty}
  6289. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6290. {empty}
  6291. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6292. {empty}
  6293. ["1970-01-01 00:00:01+00",)
  6294. {empty,"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6295. ("1970-01-01 00:00:01+00",)
  6296. {empty,"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6297. #
  6298. # tstzrange contained by
  6299. query TT
  6300. SELECT a t, array_agg(v ORDER BY v) FROM (
  6301. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6302. ) tstzrange_values(a), tstzrange_test_values WHERE a <@ v GROUP BY a ORDER BY a;
  6303. ----
  6304. empty
  6305. {empty,"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6306. (,"1970-01-01 00:00:01+00")
  6307. {"(,\"1970-01-01 00:00:01+00\")","(,)"}
  6308. (,"1970-01-01 00:00:01+00"]
  6309. {"(,)"}
  6310. (,)
  6311. {"(,)"}
  6312. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6313. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6314. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6315. {"(,)"}
  6316. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6317. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6318. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6319. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6320. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6321. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6322. ["1970-01-01 00:00:01+00",)
  6323. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6324. ("1970-01-01 00:00:01+00",)
  6325. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6326. #
  6327. # tstzrange overlaps
  6328. query TT
  6329. SELECT a t, array_agg(v ORDER BY v) FROM (
  6330. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6331. ) tstzrange_values(a), tstzrange_test_values WHERE a && v GROUP BY a ORDER BY a;
  6332. ----
  6333. (,"1970-01-01 00:00:01+00")
  6334. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6335. (,"1970-01-01 00:00:01+00"]
  6336. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6337. (,)
  6338. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6339. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6340. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6341. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6342. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6343. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6344. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6345. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6346. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6347. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6348. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6349. ["1970-01-01 00:00:01+00",)
  6350. {"(,)","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6351. ("1970-01-01 00:00:01+00",)
  6352. {"(,)","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6353. #
  6354. # tstzrange before
  6355. query TT
  6356. SELECT a t, array_agg(v ORDER BY v) FROM (
  6357. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6358. ) tstzrange_values(a), tstzrange_test_values WHERE a << v GROUP BY a ORDER BY a;
  6359. ----
  6360. (,"1970-01-01 00:00:01+00")
  6361. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6362. (,"1970-01-01 00:00:01+00"]
  6363. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6364. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6365. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6366. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6367. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6368. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6369. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6370. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6371. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6372. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6373. {"[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6374. #
  6375. # tstzrange after
  6376. query TT
  6377. SELECT a t, array_agg(v ORDER BY v) FROM (
  6378. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6379. ) tstzrange_values(a), tstzrange_test_values WHERE a >> v GROUP BY a ORDER BY a;
  6380. ----
  6381. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6382. {"[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")"}
  6383. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6384. {"[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")"}
  6385. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6386. {"[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")"}
  6387. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6388. {"[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")"}
  6389. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6390. {"[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")"}
  6391. ["1970-01-01 00:00:01+00",)
  6392. {"(,\"1970-01-01 00:00:01+00\")","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6393. ("1970-01-01 00:00:01+00",)
  6394. {"(,\"1970-01-01 00:00:01+00\")","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6395. #
  6396. # tstzrange overleft
  6397. query TT
  6398. SELECT a t, array_agg(v ORDER BY v) FROM (
  6399. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6400. ) tstzrange_values(a), tstzrange_test_values WHERE a &< v GROUP BY a ORDER BY a;
  6401. ----
  6402. (,"1970-01-01 00:00:01+00")
  6403. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6404. (,"1970-01-01 00:00:01+00"]
  6405. {"(,)","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6406. (,)
  6407. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6408. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6409. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6410. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6411. {"(,)","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6412. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6413. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6414. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6415. {"(,)","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6416. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6417. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)","[\"1971-01-01 00:00:00+00\",\"1971-06-01 00:00:00+00\")"}
  6418. ["1970-01-01 00:00:01+00",)
  6419. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6420. ("1970-01-01 00:00:01+00",)
  6421. {"(,)","(\"1969-12-31 11:59:59+00\",)"}
  6422. #
  6423. # tstzrange overright
  6424. query TT
  6425. SELECT a t, array_agg(v ORDER BY v) FROM (
  6426. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6427. ) tstzrange_values(a), tstzrange_test_values WHERE a &> v GROUP BY a ORDER BY a;
  6428. ----
  6429. (,"1970-01-01 00:00:01+00")
  6430. {"(,\"1970-01-01 00:00:01+00\")","(,)"}
  6431. (,"1970-01-01 00:00:01+00"]
  6432. {"(,\"1970-01-01 00:00:01+00\")","(,)"}
  6433. (,)
  6434. {"(,\"1970-01-01 00:00:01+00\")","(,)"}
  6435. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6436. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6437. ["1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6438. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6439. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00")
  6440. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6441. ("1969-12-31 11:59:59+00","1970-01-01 00:00:01+00"]
  6442. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6443. ["1970-01-01 00:00:00+00","1970-01-01 00:00:00+00"]
  6444. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6445. ["1970-01-01 00:00:01+00",)
  6446. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6447. ("1970-01-01 00:00:01+00",)
  6448. {"(,\"1970-01-01 00:00:01+00\")","(,)","[\"1969-01-01 00:00:00+00\",\"1969-06-01 00:00:00+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")","(\"1969-12-31 11:59:59+00\",)"}
  6449. #
  6450. # tstzrange adjacent
  6451. query TT
  6452. SELECT a t, array_agg(v ORDER BY v) FROM (
  6453. SELECT DISTINCT a FROM tstzrange_values WHERE a IS NOT NULL
  6454. ) tstzrange_values(a), tstzrange_test_values WHERE a -|- v GROUP BY a ORDER BY a;
  6455. ----
  6456. ["1970-01-01 00:00:01+00",)
  6457. {"(,\"1970-01-01 00:00:01+00\")","[\"1969-12-31 11:59:59+00\",\"1970-01-01 00:00:01+00\")"}
  6458. query T
  6459. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:01.1]'::tstzrange;
  6460. ----
  6461. ["1970-01-01 00:00:01.1+00","1970-01-01 00:00:01.1+00"]
  6462. query T
  6463. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:02]'::tstzrange;
  6464. ----
  6465. ["1970-01-01 00:00:01.1+00","1970-01-01 00:00:02+00"]
  6466. query T
  6467. SELECT '[1970-01-01 00:00:01.1,1970-01-01 00:00:01.1)'::tstzrange;
  6468. ----
  6469. empty
  6470. query T
  6471. SELECT tstzrange('1970-01-01 00:00:01.1','1970-01-01 00:00:01.2');
  6472. ----
  6473. ["1970-01-01 00:00:01.1+00","1970-01-01 00:00:01.2+00")
  6474. query T
  6475. SELECT tstzrange('1969-12-31 11:59:59.1','1970-01-01 00:00:01.2');
  6476. ----
  6477. ["1969-12-31 11:59:59.1+00","1970-01-01 00:00:01.2+00")
  6478. #
  6479. # tstzrange union
  6480. query T
  6481. SELECT 'empty'::tstzrange + 'empty'::tstzrange
  6482. ----
  6483. empty
  6484. query T
  6485. SELECT 'empty'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6486. ----
  6487. (,"1969-12-31 11:59:59+00"]
  6488. query T
  6489. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6490. ----
  6491. (,"1969-12-31 11:59:59+00"]
  6492. query T
  6493. SELECT 'empty'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6494. ----
  6495. (,"1969-12-31 11:59:59+00")
  6496. query T
  6497. SELECT 'empty'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6498. ----
  6499. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6500. query T
  6501. SELECT 'empty'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6502. ----
  6503. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6504. query T
  6505. SELECT 'empty'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6506. ----
  6507. ["1970-01-01 00:00:01+00",)
  6508. query T
  6509. SELECT 'empty'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6510. ----
  6511. ("1970-01-01 00:00:01+00",)
  6512. query T
  6513. SELECT 'empty'::tstzrange + '(,)'::tstzrange
  6514. ----
  6515. (,)
  6516. query T
  6517. SELECT '(,1969-12-31 11:59:59]'::tstzrange + 'empty'::tstzrange
  6518. ----
  6519. (,"1969-12-31 11:59:59+00"]
  6520. query T
  6521. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6522. ----
  6523. (,"1969-12-31 11:59:59+00"]
  6524. query T
  6525. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6526. ----
  6527. (,"1970-01-01 00:00:02+00")
  6528. query T
  6529. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6530. ----
  6531. (,"1970-01-01 00:00:02+00"]
  6532. query error result of range union would not be contiguous
  6533. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6534. query error result of range union would not be contiguous
  6535. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6536. query T
  6537. SELECT '(,1969-12-31 11:59:59]'::tstzrange + '(,)'::tstzrange
  6538. ----
  6539. (,)
  6540. query T
  6541. SELECT '(,1969-12-31 11:59:59)'::tstzrange + 'empty'::tstzrange
  6542. ----
  6543. (,"1969-12-31 11:59:59+00")
  6544. query T
  6545. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6546. ----
  6547. (,"1969-12-31 11:59:59+00"]
  6548. query T
  6549. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6550. ----
  6551. (,"1970-01-01 00:00:02+00")
  6552. query T
  6553. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6554. ----
  6555. (,"1970-01-01 00:00:02+00"]
  6556. query error result of range union would not be contiguous
  6557. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6558. query error result of range union would not be contiguous
  6559. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6560. query T
  6561. SELECT '(,1969-12-31 11:59:59)'::tstzrange + '(,)'::tstzrange
  6562. ----
  6563. (,)
  6564. query T
  6565. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + 'empty'::tstzrange
  6566. ----
  6567. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6568. query T
  6569. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6570. ----
  6571. (,"1970-01-01 00:00:02+00")
  6572. query T
  6573. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6574. ----
  6575. (,"1970-01-01 00:00:02+00")
  6576. query T
  6577. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6578. ----
  6579. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6580. query T
  6581. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6582. ----
  6583. ("1969-12-31 11:59:58+00",)
  6584. query T
  6585. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6586. ----
  6587. ("1969-12-31 11:59:58+00",)
  6588. query T
  6589. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange + '(,)'::tstzrange
  6590. ----
  6591. (,)
  6592. query T
  6593. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + 'empty'::tstzrange
  6594. ----
  6595. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6596. query T
  6597. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6598. ----
  6599. (,"1970-01-01 00:00:02+00"]
  6600. query T
  6601. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6602. ----
  6603. (,"1970-01-01 00:00:02+00"]
  6604. query T
  6605. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6606. ----
  6607. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6608. query T
  6609. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6610. ----
  6611. ["1969-12-31 11:59:58+00",)
  6612. query T
  6613. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6614. ----
  6615. ["1969-12-31 11:59:58+00",)
  6616. query T
  6617. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange + '(,)'::tstzrange
  6618. ----
  6619. (,)
  6620. query T
  6621. SELECT '[1970-01-01 00:00:01,)'::tstzrange + 'empty'::tstzrange
  6622. ----
  6623. ["1970-01-01 00:00:01+00",)
  6624. query error result of range union would not be contiguous
  6625. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6626. query error result of range union would not be contiguous
  6627. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6628. query T
  6629. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6630. ----
  6631. ("1969-12-31 11:59:58+00",)
  6632. query T
  6633. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6634. ----
  6635. ["1969-12-31 11:59:58+00",)
  6636. query T
  6637. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6638. ----
  6639. ["1970-01-01 00:00:01+00",)
  6640. query T
  6641. SELECT '[1970-01-01 00:00:01,)'::tstzrange + '(,)'::tstzrange
  6642. ----
  6643. (,)
  6644. query T
  6645. SELECT '(1970-01-01 00:00:01,)'::tstzrange + 'empty'::tstzrange
  6646. ----
  6647. ("1970-01-01 00:00:01+00",)
  6648. query error result of range union would not be contiguous
  6649. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6650. query error result of range union would not be contiguous
  6651. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6652. query T
  6653. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6654. ----
  6655. ("1969-12-31 11:59:58+00",)
  6656. query T
  6657. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6658. ----
  6659. ["1969-12-31 11:59:58+00",)
  6660. query T
  6661. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6662. ----
  6663. ["1970-01-01 00:00:01+00",)
  6664. query T
  6665. SELECT '(1970-01-01 00:00:01,)'::tstzrange + '(,)'::tstzrange
  6666. ----
  6667. (,)
  6668. query T
  6669. SELECT '(,)'::tstzrange + 'empty'::tstzrange
  6670. ----
  6671. (,)
  6672. query T
  6673. SELECT '(,)'::tstzrange + '(,1969-12-31 11:59:59]'::tstzrange
  6674. ----
  6675. (,)
  6676. query T
  6677. SELECT '(,)'::tstzrange + '(,1969-12-31 11:59:59)'::tstzrange
  6678. ----
  6679. (,)
  6680. query T
  6681. SELECT '(,)'::tstzrange + '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6682. ----
  6683. (,)
  6684. query T
  6685. SELECT '(,)'::tstzrange + '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6686. ----
  6687. (,)
  6688. query T
  6689. SELECT '(,)'::tstzrange + '[1970-01-01 00:00:01,)'::tstzrange
  6690. ----
  6691. (,)
  6692. query T
  6693. SELECT '(,)'::tstzrange + '(1970-01-01 00:00:01,)'::tstzrange
  6694. ----
  6695. (,)
  6696. #
  6697. # tstzrange intersection
  6698. query T
  6699. SELECT 'empty'::tstzrange * 'empty'::tstzrange
  6700. ----
  6701. empty
  6702. query T
  6703. SELECT 'empty'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6704. ----
  6705. empty
  6706. query T
  6707. SELECT '(,1969-12-31 11:59:59]'::tstzrange * 'empty'::tstzrange
  6708. ----
  6709. empty
  6710. query T
  6711. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6712. ----
  6713. (,"1969-12-31 11:59:59+00"]
  6714. query T
  6715. SELECT 'empty'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6716. ----
  6717. empty
  6718. query T
  6719. SELECT 'empty'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6720. ----
  6721. empty
  6722. query T
  6723. SELECT 'empty'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6724. ----
  6725. empty
  6726. query T
  6727. SELECT 'empty'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6728. ----
  6729. empty
  6730. query T
  6731. SELECT 'empty'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6732. ----
  6733. empty
  6734. query T
  6735. SELECT 'empty'::tstzrange * '(,)'::tstzrange
  6736. ----
  6737. empty
  6738. query T
  6739. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6740. ----
  6741. (,"1969-12-31 11:59:59+00")
  6742. query T
  6743. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6744. ----
  6745. ("1969-12-31 11:59:58+00","1969-12-31 11:59:59+00"]
  6746. query T
  6747. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6748. ----
  6749. ["1969-12-31 11:59:58+00","1969-12-31 11:59:59+00"]
  6750. query T
  6751. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6752. ----
  6753. empty
  6754. query T
  6755. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6756. ----
  6757. empty
  6758. query T
  6759. SELECT '(,1969-12-31 11:59:59]'::tstzrange * '(,)'::tstzrange
  6760. ----
  6761. (,"1969-12-31 11:59:59+00"]
  6762. query T
  6763. SELECT '(,1969-12-31 11:59:59)'::tstzrange * 'empty'::tstzrange
  6764. ----
  6765. empty
  6766. query T
  6767. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6768. ----
  6769. (,"1969-12-31 11:59:59+00")
  6770. query T
  6771. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6772. ----
  6773. ("1969-12-31 11:59:58+00","1969-12-31 11:59:59+00")
  6774. query T
  6775. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6776. ----
  6777. ["1969-12-31 11:59:58+00","1969-12-31 11:59:59+00")
  6778. query T
  6779. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6780. ----
  6781. empty
  6782. query T
  6783. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6784. ----
  6785. empty
  6786. query T
  6787. SELECT '(,1969-12-31 11:59:59)'::tstzrange * '(,)'::tstzrange
  6788. ----
  6789. (,"1969-12-31 11:59:59+00")
  6790. query T
  6791. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * 'empty'::tstzrange
  6792. ----
  6793. empty
  6794. query T
  6795. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6796. ----
  6797. ("1969-12-31 11:59:58+00","1969-12-31 11:59:59+00"]
  6798. query T
  6799. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6800. ----
  6801. ("1969-12-31 11:59:58+00","1969-12-31 11:59:59+00")
  6802. query T
  6803. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6804. ----
  6805. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6806. query T
  6807. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6808. ----
  6809. ["1970-01-01 00:00:01+00","1970-01-01 00:00:02+00")
  6810. query T
  6811. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6812. ----
  6813. ("1970-01-01 00:00:01+00","1970-01-01 00:00:02+00")
  6814. query T
  6815. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange * '(,)'::tstzrange
  6816. ----
  6817. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6818. query T
  6819. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * 'empty'::tstzrange
  6820. ----
  6821. empty
  6822. query T
  6823. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6824. ----
  6825. ["1969-12-31 11:59:58+00","1969-12-31 11:59:59+00"]
  6826. query T
  6827. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6828. ----
  6829. ["1969-12-31 11:59:58+00","1969-12-31 11:59:59+00")
  6830. query T
  6831. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6832. ----
  6833. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6834. query T
  6835. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6836. ----
  6837. ["1970-01-01 00:00:01+00","1970-01-01 00:00:02+00"]
  6838. query T
  6839. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6840. ----
  6841. ("1970-01-01 00:00:01+00","1970-01-01 00:00:02+00"]
  6842. query T
  6843. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange * '(,)'::tstzrange
  6844. ----
  6845. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6846. query T
  6847. SELECT '[1970-01-01 00:00:01,)'::tstzrange * 'empty'::tstzrange
  6848. ----
  6849. empty
  6850. query T
  6851. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6852. ----
  6853. empty
  6854. query T
  6855. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6856. ----
  6857. empty
  6858. query T
  6859. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6860. ----
  6861. ["1970-01-01 00:00:01+00","1970-01-01 00:00:02+00")
  6862. query T
  6863. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6864. ----
  6865. ["1970-01-01 00:00:01+00","1970-01-01 00:00:02+00"]
  6866. query T
  6867. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6868. ----
  6869. ("1970-01-01 00:00:01+00",)
  6870. query T
  6871. SELECT '[1970-01-01 00:00:01,)'::tstzrange * '(,)'::tstzrange
  6872. ----
  6873. ["1970-01-01 00:00:01+00",)
  6874. query T
  6875. SELECT '(1970-01-01 00:00:01,)'::tstzrange * 'empty'::tstzrange
  6876. ----
  6877. empty
  6878. query T
  6879. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6880. ----
  6881. empty
  6882. query T
  6883. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6884. ----
  6885. empty
  6886. query T
  6887. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6888. ----
  6889. ("1970-01-01 00:00:01+00","1970-01-01 00:00:02+00")
  6890. query T
  6891. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6892. ----
  6893. ("1970-01-01 00:00:01+00","1970-01-01 00:00:02+00"]
  6894. query T
  6895. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6896. ----
  6897. ("1970-01-01 00:00:01+00",)
  6898. query T
  6899. SELECT '(1970-01-01 00:00:01,)'::tstzrange * '(,)'::tstzrange
  6900. ----
  6901. ("1970-01-01 00:00:01+00",)
  6902. query T
  6903. SELECT '(,)'::tstzrange * 'empty'::tstzrange
  6904. ----
  6905. empty
  6906. query T
  6907. SELECT '(,)'::tstzrange * '(,1969-12-31 11:59:59]'::tstzrange
  6908. ----
  6909. (,"1969-12-31 11:59:59+00"]
  6910. query T
  6911. SELECT '(,)'::tstzrange * '(,1969-12-31 11:59:59)'::tstzrange
  6912. ----
  6913. (,"1969-12-31 11:59:59+00")
  6914. query T
  6915. SELECT '(,)'::tstzrange * '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6916. ----
  6917. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  6918. query T
  6919. SELECT '(,)'::tstzrange * '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6920. ----
  6921. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  6922. query T
  6923. SELECT '(,)'::tstzrange * '[1970-01-01 00:00:01,)'::tstzrange
  6924. ----
  6925. ["1970-01-01 00:00:01+00",)
  6926. query T
  6927. SELECT '(,)'::tstzrange * '(1970-01-01 00:00:01,)'::tstzrange
  6928. ----
  6929. ("1970-01-01 00:00:01+00",)
  6930. #
  6931. # tstzrange difference
  6932. query T
  6933. SELECT 'empty'::tstzrange - 'empty'::tstzrange
  6934. ----
  6935. empty
  6936. query T
  6937. SELECT 'empty'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  6938. ----
  6939. empty
  6940. query T
  6941. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  6942. ----
  6943. empty
  6944. query T
  6945. SELECT 'empty'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  6946. ----
  6947. empty
  6948. query T
  6949. SELECT 'empty'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6950. ----
  6951. empty
  6952. query T
  6953. SELECT 'empty'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6954. ----
  6955. empty
  6956. query T
  6957. SELECT 'empty'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  6958. ----
  6959. empty
  6960. query T
  6961. SELECT 'empty'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  6962. ----
  6963. empty
  6964. query T
  6965. SELECT 'empty'::tstzrange - '(,)'::tstzrange
  6966. ----
  6967. empty
  6968. query T
  6969. SELECT '(,1969-12-31 11:59:59]'::tstzrange - 'empty'::tstzrange
  6970. ----
  6971. (,"1969-12-31 11:59:59+00"]
  6972. query T
  6973. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  6974. ----
  6975. ["1969-12-31 11:59:59+00","1969-12-31 11:59:59+00"]
  6976. query T
  6977. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  6978. ----
  6979. (,"1969-12-31 11:59:58+00"]
  6980. query T
  6981. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  6982. ----
  6983. (,"1969-12-31 11:59:58+00")
  6984. query T
  6985. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  6986. ----
  6987. (,"1969-12-31 11:59:59+00"]
  6988. query T
  6989. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  6990. ----
  6991. (,"1969-12-31 11:59:59+00"]
  6992. query T
  6993. SELECT '(,1969-12-31 11:59:59]'::tstzrange - '(,)'::tstzrange
  6994. ----
  6995. empty
  6996. query T
  6997. SELECT '(,1969-12-31 11:59:59)'::tstzrange - 'empty'::tstzrange
  6998. ----
  6999. (,"1969-12-31 11:59:59+00")
  7000. query T
  7001. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7002. ----
  7003. empty
  7004. query T
  7005. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  7006. ----
  7007. (,"1969-12-31 11:59:58+00"]
  7008. query T
  7009. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  7010. ----
  7011. (,"1969-12-31 11:59:58+00")
  7012. query T
  7013. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  7014. ----
  7015. (,"1969-12-31 11:59:59+00")
  7016. query T
  7017. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  7018. ----
  7019. (,"1969-12-31 11:59:59+00")
  7020. query T
  7021. SELECT '(,1969-12-31 11:59:59)'::tstzrange - '(,)'::tstzrange
  7022. ----
  7023. empty
  7024. query T
  7025. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - 'empty'::tstzrange
  7026. ----
  7027. ("1969-12-31 11:59:58+00","1970-01-01 00:00:02+00")
  7028. query T
  7029. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7030. ----
  7031. ("1969-12-31 11:59:59+00","1970-01-01 00:00:02+00")
  7032. query T
  7033. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  7034. ----
  7035. ["1969-12-31 11:59:59+00","1970-01-01 00:00:02+00")
  7036. query T
  7037. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  7038. ----
  7039. empty
  7040. query T
  7041. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  7042. ----
  7043. ("1969-12-31 11:59:58+00","1970-01-01 00:00:01+00")
  7044. query T
  7045. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  7046. ----
  7047. ("1969-12-31 11:59:58+00","1970-01-01 00:00:01+00"]
  7048. query T
  7049. SELECT '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange - '(,)'::tstzrange
  7050. ----
  7051. empty
  7052. query T
  7053. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - 'empty'::tstzrange
  7054. ----
  7055. ["1969-12-31 11:59:58+00","1970-01-01 00:00:02+00"]
  7056. query T
  7057. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7058. ----
  7059. ("1969-12-31 11:59:59+00","1970-01-01 00:00:02+00"]
  7060. query T
  7061. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  7062. ----
  7063. ["1969-12-31 11:59:59+00","1970-01-01 00:00:02+00"]
  7064. query error result of range difference would not be contiguous
  7065. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  7066. query T
  7067. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  7068. ----
  7069. ["1969-12-31 11:59:58+00","1970-01-01 00:00:01+00")
  7070. query T
  7071. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  7072. ----
  7073. ["1969-12-31 11:59:58+00","1970-01-01 00:00:01+00"]
  7074. query T
  7075. SELECT '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange - '(,)'::tstzrange
  7076. ----
  7077. empty
  7078. query T
  7079. SELECT '[1970-01-01 00:00:01,)'::tstzrange - 'empty'::tstzrange
  7080. ----
  7081. ["1970-01-01 00:00:01+00",)
  7082. query T
  7083. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7084. ----
  7085. ["1970-01-01 00:00:01+00",)
  7086. query T
  7087. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  7088. ----
  7089. ["1970-01-01 00:00:01+00",)
  7090. query T
  7091. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  7092. ----
  7093. ["1970-01-01 00:00:02+00",)
  7094. query T
  7095. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  7096. ----
  7097. ("1970-01-01 00:00:02+00",)
  7098. query T
  7099. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  7100. ----
  7101. ["1970-01-01 00:00:01+00","1970-01-01 00:00:01+00"]
  7102. query T
  7103. SELECT '[1970-01-01 00:00:01,)'::tstzrange - '(,)'::tstzrange
  7104. ----
  7105. empty
  7106. query T
  7107. SELECT '(1970-01-01 00:00:01,)'::tstzrange - 'empty'::tstzrange
  7108. ----
  7109. ("1970-01-01 00:00:01+00",)
  7110. query T
  7111. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7112. ----
  7113. ("1970-01-01 00:00:01+00",)
  7114. query T
  7115. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  7116. ----
  7117. ("1970-01-01 00:00:01+00",)
  7118. query T
  7119. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  7120. ----
  7121. ["1970-01-01 00:00:02+00",)
  7122. query T
  7123. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  7124. ----
  7125. ("1970-01-01 00:00:02+00",)
  7126. query T
  7127. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  7128. ----
  7129. empty
  7130. query T
  7131. SELECT '(1970-01-01 00:00:01,)'::tstzrange - '(,)'::tstzrange
  7132. ----
  7133. empty
  7134. query T
  7135. SELECT '(,)'::tstzrange - 'empty'::tstzrange
  7136. ----
  7137. (,)
  7138. query T
  7139. SELECT '(,)'::tstzrange - '(,1969-12-31 11:59:59]'::tstzrange
  7140. ----
  7141. ("1969-12-31 11:59:59+00",)
  7142. query T
  7143. SELECT '(,)'::tstzrange - '(,1969-12-31 11:59:59)'::tstzrange
  7144. ----
  7145. ["1969-12-31 11:59:59+00",)
  7146. query error result of range difference would not be contiguous
  7147. SELECT '(,)'::tstzrange - '(1969-12-31 11:59:58,1970-01-01 00:00:02)'::tstzrange
  7148. query error result of range difference would not be contiguous
  7149. SELECT '(,)'::tstzrange - '[1969-12-31 11:59:58,1970-01-01 00:00:02]'::tstzrange
  7150. query T
  7151. SELECT '(,)'::tstzrange - '[1970-01-01 00:00:01,)'::tstzrange
  7152. ----
  7153. (,"1970-01-01 00:00:01+00")
  7154. query T
  7155. SELECT '(,)'::tstzrange - '(1970-01-01 00:00:01,)'::tstzrange
  7156. ----
  7157. (,"1970-01-01 00:00:01+00"]