// Package define ... // // Description : define ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2024-08-21 16:05 package define import ( "gorm.io/gorm" ) // Api2SqlParam 接口转sql的输入配置 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:06 2024/8/21 // // 一个合法的 sql 配置格式 : // // select 语句 : SELECT {FIELD_LIST} FROM {TABLE} WHERE {WHERE} ORDER BY {ORDER_FIELD} {ORDER_RULE} LIMIT {LIMIT} OFFSET {OFFSET} // // insert 语句 : INSERT INTO {TABLE} ({FIELD_LIST}) VALUES ({VALUE_LIST}) // // update 语句 : UPDATE {TABLE} SET {SET} WHERE {WHERE} LIMIT {LIMIT} OFFSET {OFFSET} ORDER BY {ORDER_FIELD} {ORDER_RULE} // // delete 语句 : DELETE FROM {TABLE} WHERE {WHERE} LIMIT {LIMIT} OFFSET {OFFSET} ORDER BY {ORDER_FIELD} {ORDER_RULE} // // count 语句 : SELECT COUNT(*) as count FROM {TABLE} WHERE {WHERE} type Api2SqlParam struct { DatabaseFlag string `json:"database_flag"` // 数据库标识 Table string `json:"table"` // 操作的数据表 ForceMaster bool `json:"force_master"` // 针对查询语句, 是否强制读主, 如果查询语句在事务中, 默认强制读主 InputSql string `json:"input_sql"` // 输入的sql模板, 仅依赖 ValueList 解析字段值, 依赖 split 相关解析分表配置 TableSplitConfig TableSplitConfig `json:"table_split_config"` // 分表配置 SqlType string `json:"sql_type"` // sql语句类型 : detail - 查询详情 list - 查询列表 count - 查询数量 update - 更新 insert - 插入 delete - 删除 ColumnList []*ColumnConfig `json:"column_list"` // 仅针对 select / detail 有效, 查询的字段列表, 字段名 => 字段别名, 不设置, 则以字段名输出 Limit int `json:"limit"` // 操作数量 Offset int `json:"offset"` // 操作偏移量 ForceNoLimit bool `json:"force_no_limit"` // 强制允许不限制 : 正常操作 select / delete / update 均需要指定本次操作数据量, 如果确定不限制, 此参数设置为 `true` , sqlType = list , 且 ForceNoLimit = true 时, WithCount 参数无效 OrderField string `json:"order_field"` // 排序字段, 仅 sqlType = list 生效 OrderRule string `json:"order_rule"` // 排序规则, Asc / Desc WithCount bool `json:"with_count"` // 是否返回数据总量, 仅 sqlType = list 生效 ConditionList []SqlCondition `json:"value_list"` // 字段列表 TableColumnConfig []*ColumnConfig `json:"table_column_config"` // 表字段配置 UpdateData map[string]any `json:"update_data"` // 要更新的数据, 仅对 update语句有效 Tx *gorm.DB `json:"-"` // 前后已有的数据库连接, 直接复用 } // TableSplitConfig 分表配置 // // Author : go_developer@163.com<白茶清欢> // // Date : 14:42 2024/8/23 type TableSplitConfig struct { IsSplit bool `json:"is_split"` // 是否分表 SplitField string `json:"split_field"` // 分表字段, 仅分表时有效, 分表字段要求在 ValueList 必须存在 FieldValue any `json:"field_value"` // 分表字段值 SplitStrategy string `json:"split_strategy"` // 分表策略, 仅分表时有效, 支持注册自动以策略 TableCnt int64 `json:"table_cnt"` // 一共分表多少张 } // SqlCondition sql条件 // // Author : go_developer@163.com<白茶清欢> // // Date : 14:46 2024/8/23 type SqlCondition struct { Column string `json:"column"` // 表字段 Operate string `json:"operate"` // 操作 : == / !== / in / not in / like / not like Value any `json:"value"` // 数据值 }