@@ -91,3 +91,45 @@ func TestResolveTablesNested(t *testing.T) {
9191 )
9292 require .Equal (expected , analyzed )
9393}
94+
95+ func TestResolveViews (t * testing.T ) {
96+ require := require .New (t )
97+
98+ f := getRule ("resolve_tables" )
99+
100+ table := memory .NewTable ("mytable" , sql.Schema {{Name : "i" , Type : sql .Int32 }})
101+ db := memory .NewDatabase ("mydb" )
102+ db .AddTable ("mytable" , table )
103+
104+ // Resolved plan that corresponds to query "SELECT i FROM mytable"
105+ subquery := plan .NewProject (
106+ []sql.Expression {
107+ expression .NewGetFieldWithTable (
108+ 1 , sql .Int32 , table .Name (), "i" , true ),
109+ },
110+ plan .NewResolvedTable (table ),
111+ )
112+ subqueryAlias := plan .NewSubqueryAlias ("myview" , subquery )
113+ view := sql .NewView ("myview" , subqueryAlias )
114+
115+ catalog := sql .NewCatalog ()
116+ catalog .AddDatabase (db )
117+ err := catalog .ViewRegistry .Register (db .Name (), view )
118+ require .NoError (err )
119+
120+ a := NewBuilder (catalog ).AddPostAnalyzeRule (f .Name , f .Apply ).Build ()
121+
122+ var notAnalyzed sql.Node = plan .NewUnresolvedTable ("myview" , "" )
123+ analyzed , err := f .Apply (sql .NewEmptyContext (), a , notAnalyzed )
124+ require .NoError (err )
125+ require .Equal (subqueryAlias , analyzed )
126+
127+ notAnalyzed = plan .NewUnresolvedTable ("MyVieW" , "" )
128+ analyzed , err = f .Apply (sql .NewEmptyContext (), a , notAnalyzed )
129+ require .NoError (err )
130+ require .Equal (subqueryAlias , analyzed )
131+
132+ analyzed , err = f .Apply (sql .NewEmptyContext (), a , subqueryAlias )
133+ require .NoError (err )
134+ require .Equal (subqueryAlias , analyzed )
135+ }
0 commit comments