Skip to content

Commit

Permalink
Additional sql fixes (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
enhanse committed Mar 21, 2024
1 parent 033c401 commit 04334c0
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 6 deletions.
6 changes: 0 additions & 6 deletions packages/cubejs-vertica-driver/src/VerticaQuery.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@ const GRANULARITY_TO_INTERVAL = {
};

class VerticaFilter extends BaseFilter {
likeIgnoreCase(column, not, param, type) {
const p = (!type || type === 'contains' || type === 'ends') ? '%' : '';
const s = (!type || type === 'contains' || type === 'starts') ? '%' : '';
return ` ILIKE (${column}${not ? ' NOT' : ''}, CONCAT('${p}', ${this.allocateParam(param)}, '${s}'))`;
}

castParameter() {
if (this.definition().type === 'boolean') {
return 'CAST(? AS BOOLEAN)';
Expand Down
116 changes: 116 additions & 0 deletions packages/cubejs-vertica-driver/test/VerticaQuery.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/* globals describe, it, afterAll, beforeAll, test, expect, jest */
const { prepareCompiler } = require('@cubejs-backend/schema-compiler');
const VerticaQuery = require('../src/VerticaQuery.js');

const testCompiler = (content, options) => prepareCompiler({
localPath: () => __dirname,
dataSchemaFiles: () => Promise.resolve([
{ fileName: 'main.js', content },
]),
}, { adapter: 'vertica', ...options });

describe('VerticaQuery', () => {
const { compiler, joinGraph, cubeEvaluator } = testCompiler(`
cube(\`visitors\`, {
sql: \`
select * from visitors
\`,
measures: {
count: {
type: 'count'
}
},
dimensions: {
name: {
type: 'string',
sql: 'name'
},
dnc_address: {
type: 'boolean',
sql: 'dnc_address',
title: 'Unsubscribed (Address)'
},
createdAt: {
sql: \`created_at\`,
type: 'time',
}
}
})
`, {});

it('vertica query like test', async () => {
await compiler.compile();

const query = new VerticaQuery(
{ joinGraph, cubeEvaluator, compiler },
{
measures: [],
filters: [
{
member: 'visitors.name',
operator: 'contains',
values: [
'demo',
],
},
],
},
);

const queryAndParams = query.buildSqlAndParams();
expect(queryAndParams[0]).toContain('("visitors".name ILIKE \'%\' || ? || \'%\')');
});

it('vertica query boolean', async () => {
await compiler.compile();

const query = new VerticaQuery(
{ joinGraph, cubeEvaluator, compiler },
{
measures: [],
filters: [
{
member: 'visitors.dnc_address',
operator: 'equals',
values: ['0', null],
},
],
},
);

const queryAndParams = query.buildSqlAndParams();
expect(queryAndParams[0]).toContain('("visitors".dnc_address IN (CAST(? AS BOOLEAN)) OR "visitors".dnc_address IS NULL');
});

it('test equal filters', async () => {
await compiler.compile();

const filterValuesVariants = [
[[true], 'WHERE ("visitors".name = ?)'],
[[false], 'WHERE ("visitors".name = ?)'],
[[''], 'WHERE ("visitors".name = ?)'],
[[null], 'WHERE ("visitors".name IS NULL)'],
];

for (const [values, expected] of filterValuesVariants) {
const query = new VerticaQuery({ joinGraph, cubeEvaluator, compiler }, {
measures: [
'visitors.count'
],
timeDimensions: [],
filters: [{
member: 'visitors.name',
operator: 'equals',
values
}],
timezone: 'America/Los_Angeles'
});

const queryAndParams = query.buildSqlAndParams();
expect(queryAndParams[0]).toContain(expected);
}
});
});

0 comments on commit 04334c0

Please sign in to comment.