meta.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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. // ObjectPath 表示从根到目标对象的完整层级路径(数组按从上到下的顺序排列)
  34. // 使用示例:
  35. // - 数据库 mydb: [{"type":"database","name":"mydb"}]
  36. // - 表 users: [{"type":"database","name":"mydb"},{"type":"table","name":"users"}]
  37. // - 列 email: [{"type":"database","name":"mydb"},{"type":"table","name":"users"},{"type":"column","name":"email"}]
  38. type ObjectPath []ObjectPathEntry
  39. // ObjectOperationRequest 通用对象操作请求(创建/修改/删除)
  40. type ObjectOperationRequest struct {
  41. // Execute 指示是否在服务端直接执行操作(true)还是仅生成/返回将被执行的 SQL(false,默认)。
  42. // 注意:某些数据库对 DDL 不支持事务回滚(例如 MySQL 的 DROP DATABASE/TABLE 在多数情况下不可回滚),
  43. // 即使使用事务包装也可能无法完全回滚。该字段用于控制驱动层的执行策略。
  44. Execute bool `json:"execute"`
  45. Object GenericObject `json:"object"` // 目标对象(创建/修改时需完整属性,删除时只需ID/Name/Type等标识)
  46. Options map[string]interface{} `json:"options"` // 额外选项(如创建表时的"ifNotExists": true)
  47. }
  48. // ObjectOperationResponse 操作响应
  49. type ObjectOperationResponse struct {
  50. Affected int64 `json:"affected"` // 影响行数(如删除表时可能为0,但操作成功)
  51. ObjectID string `json:"objectID"` // 创建操作时返回新对象的ID
  52. Sql string `json:"sql"` // 生成的SQL语句(可选,供前端调试)
  53. }
  54. // (ValidationError removed) Drivers should return plain errors (fmt.Errorf) for validation or other failures.
  55. // TemplateField 描述模板(用于创建或修改)中的一个字段(供前端渲染表单或编辑界面)
  56. // 此结构比原先的 CreateField 更通用,既可用于 Create 也可用于 Update 场景。
  57. type TemplateField struct {
  58. Name string `json:"name"` // 字段标识,如 tableName/columns
  59. Label string `json:"label,omitempty"` // 前端展示标签
  60. Type FieldType `json:"type"` // string/int/bool/enum/list/object 等
  61. Required bool `json:"required,omitempty"` // 是否必填
  62. Default string `json:"default,omitempty"`
  63. Help string `json:"help,omitempty"`
  64. EnumOptions []string `json:"enumOptions,omitempty"` // 当 Type=="enum"
  65. NestedFields []TemplateField `json:"nestedFields,omitempty"` // 当 Type 为复杂类型时使用(如 columns 列表的子字段)
  66. // 以下字段为扩展,用于修改场景:
  67. Editable *bool `json:"editable,omitempty"` // 是否可编辑,nil 表示未指定(驱动可根据情况返回)
  68. Current interface{} `json:"current,omitempty"` // 当前值,用于修改时展示
  69. AllowedOps []string `json:"allowedOps,omitempty"` // 允许的操作,如 ["add","modify","drop","rename"]
  70. }
  71. // FieldType 常量,表示 TemplateField.Type 的可用值
  72. type FieldType string
  73. const (
  74. FieldTypeString FieldType = "string"
  75. FieldTypeInt FieldType = "int"
  76. FieldTypeBool FieldType = "bool"
  77. FieldTypeNumber FieldType = "number"
  78. FieldTypeBoolean FieldType = "boolean"
  79. FieldTypeEnum FieldType = "enum"
  80. FieldTypeList FieldType = "list"
  81. FieldTypeObject FieldType = "object"
  82. FieldTypeTextarea FieldType = "textarea"
  83. )
  84. // ObjectTemplate 用于描述某类型对象在给定父上下文下的创建或修改模板
  85. // Fields 使用 TemplateField,可同时支持创建与修改场景。
  86. type ObjectTemplate struct {
  87. ObjectType string `json:"objectType"`
  88. // Operation 指示模板用途:"create" | "update" | "delete"。
  89. // 保持向后兼容:旧实现若未设置该字段,仍按调用接口语义处理。
  90. Operation string `json:"operation,omitempty"`
  91. ParentHint string `json:"parentHint,omitempty"` // 提示父上下文(例如需要传入 db 名称)
  92. Fields []TemplateField `json:"fields"`
  93. // Current 提供对象在修改场景下的当前值(key->value),供前端渲染默认值。
  94. // 为了统一模板字段的字符串默认值表现(TemplateField.Default 为 string),
  95. // 此处使用 map[string]string 保存字段名到其字符串表示的当前值。
  96. // 在 create/delete 场景通常为空。
  97. Current map[string]string `json:"current,omitempty"`
  98. // Example 提供示例值,用于前端显示示例或自动填充。使用 map[string]string
  99. // 以保持示例值的简单字符串表示(可扩展为 JSON 字符串或约定的编码格式)。
  100. Example map[string]string `json:"example,omitempty"`
  101. Notes string `json:"notes,omitempty"`
  102. // AllowedOps 在删除或复杂修改场景下指示驱动允许的细粒度操作
  103. //(例如:"add","modify","drop","rename")。前端可据此决定显示的控件或确认级别。
  104. AllowedOps []string `json:"allowedOps,omitempty"`
  105. }
  106. // CreateObjectRequest 前端提交的创建请求(用于预览或执行)
  107. type CreateObjectRequest struct {
  108. ObjectType string `json:"objectType" binding:"required"`
  109. ParentName string `json:"parentName,omitempty"`
  110. Properties map[string]interface{} `json:"properties" binding:"required"` // 表单提交的字段
  111. Execute bool `json:"execute,omitempty"` // false=preview only, true=execute
  112. Options map[string]interface{} `json:"options,omitempty"`
  113. }
  114. // CreateObjectResponse 创建/预览响应
  115. type CreateObjectResponse struct {
  116. ObjectID string `json:"objectID,omitempty"`
  117. GeneratedSQL []string `json:"generatedSQL,omitempty"` // 生成的 SQL 语句
  118. }
  119. // UpdateObjectRequest 前端提交的修改请求(用于预览或执行)
  120. type UpdateObjectRequest struct {
  121. Path ObjectPath `json:"path" binding:"required"` // 目标对象的路径
  122. Properties map[string]interface{} `json:"properties" binding:"required"` // 表单提交的字段
  123. Execute bool `json:"execute,omitempty"` // false=preview only, true=execute
  124. Options map[string]interface{} `json:"options,omitempty"`
  125. }
  126. // UpdateObjectResponse 修改/预览响应
  127. type UpdateObjectResponse struct {
  128. ObjectID string `json:"objectID,omitempty"`
  129. GeneratedSQL []string `json:"generatedSQL,omitempty"` // 生成的 SQL 语句
  130. }
  131. // // AttrMeta 属性元信息
  132. // type AttrMeta struct {
  133. // Name string `json:"name"` // 属性名
  134. // Type string `json:"type"` // 类型(string/bool/int)
  135. // Required bool `json:"required"` // 是否必填
  136. // Description string `json:"description"` // 描述
  137. // }
  138. // // TypeMeta 对象类型元信息
  139. // type TypeMeta struct {
  140. // Type string `json:"type"` // 对象类型(table、column等)
  141. // Description string `json:"description"` // 描述
  142. // CommonAttrs []AttrMeta `json:"commonAttrs"` // 通用属性
  143. // DBAttrs map[string][]AttrMeta `json:"dbAttrs"` // 数据库特有属性(key: dbType)
  144. // }
  145. // MetadataCapabilities 是更通用的元信息描述,适用于任意数据引擎或数据源。
  146. // 建议驱动实现该结构以报告引擎能力、关键字、数据类型及其他可选能力。
  147. type MetadataCapabilities struct {
  148. // Keywords 支持的关键字/保留字列表
  149. Keywords []string `json:"keywords,omitempty"`
  150. // FieldTypes 支持的数据类型列表(规范化为大写,例如 INT, BIGINT, VARCHAR)
  151. FieldTypes []string `json:"fieldTypes,omitempty"`
  152. // TypeAliases 可选:将逻辑类型映射到底层类型集合,例如 {"string": ["VARCHAR","TEXT"]}
  153. TypeAliases map[string][]string `json:"typeAliases,omitempty"`
  154. // Capabilities 用于描述可选能力的布尔标志(例如 supportsTransactions、supportsDDLTransaction)
  155. Capabilities map[string]bool `json:"capabilities,omitempty"`
  156. // Functions 列表(可选):内置函数/聚合等,供自动完成或能力检测使用
  157. Functions []string `json:"functions,omitempty"`
  158. }