/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġe Al va . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġ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 Ġcom . e al va . w elite . db . expr Ċ Ċ import Ġcom . e al va . w elite . db . type . Boolean Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Byte Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Double Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Float Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Integer Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Long Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Short Persistent Type Ċ import Ġcom . e al va . w elite . db . type . Sql Builder Ċ import Ġcom . e al va . w elite . db . type . String Persistent Type Ċ import Ġcom . e al va . w elite . db . type . U Byte Persistent Type Ċ import Ġcom . e al va . w elite . db . type . U Integer Persistent Type Ċ import Ġcom . e al va . w elite . db . type . UL ong Persistent Type Ċ import Ġcom . e al va . w elite . db . type . U Short Persistent Type Ċ Ċ public Ġclass ĠLiteral Op < T >( ĊĠ Ġoverride Ġval Ġpersistent Type : ĠPersistent Type < T >, ĊĠ Ġpublic Ġval Ġvalue : ĠT Ċ ) Ġ: ĠBase Sql Type Expression < T >() Ġ{ ĊĠ Ġoverride Ġfun Ġas DefaultValue (): ĠString Ġ= ĠtoString () ĊĊĠ Ġoverride Ġfun Ġappend To ( ĊĠĠĠ Ġsql Builder : ĠSql Builder ĊĠ Ġ): ĠSql Builder Ġ= Ġsql Builder . apply Ġ{ ĊĠĠĠ Ġappend ( persistent Type . value ToString ( value , Ġtrue )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠLiteral Op < *> ĊĊĠĠĠ Ġif Ġ( persistent Type Ġ!= Ġother . persistent Type ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( value Ġ!= Ġother . value ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpersistent Type . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( value ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ public Ġfun Ġliteral ( value : ĠBoolean ): ĠLiteral Op < Boolean > Ġ= ĊĠ ĠLiteral Op ( Boolean Persistent Type (), Ġvalue ) Ċ Ċ public Ġfun Ġliteral ( value : ĠByte ): ĠLiteral Op < Byte > Ġ= ĠLiteral Op ( Byte Persistent Type (), Ġvalue ) Ċ public Ġfun Ġliteral ( value : ĠShort ): ĠLiteral Op < Short > Ġ= ĠLiteral Op ( Short Persistent Type (), Ġvalue ) Ċ public Ġfun Ġliteral ( value : ĠInt ): ĠLiteral Op < Int > Ġ= ĠLiteral Op ( Integer Persistent Type (), Ġvalue ) Ċ public Ġfun Ġliteral ( value : ĠLong ): ĠLiteral Op < Long > Ġ= ĠLiteral Op ( Long Persistent Type (), Ġvalue ) Ċ public Ġfun Ġliteral ( value : ĠFloat ): ĠLiteral Op < Float > Ġ= ĠLiteral Op ( Float Persistent Type (), Ġvalue ) Ċ public Ġfun Ġliteral ( value : ĠDouble ): ĠLiteral Op < Double > Ġ= ĊĠ ĠLiteral Op ( Double Persistent Type (), Ġvalue ) Ċ Ċ public Ġfun Ġliteral ( value : ĠString ): ĠLiteral Op < String > Ġ= ĊĠ ĠLiteral Op ( String Persistent Type (), Ġvalue ) Ċ Ċ @ Experimental Unsigned Types Ċ public Ġfun Ġliteral ( value : ĠU Byte ): ĠLiteral Op < U Byte > Ġ= ĠLiteral Op ( U Byte Persistent Type (), Ġvalue ) Ċ Ċ @ Experimental Unsigned Types Ċ public Ġfun Ġliteral ( value : ĠU Short ): ĠLiteral Op < U Short > Ġ= ĊĠ ĠLiteral Op ( U Short Persistent Type (), Ġvalue ) Ċ Ċ @ Experimental Unsigned Types Ċ public Ġfun Ġliteral ( value : ĠUInt ): ĠLiteral Op < UInt > Ġ= ĠLiteral Op ( U Integer Persistent Type (), Ġvalue ) Ċ Ċ @ Experimental Unsigned Types Ċ public Ġfun Ġliteral ( value : ĠU Long ): ĠLiteral Op < UL ong > Ġ= ĠLiteral Op ( UL ong Persistent Type (), Ġvalue ) Ċ Ċ public Ġclass ĠMod Op < T Ġ: ĠNumber ?, ĠS Ġ: ĠNumber ? >( ĊĠ Ġprivate Ġval Ġlhs : ĠExpression < T >, ĊĠ Ġprivate Ġval Ġrhs : ĠExpression < S >, ĊĠ Ġoverride Ġval Ġpersistent Type : ĠPersistent Type < T > Ċ ) Ġ: ĠBase Sql Type Expression < T >() Ġ{ ĊĠ Ġoverride Ġfun Ġappend To ( sql Builder : ĠSql Builder ): ĠSql Builder Ġ= Ġsql Builder . apply Ġ{ ĊĠĠĠ Ġappend (' (' ) ĊĠĠĠ Ġappend ( lhs ) ĊĠĠĠ Ġappend (" Ġ% Ġ") ĊĠĠĠ Ġappend ( rhs ) ĊĠĠĠ Ġappend (' )') ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠMod Op < *, Ġ*> ĊĊĠĠĠ Ġif Ġ( lhs Ġ!= Ġother . lhs ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( rhs Ġ!= Ġother . rhs ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( persistent Type Ġ!= Ġother . persistent Type ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġlhs . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġrhs . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpersistent Type . hashCode () ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ @ Suppress (" unused ") Ċ public Ġclass ĠNo Op Conversion < T , ĠS >( ĊĠ Ġprivate Ġval Ġexpr : ĠExpression < T >, ĊĠ Ġoverride Ġval Ġpersistent Type : ĠPersistent Type < S > Ċ ) Ġ: ĠBase Sql Type Expression < S >() Ġ{ ĊĠ Ġoverride Ġfun Ġappend To ( sql Builder : ĠSql Builder ): ĠSql Builder Ġ= Ġsql Builder . apply Ġ{ Ġappend ( expr ) Ġ} ĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠNo Op Conversion < *, Ġ*> ĊĊĠĠĠ Ġif Ġ( expr Ġ!= Ġother . expr ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( persistent Type Ġ!= Ġother . persistent Type ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġexpr . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpersistent Type . hashCode () ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ public Ġclass ĠIn List Or NotIn List Op < T >( ĊĠ Ġprivate Ġval Ġexpr : ĠSql Type Expression < T >, ĊĠ Ġprivate Ġval Ġlist : ĠIterable < T >, ĊĠ Ġprivate Ġval ĠisIn List : ĠBoolean Ġ= Ġtrue Ċ ) Ġ: ĠOp < Boolean >() Ġ{ ĊĠ Ġoverride Ġfun Ġappend To ( sql Builder : ĠSql Builder ): ĠSql Builder Ġ= Ġsql Builder . apply Ġ{ ĊĠĠĠ Ġlist . iterator (). let Ġ{ Ġi Ġ-> ĊĠĠĠĠĠ Ġif Ġ(! i . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ( FALSE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ( TRUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġi . next () ĊĠĠĠĠĠĠĠ Ġif Ġ(! i . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ( expr ) ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn List Ġ-> Ġappend (" Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend (" Ġ!= Ġ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġregister Argument ( expr . persistent Type , Ġfirst ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ( expr ) ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn List Ġ-> Ġappend (" ĠIN Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend (" ĠNOT ĠIN Ġ( ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġregister Arguments ( expr . persistent Type , Ġlist ) ĊĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ public Ġclass ĠPlus Op < T , ĠS Ġ: ĠT >( ĊĠ Ġlhs : ĠExpression < T >, ĊĠ Ġrhs : ĠExpression < S >, ĊĠ Ġpersistent Type : ĠPersistent Type < T > Ċ ) Ġ: ĠCustom Operator < T >(" +", Ġpersistent Type , Ġlhs , Ġrhs ) Ċ Ċ public Ġclass ĠMin us Op < T , ĠS Ġ: ĠT >( ĊĠ Ġlhs : ĠExpression < T >, ĊĠ Ġrhs : ĠExpression < S >, ĊĠ Ġpersistent Type : ĠPersistent Type < T > Ċ ) Ġ: ĠCustom Operator < T >(" -", Ġpersistent Type , Ġlhs , Ġrhs ) Ċ Ċ public Ġclass ĠTimes Op < T , ĠS Ġ: ĠT >( ĊĠ Ġlhs : ĠExpression < T >, ĊĠ Ġrhs : ĠExpression < S >, ĊĠ Ġpersistent Type : ĠPersistent Type < T > Ċ ) Ġ: ĠCustom Operator < T >(" *", Ġpersistent Type , Ġlhs , Ġrhs ) Ċ Ċ public Ġclass ĠDiv ide Op < T , ĠS Ġ: ĠT >( ĊĠ Ġrhs : ĠExpression < T >, ĊĠ Ġlhs : ĠExpression < S >, ĊĠ Ġpersistent Type : ĠPersistent Type < T > Ċ ) Ġ: ĠCustom Operator < T > ("/", Ġpersistent Type , Ġrhs , Ġlhs ) Ċ Ċ public Ġclass ĠBet ween ( ĊĠ Ġprivate Ġval Ġexpr : ĠExpression <* >, ĊĠ Ġprivate Ġval Ġfrom : ĠLiteral Op <* >, ĊĠ Ġprivate Ġval Ġto : ĠLiteral Op < *> Ċ ) Ġ: ĠOp < Boolean >() Ġ{ ĊĠ Ġoverride Ġfun Ġappend To ( sql Builder : ĠSql Builder ): ĠSql Builder Ġ= Ġsql Builder . apply Ġ{ ĊĠĠĠ Ġappend ( expr ) ĊĠĠĠ Ġappend (" ĠBETWEEN Ġ") ĊĠĠĠ Ġappend ( from ) ĊĠĠĠ Ġappend (" ĠAND Ġ") ĊĠĠĠ Ġappend ( to ) ĊĠ Ġ} Ċ } Ċ