{"record":{"id":"dd6b2bbe07456ab5","repo":"cube-js/cube","slug":"not-full-member-name-provided-path-0","errorCode":null,"errorMessage":"Not full member name provided: ${path[0]}","messagePattern":"Not full member name provided: (.+?)","errorType":"validation","errorClass":"UserError","httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts","lineNumber":1030,"sourceCode":"  public dimensionByPath(dimensionPath: string | string[]): DimensionDefinition {\n    return this.byPath('dimensions', dimensionPath) as DimensionDefinition;\n  }\n\n  public segmentByPath(segmentPath: string | string[]): SegmentDefinition {\n    return this.byPath('segments', segmentPath) as SegmentDefinition;\n  }\n\n  public cubeExists(cube: string): boolean {\n    return !!this.evaluatedCubes[cube];\n  }\n\n  public memberShortNameFromPath(path: string | string[]): string {\n    if (!Array.isArray(path)) {\n      path = path.split('.');\n    }\n\n    if (path.length < 2) {\n      throw new UserError(`Not full member name provided: ${path[0]}`);\n    }\n\n    return path.slice(-2).join('.');\n  }\n\n  public cubeFromPath(path: string): EvaluatedCube {\n    return this.evaluatedCubes[this.cubeNameFromPath(path)];\n  }\n\n  public cubeNameFromPath(path: string) {\n    const cubeAndName = path.split('.');\n    if (!this.evaluatedCubes[cubeAndName[0]]) {\n      throw new UserError(`Cube '${cubeAndName[0]}' not found for path '${path}'`);\n    }\n    return cubeAndName[0];\n  }\n\n  public isInstanceOfType(type: 'measures' | 'dimensions' | 'segments', path: string | string[]): boolean {","sourceCodeStart":1012,"sourceCodeEnd":1048,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts#L1012-L1048","documentation":"memberShortNameFromPath expects a fully qualified member path of at least two segments (cube.member) because it returns the last two segments joined by a dot. A single-segment input cannot be split into cube and member, so a UserError is thrown.","triggerScenarios":"Calling memberShortNameFromPath('region') or memberShortNameFromPath(['region']) — any path with fewer than 2 dot-separated segments.","commonSituations":"Users submitting queries with unqualified member names; client code forgetting to prefix cube name; filters/measures built from user input lacking the cube prefix.","solutions":["Qualify the member with its cube name before passing it ('Orders.region' instead of 'region')","In client code, resolve the cube from the query context before constructing member paths","Validate/normalize incoming member paths (reject single-segment names early)"],"exampleFix":"// before\nevaluator.memberShortNameFromPath('totalAmount');\n// after\nevaluator.memberShortNameFromPath('Orders.totalAmount');","handlingStrategy":"type-guard","validationCode":"if (typeof path === 'string' ? path.split('.').length < 2 : path.length < 2) throw new Error('Member must be cube-qualified: Cube.member');","typeGuard":"function isFullMemberPath(p) { return (typeof p === 'string' ? p.split('.') : p).length >= 2; }","tryCatchPattern":"try { return evaluator.memberShortNameFromPath(path); } catch (e) { if (e.message.startsWith('Not full member name')) { path = defaultCube + '.' + path; return evaluator.memberShortNameFromPath(path); } throw e; }","preventionTips":["Always build member references as Cube.member","Normalize user input by prepending a context cube when needed","Add client-side validation rejecting bare member names"],"tags":["member","path","validation"],"backgroundTag":"incomplete-member-path","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}