GitHub - go-the-way/sg: sg: A simple standard SQL generator written in Go. (original) (raw)
sg
sg: A simple standard SQL generator written in Go.
Overview
- Builders
- Generators
- Create view
- Create index
- Create unique index
- Index definition
- Column definition
- Primary key
- Default
- Delete
- Delete from
- Drop table
- Drop view
- Drop event
- Drop procedure
- Insert
- Values
- Alias
- Arg
- From
- Left join
- Right join
- Inner join
- On
- Select
- Order by
- Asc
- Desc
- Asc group
- Desc group
- Group by
- Having
- Update
- Set
- Set eq
- Where
- And
- Or
- Not
- And group
- Or group
- Eq
- Not eq
- Gt
- Gt eq
- Lt
- Lt eq
- Like
- Left like
- Right like
- Instr
- In
- Between and
Builders
Insert Builder
package main
import ( "fmt" . "github.com/go-the-way/sg" )
func main() { builder := InsertBuilder(). Table(T("table_person")). Column(C("col1"), C("col2")). Value(Arg(100), Arg(200)) fmt.Println(builder.Build()) // Output: // INSERT INTO table_person (col1, col2) VALUES (?, ?) [100 200] }
Delete Builder
package main
import ( "fmt" . "github.com/go-the-way/sg" )
func main() { builder := DeleteBuilder(). Delete(T("t1.")). From(As(C("table1"), "t1"), As(C("table2"), "t2")). Where(AndGroup(Gt("t1.col1", 100), Gt("t2.col2", 200))) fmt.Println(builder.Build()) // Output: // DELETE t1. FROM table1 AS t1, table2 AS t2 WHERE ((t1.col1 > ?) AND (t2.col2 > ?)) [100 200] }
Update Builder
package main
import ( "fmt" . "github.com/go-the-way/sg" )
func main() { builder := UpdateBuilder(). Update(As(T("table_person"), "t")). Join(LeftJoin(As(T("table_a"), "ta"), On(C("t.col1 = ta.col1")))). Set(SetEq("col1", 100), SetEq("col2", 200)). Where(AndGroup(Eq("a", 100), Eq("b", 200))) fmt.Println(builder.Build()) // Output: // UPDATE table_person AS t LEFT JOIN table_a AS ta ON (t.col1 = ta.col1) SET col1 = ?, col2 = ? WHERE ((a = ?) AND (b = ?)) [100 200 100 200] }
Select Builder
package main
import ( "fmt" . "github.com/go-the-way/sg" )
func main() { builder := SelectBuilder(). Select(C("a"), C("b")). From(T("table_person")). Join(LeftJoin(As(T("table_a"), "ta"), On(C("ta.col1 = tb.col1")))). Where(AndGroup(Eq("a", 100), Eq("b", 200))). OrderBy(DescGroup(C("a"), C("b"))) fmt.Println(builder.Build()) // Output: // SELECT a, b FROM table_person LEFT JOIN table_a AS ta ON (ta.col1 = tb.col1) WHERE ((a = ?) AND (b = ?)) ORDER BY a DESC, b DESC [100 200] }
Generators
Create view
CreateView(P("vm_nowTime"), P(`select NOW() AS t`)
Create index
CreateIndex(false, P("idx_name"), T("table"), C("name"))
Create unique index
CreateUniqueIndex(P("idx_name"), T("table"), C("name"))
Index definition
IndexDefinition(false, P("idx_name"), C("name"))
Column definition
ColumnDefinition(P("id"), P("int"), false, true, false, "", "ID")
Primary key
Default
Delete
Delete([]Ge{}, T("table_a"))
Delete from
Drop table
Drop view
Drop event
Drop procedure
DropProcedure(T("procedure"))
Insert
Insert(C("table"), C("aa"))
Values
Alias
Alias(C("hello"), "hello_lo")
Arg
From
From(T("table_a"), T("table_b"))
Left join
LeftJoin(As(T("table_a"), "ta"), On(C("ta.col1 = tb.col1"))
Right join
RightJoin(As(T("table_a"), "ta"), On(C("ta.col1 = tb.col1"))
Inner join
InnerJoin(As(T("table_a"), "ta"), On(C("ta.col1 = tb.col1"))
On
On(C("ta.col1 = tb.col1"))
Select
Order by
OrderBy(AscGroup(C("t.abc"), C("t.xxx")))
Asc
Desc
Asc group
AscGroup(C("t.abc"), C("t.xxx"))
Desc group
DescGroup(C("t.abc"), C("t.xxx"))
Group by
GroupBy(C("t.abc"), C("t.xyz"))
Having
Having(AndGroup(Eq("a", 1)))
Update
Set
Set eq
Where
Where(AndGroup(Eq("a", 1)))
And
Or
Not
And group
AndGroup(Gt("t1.col1", 100), Gt("t2.col2", 200))
Or group
OrGroup(Eq("a", 1), Eq("b", 100))
Eq
Not eq
Gt
Gt eq
Lt
Lt eq
Like
Left like
Right like
Instr
In
Between and
BetweenAnd(c, rune(100), rune(100))