{"record":{"id":"8d72016f0377c612","repo":"cube-js/cube","slug":"cannot-transform-interval-expression-interval-8d7201","errorCode":null,"errorMessage":"Cannot transform interval expression \"${interval}\" to CubeStore dialect","messagePattern":"Cannot transform interval expression \"(.+?)\" to CubeStore dialect","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts","lineNumber":149,"sourceCode":"    } else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intKeys === 3) {\n      return `'${intervalParsed.day} DAY ${intervalParsed.hour} HOUR ${intervalParsed.minute} MINUTE'`;\n    } else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 4) {\n      return `'${intervalParsed.day} DAY ${intervalParsed.hour} HOUR ${intervalParsed.minute} MINUTE ${intervalParsed.second} SECOND'`;\n    } else if (intervalParsed.hour && intKeys === 1) {\n      return `'${intervalParsed.hour} HOUR'`;\n    } else if (intervalParsed.hour && intervalParsed.minute && intKeys === 2) {\n      return `'${intervalParsed.hour} HOUR ${intervalParsed.minute} MINUTE'`;\n    } else if (intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 3) {\n      return `'${intervalParsed.hour} HOUR ${intervalParsed.minute} MINUTE ${intervalParsed.second} SECOND'`;\n    } else if (intervalParsed.minute && intKeys === 1) {\n      return `'${intervalParsed.minute} MINUTE'`;\n    } else if (intervalParsed.minute && intervalParsed.second && intKeys === 2) {\n      return `'${intervalParsed.minute} MINUTE ${intervalParsed.second} SECOND'`;\n    }\n\n    // No need to support microseconds.\n\n    throw new Error(`Cannot transform interval expression \"${interval}\" to CubeStore dialect`);\n  }\n\n  public escapeColumnName(name) {\n    return `\\`${name}\\``;\n  }\n\n  public seriesSql(timeDimension) {\n    return timeDimension.timeSeries().map(\n      ([from, to]) => `select to_timestamp('${from}') date_from, to_timestamp('${to}') date_to`\n    ).join(' UNION ALL ');\n  }\n\n  public concatStringsSql(strings: string[]) {\n    return `CONCAT(${strings.join(', ')})`;\n  }\n\n  public unixTimestampSql() {\n    return 'UNIX_TIMESTAMP()';","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts#L131-L167","documentation":"CubeStoreQuery.formatInterval translates parsed interval expressions into Cube Store's interval literal syntax. Intervals whose unit combinations aren't among the supported branches (single units, minute+second, etc.) hit the final throw. Microseconds are explicitly unsupported.","triggerScenarios":"A rolling window or date range interval like '1 second 500 milliseconds', 'quarter', or any mixed-unit interval not matching the supported patterns is used in a query against Cube Store.","commonSituations":"Schemas ported from other databases with rich interval syntax; sub-second precision windows (microseconds) against Cube Store; typos in interval strings.","solutions":["Rewrite the interval as a supported combination, e.g. single unit or 'X MINUTE Y SECOND'.","Convert sub-second intervals to milliseconds/seconds at the finest supported granularity.","Extend formatInterval with a new branch if the unit combination is essential."],"exampleFix":"// before\nrollingWindow: { trailing: '1 day 12 hours' }\n// after\nrollingWindow: { trailing: '36 hours' }","handlingStrategy":"validation","validationCode":"const supported = /^-?\\d+\\s*(second|minute|hour|day|week|month|year)s?$|^\\d+ MINUTE \\d+ SECOND$/i;\nif (!supported.test(interval)) throw new Error(`Interval \"${interval}\" unsupported by CubeStore`);","typeGuard":null,"tryCatchPattern":"try { await cube.load(q) } catch (e) { if (/Cannot transform interval expression/.test(e.message)) { /* normalize interval to a single unit */ } else throw e; }","preventionTips":["Avoid mixed-unit intervals and microseconds with Cube Store","Convert all windows to a single unit (e.g. seconds)","Add unit tests compiling schemas against CubeStoreQuery"],"tags":["cubestore","interval","query-dialect","rolling-window"],"backgroundTag":"unsupported-interval-dialect","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}