{"record":{"id":"dba2f14326009562","repo":"dgraph-io/dgraph","slug":"while-processing-s-brackets-are-not-closed-pro","errorCode":null,"errorMessage":"while processing '%s', brackets are not closed properly","messagePattern":"while processing '(.+?)', brackets are not closed properly","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"chunker/json_parser.go","lineNumber":233,"sourceCode":"\t\tnq.ObjectValue = &api.Value{Val: &api.Value_IntVal{IntVal: v}}\n\n\tcase string:\n\t\t// Default value is considered as S P * deletion.\n\t\tif v == \"\" && op == DeleteNquads {\n\t\t\tnq.ObjectValue = &api.Value{Val: &api.Value_DefaultVal{DefaultVal: x.Star}}\n\t\t\treturn nil\n\t\t}\n\n\t\tif vf, err := types.ParseVFloat(v); err == nil && len(vf) != 0 {\n\t\t\tnq.ObjectValue = &api.Value{Val: &api.Value_Vfloat32Val{Vfloat32Val: types.FloatArrayAsBytes(vf)}}\n\t\t\treturn nil\n\t\t}\n\n\t\t// Handle the uid function in upsert block\n\t\ts := stripSpaces(v)\n\t\tif strings.HasPrefix(s, \"uid(\") || strings.HasPrefix(s, \"val(\") {\n\t\t\tif !strings.HasSuffix(s, \")\") {\n\t\t\t\treturn fmt.Errorf(\"while processing '%s', brackets are not closed properly\", s)\n\t\t\t}\n\t\t\tnq.ObjectId = s\n\t\t\treturn nil\n\t\t}\n\n\t\t// In RDF, we assume everything is default (types.DefaultID), but in JSON we assume string\n\t\t// (StringID). But this value will be checked against the schema so we don't overshadow a\n\t\t// password value (types.PasswordID) - Issue#2623\n\t\tnq.ObjectValue = &api.Value{Val: &api.Value_StrVal{StrVal: v}}\n\n\tcase float64:\n\t\tif v == 0 && op == DeleteNquads {\n\t\t\tnq.ObjectValue = &api.Value{Val: &api.Value_DefaultVal{DefaultVal: x.Star}}\n\t\t\treturn nil\n\t\t}\n\t\tnq.ObjectValue = &api.Value{Val: &api.Value_DoubleVal{DoubleVal: v}}\n\n\tcase bool:","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/dgraph-io/dgraph/blob/759e242be62c91f8d084da06ad0c8d21256d9c07/chunker/json_parser.go#L215-L251","documentation":"GetFullTextTokens tokenizes one value with the FullTextTokenizer for the given language. Like GetTokens, it requires exactly one argument in funcArgs; more or fewer is an API misuse and returns this error.","triggerScenarios":"Calling tok.GetFullTextTokens([]string{}, \"en\") or tok.GetFullTextTokens([]string{\"a\", \"b\"}, \"en\") — any slice whose length is not 1. Reached via full-text query handling and tests (getStringTokens, uidsForMatch paths).","commonSituations":"Full-text search functions (alloftext/anyoftext) receiving multiple values from parsed query args; splitting text into multiple args instead of one combined string.","solutions":["Join multiple values into one string and pass a single-element slice: tok.GetFullTextTokens([]string{text}, lang).","Validate len(funcArgs)==1 before calling.","Fix the query parser to forward only one value argument for full-text functions."],"exampleFix":"// before\ntoks, err := tok.GetFullTextTokens([]string{\"alpha\", \"beta\"}, \"en\")\n// after\ntoks, err := tok.GetFullTextTokens([]string{\"alpha beta\"}, \"en\")","handlingStrategy":"validation","validationCode":"if len(funcArgs) != 1 {\n    return fmt.Errorf(\"GetFullTextTokens expects exactly 1 argument, got %d\", len(funcArgs))\n}","typeGuard":null,"tryCatchPattern":"tokens, err := tok.GetFullTextTokens(funcArgs, lang)\nif err != nil && strings.Contains(err.Error(), \"Function requires 1 arguments\") {\n    return nil, fmt.Errorf(\"full-text functions accept a single text value; got %d\", len(funcArgs))\n}","preventionTips":["Join multiple text values into one string before full-text tokenization.","Enforce single-argument arity in the query function parser for alloftext/anyoftext.","Test full-text paths with both empty and multi-value argument slices."],"tags":["dgraph","tokenizer","fulltext","arguments","api-misuse"],"backgroundTag":"invalid-function-arity","analyzedSha":"759e242be62c91f8d084da06ad0c8d21256d9c07","analyzedAt":"2026-09-01T14:42:12.034Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}