Skip to content

Commit 197dc7c

Browse files
committed
add tests
1 parent f11d917 commit 197dc7c

File tree

1 file changed

+78
-9
lines changed

1 file changed

+78
-9
lines changed

packages/cubejs-schema-compiler/test/unit/base-query.test.ts

Lines changed: 78 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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(/select\s+\*\s+from\s+order\s+where\s+\(\(type\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

Comments
 (0)