@@ -2108,15 +2108,93 @@ describe('SQL Generation', () => {
21082108 const queryString = queryAndParams [ 0 ] ;
21092109
21102110 expect ( queryString ) . toContain ( 'select * from products where (category = $1) and (status = $2)' ) ;
2111- // Test that the view query contains the expected structure
21122111 expect ( queryString ) . toMatch ( / S E L E C T \s + " p r o d u c t " \. n a m e / ) ;
21132112 expect ( queryString ) . toMatch ( / c o u n t \( \* \) / ) ;
21142113 expect ( queryString ) . toMatch ( / s u m \( " p r o d u c t " \. p r i c e \) / ) ;
2115- // Test that view filters are properly applied
21162114 expect ( queryString ) . toContain ( 'WHERE ("product".category = $3) AND ("product".status = $4)' ) ;
2117- // Test parameter values
21182115 expect ( queryAndParams [ 1 ] ) . toEqual ( [ 'electronics' , 'active' , 'electronics' , 'active' ] ) ;
21192116 } ) ;
2117+
2118+ it ( 'cube with FILTER_PARAMS in measure filters - triggers backAlias collection' , async ( ) => {
2119+ /** @type {Compilers } */
2120+ const filterParamsCompiler = prepareYamlCompiler (
2121+ createSchemaYaml ( {
2122+ cubes : [ {
2123+ name : 'Sales' ,
2124+ sql : 'select * from sales' ,
2125+ measures : [
2126+ {
2127+ name : 'count' ,
2128+ type : 'count' ,
2129+ } ,
2130+ {
2131+ name : 'filtered_revenue' ,
2132+ sql : 'amount' ,
2133+ type : 'sum' ,
2134+ // This measure filter with FILTER_PARAMS should trigger backAlias collection
2135+ // when evaluating symbols
2136+ filters : [
2137+ { sql : '{FILTER_PARAMS.Sales.category.filter(\'category\')}' }
2138+ ]
2139+ }
2140+ ] ,
2141+ dimensions : [
2142+ {
2143+ name : 'id' ,
2144+ sql : 'id' ,
2145+ type : 'number' ,
2146+ primaryKey : true
2147+ } ,
2148+ {
2149+ name : 'category' ,
2150+ sql : 'category' ,
2151+ type : 'string'
2152+ } ,
2153+ {
2154+ name : 'region' ,
2155+ sql : 'region' ,
2156+ type : 'string'
2157+ }
2158+ ]
2159+ } ] ,
2160+ views : [ {
2161+ name : 'sales_analytics' ,
2162+ cubes : [ {
2163+ join_path : 'Sales' ,
2164+ prefix : true ,
2165+ includes : [
2166+ 'count' ,
2167+ 'filtered_revenue' ,
2168+ 'category' ,
2169+ 'region'
2170+ ]
2171+ } ]
2172+ } ]
2173+ } )
2174+ ) ;
2175+
2176+ await filterParamsCompiler . compiler . compile ( ) ;
2177+
2178+ const query = new PostgresQuery ( filterParamsCompiler , {
2179+ measures : [ 'sales_analytics.Sales_filtered_revenue' ] ,
2180+ dimensions : [ 'sales_analytics.Sales_region' ] ,
2181+ filters : [
2182+ {
2183+ member : 'sales_analytics.Sales_category' ,
2184+ operator : 'equals' ,
2185+ values : [ 'electronics' ] ,
2186+ } ,
2187+ ] ,
2188+ } ) ;
2189+
2190+ const queryAndParams = query . buildSqlAndParams ( ) ;
2191+ const queryString = queryAndParams [ 0 ] ;
2192+
2193+ expect ( queryString ) . toContain ( 'CASE WHEN (((category = $1)))' ) ;
2194+ expect ( queryString ) . toMatch ( / s u m .* C A S E W H E N / ) ;
2195+ expect ( queryString ) . toContain ( 'WHERE ("sales".category = $2)' ) ;
2196+ expect ( queryAndParams [ 1 ] ) . toEqual ( [ 'electronics' , 'electronics' ] ) ;
2197+ } ) ;
21202198 } ) ;
21212199
21222200 describe ( 'FILTER_GROUP' , ( ) => {
0 commit comments