@@ -1586,15 +1586,37 @@ describe('SQL Generation', () => {
15861586 cubes : [ {
15871587 name : 'Order' ,
15881588 sql : 'select * from order where {FILTER_PARAMS.Order.type.filter(\'type\')}' ,
1589- measures : [ {
1590- name : 'count' ,
1591- type : 'count' ,
1592- } ] ,
1593- dimensions : [ {
1594- name : 'type' ,
1595- sql : 'type' ,
1596- type : 'string'
1597- } ]
1589+ measures : [
1590+ {
1591+ name : 'count' ,
1592+ type : 'count' ,
1593+ } ,
1594+ {
1595+ name : 'avg_filtered' ,
1596+ sql : 'product_id' ,
1597+ type : 'avg' ,
1598+ filters : [
1599+ { sql : `{FILTER_PARAMS.Order.category.filter('category')}` }
1600+ ]
1601+ }
1602+ ] ,
1603+ dimensions : [
1604+ {
1605+ name : 'type' ,
1606+ sql : 'type' ,
1607+ type : 'string'
1608+ } ,
1609+ {
1610+ name : 'category' ,
1611+ sql : 'category' ,
1612+ type : 'string'
1613+ } ,
1614+ {
1615+ name : 'proxied' ,
1616+ sql : `{FILTER_PARAMS.Order.type.filter("x => type = 'online'")}` ,
1617+ type : 'boolean' ,
1618+ }
1619+ ]
15981620 } ] ,
15991621 views : [ {
16001622 name : 'orders_view' ,
@@ -1829,6 +1851,53 @@ describe('SQL Generation', () => {
18291851 const queryString = queryAndParams [ 0 ] ;
18301852 expect ( / s e l e c t \s + \* \s + f r o m \s + o r d e r \s + w h e r e \s + \( \( t y p e \s = \s \? \) \) / . test ( queryString ) ) . toBeTruthy ( ) ;
18311853 } ) ;
1854+
1855+ it ( 'correctly substitute filter params in cube\'s query dimension used in filter' , async ( ) => {
1856+ await compilers . compiler . compile ( ) ;
1857+ const query = new BaseQuery ( compilers , {
1858+ measures : [ 'Order.count' ] ,
1859+ dimensions : [ 'Order.proxied' ] ,
1860+ filters : [
1861+ {
1862+ member : 'Order.proxied' ,
1863+ operator : 'equals' ,
1864+ values : [ true ] ,
1865+ } ,
1866+ ] ,
1867+ } ) ;
1868+ const queryAndParams = query . buildSqlAndParams ( ) ;
1869+ const queryString = queryAndParams [ 0 ] ;
1870+ expect ( queryString ) . toContain ( `SELECT
1871+ (1 = 1) "order__proxied", count(*) "order__count"
1872+ FROM
1873+ (select * from order where (1 = 1)) AS "order" WHERE ((1 = 1) = ?)` ) ;
1874+ } ) ;
1875+
1876+ it ( 'correctly substitute filter params in cube\'s query measure used in filter' , async ( ) => {
1877+ await compilers . compiler . compile ( ) ;
1878+ const query = new BaseQuery ( compilers , {
1879+ measures : [ 'Order.avg_filtered' ] ,
1880+ dimensions : [ 'Order.type' ] ,
1881+ filters : [
1882+ {
1883+ member : 'Order.type' ,
1884+ operator : 'equals' ,
1885+ values : [ 'online' ] ,
1886+ } ,
1887+ {
1888+ member : 'Order.category' ,
1889+ operator : 'equals' ,
1890+ values : [ 'category' ] ,
1891+ } ,
1892+ ] ,
1893+ } ) ;
1894+ const queryAndParams = query . buildSqlAndParams ( ) ;
1895+ const queryString = queryAndParams [ 0 ] ;
1896+ expect ( queryString ) . toContain ( `SELECT
1897+ "order".type "order__type", avg(CASE WHEN ((category = ?)) THEN "order".product_id END) "order__avg_filtered"
1898+ FROM
1899+ (select * from order where (type = ?)) AS "order" WHERE ("order".type = ?) AND ("order".category = ?)` ) ;
1900+ } ) ;
18321901 } ) ;
18331902
18341903 describe ( 'FILTER_GROUP' , ( ) => {
0 commit comments