package Ġd ml Ċ Ċ import Ġio . sk erna . d sql . core . Subject Ċ import Ġio . sk erna . d sql . core . Table Ċ Ċ class ĠOrder Clause < T : ĠTable >( ĊĠĠĠĠĠĠĠ Ġval Ġorder ings : ĠIterable < Ordering >, ĊĠĠĠĠĠĠĠ Ġval Ġsubject : ĠSubject < T >, ĊĠĠĠĠĠĠĠ Ġval Ġwhere Clause : ĠWhere Clause < T > ?, ĊĠĠĠĠĠĠĠ Ġval Ġgroup Clause : ĠGroup Clause < T > ?, ĊĠĠĠĠĠĠĠ Ġval Ġhaving Clause : ĠHaving Clause < T > ?) Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġlimit ( limit : Ġ() Ġ-> ĠAny ): ĠLimit Clause < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLimit Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġoffset ( offset : Ġ() Ġ-> ĠAny ): ĠOffset Clause < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOffset Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ{ Ġ"- 1 " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġselect ( projection : Ġ( T ) Ġ-> ĠIterable < Projection >): ĠSelect Statement < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSelect Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection ( subject . table ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving Clause ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠOrder 2 Clause < T : ĠTable , ĠT 2 : ĠTable >( ĊĠĠĠĠĠĠĠ Ġval Ġorder ings : ĠIterable < Ordering >, ĊĠĠĠĠĠĠĠ Ġval Ġjoin On 2 Clause : ĠJoin On 2 Clause < T , ĠT 2 >, ĊĠĠĠĠĠĠĠ Ġval Ġwhere 2 Clause : ĠWhere 2 Clause < T , ĠT 2 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġgroup 2 Clause : ĠGroup 2 Clause < T , ĠT 2 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġhaving 2 Clause : ĠHaving 2 Clause < T , ĠT 2 > ?) Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġlimit ( limit : Ġ() Ġ-> ĠAny ): ĠLimit 2 Clause < T , ĠT 2 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLimit 2 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 2 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġoffset ( offset : Ġ() Ġ-> ĠAny ): ĠOffset 2 Clause < T , ĠT 2 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOffset 2 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ{ Ġ"- 1 " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 2 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġselect ( projection : Ġ( T , ĠT 2 ) Ġ-> ĠIterable < Projection >): ĠSelect 2 Statement < T , ĠT 2 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSelect 2 Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection ( join On 2 Clause . subject . table , Ġjoin On 2 Clause . table 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 2 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 2 Clause ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠOrder 3 Clause < T : ĠTable , ĠT 2 : ĠTable , ĠT 3 : ĠTable >( ĊĠĠĠĠĠĠĠ Ġval Ġorder ings : ĠIterable < Ordering >, ĊĠĠĠĠĠĠĠ Ġval Ġjoin On 3 Clause : ĠJoin On 3 Clause < T , ĠT 2 , ĠT 3 >, ĊĠĠĠĠĠĠĠ Ġval Ġwhere 3 Clause : ĠWhere 3 Clause < T , ĠT 2 , ĠT 3 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġgroup 3 Clause : ĠGroup 3 Clause < T , ĠT 2 , ĠT 3 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġhaving 3 Clause : ĠHaving 3 Clause < T , ĠT 2 , ĠT 3 > ?) Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġlimit ( limit : Ġ() Ġ-> ĠAny ): ĠLimit 3 Clause < T , ĠT 2 , ĠT 3 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLimit 3 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 3 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġoffset ( offset : Ġ() Ġ-> ĠAny ): ĠOffset 3 Clause < T , ĠT 2 , ĠT 3 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOffset 3 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ{ Ġ"- 1 " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 3 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġselect ( projection : Ġ( T , ĠT 2 , ĠT 3 ) Ġ-> ĠIterable < Projection >): ĠSelect 3 Statement < T , ĠT 2 , ĠT 3 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSelect 3 Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection ( join On 3 Clause . join On 2 Clause . subject . table , Ġjoin On 3 Clause . join On 2 Clause . table 2 , Ġjoin On 3 Clause . table 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 3 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 3 Clause ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠOrder 4 Clause < T : ĠTable , ĠT 2 : ĠTable , ĠT 3 : ĠTable , ĠT 4 : ĠTable >( ĊĠĠĠĠĠĠĠ Ġval Ġorder ings : ĠIterable < Ordering >, ĊĠĠĠĠĠĠĠ Ġval Ġjoin On 4 Clause : ĠJoin On 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 >, ĊĠĠĠĠĠĠĠ Ġval Ġwhere 4 Clause : ĠWhere 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġgroup 4 Clause : ĠGroup 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 > ?, ĊĠĠĠĠĠĠĠ Ġval Ġhaving 4 Clause : ĠHaving 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 > ?) Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġlimit ( limit : Ġ() Ġ-> ĠAny ): ĠLimit 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLimit 4 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 4 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġoffset ( offset : Ġ() Ġ-> ĠAny ): ĠOffset 4 Clause < T , ĠT 2 , ĠT 3 , ĠT 4 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOffset 4 Clause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ{ Ġ"- 1 " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 4 Clause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġselect ( projection : Ġ( T , ĠT 2 , ĠT 3 , ĠT 4 ) Ġ-> ĠIterable < Projection >): ĠSelect 4 Statement < T , ĠT 2 , ĠT 3 , ĠT 4 > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSelect 4 Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause . join On 3 Clause . join On 2 Clause . subject . table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause . join On 3 Clause . join On 2 Clause . table 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause . join On 3 Clause . table 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause . table 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin On 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup 4 Clause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhaving 4 Clause ) ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ