{"record":{"id":"ea3dacbd8ec7372f","repo":"dgraph-io/dgraph","slug":"empty-facetkeys-not-allowed","errorCode":null,"errorMessage":"empty facetKeys not allowed","messagePattern":"empty facetKeys not allowed","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"chunker/rdf_parser.go","lineNumber":277,"sourceCode":"\nfunc parseFacetsRDF(it *lex.ItemIterator, rnq *api.NQuad) error {\n\tif !it.Next() {\n\t\treturn errors.New(\"unexpected end of facets\")\n\t}\n\titem := it.Item()\n\tif item.Typ != itemLeftRound {\n\t\treturn fmt.Errorf(\"expected '(' but found %v at facet\", item.Val)\n\t}\n\n\tfor it.Next() { // parse one key value pair\n\t\t// parse key\n\t\titem = it.Item()\n\t\tif item.Typ != itemText {\n\t\t\treturn fmt.Errorf(\"expected key but found %v\", item.Val)\n\t\t}\n\t\tfacetKey := strings.TrimSpace(item.Val)\n\t\tif len(facetKey) == 0 {\n\t\t\treturn errors.New(\"empty facetKeys not allowed\")\n\t\t}\n\t\t// parse =\n\t\tif !it.Next() {\n\t\t\treturn errors.New(\"unexpected end of facets\")\n\t\t}\n\t\titem = it.Item()\n\t\tif item.Typ != itemEqual {\n\t\t\treturn fmt.Errorf(\"expected = after facetKey. Found %v\", item.Val)\n\t\t}\n\t\t// parse value or empty value\n\t\tif !it.Next() {\n\t\t\treturn errors.New(\"unexpected end of facets\")\n\t\t}\n\t\titem = it.Item()\n\t\tfacetVal := \"\"\n\t\tif item.Typ == itemText {\n\t\t\tfacetVal = item.Val\n\t\t}","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/dgraph-io/dgraph/blob/759e242be62c91f8d084da06ad0c8d21256d9c07/chunker/rdf_parser.go#L259-L295","documentation":"Returned by parseFacetsRDF while parsing the facet list of an RDF N-Quad: after trimming whitespace, a facet key parsed between '(' and '=' was empty (e.g. '(=value)' or a key made only of spaces). Facet keys must be non-empty strings.","triggerScenarios":"ParseRDF input where a facet pair's key trims to empty, e.g. '( =0.9)' or a key consisting solely of spaces produced by a generator.","commonSituations":"Templated facet lists where the key placeholder was empty; whitespace-heavy formatting that separated '=' from a missing key.","solutions":["Give the facet a non-empty key: (score=0.9).","Fix the generator/template so facet keys are always populated.","Pre-validate facet pairs client-side, trimming keys and rejecting empties."],"exampleFix":"// before\nfmt.Sprintf(\"(<s-key>%s=0.9)\", facetKey)  // facetKey == \"\"\n// after\nif facetKey == \"\" { return errors.New(\"facet key required\") }\nfmt.Sprintf(\"(%s=0.9)\", facetKey)","handlingStrategy":"validation","validationCode":"func facetKeysValid(facets map[string]string) bool {\n\tfor k := range facets {\n\t\tif strings.TrimSpace(k) == \"\" { return false }\n\t}\n\treturn true\n}","typeGuard":null,"tryCatchPattern":"if _, err := ParseRDF(line); err != nil {\n\tif err.Error() == \"empty facetKeys not allowed\" {\n\t\treturn fmt.Errorf(\"facet key placeholder not filled: %w\", err)\n\t}\n\treturn err\n}","preventionTips":["Reject empty facet keys in your generator.","Trim keys and check non-empty before rendering lines.","Use schema-defined facet names rather than free-form placeholders."],"tags":["rdf","parsing","facets","validation","dgraph"],"backgroundTag":"parser-syntax-error","analyzedSha":"759e242be62c91f8d084da06ad0c8d21256d9c07","analyzedAt":"2026-09-01T14:42:12.034Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}