{"record":{"id":"d22d3f358c3b6ee4","repo":"cayleygraph/cayley","slug":"not-implemented-should-tag-all-properties","errorCode":null,"errorMessage":"Not implemented: should tag all properties","messagePattern":"Not implemented: should tag all properties","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"query/linkedql/steps/properties.go","lineNumber":32,"sourceCode":"\tlinkedql.Register(&Properties{})\n}\n\nvar _ linkedql.PathStep = (*Properties)(nil)\n\n// Properties corresponds to .properties().\ntype Properties struct {\n\tFrom  linkedql.PathStep      `json:\"from\"`\n\tNames *linkedql.PropertyPath `json:\"names\"`\n}\n\n// Description implements Step.\nfunc (s *Properties) Description() string {\n\treturn \"adds tags for all properties of the current entity\"\n}\n\nfunc resolveNames(names *linkedql.PropertyPath) (linkedql.PropertyIRIs, error) {\n\tif names == nil {\n\t\treturn nil, fmt.Errorf(\"Not implemented: should tag all properties\")\n\t}\n\tswitch n := names.PropertyPathI.(type) {\n\tcase linkedql.PropertyStep:\n\t\treturn nil, fmt.Errorf(\"Not implemented: should use step to resolve to properties\")\n\tcase linkedql.PropertyIRIs:\n\t\treturn n, nil\n\tcase linkedql.PropertyIRIStrings:\n\t\treturn n.PropertyIRIs(), nil\n\tcase linkedql.PropertyIRI:\n\t\treturn linkedql.PropertyIRIs{n}, nil\n\tcase linkedql.PropertyIRIString:\n\t\treturn linkedql.PropertyIRIs{linkedql.PropertyIRI(n)}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unexpected type\")\n\t}\n}\n\n// BuildPath implements linkedql.PathStep.","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/cayleygraph/cayley/blob/81dcd7d73e45136bc0d01802a8ba4685d8a533eb/query/linkedql/steps/properties.go#L14-L50","documentation":"resolveNames in properties.go:32 implements the Properties step's property-name resolution. A nil PropertyPath would mean 'match all properties', but this is not implemented, so the function returns this error. It is a placeholder for unfinished functionality rather than a user-data problem.","triggerScenarios":"Building/using a Properties step (Properties.BuildPath → resolveNames) without setting any property names, i.e. s.Names == nil, e.g. constructing Properties{} with an empty spec.","commonSituations":"Deserializing a LinkedQL query from JSON where the properties list field was omitted or misnamed, so Names ended up nil.","solutions":["Provide explicit property names/IRIs in the Properties step spec.","If 'all properties' behavior is needed, enumerate the property IRIs explicitly since wildcard is unimplemented.","Check upstream deserialization to ensure the property list field is correctly populated.","Implement the nil case in resolveNames if contributing a fix to the library."],"exampleFix":"// before\nstep := &steps.Properties{} // Names nil\n// after\nstep := &steps.Properties{Names: []interface{}{\"http://xmlns.com/foaf/0.1/name\"}}","handlingStrategy":"validation","validationCode":"func ensureNamesSet(names *linkedql.PropertyPath) error {\n  if names == nil {\n    return fmt.Errorf(\"Properties step requires explicit property names; wildcard not supported\")\n  }\n  return nil\n}","typeGuard":"func hasNames(s *steps.Properties) bool { return s.Names != nil }","tryCatchPattern":"p, err := step.BuildPath(qs, ns)\nif err != nil {\n  if strings.Contains(err.Error(), \"should tag all properties\") {\n    return fmt.Errorf(\"configure Properties.Names explicitly\")\n  }\n  return err\n}","preventionTips":["Always populate Names when constructing a Properties step","Validate deserialized queries for missing property lists","Enumerate property IRIs explicitly instead of relying on wildcard behavior"],"tags":["linkedql","not-implemented","go"],"backgroundTag":"method-not-implemented","analyzedSha":"81dcd7d73e45136bc0d01802a8ba4685d8a533eb","analyzedAt":"2026-09-06T06:14:12.358Z","contentChangedAt":"2026-09-06T06:14:12.358Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}