meta.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package meta
  2. type ConnectionConfig struct {
  3. Host string `json:"host"` // 数据库服务器地址
  4. Port int `json:"port"` // 数据库服务器端口
  5. Username string `json:"username"` // 数据库用户名
  6. Password string `json:"password"` // 数据库密码
  7. Database string `json:"database"` // 要连接的数据库名称
  8. Schema string `json:"schema"` // 模式名称
  9. ExtraParams map[string]string `json:"extra_params"` // 额外的连接参数,如字符集、超时设置等
  10. // 连接池配置 - 用于管理数据库连接的生命周期和性能优化
  11. MaxOpenConns int `json:"max_open_conns"` // 最大打开连接数,0 表示无限制
  12. MaxIdleConns int `json:"max_idle_conns"` // 最大空闲连接数,默认 2
  13. MaxIdleTime int `json:"max_idle_time,omitempty"` // 单个连接最大空闲时长(秒),0 表示不限制
  14. MaxLifetime int `json:"max_lifetime"` // 连接最大存活时间(秒),0 表示永不过期
  15. }
  16. // GenericObject 通用数据库对象
  17. type GenericObject struct {
  18. ID string `json:"id"` // 唯一标识
  19. Name string `json:"name"` // 对象名称
  20. Description string `json:"description,omitempty"` // 简短描述,用于 UI 展示或类型占位说明
  21. Type string `json:"type"` // 对象类型(table、column等)
  22. ParentID string `json:"parentId"` // 父对象ID
  23. DBType string `json:"dbType"` // 数据库类型(mysql、oracle等)。保留字段名 `DBType` 用于驱动/元数据定位,注意该字段与对象的 `Type` 字段语义不同。
  24. Attrs map[string]string `json:"attrs"` // 动态属性(统一为 string 以避免 interface{})
  25. Children []GenericObject `json:"children"` // 子对象
  26. }
  27. // ObjectPathEntry 表示对象路径中的一段(自上而下的单个层级)
  28. // 例:定位表 users 的路径为:[{"type":"database","name":"mydb"},{"type":"table","name":"users"}]
  29. type ObjectPathEntry struct {
  30. Type string `json:"type"` // 对象类型,例如 database/table/column
  31. Name string `json:"name"` // 对象在该层级下的名称
  32. }
  33. // ObjectOperationRequest 通用对象操作请求(创建/修改/删除)
  34. type ObjectOperationRequest struct {
  35. // Execute 指示是否在服务端直接执行操作(true)还是仅生成/返回将被执行的 SQL(false,默认)。
  36. // 注意:某些数据库对 DDL 不支持事务回滚(例如 MySQL 的 DROP DATABASE/TABLE 在多数情况下不可回滚),
  37. // 即使使用事务包装也可能无法完全回滚。该字段用于控制驱动层的执行策略。
  38. Execute bool `json:"execute"`
  39. Object GenericObject `json:"object"` // 目标对象(创建/修改时需完整属性,删除时只需ID/Name/Type等标识)
  40. Options map[string]interface{} `json:"options"` // 额外选项(如创建表时的"ifNotExists": true)
  41. }
  42. // ObjectOperationResponse 操作响应
  43. type ObjectOperationResponse struct {
  44. Affected int64 `json:"affected"` // 影响行数(如删除表时可能为0,但操作成功)
  45. ObjectID string `json:"objectID"` // 创建操作时返回新对象的ID
  46. Sql string `json:"sql"` // 生成的SQL语句(可选,供前端调试)
  47. }
  48. // (ValidationError removed) Drivers should return plain errors (fmt.Errorf) for validation or other failures.
  49. // TemplateField 描述模板(用于创建或修改)中的一个字段(供前端渲染表单或编辑界面)
  50. // 此结构比原先的 CreateField 更通用,既可用于 Create 也可用于 Update 场景。
  51. type TemplateField struct {
  52. Name string `json:"name"` // 字段标识,如 tableName/columns
  53. Label string `json:"label,omitempty"` // 前端展示标签
  54. Type FieldType `json:"type"` // string/int/bool/enum/list/object 等
  55. Required bool `json:"required,omitempty"` // 是否必填
  56. Default string `json:"default,omitempty"`
  57. Help string `json:"help,omitempty"`
  58. EnumOptions []string `json:"enumOptions,omitempty"` // 当 Type=="enum"
  59. NestedFields []TemplateField `json:"nestedFields,omitempty"` // 当 Type 为复杂类型时使用(如 columns 列表的子字段)
  60. // 以下字段为扩展,用于修改场景:
  61. Editable *bool `json:"editable,omitempty"` // 是否可编辑,nil 表示未指定(驱动可根据情况返回)
  62. Current interface{} `json:"current,omitempty"` // 当前值,用于修改时展示
  63. AllowedOps []string `json:"allowedOps,omitempty"` // 允许的操作,如 ["add","modify","drop","rename"]
  64. }
  65. // FieldType 常量,表示 TemplateField.Type 的可用值
  66. type FieldType string
  67. const (
  68. FieldTypeString FieldType = "string"
  69. FieldTypeInt FieldType = "int"
  70. FieldTypeBool FieldType = "bool"
  71. FieldTypeNumber FieldType = "number"
  72. FieldTypeBoolean FieldType = "boolean"
  73. FieldTypeEnum FieldType = "enum"
  74. FieldTypeList FieldType = "list"
  75. FieldTypeObject FieldType = "object"
  76. FieldTypeTextarea FieldType = "textarea"
  77. )
  78. // ObjectTemplate 用于描述某类型对象在给定父上下文下的创建或修改模板
  79. // Fields 使用 TemplateField,可同时支持创建与修改场景。
  80. type ObjectTemplate struct {
  81. ObjectType string `json:"objectType"`
  82. // Operation 指示模板用途:"create" | "update" | "delete"。
  83. // 说明:为了兼容历史实现,如果旧驱动未设置该字段,调用方可根据上下文推断用途。
  84. // 新实现/驱动应显式设置该字段以提高语义清晰度并减少歧义。
  85. Operation string `json:"operation,omitempty"`
  86. ParentHint string `json:"parentHint,omitempty"` // 提示父上下文(例如需要传入 db 名称)
  87. Fields []TemplateField `json:"fields"`
  88. // Current 提供对象在修改场景下的当前值(key->value),供前端渲染默认值。
  89. // 为了统一模板字段的字符串默认值表现(TemplateField.Default 为 string),
  90. // 此处使用 map[string]string 保存字段名到其字符串表示的当前值。
  91. // 在 create/delete 场景通常为空。
  92. Current map[string]string `json:"current,omitempty"`
  93. // Example 提供示例值,用于前端显示示例或自动填充。使用 map[string]string
  94. // 以保持示例值的简单字符串表示(可扩展为 JSON 字符串或约定的编码格式)。
  95. Example map[string]string `json:"example,omitempty"`
  96. Notes string `json:"notes,omitempty"`
  97. // AllowedOps 在删除或复杂修改场景下指示驱动允许的细粒度操作
  98. //(例如:"add","modify","drop","rename")。前端可据此决定显示的控件或确认级别。
  99. AllowedOps []string `json:"allowedOps,omitempty"`
  100. }
  101. // CreateObjectRequest 前端提交的创建请求(用于预览或执行)
  102. type CreateObjectRequest struct {
  103. ObjectType string `json:"objectType" binding:"required"`
  104. ParentName string `json:"parentName,omitempty"`
  105. Properties map[string]interface{} `json:"properties" binding:"required"` // 表单提交的字段
  106. Execute bool `json:"execute,omitempty"` // false=preview only, true=execute
  107. Options map[string]interface{} `json:"options,omitempty"`
  108. }
  109. // CreateObjectResponse 创建/预览响应
  110. type CreateObjectResponse struct {
  111. ObjectID string `json:"objectID,omitempty"`
  112. GeneratedSQL []string `json:"generatedSQL,omitempty"` // 生成的 SQL 语句
  113. }
  114. // UpdateObjectRequest 前端提交的修改请求(用于预览或执行)
  115. type UpdateObjectRequest struct {
  116. Path ObjectPath `json:"path" binding:"required"` // 目标对象的路径
  117. Properties map[string]interface{} `json:"properties" binding:"required"` // 表单提交的字段
  118. Execute bool `json:"execute,omitempty"` // false=preview only, true=execute
  119. Options map[string]interface{} `json:"options,omitempty"`
  120. }
  121. // UpdateObjectResponse 修改/预览响应
  122. type UpdateObjectResponse struct {
  123. ObjectID string `json:"objectID,omitempty"`
  124. GeneratedSQL []string `json:"generatedSQL,omitempty"` // 生成的 SQL 语句
  125. }
  126. // // AttrMeta 属性元信息
  127. // type AttrMeta struct {
  128. // Name string `json:"name"` // 属性名
  129. // Type string `json:"type"` // 类型(string/bool/int)
  130. // Required bool `json:"required"` // 是否必填
  131. // Description string `json:"description"` // 描述
  132. // }
  133. // // TypeMeta 对象类型元信息
  134. // type TypeMeta struct {
  135. // Type string `json:"type"` // 对象类型(table、column等)
  136. // Description string `json:"description"` // 描述
  137. // CommonAttrs []AttrMeta `json:"commonAttrs"` // 通用属性
  138. // DBAttrs map[string][]AttrMeta `json:"dbAttrs"` // 数据库特有属性(key: dbType)
  139. // }
  140. // MetadataCapabilities 是更通用的元信息描述,适用于任意数据引擎或数据源。
  141. // 建议驱动实现该结构以报告引擎能力、关键字、数据类型及其他可选能力。
  142. type MetadataCapabilities struct {
  143. // Keywords 支持的关键字/保留字列表
  144. Keywords []string `json:"keywords,omitempty"`
  145. // FieldTypes 支持的数据类型列表(规范化为大写,例如 INT, BIGINT, VARCHAR)
  146. FieldTypes []string `json:"fieldTypes,omitempty"`
  147. // TypeAliases 可选:将逻辑类型映射到底层类型集合,例如 {"string": ["VARCHAR","TEXT"]}
  148. TypeAliases map[string][]string `json:"typeAliases,omitempty"`
  149. // Capabilities 用于描述可选能力的布尔标志(例如 supportsTransactions、supportsDDLTransaction)
  150. Capabilities map[string]bool `json:"capabilities,omitempty"`
  151. // Functions 列表(可选):内置函数/聚合等,供自动完成或能力检测使用
  152. Functions []string `json:"functions,omitempty"`
  153. }