diff --git a/packages/cubejs-schema-compiler/src/adapter/Granularity.ts b/packages/cubejs-schema-compiler/src/adapter/Granularity.ts index bf3260f040cb8..4e7d452fd6d99 100644 --- a/packages/cubejs-schema-compiler/src/adapter/Granularity.ts +++ b/packages/cubejs-schema-compiler/src/adapter/Granularity.ts @@ -10,6 +10,7 @@ import { timeSeriesFromCustomInterval, TimeSeriesOptions } from '@cubejs-backend/shared'; +import { UserError } from '../compiler/UserError'; import { BaseQuery } from './BaseQuery'; export class Granularity { @@ -44,7 +45,7 @@ export class Granularity { ); if (!customGranularity) { - throw new Error(`Granularity "${timeDimension.granularity}" does not exist in dimension ${timeDimension.dimension}`); + throw new UserError(`Granularity "${timeDimension.granularity}" does not exist in dimension ${timeDimension.dimension}`); } this.granularityInterval = customGranularity.interval; diff --git a/packages/cubejs-schema-compiler/test/unit/base-query.test.ts b/packages/cubejs-schema-compiler/test/unit/base-query.test.ts index 63a9f0bd91735..f575e562453a9 100644 --- a/packages/cubejs-schema-compiler/test/unit/base-query.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/base-query.test.ts @@ -863,6 +863,27 @@ describe('SQL Generation', () => { } }); + it('throws UserError for unknown granularity', async () => { + await compilers.compiler.compile(); + + const buildQuery = () => new PostgresQuery(compilers, { + measures: ['orders.count'], + timeDimensions: [ + { + dimension: 'orders.createdAt', + granularity: 'all', + dateRange: ['2020-01-01', '2021-12-31'] + } + ], + dimensions: [], + filters: [], + timezone: 'Europe/Kyiv' + }); + + expect(buildQuery).toThrow(UserError); + expect(buildQuery).toThrow('Granularity "all" does not exist in dimension orders.createdAt'); + }); + describe('via PostgresQuery', () => { beforeAll(async () => { await compilers.compiler.compile(); diff --git a/yarn.lock b/yarn.lock index 515b7797039cb..ac3024627d4b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24662,9 +24662,9 @@ webpack@5.94.0: webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + version "0.7.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.5.tgz#569d22764ab21f2de20af0e74b411e8ae5a0fa46" + integrity sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA== dependencies: http-parser-js ">=0.5.1" safe-buffer ">=5.1.0"