Add builder

This commit is contained in:
Jinzhu 2018-02-24 16:53:01 +08:00
parent 586c503a4f
commit be7a4064ef
2 changed files with 119 additions and 0 deletions

60
builder/operators.go Normal file
View File

@ -0,0 +1,60 @@
package builder
////////////////////////////////////////////////////////////////////////////////
// Comparison Operators
////////////////////////////////////////////////////////////////////////////////
// Raw raw sql
type Raw struct {
Value string
Args []interface{} // TODO NamedArg
}
// Eq equal to
type Eq struct {
Column Column
Value interface{}
}
// Neq not equal to
type Neq struct {
Column Column
Value interface{}
}
// Gt greater than
type Gt struct {
Column Column
Value interface{}
}
// Gte greater than or equal to
type Gte struct {
Column Column
Value interface{}
}
// Lt less than
type Lt struct {
Column Column
Value interface{}
}
// Lte less than or equal to
type Lte struct {
Column Column
Value interface{}
}
////////////////////////////////////////////////////////////////////////////////
// Logical Operators
////////////////////////////////////////////////////////////////////////////////
// And TRUE if all the conditions is TRUE
type And []Condition
// Not TRUE if condition is false
type Not Condition
// Or TRUE if any of the conditions is TRUE
type Or []Condition

59
builder/statement.go Normal file
View File

@ -0,0 +1,59 @@
package builder
// Column column type
type Column = string
// Statement GORM statement
type Statement struct {
Dest interface{} // Insert, Select, Update, Delete
Table string // Insert, Select, Update, Delete
Select []interface{} // Select
Joins []Join // Select
GroupBy GroupBy // Select
OrderBy OrderBy // Select
Preload []Column // Select
Limit Limit // Select, Update
Where []Condition // Select, Update, Delete
Assignments []Assignment // Insert, Update
Returnnings []Column // Insert, Update, Delete
}
// Condition query condition statement interface
type Condition interface {
// ToSQL()
}
// Join join statement
type Join struct {
Table string
LocalField string
ForeignField string
Conditions []Condition
}
// GroupBy group by statement
type GroupBy struct {
GroupByColumns []string
Having []Condition
}
// OrderBy order by statement
type OrderBy []OrderByColumn
// OrderByColumn column used for order
type OrderByColumn struct {
Name string
Asc bool
}
// Limit limit statement
type Limit struct {
Limit int
Offset int
}
// Assignment assign statement
type Assignment struct {
Column Column
Value interface{}
}