Skip to content

Commit abd5204

Browse files
committed
introduce alias in CubeValidator
and cover it with schema tests
1 parent 33b56bc commit abd5204

File tree

4 files changed

+159
-61
lines changed

4 files changed

+159
-61
lines changed

packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,8 @@ const baseSchema = {
818818
'belongsTo', 'belongs_to', 'many_to_one', 'manyToOne',
819819
'hasMany', 'has_many', 'one_to_many', 'oneToMany',
820820
'hasOne', 'has_one', 'one_to_one', 'oneToOne'
821-
).required()
821+
).required(),
822+
alias: identifier,
822823
}))
823824
]),
824825
measures: MeasuresSchema,

packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap

Lines changed: 67 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,6 +1689,73 @@ Object {
16891689
}
16901690
`;
16911691

1692+
exports[`Schema Testing Joins join aliases (joins as array) 1`] = `
1693+
Array [
1694+
Object {
1695+
"alias": "CubeB_alias1",
1696+
"name": "CubeB",
1697+
"relationship": "hasOne",
1698+
"sql": [Function],
1699+
},
1700+
Object {
1701+
"alias": "CubeB_alias2",
1702+
"name": "CubeB",
1703+
"relationship": "hasOne",
1704+
"sql": [Function],
1705+
},
1706+
Object {
1707+
"name": "CubeC",
1708+
"relationship": "hasMany",
1709+
"sql": [Function],
1710+
},
1711+
Object {
1712+
"name": "CubeD",
1713+
"relationship": "belongsTo",
1714+
"sql": [Function],
1715+
},
1716+
]
1717+
`;
1718+
1719+
exports[`Schema Testing Joins join types (joins as array) 1`] = `
1720+
Array [
1721+
Object {
1722+
"name": "CubeB",
1723+
"relationship": "hasOne",
1724+
"sql": [Function],
1725+
},
1726+
Object {
1727+
"name": "CubeC",
1728+
"relationship": "hasMany",
1729+
"sql": [Function],
1730+
},
1731+
Object {
1732+
"name": "CubeD",
1733+
"relationship": "belongsTo",
1734+
"sql": [Function],
1735+
},
1736+
]
1737+
`;
1738+
1739+
exports[`Schema Testing Joins join types (joins as object) 1`] = `
1740+
Array [
1741+
Object {
1742+
"name": "CubeB",
1743+
"relationship": "hasOne",
1744+
"sql": [Function],
1745+
},
1746+
Object {
1747+
"name": "CubeC",
1748+
"relationship": "hasMany",
1749+
"sql": [Function],
1750+
},
1751+
Object {
1752+
"name": "CubeD",
1753+
"relationship": "belongsTo",
1754+
"sql": [Function],
1755+
},
1756+
]
1757+
`;
1758+
16921759
exports[`Schema Testing Views allows to override \`title\`, \`description\`, \`meta\`, and \`format\` on includes members 1`] = `
16931760
Object {
16941761
"accessPolicy": undefined,
@@ -2090,63 +2157,3 @@ Array [
20902157
},
20912158
]
20922159
`;
2093-
2094-
exports[`Schema Testing join types (joins as array) 1`] = `
2095-
Array [
2096-
Object {
2097-
"name": "CubeB",
2098-
"relationship": "hasOne",
2099-
"sql": [Function],
2100-
},
2101-
Object {
2102-
"name": "CubeC",
2103-
"relationship": "hasMany",
2104-
"sql": [Function],
2105-
},
2106-
Object {
2107-
"name": "CubeD",
2108-
"relationship": "belongsTo",
2109-
"sql": [Function],
2110-
},
2111-
]
2112-
`;
2113-
2114-
exports[`Schema Testing join types (joins as object) 1`] = `
2115-
Array [
2116-
Object {
2117-
"name": "CubeB",
2118-
"relationship": "hasOne",
2119-
"sql": [Function],
2120-
},
2121-
Object {
2122-
"name": "CubeC",
2123-
"relationship": "hasMany",
2124-
"sql": [Function],
2125-
},
2126-
Object {
2127-
"name": "CubeD",
2128-
"relationship": "belongsTo",
2129-
"sql": [Function],
2130-
},
2131-
]
2132-
`;
2133-
2134-
exports[`Schema Testing join types 1`] = `
2135-
Array [
2136-
Object {
2137-
"name": "CubeB",
2138-
"relationship": "hasOne",
2139-
"sql": [Function],
2140-
},
2141-
Object {
2142-
"name": "CubeC",
2143-
"relationship": "hasMany",
2144-
"sql": [Function],
2145-
},
2146-
Object {
2147-
"name": "CubeD",
2148-
"relationship": "belongsTo",
2149-
"sql": [Function],
2150-
},
2151-
]
2152-
`;

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,49 @@ describe('Schema Testing', () => {
488488
expect(cubeEvaluator.cubeFromPath('CubeA').joins).toMatchSnapshot();
489489
});
490490

491+
it('join aliases (joins as array)', async () => {
492+
const { compiler, cubeEvaluator } = prepareJsCompiler([
493+
createCubeSchema({
494+
name: 'CubeA',
495+
joins: `[
496+
{
497+
name: 'CubeB',
498+
sql: \`SQL ON clause1\`,
499+
relationship: 'one_to_one',
500+
alias: 'CubeB_alias1'
501+
},
502+
{
503+
name: 'CubeB',
504+
sql: \`SQL ON clause2\`,
505+
relationship: 'one_to_one',
506+
alias: 'CubeB_alias2'
507+
},
508+
{
509+
name: 'CubeC',
510+
sql: \`SQL ON clause\`,
511+
relationship: 'one_to_many'
512+
},
513+
{
514+
name: 'CubeD',
515+
sql: \`SQL ON clause\`,
516+
relationship: 'many_to_one'
517+
},
518+
]`
519+
}),
520+
createCubeSchema({
521+
name: 'CubeB',
522+
}),
523+
createCubeSchema({
524+
name: 'CubeC',
525+
}),
526+
createCubeSchema({
527+
name: 'CubeD',
528+
}),
529+
]);
530+
await compiler.compile();
531+
532+
expect(cubeEvaluator.cubeFromPath('CubeA').joins).toMatchSnapshot();
533+
});
491534
});
492535

493536
describe('Access Policies', () => {

packages/cubejs-schema-compiler/test/unit/yaml-schema.test.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,4 +629,51 @@ describe('Yaml Schema Testing', () => {
629629

630630
await compiler.compile();
631631
});
632+
633+
it('joins with aliases - success', async () => {
634+
const { compiler } = prepareYamlCompiler(
635+
`
636+
cubes:
637+
- name: CubeA
638+
sql: "select * from tbl"
639+
joins:
640+
- name: CubeB
641+
sql: SQL ON clause1
642+
relationship: one_to_one
643+
alias: CubeB_alias1
644+
645+
- name: CubeB
646+
sql: SQL ON clause2
647+
relationship: one_to_one
648+
alias: CubeB_alias2
649+
650+
- name: CubeC
651+
sql: SQL ON clause
652+
relationship: one_to_many
653+
654+
- name: CubeD
655+
sql: SQL ON clause
656+
relationship: many_to_one
657+
dimensions:
658+
- name: id
659+
sql: id
660+
type: number
661+
primary_key: true
662+
- name: created_at
663+
sql: created_at
664+
type: time
665+
measures:
666+
- name: count
667+
type: count
668+
- name: CubeB
669+
sql: "select * from tbl"
670+
- name: CubeC
671+
sql: "select * from tbl"
672+
- name: CubeD
673+
sql: "select * from tbl"
674+
`
675+
);
676+
677+
await compiler.compile();
678+
});
632679
});

0 commit comments

Comments
 (0)