sqlol

package module
v0.0.0-...-b94e98a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2020 License: MIT Imports: 8 Imported by: 0

README

sqlol

A simple SQL builder for postgreSQL

Documentation

Index

Examples

Constants

View Source
const (
	TimeLayout = "2006-01-02 15:04:05"
	DateLayout = "2006-01-02"
)

Variables

This section is empty.

Functions

func CamelToSnake

func CamelToSnake(str string) string

func CamelsToSnakes

func CamelsToSnakes(fields []string) (result []string)

func JsonString

func JsonString(data interface{}) string

func SnakeToCamel

func SnakeToCamel(s string) string

func String

func String(s string) string

For more details,refer to 4.1.2.1 String Constants on https://www.postgresql.org/docs/9.5/sql-syntax-lexical.html

func StringSliceDiff

func StringSliceDiff(source, exclude []string) []string

func StructExportedFields

func StructExportedFields(obj interface{}) (fields []string)

func StructValues

func StructValues(data interface{}, fields []string) string

func ToString

func ToString(i interface{}) string

Types

type Builder

type Builder struct {
	ConditionBuilder ConditionBuilder
	// contains filtered or unexported fields
}
Example
builder := NewBuilder()
var sql string
//Select
sql = builder.Select("a.tableA").
	Alias("t").
	Fields("t.*", "tb.*", "sum(t.num) sum_num").
	LeftJoin("a.tableB", "tb", "t.id=tb.tid").
	Where("t.field1 = 1").
	OrderBy("a.id").
	GroupBy("a.name").
	Having("sum_num > 300").
	ForUpdate().
	Build()
fmt.Println("select:")
fmt.Println(sql)
// print:
// SELECT t.*,tb.*,sum(t.num) sum_num
// FROM a.tableA AS t
// LEFT JOIN a.tableB AS tb ON t.id=tb.tid
// WHERE (t.field1 = 1)
// GROUP BY a.name
// ORDER BY a.id
// HAVING sum_num > 300
// FOR UPDATE

builder.Clear()

//Delete

sql = builder.Delete("a.tableA").
	Alias("t").
	Equal("t.id", 1).
	Build()
fmt.Println("delete:")
fmt.Println(sql)
// print:
// DELETE FROM a.tableA AS t WHERE (t.id = 1)

builder.Clear()

// Insert
now, _ := time.Parse("2006-01-02 15:04:05", "2020-05-01 00:00:00")
builder = builder.Insert("a.tableA").
	Values([]User{
		{
			Name:      "a",
			Age:       1,
			IsAdmin:   true,
			Remark:    "aa",
			CreatedBy: 1,
			CreatedAt: &now,
		},
		{
			Name:      "b",
			Age:       10,
			IsAdmin:   false,
			Remark:    "bb",
			CreatedBy: 1,
			CreatedAt: &now,
		},
	})
// 如果需要限定只插入某些字段,使用Cols()方法
// builder.Cols("Name", "Age", "IsAdmin", "CreatedBy", "CreatedAt")
fmt.Println("insert:")
fmt.Println(builder.Build())
// print:
// INSERT INTO a.tableA(name,age,is_admin,remark,created_by,created_at)
// VALUES
//     ('a',1,true,'aa',1,'2020-05-01T00:00:00Z'),
//     ('b',10,false,'bb',1,'2020-05-01T00:00:00Z')

builder.Clear()

// update

builder = builder.Update("a.user").
	Set("name = 'aaa'", "age = 12").
	//Set("age = age + 1").     // Set()支持复杂的update赋值操作
	SetMap(map[string]interface{}{
		"is_admin":  true,
		"update_at": now,
	}).
	Equal("id", 1)
fmt.Println("update:Set/setMap")
fmt.Println(builder.Build())
// print:
// UPDATE a.user SET
// name = 'aaa',age = 12,update_at = '2020-05-01T00:00:00Z',is_admin = true
// WHERE (id = 1)

// 也可以使用struct方式,SetStruct()方法
// 使用SetStruct()后,Set()和SetMap()的设置将不会生效
builder.SetStruct(User{
	Name:      "a",
	Age:       1,
	IsAdmin:   true,
	Remark:    "aa",
	CreatedBy: 1,
	CreatedAt: &now,
})
// 如果需要限定SetStruct()中只更新某些字段,使用Cols()方法
// builder.Cols("Name", "Age", "IsAdmin", "CreatedBy", "CreatedAt")

fmt.Println("update:SetStruct")
fmt.Println(builder.Build())
// print:
// UPDATE a.user SET
// (id,name,age,is_admin,remark,updated_by,updated_at) =
// (0,'a',1,true,'aa',0,NULL)
// WHERE (id = 1)
Output:

func NewBuilder

func NewBuilder() *Builder

func (*Builder) Alias

func (b *Builder) Alias(alias string) *Builder

func (*Builder) Any

func (b *Builder) Any(dbField string, values interface{}) *Builder

func (*Builder) Between

func (b *Builder) Between(
	dbField string, start, end interface{}) *Builder

func (*Builder) Build

func (b *Builder) Build() string

func (*Builder) BuildCount

func (b *Builder) BuildCount() string

func (*Builder) Clear

func (b *Builder) Clear()

func (*Builder) Clone

func (b *Builder) Clone() *Builder

func (*Builder) Cols

func (b *Builder) Cols(cols ...string) *Builder

func (*Builder) Delete

func (b *Builder) Delete(table string) *Builder

func (*Builder) Equal

func (b *Builder) Equal(dbField string, value interface{}) *Builder

func (*Builder) Fields

func (b *Builder) Fields(fields ...string) *Builder

func (*Builder) ForUpdate

func (b *Builder) ForUpdate() *Builder

func (*Builder) GroupBy

func (b *Builder) GroupBy(group ...string) *Builder

func (*Builder) Having

func (b *Builder) Having(having string) *Builder

func (*Builder) In

func (b *Builder) In(dbField string, values interface{}) *Builder

func (*Builder) InnerJoin

func (b *Builder) InnerJoin(table, as, on string) *Builder

func (*Builder) Insert

func (b *Builder) Insert(table string) *Builder

func (*Builder) Join

func (b *Builder) Join(joinType, table, as, on string) *Builder

func (*Builder) LeftJoin

func (b *Builder) LeftJoin(table, as, on string) *Builder

func (*Builder) Like

func (b *Builder) Like(dbField, value string) *Builder

func (*Builder) Limit

func (b *Builder) Limit(limit int64) *Builder

func (*Builder) MultiLike

func (b *Builder) MultiLike(dbFields []string, value string) *Builder

func (*Builder) NotIn

func (b *Builder) NotIn(dbField string, values interface{}) *Builder

func (*Builder) Offset

func (b *Builder) Offset(offset int64) *Builder

func (*Builder) OnConflict

func (b *Builder) OnConflict(fields string, do string) *Builder

func (*Builder) OnConflictDoNothing

func (b *Builder) OnConflictDoNothing() *Builder

func (*Builder) Or

func (b *Builder) Or(strs ...string) *Builder

func (*Builder) OrderBy

func (b *Builder) OrderBy(order ...string) *Builder

func (*Builder) Returning

func (b *Builder) Returning(fields ...string) *Builder

func (*Builder) RightJoin

func (b *Builder) RightJoin(table, as, on string) *Builder

func (*Builder) Select

func (b *Builder) Select(table string) *Builder

func (*Builder) SelectSubQuery

func (b *Builder) SelectSubQuery(subQuery string) *Builder

func (*Builder) Set

func (b *Builder) Set(data ...string) *Builder

func (*Builder) SetMap

func (b *Builder) SetMap(data map[string]interface{}) *Builder

func (*Builder) SetStruct

func (b *Builder) SetStruct(data interface{}) *Builder

func (*Builder) Strategies

func (b *Builder) Strategies(strategies ...Strategy) *Builder

添加自定义sql策略 Strategy接口形式

func (*Builder) StrategyFuncs

func (b *Builder) StrategyFuncs(strategyFuncs ...StrategyFunc) *Builder

添加自定义sql策略 回调函数形式

func (*Builder) TryAny

func (b *Builder) TryAny(dbField string, values interface{}) *Builder

func (*Builder) TryDateRange

func (b *Builder) TryDateRange(dbField string, startDate, endDate time.Time) *Builder

func (*Builder) TryEqual

func (b *Builder) TryEqual(dbField string, value interface{}) *Builder

func (*Builder) TryIn

func (b *Builder) TryIn(dbField string, values interface{}) *Builder

func (*Builder) TryLike

func (b *Builder) TryLike(dbField string, value string) *Builder

func (*Builder) TryMap

func (b *Builder) TryMap(where map[string]interface{}) *Builder

func (*Builder) TryMultiLike

func (b *Builder) TryMultiLike(dbFields []string, value string) *Builder

func (*Builder) TryTimeRange

func (b *Builder) TryTimeRange(dbField string, startTime, endTime time.Time) *Builder

func (*Builder) Update

func (b *Builder) Update(table string) *Builder

func (*Builder) Values

func (b *Builder) Values(values interface{}) *Builder

func (*Builder) Where

func (b *Builder) Where(strs ...string) *Builder

func (*Builder) WhereMap

func (b *Builder) WhereMap(where map[string]interface{}) *Builder

type ConditionBuilder

type ConditionBuilder struct {
	// contains filtered or unexported fields
}

func (*ConditionBuilder) Any

func (b *ConditionBuilder) Any(dbField string, values interface{}) *ConditionBuilder

添加Any条件 structValues 可传类型:

string: 子查询sql
array/slice: 结果集,效果同In

func (*ConditionBuilder) Between

func (b *ConditionBuilder) Between(dbField string, start, end interface{}) *ConditionBuilder

添加BETWEEN条件

func (*ConditionBuilder) Build

func (b *ConditionBuilder) Build() string

生成最终的sql

func (*ConditionBuilder) Clear

func (b *ConditionBuilder) Clear()

清空

func (*ConditionBuilder) Equal

func (b *ConditionBuilder) Equal(dbField string, value interface{}) *ConditionBuilder

添加相等条件

func (*ConditionBuilder) In

func (b *ConditionBuilder) In(dbField string, values interface{}) *ConditionBuilder

添加IN条件

func (*ConditionBuilder) Like

func (b *ConditionBuilder) Like(dbField, value string) *ConditionBuilder

添加LIKE条件,左右模糊匹配, 如果需要单边模糊匹配,请使用Where

func (*ConditionBuilder) MultiLike

func (b *ConditionBuilder) MultiLike(dbFields []string, value string) *ConditionBuilder

添加多个LIKE条件

func (*ConditionBuilder) NotIn

func (b *ConditionBuilder) NotIn(dbField string, values interface{}) *ConditionBuilder

添加NOT IN条件

func (*ConditionBuilder) Or

func (b *ConditionBuilder) Or(strs ...string) *ConditionBuilder

添加多个OR条件

func (*ConditionBuilder) TryAny

func (b *ConditionBuilder) TryAny(dbField string, values interface{}) *ConditionBuilder

添加IN条件,value为零值时跳过

func (*ConditionBuilder) TryDateRange

func (b *ConditionBuilder) TryDateRange(
	dbField string, startDate, endDate time.Time) *ConditionBuilder

添加日期范围条件,value为零值时跳过

func (*ConditionBuilder) TryEqual

func (b *ConditionBuilder) TryEqual(dbField string, value interface{}) *ConditionBuilder

添加相等条件,value为零值时跳过

func (*ConditionBuilder) TryIn

func (b *ConditionBuilder) TryIn(dbField string, values interface{}) *ConditionBuilder

添加IN条件,value为零值时跳过

func (*ConditionBuilder) TryLike

func (b *ConditionBuilder) TryLike(dbField string, value string) *ConditionBuilder

添加LIKE条件,左右模糊匹配,value为零值时跳过

func (*ConditionBuilder) TryMap

func (b *ConditionBuilder) TryMap(where map[string]interface{}) *ConditionBuilder

func (*ConditionBuilder) TryMultiLike

func (b *ConditionBuilder) TryMultiLike(dbFields []string, value string) *ConditionBuilder

添加多个LIKE条件,value为零值时跳过

func (*ConditionBuilder) TryTimeRange

func (b *ConditionBuilder) TryTimeRange(
	dbField string, startTime, endTime time.Time) *ConditionBuilder

添加时间范围条件,value为零值时跳过

func (*ConditionBuilder) Where

func (b *ConditionBuilder) Where(strs ...string) *ConditionBuilder

添加多个查询AND条件

func (*ConditionBuilder) WhereMap

func (b *ConditionBuilder) WhereMap(where map[string]interface{}) *ConditionBuilder

type Strategy

type Strategy interface {
	Execute(b *Builder)
}

type StrategyFunc

type StrategyFunc func(b *Builder)

type TryDateRange

type TryDateRange struct {
	Field     string
	StartDate time.Time
	EndDate   time.Time
}

func (TryDateRange) Execute

func (t TryDateRange) Execute(b *Builder)

type TryEqual

type TryEqual struct {
	Field string
	Value interface{}
}

func (TryEqual) Execute

func (t TryEqual) Execute(b *Builder)

type TryIn

type TryIn struct {
	Field  string
	Values interface{}
}

func (TryIn) Execute

func (t TryIn) Execute(b *Builder)

type TryLike

type TryLike struct {
	Field string
	Value string
}

func (TryLike) Execute

func (t TryLike) Execute(b *Builder)

type TryMultiLike

type TryMultiLike struct {
	Fields []string
	Value  string
}

func (TryMultiLike) Execute

func (t TryMultiLike) Execute(b *Builder)

type TryTimeRange

type TryTimeRange struct {
	Field     string
	StartTime time.Time
	EndTime   time.Time
}

func (TryTimeRange) Execute

func (t TryTimeRange) Execute(b *Builder)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL