mirror of
https://github.com/hanzoai/sqlbuilder.git
synced 2026-10-01 00:37:42 +00:00
refs #18. add new method ReplaceInto in InsertBuilder
This commit is contained in:
@@ -17,12 +17,14 @@ func NewInsertBuilder() *InsertBuilder {
|
||||
func newInsertBuilder() *InsertBuilder {
|
||||
args := &Args{}
|
||||
return &InsertBuilder{
|
||||
verb: "INSERT",
|
||||
args: args,
|
||||
}
|
||||
}
|
||||
|
||||
// InsertBuilder is a builder to build INSERT.
|
||||
type InsertBuilder struct {
|
||||
verb string
|
||||
table string
|
||||
cols []string
|
||||
values [][]string
|
||||
@@ -36,6 +38,14 @@ func (ib *InsertBuilder) InsertInto(table string) *InsertBuilder {
|
||||
return ib
|
||||
}
|
||||
|
||||
// ReplaceInto sets table name and changes the verb of ib to REPLACE.
|
||||
// REPLACE INTO is a MySQL extension to the SQL standard.
|
||||
func (ib *InsertBuilder) ReplaceInto(table string) *InsertBuilder {
|
||||
ib.verb = "REPLACE"
|
||||
ib.table = Escape(table)
|
||||
return ib
|
||||
}
|
||||
|
||||
// Cols sets columns in INSERT.
|
||||
func (ib *InsertBuilder) Cols(col ...string) *InsertBuilder {
|
||||
ib.cols = EscapeAll(col...)
|
||||
@@ -54,7 +64,7 @@ func (ib *InsertBuilder) Values(value ...interface{}) *InsertBuilder {
|
||||
return ib
|
||||
}
|
||||
|
||||
// String returns the compiled DELETE string.
|
||||
// String returns the compiled INSERT string.
|
||||
func (ib *InsertBuilder) String() string {
|
||||
s, _ := ib.Build()
|
||||
return s
|
||||
@@ -70,7 +80,8 @@ func (ib *InsertBuilder) Build() (sql string, args []interface{}) {
|
||||
// They can be used in `DB#Query` of package `database/sql` directly.
|
||||
func (ib *InsertBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{}) {
|
||||
buf := &bytes.Buffer{}
|
||||
buf.WriteString("INSERT INTO ")
|
||||
buf.WriteString(ib.verb)
|
||||
buf.WriteString(" INTO ")
|
||||
buf.WriteString(ib.table)
|
||||
|
||||
if len(ib.cols) > 0 {
|
||||
|
||||
@@ -22,3 +22,19 @@ func ExampleInsertBuilder() {
|
||||
// INSERT INTO demo.user (id, name, status, created_at) VALUES (?, ?, ?, UNIX_TIMESTAMP(NOW())), (?, ?, ?, ?)
|
||||
// [1 Huan Du 1 2 Charmy Liu 1 1234567890]
|
||||
}
|
||||
|
||||
func ExampleInsertBuilder_replaceInto() {
|
||||
ib := NewInsertBuilder()
|
||||
ib.ReplaceInto("demo.user")
|
||||
ib.Cols("id", "name", "status", "created_at")
|
||||
ib.Values(1, "Huan Du", 1, Raw("UNIX_TIMESTAMP(NOW())"))
|
||||
ib.Values(2, "Charmy Liu", 1, 1234567890)
|
||||
|
||||
sql, args := ib.Build()
|
||||
fmt.Println(sql)
|
||||
fmt.Println(args)
|
||||
|
||||
// Output:
|
||||
// REPLACE INTO demo.user (id, name, status, created_at) VALUES (?, ?, ?, UNIX_TIMESTAMP(NOW())), (?, ?, ?, ?)
|
||||
// [1 Huan Du 1 2 Charmy Liu 1 1234567890]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user