{"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/9f775e8a12daef8255556097396f9b2739078892/kernel/cli/cmd/database.go#L130-L166","documentation":"The `database add-key` subcommand requires three flags together: `--av` (target database), `--name` (key name), and `--type` (key type). When any of the three is empty, RunE returns this combined error before creating anything. It enforces the minimal contract for defining a new database field.","triggerScenarios":"Running `siyuan database add-key` missing any of `--av`, `--name`, or `--type`, e.g. providing only the database ID.","commonSituations":"Forgetting `--type` (text, number, select, relation, etc.) because the name alone seems sufficient; scripts with an empty name variable; omitting `--av` in loops over multiple databases.","solutions":["Pass all three flags: `--av <avID> --name <keyName> --type <keyType>`","Use a supported key type value (e.g. text, number, date, select, relation)","Add `--icon`/`--prev` optionally for icon and position","Validate with `--dry-run` first"],"exampleFix":"// before\nsiyuan database add-key --av 20240101120000-avxyz --name \"Priority\"\n// after\nsiyuan database add-key --av 20240101120000-avxyz --name \"Priority\" --type select","handlingStrategy":"validation","validationCode":"if [ -z \"$AV_ID\" ] || [ -z \"$KEY_NAME\" ] || [ -z \"$KEY_TYPE\" ]; then\n  echo \"--av, --name and --type are required\"; exit 1\nfi\nsiyuan database add-key --av \"$AV_ID\" --name \"$KEY_NAME\" --type \"$KEY_TYPE\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate all three required values before invoking","Check the --type against supported key types","Always run --dry-run first for schema mutations"],"tags":["cli","validation","database"],"backgroundTag":"missing-required-flag","analyzedSha":"9f775e8a12daef8255556097396f9b2739078892","analyzedAt":"2026-09-19T03:17:15.984Z","contentChangedAt":"2026-09-19T03:17:15.984Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}