/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġorg . part i ql . lang . eval . visitor s Ċ Ċ import Ġcom . amazon . ion element . api . empty Meta Container Ċ import Ġcom . amazon . ion element . api . to Ion Element Ċ import Ġjunit params . Parameters Ċ import Ġorg . junit . Test Ċ import Ġorg . part i ql . lang . ast . Source Location Meta Ċ import Ġorg . part i ql . lang . ast . Static Type Meta Ċ import Ġorg . part i ql . lang . ast . empty Meta Container Ċ import Ġorg . part i ql . lang . ast . meta Container Of Ċ import Ġorg . part i ql . lang . ast . passes . Semantic Exception Ċ import Ġorg . part i ql . lang . ast . plus Ċ import Ġorg . part i ql . lang . ast . to Ast Statement Ċ import Ġorg . part i ql . lang . ast . to Ion Element Meta Container Ċ import Ġorg . part i ql . lang . domains . Part i ql Ast Ċ import Ġorg . part i ql . lang . errors . ErrorCode Ċ import Ġorg . part i ql . lang . errors . Property Ċ import Ġorg . part i ql . lang . errors . Property . BINDING _ NAME Ċ import Ġorg . part i ql . lang . errors . Property . COLUMN _ NUMBER Ċ import Ġorg . part i ql . lang . errors . Property . FEATURE _ NAME Ċ import Ġorg . part i ql . lang . errors . Property . LINE _ NUMBER Ċ import Ġorg . part i ql . lang . eval . Bindings Ċ import Ġorg . part i ql . lang . types . Static Type Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ Ċ class ĠStatic Type Visitor Transform Tests Ġ: ĠVisitor Transform TestBase () Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠSTR TestCase ( val Ġoriginal Sql : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglobals : ĠMap < String , ĠStatic Type >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler : Ġ( Resolve TestResult ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraints : ĠSet < Static Type Visitor Transform Constraints > Ġ= Ġset Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ast : ĠString ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" original Sql =$ original Sql , Ġglobals =$ globals , Ġconstraints =$ constraints , Ġexpected Sql =$ expected Ast " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠVar Expectation ( ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġline : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġchar Offset : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġstatic Type : ĠStatic Type , ĊĠĠĠĠĠĠĠ Ġval Ġscope Qualifier : ĠPart i ql Ast . Scope Qualifier ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġpart i ql Ast Unqualified Ġ= ĠPart i ql Ast . build Ġ{ Ġun qualified () Ġ} ĊĠĠĠ Ġprivate Ġval Ġpart i ql Ast Local s First Ġ= ĠPart i ql Ast . build Ġ{ Ġlocals First () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpart i ql Ast Case Sensitive Ġ= ĠPart i ql Ast . build Ġ{ Ġcase Sensitive () Ġ} ĊĠĠĠ Ġprivate Ġval Ġpart i ql Ast Case In Sensitive Ġ= ĠPart i ql Ast . build Ġ{ Ġcase Ins ensitive () Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ĊĠĠĠ Ġfun Ġs fw Test ( tc : ĠSTR TestCase ) Ġ= Ġrun STR Test ( tc ) ĊĊĊĠĠĠ Ġ// ĠIn Ġthe Ġtest Ġcases Ġbelow Ġthere Ġexists Ġcomments Ġconsisting Ġof Ġa Ġbunch Ġof Ġnumbers . Ġ ĠThey Ġcan Ġbe ĠĊĠĠĠ Ġ// Ġused Ġto Ġquickly Ġdetermine Ġthe Ġcolumn Ġnumber Ġof Ġthe Ġtext Ġimmediately Ġbene ath Ġit . Ġ ĠFor Ġexample , ĠĊĠĠĠ Ġ// Ġit 's Ġeasy Ġto Ġsee Ġthe Ġtoken Ġ" f ifty Five " Ġstarts Ġat Ġcharacter Ġ 5 5 : ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfifty Five ĊĠĠĠ Ġ// ĠThe Ġfirst Ġline Ġis Ġthe Ġ 1 0 's Ġplace Ġof Ġthe Ġcolumn Ġnumber , Ġwhile Ġthe Ġsecond Ġline Ġis Ġthe Ġ 1 's Ġplace . ĊĠĠĠ Ġ// ĠThis Ġhelps Ġto Ġspeed Ġup Ġthe Ġfinding Ġof Ġthe Ġcolumn Ġnumber Ġwhen Ġit Ġis Ġused Ġas Ġpart Ġof Ġthe ĠĊĠĠĠ Ġ// Ġexpectation . ĊĠĠĠ Ġfun Ġparameters For S fw Test () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" b " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġx ĠFROM Ġb ĠAS Ġx ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" b " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 5 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . LIST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto ĠStatic Type . INT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 5 , ĠStatic Type . LIST , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġno Ġvariable Ġreference Ġto Ġ` a ` Ġhere Ġsince Ġ` SELECT Ġa ĠFROM Ġb ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġtransformed Ġto Ġ` SELECT Ġb . a ĠFROM Ġb ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT ĠCOUNT (*) ĠFROM Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 2 2 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġy ĠFROM Ġb ĠAS Ġx ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Sub Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart i ql Ast . build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case Sensitive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Local s First , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Type . ANY . to Met as () Ġ+ Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( path Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" y "). to Ion Element (), Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmet as ( 1 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġy . z ĠFROM Ġb ĠAS Ġx ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Sub Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart i ql Ast . build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case Sensitive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Local s First , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Type . ANY . to Met as () Ġ+ Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" y "). to Ion Element (), Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" z "). to Ion Element (), Ġmet as ( 1 , Ġ 1 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Meta Container () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġx ĠFROM Ġb ĠAT Ġx ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" b " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 5 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġy ĠFROM Ġb ĠAS Ġx , Ġx ĠAS Ġwhatever ĠAT Ġy ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" b " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" y ", Ġ 1 , Ġ 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 5 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 2 3 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Map (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 1 5 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb , c ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" a ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 8 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġ\" b \"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 1 5 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb , Ġc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" a ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 8 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġvariable Ġsco ping Ġwithin ĠSELECT Ġshould Ġresolve Ġimplicit Ġlex ical Ġalias Ġover Ġglobal ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Sub Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart i ql Ast . build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case Sensitive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Local s First , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Type . ANY . to Met as () Ġ+ Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" a "). to Ion Element (), Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmet as ( 1 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġambiguous Ġbinding Ġintroduced Ġin ĠFROM Ġclause Ġ( same ĠAS - binding Ġintroduced Ġtwice ) ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġb ĠAS Ġb , Ġb ĠAS ĠB ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ AM BIG UO US _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 2 8 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġambiguous Ġbinding Ġintroduced Ġin ĠFROM Ġclause Ġ( AS Ġbinding Ġgiven Ġsame Ġname Ġas ĠAT Ġbinding ) ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġb ĠAS Ġb ĠAT Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ AM BIG UO US _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 2 0 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġambiguous Ġbinding Ġintroduced Ġin ĠFROM Ġclause Ġ( AS Ġbinding Ġgiven Ġsame Ġname Ġas ĠBY Ġbinding ) ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġb ĠAS Ġb ĠBY Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ AM BIG UO US _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 2 0 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġambiguous Ġbinding Ġintroduced Ġin ĠFROM Ġclause Ġ( AT Ġbinding Ġgiven Ġsame Ġname Ġas ĠBY Ġbinding ) ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġb ĠAS Ġx ĠAT Ġb ĠBY Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ AM BIG UO US _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 3 0 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġjoin Ġshould Ġnot Ġallow Ġimplicit Ġattribute Ġwithout Ġschema ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb ĠAS Ġx , ĠB ĠAS Ġy ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" a ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 8 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġnested Ġquery Ġshould Ġnot Ġallow Ġimplicit Ġattribute Ġas Ġvariable Ġwithout Ġschema ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb ĠAS Ġx ĠWHERE ĠEXISTS Ġ( SELECT Ġy ĠFROM Ġx )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" B " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" y ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 4 3 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĊĠĠĠĠĠĠĠ Ġ// Ġlocal Ġvariable Ġwith Ġsame Ġname Ġas Ġglobal Ġshould Ġnot Ġshadow Ġglobal Ġin Ġfrom Ġsource ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 ĠFROM Ġa ĠAS Ġb , Ġb ĠAS Ġc , Ġc Ġas Ġd ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" a " Ġto ĠStatic Type . ANY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" a ", Ġ 1 , Ġ 1 5 , ĠStatic Type . ANY , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġ[ Var Expectation ] Ġbelow Ġpro ves Ġthat Ġthe Ġ" b " Ġin Ġthe Ġ" b ĠAS Ġc " Ġfrom Ġsource Ġwas Ġresolved Ġin Ġthe Ġglobal Ġscope . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 2 3 , ĠStatic Type . ANY , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c ", Ġ 1 , Ġ 3 1 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First )) ĊĠĠĠĠĠĠĠ Ġ), ĊĊĠĠĠĠĠĠĠ Ġ// Ġ@ Ġcauses Ġthe Ġlocal Ġb Ġto Ġbe Ġresolved Ġinstead Ġof Ġthe Ġglobal Ġb . ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 ĠFROM Ġb Ġas Ġb , Ġ@ b . c ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 5 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 2 4 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// ĠGroup ĠBy Ġshould Ġnot Ġbe Ġallowed ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġb Ġas Ġx ĠGROUP ĠBY Ġx . name ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" b " Ġto ĠStatic Type . ANY ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . UN IMPLEMENTED _ FEATURE , ĠFEATURE _ NAME Ġto Ġ" GROUP ĠBY ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ĊĠĠĠ Ġfun Ġd ml Test ( tc : ĠSTR TestCase ) Ġ= Ġrun STR Test ( tc ) ĊĊĠĠĠ Ġfun Ġparameters For D ml Test () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ// ĠD ML Ġhappy Ġpaths ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġx ĠINSERT ĠINTO Ġy Ġ<< Ġ' does nt Ġmatter ' Ġ>> ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y " Ġto ĠStatic Type . BOOL ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 2 0 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// No Ġexpectation Ġfor Ġy Ġbecause Ġ` FROM Ġx ĠINSERT ĠINTO Ġy Ġ... ` Ġis Ġtransformed Ġto Ġ` FROM Ġx ĠINSERT ĠINTO Ġx . y Ġ... ` ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġx ĠVALUE Ġ 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 1 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġx ĠINSERT ĠINTO Ġy ĠVALUE Ġ 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y " Ġto ĠStatic Type . BOOL ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 2 0 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// No Ġexpectation Ġfor Ġy Ġbecause Ġ` FROM Ġx ĠINSERT ĠINTO Ġy Ġ... ` Ġis Ġtransformed Ġto Ġ` FROM Ġx ĠINSERT ĠINTO Ġx . y Ġ... ` ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġx ĠAS Ġy ĠSET Ġdoesnt matter Ġ= Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" y ", Ġ 1 , Ġ 1 7 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" DELETE ĠFROM Ġx ĠWHERE Ġy ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y " Ġto ĠStatic Type . BOOL ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 1 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 2 1 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġx ĠWHERE Ġz ĠREMOVE Ġy ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y " Ġto ĠStatic Type . BOOL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" z " Ġto ĠStatic Type . INT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 1 4 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 2 3 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġcan ines ĠAS Ġdo gs , Ġdo gs ĠAS Ġd ĠWHERE Ġd . name Ġ= Ġ' Tim my ' ĠSET Ġd . colour Ġ= Ġ' blue Ġmer le '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" can ines " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" can ines ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" dog s ", Ġ 1 , Ġ 2 3 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 3 9 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 6 0 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġanimal s ĠAS Ġa , Ġa . dog s ĠAS Ġd ĠWHERE Ġd . name Ġ= Ġ' Tim my ' ĠSET Ġd . colour Ġ= Ġ' blue Ġmer le '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" animal s " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" animal s ", Ġ 1 , Ġ 6 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" a ", Ġ 1 , Ġ 2 0 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 3 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 5 9 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// ĠD ML Ġundefined Ġvariables . ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġy ĠSET Ġdoesnt matter Ġ= Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ UN BOUND _ BINDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" y ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 6 L ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" DELETE ĠFROM Ġx Ġas Ġy ĠWHERE Ġz ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" x ", Ġ 1 , Ġ 1 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" y ", Ġ 1 , Ġ 2 6 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" UPDATE Ġdo gs Ġas Ġd ĠSET Ġname Ġ= Ġ' Tim my ' ĠWHERE Ġcolor Ġ= Ġ' Blue Ġmer le '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" dog s " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" dog s ", Ġ 1 , Ġ 8 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 2 2 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 4 3 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ĊĠĠĠ Ġfun Ġd dl Test ( tc : ĠSTR TestCase ) Ġ= Ġrun STR Test ( tc ) ĊĊĠĠĠ Ġfun Ġparameters For D dl Test () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ// ĠRegression Ġtest : Ġ Ġdo Ġnot Ġattempt Ġto Ġresolve Ġany Ġvariables Ġfor Ġa ĠDROP ĠINDEX Ġstatement . ĊĠĠĠĠĠĠĠ Ġ// ĠDrop Index Ġincorrectly Ġmodels Ġthe Ġindex Ġidentifier Ġas Ġa Ġ[ Variable Reference ] ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġthis Ġtest Ġensures Ġwe Ġdon 't Ġtreat Ġ[ identifier ] Ġas Ġif Ġit Ġwere Ġa Ġnormal Ġvariable . ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" DROP ĠINDEX ĠIDX _ foo ĠON ĠSome Table ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// ĠRegression Ġtest : Ġ Ġdo Ġnot Ġattempt Ġto Ġresolve Ġany Ġvariables Ġfor Ġa ĠCREATE ĠINDEX Ġstatement . ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Index Ġincorrectly Ġmodels Ġthe Ġindex Ġidentifier Ġas Ġa Ġ[ List < Expr Node >] ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġthis Ġtest Ġensures Ġwe Ġdon 't Ġtreat Ġ[ keys ] Ġas Ġif Ġit Ġwere Ġa Ġnormal Ġvariable . ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" CREATE ĠINDEX ĠON ĠSome Table Ġ( Some Column )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ĊĠĠĠ Ġfun Ġconstraints ( tc : ĠSTR TestCase ) Ġ= Ġrun STR Test ( tc ) ĊĊĠĠĠ Ġfun Ġparameters For Constraints () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ// Ġwith ĠPRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM Ġoption ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeven Ġthough Ġa Ġglobal Ġ' a ' Ġis Ġdefined , Ġit Ġis Ġnot Ġaccessible . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( need Ġthe ĠJOIN Ġbecause Ġa Ġis Ġtransformed Ġto Ġb . a Ġwhen Ġthere Ġis Ġonly Ġone Ġfrom Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġa ĠFROM Ġb , Ġc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ IL LEG AL _ GLOBAL _ VARIABLE _ ACCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" a ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 8 L ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġa Ġshadow ed Ġglobal Ġ(" b ") Ġdoesn 't Ġget Ġresolved Ġinstead Ġof Ġillegal Ġglobal Ġaccess Ġerror . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġ* Ġfrom Ġa Ġas Ġb , Ġ( select Ġ* Ġfrom Ġb )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ IL LEG AL _ GLOBAL _ VARIABLE _ ACCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 3 8 L ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbasic Ġhappy Ġpath Ġwith ĠPRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġb 1 . a ĠFROM Ġb ĠAS Ġb 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b 1 ", Ġ 1 , Ġ 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 1 8 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnested Ġhappy Ġcase Ġwith ĠPRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 , Ġ( SELECT Ġc 1 . d ĠFROM Ġc Ġas Ġc 1 ) ĠFROM Ġb , Ġ( SELECT Ġ 2 ĠFROM Ġc )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c 1 ", Ġ 1 , Ġ 1 9 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c ", Ġ 1 , Ġ 2 9 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 4 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c ", Ġ 1 , Ġ 6 1 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// Ġmultiple Ġjoins ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġ 1 Ġfrom Ġactors Ġa , Ġa . movies Ġam , Ġmovies Ġm ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" movies " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" actors " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" actors ", Ġ 1 , Ġ 1 5 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" a ", Ġ 1 , Ġ 2 5 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" movies ", Ġ 1 , Ġ 3 8 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM )), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfailure Ġcase Ġwith ĠPRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES Ġthough ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 , Ġ( SELECT Ġc 1 . d ĠFROM Ġc Ġas Ġc 1 ) ĠFROM Ġb ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ IL LEG AL _ GLOBAL _ VARIABLE _ ACCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 2 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchecking ĠPRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES Ġfailure Ġwithin Ġouter ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 ĠFROM Ġb , Ġ( SELECT Ġc 1 . d ĠFROM Ġc Ġas Ġc 1 )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Err ( ErrorCode . SEM ANT IC _ IL LEG AL _ GLOBAL _ VARIABLE _ ACCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND ING _ NAME Ġto Ġ" c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLINE _ NUMBER Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ NUMBER Ġto Ġ 3 6 L ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnested Ġhappy Ġcase Ġwith ĠPRE VENT _ GLOBALS _ IN _ NE ST ED _ QU ER IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 , Ġ( SELECT Ġc 1 . d ĠFROM Ġc Ġas Ġc 1 ) ĠFROM Ġb Ġas Ġb , Ġ@ b . c Ġas Ġc 1 , Ġ( SELECT Ġ 2 ĠFROM Ġc 1 )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto ĠStatic Type . B AG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġscope Ġqualifier Ġbelow Ġbecause Ġ` b ` Ġis Ġreferenced Ġtwice : Ġonce Ġwith Ġthe Ġlex ical Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġqualifier , Ġand Ġonce Ġwithout . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c 1 ", Ġ 1 , Ġ 1 9 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c ", Ġ 1 , Ġ 2 9 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 4 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" b ", Ġ 1 , Ġ 5 2 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" c 1 ", Ġ 1 , Ġ 7 8 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġcol lies ĠFROM Ġdo gs Ġd ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" dog s " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" col lies " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Sub Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart i ql Ast . build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case Sensitive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Local s First , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Type . ANY . to Met as () Ġ+ Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" col lies "). to Ion Element (), Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmet as ( 1 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ// ĠD ML Ġwith ĠPRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġdo gs Ġd ĠINSERT ĠINTO Ġcol lies ĠVALUE Ġ' Tim my '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" dog s " Ġto ĠStatic Type . B AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" col lies " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Sub Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart i ql Ast . build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case Sensitive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Local s First , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Type . ANY . to Met as () Ġ+ Ġmet as ( 1 , Ġ 2 5 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Expr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlit ( ion . new String (" col lies "). to Ion Element (), Ġmet as ( 1 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart i ql Ast Case In Sensitive )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmet as ( 1 , Ġ 2 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM )), ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġdo gs ĠVALUE Ġ' Tim my '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" dog s " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" dog s ", Ġ 1 , Ġ 1 3 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM )), ĊĠĠĠĠĠĠĠ Ġ// Ġcaptures Ġthe Ġvar Ġr anging Ġover Ġdo gs Ġand Ġimplicitly Ġprefixes Ġid Ġand Ġowner ĊĠĠĠĠĠĠĠ ĠSTR TestCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 ĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" UPDATE Ġdo gs Ġd ĠSET Ġname Ġ= Ġ' Tim my ' ĠWHERE Ġowner Ġ= Ġ' M arg aret '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" dog s " Ġto ĠStatic Type . B AG ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Variable References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" dog s ", Ġ 1 , Ġ 8 , ĠStatic Type . B AG , Ġpart i ql Ast Unqualified ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 1 9 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVar Expectation (" d ", Ġ 1 , Ġ 4 0 , ĠStatic Type . ANY , Ġpart i ql Ast Local s First )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Static Type Visitor Transform Constraints . PRE VENT _ GLOBALS _ EXCEPT _ IN _ FROM )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġsealed Ġclass ĠResolve TestResult Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠValue ( val ĠtestCase : ĠSTR TestCase , Ġval Ġnode : ĠPart i ql Ast . Statement ) Ġ: ĠResolve TestResult () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val ĠtestCase : ĠSTR TestCase , Ġval Ġerror : ĠSemantic Exception ) Ġ: ĠResolve TestResult () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġsealed Ġclass ĠResolve TestResult Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġdata Ġclass ĠValue ( val ĠtestCase : ĠSTR TestCase , Ġval Ġnode : ĠExpr Node ) Ġ: ĠResolve TestResult () Ċ // ĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val ĠtestCase : ĠSTR TestCase , Ġval Ġerror : ĠSemantic Exception ) Ġ: ĠResolve TestResult () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpect Err ( code : ĠErrorCode , Ġvar arg Ġproperties : ĠPair < Property , ĠAny >): Ġ( Resolve TestResult ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Value Ġ-> Ġfail (" Expected Ġid Ġerror Ġfor : Ġ${ it . testCase . original Sql }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Error Ġcode Ġin Ġerror Ġdoesn 't Ġmatch ", Ġcode , Ġit . error . errorCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . forEach Ġ{ Ġ( property , Ġexpected Value ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ property . propertyName } Ġin Ġerror Ġdoesn 't Ġmatch ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Value , Ġit . error . error Context ?. get ( property )?. value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠException . stack Trace AsString (): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠString Writer (). use Ġ{ Ġsw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrintWriter ( sw ). use Ġ{ Ġpw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . printStackTrace ( pw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsw . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpect Variable References ( var arg Ġvar Expectations : ĠVar Expectation ): Ġ( Resolve TestResult ) Ġ-> ĠUnit Ġ= Ġ{ Ġresult : ĠResolve TestResult Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Error Ġ-> Ġfail (" Expected Ġvalue , Ġnot Ġfailure . Ġ ĠStack Ġtrace : Ġ\ n ${ result . error . stack Trace AsString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining Expectations Ġ= Ġvar Expectations . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġvariable Ġreference Ġnodes Ġshould Ġbe Ġtagged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= Ġobject Ġ: ĠPart i ql Ast . Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Expr ( node : ĠPart i ql Ast . Expr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPart i ql Ast . Expr . Id Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Location Meta Ġ= Ġnode . metas [ Source Location Meta . TAG ] Ġas ĠSource Location Meta ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Variable Reference Ġ'${ node . name . text }' Ġhad Ġno ĠSource Location Meta ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġa ĠVar Expectation Ġthat Ġmatches Ġthe Ġgiven ĠVariable Reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatching Expectation Ġ= Ġremaining Expectations . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . id Ġ== Ġnode . name . text Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . line Ġ== Ġsource Location Meta . lineNum Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . char Offset Ġ== Ġsource Location Meta . char Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġerror (" No Ġexpectation Ġfound Ġfor ĠVariable Reference Ġ${ node . name . text } Ġat Ġ$ source Location Meta ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Expectations . remove ( matching Expectation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Variable Reference Ġ'${ node . name . text }' Ġat Ġ$ source Location Meta Ġscope Ġqualifier Ġmust Ġmatch Ġexpectation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatching Expectation . scope Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . qual ifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatic Type Meta Ġ= Ġnode . metas [ Static Type Meta . TAG ] Ġas ĠStatic Type Meta ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Variable Reference Ġ'${ node . name . text }' Ġat Ġ$ source Location Meta Ġhad Ġno ĠStatic Type Meta ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Variable Reference Ġ${ node . name . text } Ġat Ġ$ source Location Meta Ġstatic Ġtype Ġmust Ġmatch Ġexpectation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Type Meta . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatching Expectation . static Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwalk Expr ( node : ĠPart i ql Ast . Expr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// do Ġnot Ġwalk Ġthe Ġname Ġof Ġa Ġfunction Ġcall Ġthis Ġshould Ġbe Ġa Ġsymbolic Ġname Ġin Ġanother Ġnamespace Ġ( AST Ġis Ġover Ġgeneral ized Ġhere ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġis ĠPart i ql Ast . Expr . Call Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Expr ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . args . forEach Ġ{ Ġthis . walk Expr ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġis ĠPart i ql Ast . Expr . Call Agg Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsame Ġfor ĠCall Agg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . walk Expr ( node . arg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġeverything Ġelse , Ġrely Ġon Ġthe Ġsuper ĠAst Walker . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . walk Expr ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwalk D dl Op Create Index ( node : ĠPart i ql Ast . D dl Op . Create Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . walk Statement ( result . node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remaining Expectations . any ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Un met Ġexpectations :") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Expectations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ("${ remaining Expectations . size } Ġvariable Ġexpectations Ġwere Ġnot Ġmet .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġfirst Ġwas : Ġ${ remaining Expectations . first () }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" See Ġstandard Ġoutput Ġfor Ġa Ġcomplete Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexpect Sub Node ( expected Node : ĠPart i ql Ast . Expr ): Ġ( Resolve TestResult ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Error Ġ-> Ġfail (" Expected Ġvalue , Ġnot Ġfailure Ġ${ it . error }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResolve TestResult . Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= Ġobject Ġ: ĠPart i ql Ast . Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Expr ( node : ĠPart i ql Ast . Expr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġexpected Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . walk Expr ( expected Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" Could Ġnot Ġfind Ġ$ expected Node Ġin Ġ${ it . node }", Ġfound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmet as ( line : ĠLong , Ġcolumn : ĠLong , Ġtype : ĠStatic Type ? Ġ= Ġnull ): Ġcom . amazon . ion element . api . Meta Container Ġ= ĊĠĠĠĠĠĠĠ Ġ( meta Container Of ( Source Location Meta ( line , Ġcolumn )) Ġ+ ĊĠĠĠĠĠĠĠ Ġ( type ?. let Ġ{ Ġmeta Container Of ( Static Type Meta ( it )) Ġ} Ġ?: Ġempty Meta Container )). to Ion Element Meta Container () ĊĊĠĠĠ Ġprivate Ġfun ĠStatic Type . to Met as (): Ġcom . amazon . ion element . api . Meta Container Ġ= Ġmeta Container Of ( Static Type Meta ( this )). to Ion Element Meta Container () ĊĊĠĠĠ Ġprivate Ġfun Ġrun STR Test ( ĊĠĠĠĠĠĠĠ Ġtc : ĠSTR TestCase ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġglobal Bindings Ġ= ĠBind ings . of Map ( tc . globals ) ĊĠĠĠĠĠĠĠ Ġval Ġtransformer Ġ= ĠStatic Type Visitor Transform ( ion , Ġglobal Bindings , Ġtc . constraints ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġalways Ġpass Ġthe Ġquery Ġunder Ġtest Ġthrough Ġall Ġof Ġthe Ġbasic Ġtransform ers Ġprimarily Ġbecause Ġwe Ġneed ĊĠĠĠĠĠĠĠ Ġ// ĠFrom Source Alias Visitor Transform Ġto Ġexecute Ġfirst Ġbut Ġalso Ġto Ġhelp Ġensure Ġthe Ġqueries Ġwe 're Ġtesting ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsense Ġwhen Ġthey 're Ġall Ġrun . ĊĠĠĠĠĠĠĠ Ġval Ġdefault Transforms Ġ= Ġbasic Visitor Transforms () ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Part i ql Ast Ġ= Ġdefault Transforms . transform Statement ( parse ( tc . original Sql ). to Ast Statement ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransformed Expr Node Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer . transform Statement ( original Part i ql Ast ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠSemantic Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtc . handler ( Resolve TestResult . Error ( tc , Ġe )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtc . handler ( Resolve TestResult . Value ( tc , Ġtransformed Expr Node )) ĊĠĠĠ Ġ} Ċ } Ċ