{"record":{"id":"ecc337a8727d8c6f","repo":"siyuan-note/siyuan","slug":"av-name-and-type-are-required","errorCode":null,"errorMessage":"--av, --name and --type are required","messagePattern":"--av, --name and --type are required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/cli/cmd/database.go","lineNumber":148,"sourceCode":"\t},\n}\n\nvar databaseKeyCmd = &cobra.Command{\n\tUse:   \"key\",\n\tShort: \"Manage database keys (fields)\",\n}\n\nvar databaseKeyAddCmd = &cobra.Command{\n\tUse:   \"add --av <avID> --name <name> --type <type>\",\n\tShort: \"Add a key (field) to database\",\n\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\tavID, _ := cmd.Flags().GetString(\"av\")\n\t\tname, _ := cmd.Flags().GetString(\"name\")\n\t\tkeyType, _ := cmd.Flags().GetString(\"type\")\n\t\ticon, _ := cmd.Flags().GetString(\"icon\")\n\t\tprev, _ := cmd.Flags().GetString(\"prev\")\n\t\tif avID == \"\" || name == \"\" || keyType == \"\" {\n\t\t\treturn fmt.Errorf(\"--av, --name and --type are required\")\n\t\t}\n\n\t\tif dryRun {\n\t\t\tfmt.Printf(\"[dry-run] Would add key \\\"%s\\\" (type=%s) to database %s\\n\", name, keyType, avID)\n\t\t\treturn nil\n\t\t}\n\n\t\tkeyID := ast.NewNodeID()\n\t\tif err := model.AddAttributeViewKey(avID, \"\", keyID, name, keyType, icon, prev, av.DateDisplayFormatFull); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmodel.AppendPushReloadAttrViewEntry(avID)\n\t\tfmt.Println(keyID)\n\t\treturn nil\n\t},\n}\n\nvar databaseKeyRemoveCmd = &cobra.Command{","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/cli/cmd/database.go#L130-L166","documentation":"Thrown by `database key add` when any of `--av`, `--name`, or `--type` is empty. Adding a field requires the target database (`--av`), a human-readable field name (`--name`), and a field type string (`--type`) consumed by `model.AddAttributeViewKey`. All three are checked together.","triggerScenarios":"Running `siyuan database key add --av <id> --name \"Status\"` (missing `--type`), or any combination missing one of the three.","commonSituations":"Not knowing the valid `--type` vocabulary (e.g. `text`, `number`, `date`, `select`, `mSelect`, `url`, `email`, `phone`, `template`, `relation`, `rollup`, etc.), or forgetting to name the field.","solutions":["Provide all three: `siyuan database key add --av <id> --name \"Status\" --type mSelect`","Look up supported key types from the av package before choosing `--type`","Optionally include `--icon` and `--prev` for ordering/icon; those are not required"],"exampleFix":"// before\nsiyuan database key add --av 20240101000000-av12345 --name \"Status\"\n\n// after\nsiyuan database key add --av 20240101000000-av12345 --name \"Status\" --type mSelect","handlingStrategy":"validation","validationCode":"if strings.TrimSpace(avID) == \"\" || strings.TrimSpace(name) == \"\" || strings.TrimSpace(keyType) == \"\" {\n    log.Fatal(\"--av, --name and --type are all required\")\n}\nvalidTypes := map[string]bool{\"text\":true,\"number\":true,\"date\":true,\"select\":true,\"mSelect\":true,\"url\":true,\"email\":true,\"phone\":true,\"template\":true,\"relation\":true,\"rollup\":true,\"lineNumber\":true}\nif !validTypes[keyType] {\n    log.Fatalf(\"unsupported key type %q\", keyType)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate the --type against the av package's supported key types","Provide all three flags from a single config struct to avoid omissions"],"tags":["cli","database","attribute-view","key","flag-validation","argument-required"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}