@@ -2154,87 +2154,98 @@ func Test_acceptIntsAsTimestamps(t *testing.T) {
21542154}
21552155
21562156func TestApplySelectFromCluster (t * testing.T ) {
2157- query := & model.Query {
2158- TableName : "test_table" ,
2159- SelectCommand : model.SelectCommand {
2160- FromClause : model .NewTableRefWithDatabaseName ("test_table" , "test_db" ),
2161- },
2162- }
2157+ originalTableReference := model .NewTableRefWithDatabaseName ("test_table" , "test_db" )
2158+ expectedTableReference := model .NewLiteral (`cluster("my_cluster", "test_db", "test_table")` )
21632159 cfg := & config.QuesmaConfiguration {
21642160 ClusterName : "my_cluster" ,
21652161 }
2166- transform := NewSchemaCheckPass (cfg , nil , defaultSearchAfterStrategy )
21672162
2168- result , err := transform .ApplySelectFromCluster (schema.Schema {}, query )
2169- assert .NoError (t , err )
2170- expected := model .NewLiteral (`cluster("my_cluster", "test_db", "test_table")` )
2171- assert .Equal (t , expected , result .SelectCommand .FromClause )
2172- }
2173-
2174- func TestApplySelectFromCluster2 (t * testing.T ) {
2175-
2176- query := & model.Query {
2177- SelectCommand : model.SelectCommand {
2178- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("FirstColumn" ))},
2179- FromClause : model.SelectCommand {
2180- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("SecondColumn" ))},
2181- FromClause : model.SelectCommand {
2182- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("ThirdColumn" ))},
2183- FromClause : model .NewTableRefWithDatabaseName ("test_table" , "test_db" ),
2163+ tests := []struct {
2164+ name string
2165+ query * model.Query
2166+ expected * model.Query
2167+ }{
2168+ {
2169+ name : "simple FROM <tableName> substitution" ,
2170+ query : & model.Query {
2171+ TableName : "test_table" ,
2172+ SelectCommand : model.SelectCommand {
2173+ FromClause : originalTableReference ,
2174+ },
2175+ },
2176+ expected : & model.Query {
2177+ TableName : "test_table" ,
2178+ SelectCommand : model.SelectCommand {
2179+ FromClause : expectedTableReference ,
2180+ },
2181+ },
2182+ },
2183+ {
2184+ name : "nested FROM (SELECT ...) substitution" ,
2185+ query : & model.Query {
2186+ SelectCommand : model.SelectCommand {
2187+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("FirstColumn" ))},
2188+ FromClause : model.SelectCommand {
2189+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("SecondColumn" ))},
2190+ FromClause : model.SelectCommand {
2191+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("ThirdColumn" ))},
2192+ FromClause : originalTableReference ,
2193+ WhereClause : model .NewInfixExpr (
2194+ model .NewColumnRef ("ThirdColumn" ),
2195+ ">=" ,
2196+ model .NewLiteral (50 ),
2197+ ),
2198+ },
2199+ WhereClause : model .NewInfixExpr (
2200+ model .NewColumnRef ("SecondColumn" ),
2201+ ">=" ,
2202+ model .NewLiteral (50 ),
2203+ ),
2204+ },
21842205 WhereClause : model .NewInfixExpr (
2185- model .NewColumnRef ("ThirdColumn " ),
2206+ model .NewColumnRef ("FirstColumn " ),
21862207 ">=" ,
21872208 model .NewLiteral (50 ),
21882209 ),
21892210 },
2190- WhereClause : model .NewInfixExpr (
2191- model .NewColumnRef ("SecondColumn" ),
2192- ">=" ,
2193- model .NewLiteral (50 ),
2194- ),
2195- },
2196- WhereClause : model .NewInfixExpr (
2197- model .NewColumnRef ("FirstColumn" ),
2198- ">=" ,
2199- model .NewLiteral (50 ),
2200- ),
2201- },
2202- }
2203- cfg := & config.QuesmaConfiguration {
2204- ClusterName : "my_cluster" ,
2205- }
2206- transform := NewSchemaCheckPass (cfg , nil , defaultSearchAfterStrategy )
2207-
2208- // When
2209- result , err := transform .ApplySelectFromCluster (schema.Schema {}, query )
2210- // Then
2211- assert .NoError (t , err )
2212- expected := & model.Query {
2213- SelectCommand : model.SelectCommand {
2214- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("FirstColumn" ))},
2215- FromClause : model.SelectCommand {
2216- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("SecondColumn" ))},
2217- FromClause : model.SelectCommand {
2218- Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("ThirdColumn" ))},
2219- FromClause : model .NewLiteral (`cluster("my_cluster", "test_db", "test_table")` ),
2211+ },
2212+ expected : & model.Query {
2213+ SelectCommand : model.SelectCommand {
2214+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("FirstColumn" ))},
2215+ FromClause : model.SelectCommand {
2216+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("SecondColumn" ))},
2217+ FromClause : model.SelectCommand {
2218+ Columns : []model.Expr {model .NewFunction ("sum" , model .NewColumnRef ("ThirdColumn" ))},
2219+ FromClause : expectedTableReference ,
2220+ WhereClause : model .NewInfixExpr (
2221+ model .NewColumnRef ("ThirdColumn" ),
2222+ ">=" ,
2223+ model .NewLiteral (50 ),
2224+ ),
2225+ },
2226+ WhereClause : model .NewInfixExpr (
2227+ model .NewColumnRef ("SecondColumn" ),
2228+ ">=" ,
2229+ model .NewLiteral (50 ),
2230+ ),
2231+ },
22202232 WhereClause : model .NewInfixExpr (
2221- model .NewColumnRef ("ThirdColumn " ),
2233+ model .NewColumnRef ("FirstColumn " ),
22222234 ">=" ,
22232235 model .NewLiteral (50 ),
22242236 ),
22252237 },
2226- WhereClause : model .NewInfixExpr (
2227- model .NewColumnRef ("SecondColumn" ),
2228- ">=" ,
2229- model .NewLiteral (50 ),
2230- ),
2231- },
2232- WhereClause : model .NewInfixExpr (
2233- model .NewColumnRef ("FirstColumn" ),
2234- ">=" ,
2235- model .NewLiteral (50 ),
2236- ),
2238+ },
22372239 },
22382240 }
2239- assert .Equal (t , expected , result )
2241+
2242+ transform := NewSchemaCheckPass (cfg , nil , defaultSearchAfterStrategy )
2243+
2244+ for _ , tt := range tests {
2245+ t .Run (tt .name , func (t * testing.T ) {
2246+ result , err := transform .ApplySelectFromCluster (schema.Schema {}, tt .query )
2247+ assert .NoError (t , err )
2248+ assert .Equal (t , tt .expected , result )
2249+ })
2250+ }
22402251}
0 commit comments