123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- package sql
- import "strings"
- // Conditions 数据库条件
- type Conditions struct {
- queries []string
- args [][]any
- err error
- }
- // NewConditions 创建数据库条件
- func NewConditions() *Conditions {
- return &Conditions{
- queries: make([]string, 0),
- args: make([][]any, 0),
- }
- }
- // AddCondition 添加条件
- // 参数:
- // - query: 条件语句,如: name LIKE ? AND age = ?
- // - args: 预编译值,如: foo, 10
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) AddCondition(query string, args ...any) *Conditions {
- conditions.queries = append(conditions.queries, query)
- conditions.args = append(conditions.args, args)
- return conditions
- }
- // Equal 添加相等条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) Equal(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" = ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // Like 添加LIKE条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) Like(columnName string, arg string) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" LIKE ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // In 添加IN条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) In(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" IN ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // NotIn 添加NOT IN条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) NotIn(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" NOT IN ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // Not 添加不相等条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) Not(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" != ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // LessThan 添加小于条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) LessThan(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" < ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // LessThanAndEqual 添加小于等于条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) LessThanAndEqual(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" <= ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // GreaterThan 添加大于条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) GreaterThan(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" > ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // GreaterThanAndEqual 添加大于等于条件
- // 参数:
- // - columnName: 列名
- // - arg: 列值
- // 返回值:
- // - 数据库条件
- func (conditions *Conditions) GreaterThanAndEqual(columnName string, arg any) *Conditions {
- if conditions.err != nil {
- return conditions
- }
- conditions.queries = append(conditions.queries, columnName+" >= ?")
- conditions.args = append(conditions.args, []any{arg})
- return conditions
- }
- // Queries 获取所有查询条件语句
- // 参数: 无
- // 返回值:
- // - 查询条件
- func (conditions *Conditions) Queries() []string {
- return conditions.queries
- }
- // Args 获取所有查询条件值
- // 参数: 无
- // 返回值:
- // - 查询条件值
- func (conditions *Conditions) Args() []any {
- args := make([]any, 0)
- for _, conditionArgs := range conditions.args {
- if conditionArgs == nil {
- continue
- }
- if len(conditionArgs) == 1 {
- args = append(args, conditionArgs[0])
- } else {
- args = append(args, conditionArgs)
- }
- }
- return args
- }
- // And 获取构造的AND条件语句
- // 参数: 无
- // 返回值:
- // - 构造的AND条件语句
- func (conditions *Conditions) And() string {
- return conditions.formClause("AND")
- }
- // OR 获取构造的OR条件语句
- // 参数: 无
- // 返回值:
- // - 构造的AND条件语句
- func (conditions *Conditions) OR() string {
- return conditions.formClause("OR")
- }
- func (conditions *Conditions) formClause(conditionOperator string) string {
- if conditions.queries == nil || len(conditions.queries) == 0 {
- return ""
- }
- stringBuilder := strings.Builder{}
- for i, query := range conditions.queries {
- stringBuilder.WriteString(query)
- if i != len(conditions.queries)-1 {
- stringBuilder.WriteString(" " + conditionOperator + " ")
- }
- }
- return stringBuilder.String()
- }
|