/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* Ġ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// aws . amazon . com / apache 2 . 0 / Ċ Ġ* Ċ Ġ* Ġ Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ċ Ġ* Ġ Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . part i ql . lang . ast Ċ Ċ import Ġcom . amazon . ion .* Ċ import Ġorg . part i ql . lang . util .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠThe Ġonly Ġnodes Ġthat Ġinherit Ġdirectly Ġfrom ĠExpr Node Ġshould Ġjust Ġbe Ġgeneric Ġexpressions Ġthat Ġcan Ġbe Ġused Ġany Ċ Ġ* Ġplace Ġa Ġvalue Ġis Ġallowed . Ċ Ġ*/ Ċ sealed Ġclass ĠExpr Node Ġ: ĠHas Met as Ġ{ ĊĊĠĠĠ Ġfun Ġcopy ( new Met as : ĠMeta Container ? Ġ= Ġnull ): ĠExpr Node Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġlooks Ġlike Ġduplication Ġbut Ġreally Ġisn 't : Ġeach Ġbranch Ġexecutes Ġa Ġdifferent Ġcompiler - generated Ġ` copy ` Ġfunction . ĊĠĠĠĠĠĠĠ Ġval Ġmet as Ġ= Ġnew Met as Ġ?: Ġthis . metas ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLiteral ĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLiteral Missing ĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVariable Reference Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNA ry ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall Agg ĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTyped ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPath ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Case ĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠS ear ched Case ĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSelect ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStruct ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList Expr Node ĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBag ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( metas Ġ= Ġmet as ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ******************************** Ċ // ĠBasic Ġarithmetic Ġexpressions . Ċ // ******************************** Ċ Ċ /** ĠRepresents Ġa Ġliteral Ġvalue . Ġ Ġ*/ Ċ data Ġclass ĠLiteral ( ĊĠĠĠ Ġval Ġion Value : ĠIon Value , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġion Value . clone (). make ReadOnly () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠRepresents Ġthe Ġliteral Ġvalue Ġ` MISSING `. Ġ*/ Ċ data Ġclass ĠLiteral Missing ( ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** Ċ Ġ* ĠA Ġvariable Ġreference , Ġwhich Ġcontains Ġa Ġ[ Symbolic Name ] Ġand Ġthe Ġ[ Case Sensitivity ] Ġthat Ġshould Ġbe Ġused Ġto Ġdetermine Ġwhen Ċ Ġ* Ġresolving Ġthe Ġvariable 's Ġbinding . Ċ Ġ*/ Ċ data Ġclass ĠVariable Reference ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġcase : ĠCase Sensitivity , ĊĠĠĠ Ġval Ġscope Qualifier : ĠScope Qualifier Ġ= ĠScope Qualifier . UN QUAL IFI ED , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRes pect s Ġcase Ġsensitivity Ġwhen Ġcomparing Ġagainst Ġanother Ġ[ Variable Reference ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġif ( other Ġ! is ĠVariable Reference ) Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid . compareTo ( other . id , Ġcase Ġ== ĠCase Sensitivity . INS ENS ITIVE ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcase ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== Ġother . case ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġscope Qualifier ĠĠ Ġ== Ġother . scope Qualifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmet as ĠĠĠĠĠĠĠĠĠĠĠ Ġ== Ġother . metas ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ ĠArrays . hashCode ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( case ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCase Sensitivity . S ENS ITIVE Ġ-> Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCase Sensitivity . INS ENS ITIVE Ġ-> Ġid . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmet as )) Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresents Ġan Ġn - ary Ġexpression . Ġ ĠSee Ġ[ NA ry Op ] Ġfor Ġthe Ġtypes Ġof Ġexpressions Ċ Ġ* Ġthat Ġcan Ġbe Ġrepresented Ġwith Ġan Ġinstance Ġof Ġ[ NA ry ]. Ċ Ġ*/ Ċ data Ġclass ĠNA ry ( ĊĠĠĠ Ġval Ġop : ĠNA ry Op , ĊĠĠĠ Ġval Ġargs : ĠList < Expr Node >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġcall Ġto Ġan Ġaggregate Ġfunction . Ċ Ġ*/ Ċ data Ġclass ĠCall Agg ( ĊĠĠĠ Ġval Ġfunc Expr : ĠExpr Node , ĊĠĠĠ Ġval Ġset Quant ifier : ĠSet Quant ifier , ĊĠĠĠ Ġval Ġarg : ĠExpr Node , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** ĠRepresents Ġa Ġ" typed Ġexpression ", Ġi . e . Ġ` CAST ` Ġand Ġ` IS `. Ġ*/ Ċ data Ġclass ĠTyped ( ĊĠĠĠ Ġval Ġop : ĠTyped Op , ĊĠĠĠ Ġval Ġexpr : ĠExpr Node , ĊĠĠĠ Ġval Ġtype : ĠDataType , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ // ******************************** Ċ // ĠPath Ġexpressions Ċ // ******************************** Ċ Ċ /** ĠRepresents Ġa Ġpath Ġexpression , Ġi . e . Ġ` foo . bar `, Ġ` foo [* ]. bar `, Ġetc . Ġ*/ Ċ data Ġclass ĠPath ( ĊĠĠĠ Ġval Ġroot : ĠExpr Node , ĊĠĠĠ Ġval Ġcomponents : ĠList < Path Component >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ // ******************************** Ċ // ĠSimple ĠCASE Ċ // ******************************** Ċ Ċ /** ĠFor Ġ` CASE Ġfoo ĠWHEN Ġ< value > ĠTHEN Ġ< expr > ĠELSE Ġ< else > ĠEND ` Ġ*/ Ċ data Ġclass ĠSimple Case ( ĊĠĠĠ Ġval Ġvalue Expr : ĠExpr Node , ĊĠĠĠ Ġval Ġwhen Clause s : ĠList < Simple Case When >, ĊĠĠĠ Ġval Ġelse Expr : ĠExpr Node ?, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container ) Ġ: ĠExpr Node () ĊĊ Ċ /** ĠRepresents Ġa Ġcase Ġof Ġa Ġ[ Simple Case ]. Ġ*/ Ċ data Ġclass ĠSimple Case When ( ĊĠĠĠ Ġval Ġvalue Expr : ĠExpr Node , ĊĠĠĠ Ġval Ġthen Expr : ĠExpr Node Ċ ) Ċ Ċ // ******************************** Ċ // ĠS ear ched ĠCASE Ċ // ******************************** Ċ Ċ /** ĠFor Ġ` CASE ĠWHEN Ġ< condition Expr > ĠTHEN Ġ< then Expr > ĠELSE Ġ< else Expr > ĠEND `. Ġ*/ Ċ data Ġclass ĠS ear ched Case ( ĊĠĠĠ Ġval Ġwhen Clause s : ĠList < Se ar ched Case When >, ĊĠĠĠ Ġval Ġelse Expr : ĠExpr Node ?, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** ĠRepresents Ġa Ġcase Ġof Ġa Ġ[ Se ar ched Case ]. Ġ*/ Ċ data Ġclass ĠS ear ched Case When ( ĊĠĠĠ Ġval Ġcondition : ĠExpr Node , ĊĠĠĠ Ġval Ġthen Expr : ĠExpr Node Ċ ) Ċ Ċ // ******************************** Ċ // ĠSelect ĠExpression Ċ // ******************************** Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġ` SELECT ` Ġstatements Ġas Ġwell Ġas Ġthe Ġ` PI V OT ` Ġand Ġ` SELECT ĠVALUE `, Ġvariants . Ċ Ġ*/ Ċ data Ġclass ĠSelect ( ĊĠĠĠ Ġval Ġset Quant ifier : ĠSet Quant ifier Ġ= ĠSet Quant ifier . ALL , ĊĠĠĠ Ġval Ġprojection : ĠSelect Projection , ĊĠĠĠ Ġval Ġfrom : ĠFrom Source , ĊĠĠĠ Ġval Ġwhere : ĠExpr Node ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġgroup By : ĠGroup By ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġhaving : ĠExpr Node ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġlimit : ĠExpr Node ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** Ċ Ġ* ĠS ymbolic Name Ġdoes Ġhave Ġa Ġsemantic Ġmeaning Ġand Ġprimarily Ġexists Ġso Ġthat Ġany Ġidentifier Ġin Ġthe Ġquery Ġmay Ċ Ġ* Ġhave Ġ` Meta ` Ġassociated Ġwith Ġit Ġthat Ġis Ġindependent Ġof Ġthe Ġparent Ġnode Ġwhich Ġim bu es Ġits Ġmeaning . Ċ Ġ* Ċ Ġ* ĠIn Ġthe Ġfollowing Ġexample : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠĠĠ ĠSELECT Ġ 1 Ġ+ Ġ 1 ĠAS Ġbar ĠFROM Ġ Ġ... Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ^ ĠĠĠĠĠĠĠ Ġ^ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠ 2 Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ` 1 Ġ+ Ġ 1 ĠAS Ġbar ` Ġ(# 1 ) Ġbecomes Ġa Ġ` Select ListItem Expr ` Ġwith Ġ` 1 Ġ+ Ġ 1 ` Ġas Ġits Ġexpression Ġand Ġ` bar ` Ġ(# 2 ) Ġas Ġits Ġ` as Alias `. Ċ Ġ* ĠIt Ġwould Ġbe Ġideal Ġto Ġpoint Ġusers Ġto Ġthe Ġlocation Ġof Ġbar Ġspecifically Ġin Ġthe Ġcase Ġof Ġerrors Ġrelated Ġto Ġthe Ġalias Ċ Ġ* Ġand Ġto Ġthe Ġlocation Ġof Ġthe Ġexpression Ġfor Ġerrors Ġrelated Ġto Ġthe Ġexpression . ĠHaving ĠS ymbolic Name Ġallows Ġfor Ċ Ġ* Ġthis . Ċ Ġ*/ Ċ data Ġclass ĠS ymbolic Name ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠHas Met as Ċ Ċ /** Ċ Ġ* ĠA Ġpath Ġcomponent Ġcan Ġbe : Ċ Ġ* ĠĠ Ġ- ĠAn Ġidentifier Ċ Ġ* ĠĠ Ġ- ĠAn Ġexpression Ġwith Ġan Ġoptional Ġalias Ċ Ġ* ĠĠ Ġ- ĠAn Ġun pivot Ġoperator Ġ( i . e . Ġthe Ġ` *` Ġin Ġ` a .* . c `) Ċ Ġ* ĠĠ Ġ- ĠA Ġwildcard Ġoperator Ġ( i . e . Ġthe Ġ`[ * ]` Ġin Ġ` a [* ]. b ` Ċ Ġ* ĠThe Ġ[ Path Component ] Ġbase Ġclass Ġis Ġused Ġto Ġconstr ain Ġthe Ġtypes Ġof Ġchild Ġnodes Ġthat Ġare Ġallowed Ċ Ġ* Ġin Ġa Ġ[ Path ] Ġexpression . Ċ Ġ*/ Ċ sealed Ġclass ĠPath Component Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġpath Ġcomponent Ġthat Ġis Ġan Ġexpression , Ġi . e . Ġ''' [' bar '] ''' Ġin Ġ''' foo [' bar '] '' '. Ċ Ġ* ĠAlso Ġrepresents Ġ``` a . b ``` Ġusing Ġa Ġliteral Ġstring Ġ` b ` Ġas Ġ[ expr ]. Ċ Ġ* Ġ[ case ] Ġindicates Ġthe Ġcase - s ensitivity Ġof Ġthe Ġlookup , Ġbut Ġthis Ġis Ġignored Ġin Ġthe Ġevent Ġthat Ġ[ expr ] Ġevaluates Ċ Ġ* Ġa Ġvalue Ġthat Ġis Ġnot Ġa Ġstring . Ċ Ġ*/ Ċ data Ġclass ĠPath Component Expr ( val Ġexpr : ĠExpr Node , Ġval Ġcase : ĠCase Sensitivity ) Ġ: ĠPath Component () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget StringValue If Case Ins ensitive Literal ( component : ĠPath Component Expr ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . case Ġ== ĠCase Sensitivity . INS ENS ITIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcomponent . expr Ġis ĠLiteral ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcomponent . expr . ion Value . type Ġ== ĠIon Type . STRING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . expr . ion Value . stringValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( other Ġas ? ĠPath Component Expr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy StringValue Ġ= Ġget StringValue If Case Ins ensitive Literal ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother StringValue Ġ= Ġget StringValue If Case Ins ensitive Literal ( other ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy StringValue Ġ== Ġnull Ġ&& Ġother StringValue Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNeither Ġcomponent Ġis Ġa Ġcase Ġins ensitive Ġstring Ġliteral , Ġstandard Ġequality Ġapplies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( other Expr , Ġother Case ) Ġ= Ġother ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpr . equals ( other Expr ) Ġ&& Ġcase Ġ== Ġother Case ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy StringValue Ġ== Ġnull Ġ|| Ġother StringValue Ġ== Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġone Ġof Ġthe Ġcomponents Ġwas Ġa Ġcase Ġins ensitive Ġliteral , Ġso Ġthey Ġare Ġnot Ġequal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBoth Ġcomponents Ġare Ġcase Ġins ensitive Ġliterals , Ġperform Ġcase Ġins ensitive Ġcomparison ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy StringValue . equals ( other StringValue , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ ĠArrays . hashCode ( array Of ( getString Value If Case Ins ensitive Literal ( this )?. toLowerCase () Ġ?: Ġexpr , Ġcase )) Ċ Ċ } Ċ Ċ /** ĠRepresents Ġan Ġun pivot Ġpath Ġcomponent , Ġi . e . Ġ` *` Ġin Ġ` foo .* . bar ` Ġ*/ Ċ data Ġclass ĠPath Component Un pivot ( override Ġval Ġmet as : ĠMeta Container ) Ġ: ĠPath Component (), ĠHas Met as Ċ Ċ /** ĠRepresents Ġa Ġwildcard Ġpath Ġcomponent , Ġi . e . Ġ`[ * ]` Ġin Ġ` foo [* ]. bar `. Ġ*/ Ċ data Ġclass ĠPath Component Wildcard ( override Ġval Ġmet as : ĠMeta Container ) Ġ: ĠPath Component (), ĠHas Met as ĊĊ Ċ sealed Ġclass ĠSelect Projection Ċ Ċ /** ĠFor Ġ` SELECT Ġ< Select ListItem > Ġ[, Ġ< Select ListItem >] ... ` Ġand Ġ` SELECT Ġ* ` Ġcases Ġ*/ Ċ data Ġclass ĠSelect Projection List ( ĊĠĠĠ Ġval Ġitems : ĠList < Select ListItem > Ċ ) Ġ: ĠSelect Projection () Ċ Ċ /** ĠFor Ġ` SELECT ĠVALUE Ġ< expr >` Ġ*/ Ċ data Ġclass ĠSelect Projection Value ( ĊĠĠĠ Ġval Ġexpr : ĠExpr Node Ċ ) Ġ: ĠSelect Projection () Ċ Ċ /** ĠFor Ġ` PI V OT Ġ< expr > ĠAS Ġ< as Name > ĠAT Ġ< at Name >` Ġ*/ Ċ data Ġclass ĠSelect Projection Pivot ( ĊĠĠĠ Ġval Ġvalue Expr : ĠExpr Node , ĊĠĠĠ Ġval Ġname Expr : ĠExpr Node Ċ ) Ġ: ĠSelect Projection () Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Select ListItem ] Ġnode Ġcan Ġbe : Ċ Ġ* ĠĠ Ġ- ĠAn Ġexpression Ġwith Ġan Ġoptional Ġalias Ċ Ġ* ĠĠ Ġ- ĠA Ġselect - all Ġexpression Ġ( i . e . Ġthe Ġ` *` Ġin Ġ` SELECT Ġ* ĠFROM Ġfoo `) Ċ Ġ* ĠThe Ġ[ Select ListItem ] Ġbase Ġclass Ġis Ġused Ġto Ġconstr ain Ġthe Ġtypes Ġof Ġchild Ġnodes Ġthat Ġare Ċ Ġ* Ġallowed Ġin Ġa Ġ[ Select ] Ġexpression 's Ġselect Ġlist . Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġintention ally Ġnot Ġa Ġsubtype Ġof Ġ[ Expr Node ] Ġbecause Ġthings Ġlike Ġthe Ġselect - all Ġexpression Ġ(` * `) Ġand Ċ Ġ* Ġexpressions Ġwith Ġaliases Ġare Ġnot Ġallowed Ġany Ġplace Ġan Ġ[ Expr Node ] Ġis Ġallowed . Ċ Ġ*/ Ċ sealed Ġclass ĠSelect ListItem Ċ Ċ /** ĠRepresents Ġ`< expr > Ġ[ AS Ġalias ]` Ġin Ġa Ġselect Ġlist .*/ Ċ data Ġclass ĠSelect ListItem Expr ( ĊĠĠĠ Ġval Ġexpr : ĠExpr Node , ĊĠĠĠ Ġval Ġas Name : ĠS ymbolic Name ? Ġ= Ġnull Ċ ) Ġ: ĠSelect ListItem () Ċ Ċ /** ĠRepresents Ġ`< expr > .* ` Ġin Ġa Ġselect Ġlist . Ġ*/ Ċ data Ġclass ĠSelect ListItem Project All ( val Ġexpr : ĠExpr Node ) Ġ: ĠSelect ListItem () Ċ Ċ /** ĠRepresents Ġan Ġ` *` Ġthat Ġis Ġnot Ġpart Ġof Ġa Ġpath Ġexpression Ġin Ġa Ġselect Ġlist , Ġi . e . Ġ` SELECT Ġ* ĠFROM Ġfoo `. Ġ Ġ*/ Ċ data Ġclass ĠSelect ListItem Star ( override Ġval Ġmet as : ĠMeta Container ) Ġ: ĠSelect ListItem (), ĠHas Met as Ċ Ċ /** Ċ Ġ* ĠA Ġ[ From Source ] Ġnode Ġcan Ġbe : Ċ Ġ* ĠĠ Ġ- ĠA Ġn - ary Ġexpression Ġwith Ġoptional Ġ` AS ` Ġand Ġ` AT ` Ġaliases Ċ Ġ* ĠĠ Ġ- ĠA Ġqualified Ġjoin Ġ( i . e . Ġinner , Ġleft , Ġright , Ġouter ) Ċ Ġ* ĠĠ Ġ- ĠAn Ġun p vi ot : Ċ Ġ* ĠĠ ĠNote : Ġa Ġ` CROSS ĠJOIN ` Ġis Ġmode led Ġas Ġan Ġ` INNER ĠJOIN ` Ġwith Ġa Ġcondition Ġof Ġ` true `. Ċ Ġ* ĠĠ ĠNote : Ġ` From Source ` s Ġthat Ġare Ġseparated Ġby Ġcommas Ġare Ġmode led Ġas Ġan ĠINNER ĠJOIN Ġwith Ġa Ġcondition Ġof Ġ` true `. Ċ Ġ*/ Ċ sealed Ġclass ĠFrom Source Ċ Ċ /** ĠRepresents Ġ`< expr > Ġ[ AS Ġ< correlation >] ` Ġwithin Ġa ĠFROM Ġclause . Ġ*/ Ċ data Ġclass ĠFrom Source Expr ( ĊĠĠĠ Ġval Ġexpr : ĠExpr Node , ĊĠĠĠ Ġval Ġas Name : ĠS ymbolic Name ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġat Name : ĠS ymbolic Name ? Ġ= Ġnull Ċ ) Ġ: ĠFrom Source () Ċ Ċ /** ĠRepresents Ġ`< left Ref > Ġ[ INNER Ġ| ĠOUT ER Ġ| ĠLEFT Ġ| ĠRIGHT ] ĠJOIN Ġ< right Ref > ĠON Ġ< condition >`. Ġ*/ Ċ data Ġclass ĠFrom Source Join ( ĊĠĠĠ Ġval Ġjoin Op : ĠJoin Op , ĊĠĠĠ Ġval Ġleft Ref : ĠFrom Source , ĊĠĠĠ Ġval Ġright Ref : ĠFrom Source , ĊĠĠĠ Ġval Ġcondition : ĠExpr Node , ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠFrom Source (), ĠHas Met as Ċ Ċ /** ĠRepresents Ġ` SELECT Ġ... ĠFROM ĠUN PI V OT Ġ< from Source > Ġ[ AS Ġ< as Name >] Ġ[ AT Ġ< at Name >] `. Ċ Ġ* Ċ Ġ* ĠNote : Ġ Ġalthough Ġthis Ġis Ġalmost Ġthe Ġsame Ġas Ġ[ From Source Expr ], Ġit Ġhas Ġto Ġbe Ġkept Ġin Ġits Ġown Ġdistinct Ċ Ġ* Ġdata Ġclass Ġbecause Ġ[ From Source Expr ] Ġhas Ġno Ġmet as Ġof Ġits Ġown , Ġinstead Ġrelying Ġon Ġ[ From Source Expr . expr ] Ġto Ġstore Ċ Ġ* Ġmet as . Ġ ĠHowever , Ġ[ From Source Un pivot ] Ġmust Ġhave Ġits Ġown Ġmet as Ġbecause Ġit Ġa Ġtransform Ġon Ġthe Ġvalue Ġresulting Ġfrom Ċ Ġ* Ġ[ From Source Un pivot . expr ] -- and Ġthus Ġit Ġchanges Ġits Ġdata Ġtype . Ġ Ġ( When Ġsupported , Ġtype Ġinformation Ġwill Ġbe Ġstored Ċ Ġ* Ġas Ġmeta Ġnodes .) Ċ Ġ*/ Ċ data Ġclass ĠFrom Source Un pivot ( ĊĠĠĠ Ġval Ġexpr : ĠExpr Node , ĊĠĠĠ Ġval Ġas Name : ĠS ymbolic Name ?, ĊĠĠĠ Ġval Ġat Name : ĠS ymbolic Name ?, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠFrom Source (), ĠHas Met as Ċ Ċ fun ĠFrom Source . metas () Ġ= ĊĠĠĠ Ġwhen ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠFrom Source Expr ĠĠĠ Ġ-> Ġthis . expr . metas ĊĠĠĠĠĠĠĠ Ġis ĠFrom Source Join ĠĠĠ Ġ-> Ġthis . metas ĊĠĠĠĠĠĠĠ Ġis ĠFrom Source Un pivot Ġ-> Ġthis . expr . metas ĊĠĠĠ Ġ} Ċ Ċ /** ĠFor Ġ` GROUP Ġ[ ĠPAR TIAL Ġ] ĠBY Ġ< item > ... Ġ[ ĠGROUP ĠAS Ġ< g rop u Name > Ġ] `. Ġ*/ Ċ data Ġclass ĠGroup By ( ĊĠĠĠ Ġval Ġgrouping : ĠGroup ing Strategy , ĊĠĠĠ Ġval Ġgroup By Items : ĠList < GroupBy Item >, ĊĠĠĠ Ġval ĠgroupName : ĠS ymbolic Name ? Ġ= Ġnull Ċ ) Ċ Ċ data Ġclass ĠGroup By Item ( ĊĠĠĠ Ġval Ġexpr : ĠExpr Node , ĊĠĠĠ Ġval Ġas Name : ĠS ymbolic Name ? Ġ= Ġnull Ċ ) Ċ Ċ // ******************************** Ċ // ĠConstructors Ċ // ******************************** Ċ Ċ /** ĠRepresents Ġa Ġfield Ġin Ġa Ġstruct Ġconstructor . Ġ*/ Ċ data Ġclass ĠStruct Field ( ĊĠĠĠ Ġval Ġname : ĠExpr Node , ĊĠĠĠ Ġval Ġexpr : ĠExpr Node Ċ ) Ċ Ċ /** ĠRepresents Ġa Ġstruct Ġconstructor . Ġ*/ Ċ data Ġclass ĠStruct ( ĊĠĠĠ Ġval Ġfields : ĠList < Struct Field >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġlist Ġconstructor . Ċ Ġ* ĠNote : Ġ` Expr Node ` Ġsuffix Ġin Ġname Ġdis amb igu ates Ġfrom Ġ[ kotlin . collections . List ]. Ċ Ġ*/ Ċ data Ġclass ĠList Expr Node ( ĊĠĠĠ Ġval Ġvalues : ĠList < Expr Node >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** ĠRepresents Ġa Ġbag Ġconstructor . Ġ*/ Ċ data Ġclass ĠBag ( ĊĠĠĠ Ġval Ġbag : ĠList < Expr Node >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠExpr Node () Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġdata Ġtype Ġreference Ġsuch Ġas Ġ` INT ` Ġor Ġ` VARCHAR ( 5 0 )`. Ċ Ġ*/ Ċ data Ġclass ĠDataType ( ĊĠĠĠ Ġval Ġsql DataType : ĠSql DataType , ĊĠĠĠ Ġval Ġargs : ĠList < Long >, ĊĠĠĠ Ġoverride Ġval Ġmet as : ĠMeta Container Ċ ) Ġ: ĠHas Met as Ċ Ċ // ******************************** Ċ // ĠNode Ġattributes Ċ // ******************************** Ċ Ċ /** ĠIndicates Ġcase Ġsensitivity Ġof Ġvariable Ġreferences . Ġ*/ Ċ enum Ġclass ĠCase Sensitivity ( private Ġval Ġsymbol : ĠString ) Ġ{ ĊĠĠĠ ĠS ENS ITIVE (" case _ sensitive "), ĊĠĠĠ ĠIN S ENS ITIVE (" case _ ins ensitive "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Symbol ( s : ĠString ) Ġ: ĠCase Sensitivity Ġ= Ġwhen Ġ( s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" case _ sensitive " Ġ-> ĠS ENS ITIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" case _ ins ensitive " Ġ-> ĠIN S ENS ITIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unrecognized ĠCase Sensitivity Ġ$ s ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Symbol () Ġ= Ġsymbol Ċ Ċ } Ċ Ċ /** ĠIndicates Ġif Ġall Ġrows Ġin Ġa Ġselect Ġquery Ġare Ġto Ġbe Ġreturned Ġor Ġonly Ġdistinct Ġrows . Ġ*/ Ċ enum Ġclass ĠSet Quant ifier Ġ{ ĊĠĠĠ ĠALL , ĠDISTINCT Ċ } Ċ Ċ /** Ċ Ġ* ĠDifferent Ġtypes Ġof Ġn - ary Ġoperations . Ċ Ġ* Ġ[ min Ar ity ] Ġand Ġ[ max Ar ity ] Ġare Ġto Ġbe Ġused Ġduring ĠAST Ġvalidation . Ċ Ġ* Ġ[ symbol ] Ġis Ġused Ġto Ġlook Ġup Ġan Ġ[ NA ry Op ] Ġinstance Ġfrom Ġthe Ġtoken Ġtext Ġand Ġmust Ġbe Ġunique Ġamong Ċ Ġ* Ġall Ġinstances Ġof Ġ[ NA ry Op ]. Ċ Ġ*/ Ċ enum Ġclass ĠNA ry Op ( val Ġar ity Range : ĠInt Range , Ġval Ġsymbol : ĠString ) Ġ{ ĊĠĠĠ Ġ/** ĠAdd , Ġbut Ġwhen Ġar ity Ġis Ġ 1 Ġthen Ġthis Ġjust Ġreturns Ġthe Ġvalue Ġof Ġits Ġargument . Ġ*/ ĊĠĠĠ ĠADD ( 1 .. Int . MAX _ VALUE , Ġ"+ "), ĊĊĠĠĠ Ġ/** ĠSubtract , Ġbut Ġwhen Ġwhen Ġar ity Ġis Ġ 1 , Ġthen Ġthis Ġis Ġassumed Ġto Ġbe Ġ 0 Ġ- Ġ< arg 1 >. Ġ*/ ĊĠĠĠ ĠSUB ( 1 .. Int . MAX _ VALUE , Ġ"- "), ĊĊĠĠĠ Ġ/** ĠMultiply Ġ*/ ĊĠĠĠ ĠMUL ( 2 .. Int . MAX _ VALUE , Ġ"* "), ĊĊĠĠĠ Ġ/** ĠDiv ide Ġ*/ ĊĠĠĠ ĠDIV ( 2 .. Int . MAX _ VALUE , Ġ"/ "), ĊĊĠĠĠ Ġ/** ĠMod ulus Ġ*/ ĊĠĠĠ ĠMOD ( 2 .. Int . MAX _ VALUE , Ġ"% "), ĊĊĠĠĠ Ġ/** ĠE quivalent Ġ*/ ĊĠĠĠ ĠE Q ( 2 .. Int . MAX _ VALUE , Ġ"=" ), ĊĊĠĠĠ Ġ/** ĠLess - than Ġ*/ ĊĠĠĠ ĠLT ( 2 .. Int . MAX _ VALUE , Ġ"< "), ĊĊĠĠĠ Ġ/** ĠLess - than - or - equal .*/ ĊĠĠĠ ĠL TE ( 2 .. Int . MAX _ VALUE , Ġ"< =" ), ĊĊĠĠĠ Ġ/** ĠG reater - than . Ġ*/ ĊĠĠĠ ĠGT ( 2 .. Int . MAX _ VALUE , Ġ"> "), ĊĊĠĠĠ Ġ/** ĠG reater - than - or - equal . Ġ*/ ĊĠĠĠ ĠG TE ( 2 .. Int . MAX _ VALUE , Ġ"> =" ), ĊĊĠĠĠ Ġ/** ĠNot ĠEquals . Ġ*/ ĊĠĠĠ ĠNE ( 2 .. Int . MAX _ VALUE , Ġ"< > "), ĊĊĠĠĠ Ġ/** ĠLike . Ġ*/ ĊĠĠĠ ĠLIKE ( 2 .. 3 , Ġ" like "), ĊĊĠĠĠ Ġ/** ĠBet ween Ġexpression .. i . e . Ġ`< expr 1 > ĠBETWEEN Ġ< expr 2 > ĠAND Ġ< expr 3 >` */ ĊĠĠĠ ĠBETWEEN ( 3 .. 3 , Ġ" between "), ĊĊĠĠĠ Ġ/** ĠIN Ġexpression , Ġi . e . Ġ`< expr 1 > ĠIN Ġ< container Expr > Ġ` Ġ*/ ĊĠĠĠ ĠIN ( 2 .. Int . MAX _ VALUE , Ġ" in "), ĊĊĠĠĠ Ġ/** ĠLogical Ġnot Ġ*/ ĊĠĠĠ ĠNOT ( 1 .. 1 , Ġ" not "), ĊĊĠĠĠ Ġ/** ĠLogical Ġ` and `. Ġ*/ ĊĠĠĠ ĠAND ( 2 .. Int . MAX _ VALUE , Ġ" and "), ĊĊĠĠĠ Ġ/** ĠLogical Ġ` or ` Ġ*/ ĊĠĠĠ ĠOR ( 2 .. Int . MAX _ VALUE , Ġ" or "), ĊĊĠĠĠ Ġ/** ĠString Ġconcat enation . Ġ*/ ĊĠĠĠ ĠSTRING _ CONCAT ( 2 .. Int . MAX _ VALUE , Ġ" || "), ĊĊĠĠĠ Ġ/** ĠA Ġfunction Ġcall . Ġ*/ ĊĠĠĠ ĠCALL ( 0 .. Int . MAX _ VALUE , Ġ" call "), ĊĊĠĠĠ Ġ// ĠThe Ġfollowing Ġare Ġcapable Ġof Ġbeing Ġparsed Ġby Ġ[ Sql Parser ] Ġbut Ġare Ġnot Ġcurrently Ġbeing Ġconsumed Ġby ĊĠĠĠ Ġ// Ġ[ Evalu ating Compiler ]. Ġ ĠAdditionally , Ġthey Ġare Ġnot Ġwell Ġdefined Ġin ĠREADME - AST . md , Ġwhich Ġdoes Ġnot ĊĠĠĠ Ġ// Ġseem Ġto Ġagree Ġwith Ġwhat Ġis Ġdefined Ġfor Ġthese Ġin Ġthe ĠPart i QL Ġspec . Ġ ĠFor Ġinstance , Ġthe Ġspec Ġreferences Ġan ĊĠĠĠ Ġ// ĠORDER ED Ġkeyword , Ġbut Ġthis Ġkeyword Ġis Ġnever Ġused Ġin Ġrelation Ġto Ġthese Ġoperations Ġin Ġthe Ġsource Ġor ĠREADME - AST . md . ĊĠĠĠ Ġ// ĠAs Ġa Ġresult , Ġthese Ġdefinitions Ġare Ġa Ġ" best Ġguess " Ġthat Ġwill Ġlikely Ġneed Ġto Ġbe Ġmodified Ġwhen Ġit Ġcomes Ġtime ĊĠĠĠ Ġ// Ġto Ġsupport Ġthese Ġoperators . ĊĠĠĠ ĠINTER SECT ( 2 .. Int . MAX _ VALUE , Ġ" intersect "), ĊĠĠĠ ĠINTER SECT _ ALL ( 2 .. Int . MAX _ VALUE , Ġ" intersect _ all "), ĊĠĠĠ ĠEXCEPT ( 2 .. Int . MAX _ VALUE , Ġ" except "), ĊĠĠĠ ĠEXCEPT _ ALL ( 2 .. Int . MAX _ VALUE , Ġ" except _ all "), ĊĠĠĠ ĠUNION ( 2 .. Int . MAX _ VALUE , Ġ" union "), ĊĠĠĠ ĠUNION _ ALL ( 2 .. Int . MAX _ VALUE , Ġ" union _ all "), ĊĠĠĠ ĠCONCAT ( 2 .. Int . MAX _ VALUE , Ġ" concat "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠMap Ġof Ġ[ NA ry Op ] Ġkey ed Ġby Ġthe Ġoperation 's Ġtext . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠOP _ SYMBOL _ TO _ OP _ LOOK UP Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNA ry Op . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it . symbol , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġfor Symbol ( symbol : ĠString ): ĠNA ry Op ? Ġ= ĠOP _ SYMBOL _ TO _ OP _ LOOK UP [ symbol ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠDifferent Ġtypes Ġof Ġtype Ġexpressions . Ġ Ġ*/ Ċ enum Ġclass ĠTyped Op ( val Ġtext : ĠString ) Ġ{ ĊĠĠĠ ĠCAST (" cast "), ĊĠĠĠ ĠIS (" is ") Ċ } Ċ Ċ /** ĠType Ġof Ġjoin Ġoperation . Ġ*/ Ċ enum Ġclass ĠJoin Op Ġ{ ĊĠĠĠ Ġ/** ĠINNER ĠJOIN . Ġ*/ ĊĠĠĠ ĠINNER , ĊĊĠĠĠ Ġ/** ĠA ĠLEFT ĠOUT ER ĠJOIN . Ġ*/ ĊĠĠĠ ĠLEFT , ĊĊĠĠĠ Ġ/** ĠA ĠRIGHT ĠOUT ER ĠJOIN . Ġ*/ ĊĠĠĠ ĠRIGHT , ĊĊĠĠĠ Ġ/** ĠA ĠFULL ĠOUT ER ĠJOIN . Ġ*/ ĊĠĠĠ ĠOUT ER Ċ } Ċ Ċ /** ĠGroup ing Ġstrategy . Ġ*/ Ċ enum Ġclass ĠGroup ing Strategy Ġ{ ĊĠĠĠ Ġ/** ĠRepresents Ġ` GROUP ĠBY ` Ġ( no Ġpartial ). Ġ*/ ĊĠĠĠ ĠFULL , ĊĠĠĠ Ġ/** ĠRepresents Ġ` GROUP ĠPAR TIAL ĠBY `. */ ĊĠĠĠ ĠPAR TIAL Ċ } Ċ Ċ /** Ċ Ġ* ĠIndicates Ġstrategy Ġfor Ġbinding Ġlookup Ġwithin Ġscopes . Ċ Ġ*/ Ċ enum Ġclass ĠScope Qualifier Ġ{ ĊĠĠĠ Ġ/** ĠFor Ġvariable Ġreferences Ġ* not * Ġprefixed Ġwith Ġ'@ '. Ġ*/ ĊĠĠĠ ĠUN QUAL IFI ED , ĊĊĠĠĠ Ġ/** ĠFor Ġvariable Ġreferences Ġprefixed Ġwith Ġ'@ '. Ġ*/ ĊĠĠĠ ĠL EX ICAL , Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġcore ĠPart i QL Ġdata Ġtypes . Ċ Ġ*/ Ċ enum Ġclass ĠSql DataType ( val ĠtypeName : ĠString , Ġval Ġar ity Range : ĠInt Range ) Ġ{ ĊĠĠĠ ĠMIS SING (" missing ", Ġ 0 .. 0 ), Ġ// ĠPart i QL ĊĠĠĠ ĠNULL (" null ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠBOOLEAN (" boolean ", Ġ 0 .. 0 ), Ġ// ĠIon Ġ& ĠSQL - 9 9 ĊĠĠĠ ĠSMALL INT (" small int ", Ġ 0 .. 0 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠINTEGER (" integer ", Ġ 0 .. 0 ), Ġ// ĠIon Ġ& ĠSQL - 9 2 ĊĠĠĠ ĠFLOAT (" float ", Ġ 0 .. 1 ), Ġ// ĠIon Ġ& ĠSQL - 9 2 ĊĠĠĠ ĠREAL (" real ", Ġ 0 .. 0 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠDOUBLE _ PREC ISION (" double _ precision ", Ġ 0 .. 0 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠDEC IMAL (" decimal ", Ġ 0 .. 2 ), Ġ// ĠIon Ġ& ĠSQL - 9 2 ĊĠĠĠ ĠNUM ERIC (" numeric ", Ġ 0 .. 2 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠTIMESTAMP (" timestamp ", Ġ 0 .. 0 ), Ġ// ĠIon Ġ& ĠSQL - 9 2 ĊĠĠĠ ĠCHARACTER (" character ", Ġ 0 .. 1 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠCHARACTER _ V ARY ING (" character _ varying ", Ġ 0 .. 1 ), Ġ// ĠSQL - 9 2 ĊĠĠĠ ĠSTRING (" string ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠSYMBOL (" symbol ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠC LOB (" c lob ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠBLOB (" blob ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠSTR UCT (" struct ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠT UP LE (" tuple ", Ġ 0 .. 0 ), Ġ// ĠPart i QL ĊĠĠĠ ĠLIST (" list ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠSEXP (" se xp ", Ġ 0 .. 0 ), Ġ// ĠIon ĊĠĠĠ ĠB AG (" bag ", Ġ 0 .. 0 ); Ġ Ġ// ĠPart i QL ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ TYPE _ NAME _ TO _ TYPE _ LOOK UP Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSql DataType . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it . typeName , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠĠĠĠĠ Ġfun Ġfor TypeName ( typeName : ĠString ): ĠSql DataType ? Ġ= ĠDATA _ TYPE _ NAME _ TO _ TYPE _ LOOK UP [ typeName ] ĊĠĠĠ Ġ} Ċ } ĊĊĊ