723 lines
19 KiB
Go
723 lines
19 KiB
Go
//nolint:lll // sql statements are long
|
|
package db_test
|
|
|
|
import (
|
|
dbsql "database/sql"
|
|
"fmt"
|
|
|
|
dbv2 "git.fsdpf.net/go/db/v2"
|
|
_ "git.fsdpf.net/go/db/v2/dialect/mysql"
|
|
"git.fsdpf.net/go/db/v2/exp"
|
|
)
|
|
|
|
func ExampleUpdate_withStruct() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdate_withOmitNilTag() {
|
|
type item struct {
|
|
FirstName string `db:"first_name" ff:"omitnil"`
|
|
LastName string `db:"last_name" ff:"omitnil"`
|
|
Address1 *string `db:"address1" ff:"omitnil"`
|
|
Address2 *string `db:"address2" ff:"omitnil"`
|
|
Address3 *string `db:"address3" ff:"omitnil"`
|
|
}
|
|
address1 := "113 Test Addr"
|
|
var emptyString string
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{
|
|
FirstName: "Test First Name",
|
|
LastName: "",
|
|
Address1: &address1,
|
|
Address2: &emptyString,
|
|
Address3: nil, // will omit nil pointer
|
|
},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address1"='113 Test Addr',"address2"='',"first_name"='Test First Name',"last_name"='' []
|
|
}
|
|
|
|
func ExampleUpdate_withOmitEmptyTag() {
|
|
type item struct {
|
|
FirstName string `db:"first_name" ff:"omitempty"`
|
|
LastName string `db:"last_name" ff:"omitempty"`
|
|
Address1 *string `db:"address1" ff:"omitempty"`
|
|
Address2 *string `db:"address2" ff:"omitempty"`
|
|
Address3 *string `db:"address3" ff:"omitempty"`
|
|
}
|
|
address1 := "114 Test Addr"
|
|
var emptyString string
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{
|
|
FirstName: "Test First Name",
|
|
LastName: "", // will omit zero field
|
|
Address1: &address1,
|
|
Address2: &emptyString,
|
|
Address3: nil, // will omit nil pointer
|
|
},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address1"='114 Test Addr',"address2"='',"first_name"='Test First Name' []
|
|
}
|
|
|
|
func ExampleUpdate_withOmitEmptyTag_valuer() {
|
|
type item struct {
|
|
FirstName dbsql.NullString `db:"first_name" ff:"omitempty"`
|
|
MiddleName dbsql.NullString `db:"middle_name" ff:"omitempty"`
|
|
LastName dbsql.NullString `db:"last_name" ff:"omitempty"`
|
|
Address1 *dbsql.NullString `db:"address1" ff:"omitempty"`
|
|
Address2 *dbsql.NullString `db:"address2" ff:"omitempty"`
|
|
Address3 *dbsql.NullString `db:"address3" ff:"omitempty"`
|
|
Address4 *dbsql.NullString `db:"address4" ff:"omitempty"`
|
|
}
|
|
query, args, _ := dbv2.Update("items").Set(
|
|
item{
|
|
FirstName: dbsql.NullString{Valid: true, String: "Test First Name"},
|
|
MiddleName: dbsql.NullString{Valid: true, String: ""},
|
|
LastName: dbsql.NullString{}, // will omit zero valuer struct
|
|
Address1: &dbsql.NullString{Valid: true, String: "Test Address 1"},
|
|
Address2: &dbsql.NullString{Valid: true, String: ""},
|
|
Address3: &dbsql.NullString{},
|
|
Address4: nil, // will omit nil pointer
|
|
},
|
|
).ToSQL()
|
|
fmt.Println(query, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address1"='Test Address 1',"address2"='',"address3"=NULL,"first_name"='Test First Name',"middle_name"='' []
|
|
}
|
|
|
|
func ExampleUpdate_withDbv2Record() {
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
dbv2.Record{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdate_withMap() {
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
map[string]interface{}{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdate_withExpressions() {
|
|
sql, args, _ := dbv2.Update("items").Set([]exp.UpdateExpression{
|
|
dbv2.C("name").Set("Test"),
|
|
dbv2.C("address").Set("111 Test Addr"),
|
|
}).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "name"='Test',"address"='111 Test Addr' []
|
|
}
|
|
|
|
func ExampleUpdate_withSkipUpdateTag() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name" ff:"skipupdate"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Executor() {
|
|
db := getDB()
|
|
update := db.Update("test_user").
|
|
Where(dbv2.C("first_name").Eq("Bob")).
|
|
Set(dbv2.Record{"first_name": "Bobby"}).
|
|
Executor()
|
|
|
|
if r, err := update.Exec(); err != nil {
|
|
fmt.Println(err.Error())
|
|
} else {
|
|
c, _ := r.RowsAffected()
|
|
fmt.Printf("Updated %d users", c)
|
|
}
|
|
|
|
// Output:
|
|
// Updated 1 users
|
|
}
|
|
|
|
func ExampleUpdateDataset_Executor_returning() {
|
|
db := getDB()
|
|
var ids []int64
|
|
update := db.Update("test_user").
|
|
Set(dbv2.Record{"last_name": "ucon"}).
|
|
Where(dbv2.Ex{"last_name": "Yukon"}).
|
|
Returning("id").
|
|
Executor()
|
|
if err := update.ScanVals(&ids); err != nil {
|
|
fmt.Println(err.Error())
|
|
} else {
|
|
fmt.Printf("Updated users with ids %+v", ids)
|
|
}
|
|
|
|
// Output:
|
|
// Updated users with ids [1 2 3]
|
|
}
|
|
|
|
func ExampleUpdateDataset_Returning() {
|
|
sql, _, _ := dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Returning("id").
|
|
ToSQL()
|
|
fmt.Println(sql)
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Returning(dbv2.T("test").All()).
|
|
ToSQL()
|
|
fmt.Println(sql)
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Returning("a", "b").
|
|
ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "test" SET "foo"='bar' RETURNING "id"
|
|
// UPDATE "test" SET "foo"='bar' RETURNING "test".*
|
|
// UPDATE "test" SET "foo"='bar' RETURNING "a", "b"
|
|
}
|
|
|
|
func ExampleUpdateDataset_With() {
|
|
sql, _, _ := dbv2.Update("test").
|
|
With("some_vals(val)", dbv2.From().Select(dbv2.L("123"))).
|
|
Where(dbv2.C("val").Eq(dbv2.From("some_vals").Select("val"))).
|
|
Set(dbv2.Record{"name": "Test"}).ToSQL()
|
|
fmt.Println(sql)
|
|
|
|
// Output:
|
|
// WITH some_vals(val) AS (SELECT 123) UPDATE "test" SET "name"='Test' WHERE ("val" IN (SELECT "val" FROM "some_vals"))
|
|
}
|
|
|
|
func ExampleUpdateDataset_WithRecursive() {
|
|
sql, _, _ := dbv2.Update("nums").
|
|
WithRecursive("nums(x)", dbv2.From().Select(dbv2.L("1").As("num")).
|
|
UnionAll(dbv2.From("nums").
|
|
Select(dbv2.L("x+1").As("num")).Where(dbv2.C("x").Lt(5)))).
|
|
Set(dbv2.Record{"foo": dbv2.T("nums").Col("num")}).
|
|
ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// WITH RECURSIVE nums(x) AS (SELECT 1 AS "num" UNION ALL (SELECT x+1 AS "num" FROM "nums" WHERE ("x" < 5))) UPDATE "nums" SET "foo"="nums"."num"
|
|
}
|
|
|
|
func ExampleUpdateDataset_Limit() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Limit(10)
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar' LIMIT 10
|
|
}
|
|
|
|
func ExampleUpdateDataset_LimitAll() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
LimitAll()
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar' LIMIT ALL
|
|
}
|
|
|
|
func ExampleUpdateDataset_ClearLimit() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Limit(10)
|
|
sql, _, _ := ds.ClearLimit().ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar'
|
|
}
|
|
|
|
func ExampleUpdateDataset_Order() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Order(dbv2.C("a").Asc())
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar' ORDER BY `a` ASC
|
|
}
|
|
|
|
func ExampleUpdateDataset_OrderAppend() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Order(dbv2.C("a").Asc())
|
|
sql, _, _ := ds.OrderAppend(dbv2.C("b").Desc().NullsLast()).ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar' ORDER BY `a` ASC, `b` DESC NULLS LAST
|
|
}
|
|
|
|
func ExampleUpdateDataset_OrderPrepend() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Order(dbv2.C("a").Asc())
|
|
|
|
sql, _, _ := ds.OrderPrepend(dbv2.C("b").Desc().NullsLast()).ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar' ORDER BY `b` DESC NULLS LAST, `a` ASC
|
|
}
|
|
|
|
func ExampleUpdateDataset_ClearOrder() {
|
|
ds := dbv2.Dialect("mysql").
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Order(dbv2.C("a").Asc())
|
|
sql, _, _ := ds.ClearOrder().ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `test` SET `foo`='bar'
|
|
}
|
|
|
|
func ExampleUpdateDataset_From() {
|
|
ds := dbv2.Update("table_one").
|
|
Set(dbv2.Record{"foo": dbv2.I("table_two.bar")}).
|
|
From("table_two").
|
|
Where(dbv2.Ex{"table_one.id": dbv2.I("table_two.id")})
|
|
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "table_one" SET "foo"="table_two"."bar" FROM "table_two" WHERE ("table_one"."id" = "table_two"."id")
|
|
}
|
|
|
|
func ExampleUpdateDataset_From_postgres() {
|
|
dialect := dbv2.Dialect("postgres")
|
|
|
|
ds := dialect.Update("table_one").
|
|
Set(dbv2.Record{"foo": dbv2.I("table_two.bar")}).
|
|
From("table_two").
|
|
Where(dbv2.Ex{"table_one.id": dbv2.I("table_two.id")})
|
|
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "table_one" SET "foo"="table_two"."bar" FROM "table_two" WHERE ("table_one"."id" = "table_two"."id")
|
|
}
|
|
|
|
func ExampleUpdateDataset_From_mysql() {
|
|
dialect := dbv2.Dialect("mysql")
|
|
|
|
ds := dialect.Update("table_one").
|
|
Set(dbv2.Record{"foo": dbv2.I("table_two.bar")}).
|
|
From("table_two").
|
|
Where(dbv2.Ex{"table_one.id": dbv2.I("table_two.id")})
|
|
|
|
sql, _, _ := ds.ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE `table_one`,`table_two` SET `foo`=`table_two`.`bar` WHERE (`table_one`.`id` = `table_two`.`id`)
|
|
}
|
|
|
|
func ExampleUpdateDataset_Where() {
|
|
// By default everything is anded together
|
|
sql, _, _ := dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(dbv2.Ex{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
}).ToSQL()
|
|
fmt.Println(sql)
|
|
// You can use ExOr to get ORed expressions together
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(dbv2.ExOr{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
}).ToSQL()
|
|
fmt.Println(sql)
|
|
// You can use Or with Ex to Or multiple Ex maps together
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.Or(
|
|
dbv2.Ex{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
},
|
|
dbv2.Ex{
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
},
|
|
),
|
|
).ToSQL()
|
|
fmt.Println(sql)
|
|
// By default everything is anded together
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.C("a").Gt(10),
|
|
dbv2.C("b").Lt(10),
|
|
dbv2.C("c").IsNull(),
|
|
dbv2.C("d").In("a", "b", "c"),
|
|
).ToSQL()
|
|
fmt.Println(sql)
|
|
// You can use a combination of Ors and Ands
|
|
sql, _, _ = dbv2.Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.Or(
|
|
dbv2.C("a").Gt(10),
|
|
dbv2.And(
|
|
dbv2.C("b").Lt(10),
|
|
dbv2.C("c").IsNull(),
|
|
),
|
|
),
|
|
).ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "test" SET "foo"='bar' WHERE (("a" > 10) AND ("b" < 10) AND ("c" IS NULL) AND ("d" IN ('a', 'b', 'c')))
|
|
// UPDATE "test" SET "foo"='bar' WHERE (("a" > 10) OR ("b" < 10) OR ("c" IS NULL) OR ("d" IN ('a', 'b', 'c')))
|
|
// UPDATE "test" SET "foo"='bar' WHERE ((("a" > 10) AND ("b" < 10)) OR (("c" IS NULL) AND ("d" IN ('a', 'b', 'c'))))
|
|
// UPDATE "test" SET "foo"='bar' WHERE (("a" > 10) AND ("b" < 10) AND ("c" IS NULL) AND ("d" IN ('a', 'b', 'c')))
|
|
// UPDATE "test" SET "foo"='bar' WHERE (("a" > 10) OR (("b" < 10) AND ("c" IS NULL)))
|
|
}
|
|
|
|
func ExampleUpdateDataset_Where_prepared() {
|
|
// By default everything is anded together
|
|
sql, args, _ := dbv2.Update("test").
|
|
Prepared(true).
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(dbv2.Ex{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
}).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// You can use ExOr to get ORed expressions together
|
|
sql, args, _ = dbv2.Update("test").Prepared(true).
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(dbv2.ExOr{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
}).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// You can use Or with Ex to Or multiple Ex maps together
|
|
sql, args, _ = dbv2.Update("test").Prepared(true).
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.Or(
|
|
dbv2.Ex{
|
|
"a": dbv2.Op{"gt": 10},
|
|
"b": dbv2.Op{"lt": 10},
|
|
},
|
|
dbv2.Ex{
|
|
"c": nil,
|
|
"d": []string{"a", "b", "c"},
|
|
},
|
|
),
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// By default everything is anded together
|
|
sql, args, _ = dbv2.Update("test").Prepared(true).
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.C("a").Gt(10),
|
|
dbv2.C("b").Lt(10),
|
|
dbv2.C("c").IsNull(),
|
|
dbv2.C("d").In("a", "b", "c"),
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// You can use a combination of Ors and Ands
|
|
sql, args, _ = dbv2.Update("test").Prepared(true).
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.Or(
|
|
dbv2.C("a").Gt(10),
|
|
dbv2.And(
|
|
dbv2.C("b").Lt(10),
|
|
dbv2.C("c").IsNull(),
|
|
),
|
|
),
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// Output:
|
|
// UPDATE "test" SET "foo"=? WHERE (("a" > ?) AND ("b" < ?) AND ("c" IS NULL) AND ("d" IN (?, ?, ?))) [bar 10 10 a b c]
|
|
// UPDATE "test" SET "foo"=? WHERE (("a" > ?) OR ("b" < ?) OR ("c" IS NULL) OR ("d" IN (?, ?, ?))) [bar 10 10 a b c]
|
|
// UPDATE "test" SET "foo"=? WHERE ((("a" > ?) AND ("b" < ?)) OR (("c" IS NULL) AND ("d" IN (?, ?, ?)))) [bar 10 10 a b c]
|
|
// UPDATE "test" SET "foo"=? WHERE (("a" > ?) AND ("b" < ?) AND ("c" IS NULL) AND ("d" IN (?, ?, ?))) [bar 10 10 a b c]
|
|
// UPDATE "test" SET "foo"=? WHERE (("a" > ?) OR (("b" < ?) AND ("c" IS NULL))) [bar 10 10]
|
|
}
|
|
|
|
func ExampleUpdateDataset_ClearWhere() {
|
|
ds := dbv2.
|
|
Update("test").
|
|
Set(dbv2.Record{"foo": "bar"}).
|
|
Where(
|
|
dbv2.Or(
|
|
dbv2.C("a").Gt(10),
|
|
dbv2.And(
|
|
dbv2.C("b").Lt(10),
|
|
dbv2.C("c").IsNull(),
|
|
),
|
|
),
|
|
)
|
|
sql, _, _ := ds.ClearWhere().ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "test" SET "foo"='bar'
|
|
}
|
|
|
|
func ExampleUpdateDataset_Table() {
|
|
ds := dbv2.Update("test")
|
|
sql, _, _ := ds.Table("test2").Set(dbv2.Record{"foo": "bar"}).ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "test2" SET "foo"='bar'
|
|
}
|
|
|
|
func ExampleUpdateDataset_Table_aliased() {
|
|
ds := dbv2.Update("test")
|
|
sql, _, _ := ds.Table(dbv2.T("test").As("t")).Set(dbv2.Record{"foo": "bar"}).ToSQL()
|
|
fmt.Println(sql)
|
|
// Output:
|
|
// UPDATE "test" AS "t" SET "foo"='bar'
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
sql, args, _ = dbv2.Update("items").Set(
|
|
dbv2.Record{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
sql, args, _ = dbv2.Update("items").Set(
|
|
map[string]interface{}{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_struct() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_dbv2Record() {
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
dbv2.Record{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_map() {
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
map[string]interface{}{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withSkipUpdateTag() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name" ff:"skipupdate"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withDefaultIfEmptyTag() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name" ff:"defaultifempty"`
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
sql, args, _ = dbv2.Update("items").Set(
|
|
item{Name: "Bob Yukon", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"=DEFAULT []
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Bob Yukon' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withNoTags() {
|
|
type item struct {
|
|
Address string
|
|
Name string
|
|
}
|
|
sql, args, _ := dbv2.Update("items").Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"='111 Test Addr',"name"='Test' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withEmbeddedStruct() {
|
|
type Address struct {
|
|
Street string `db:"address_street"`
|
|
State string `db:"address_state"`
|
|
}
|
|
type User struct {
|
|
Address
|
|
FirstName string
|
|
LastName string
|
|
}
|
|
ds := dbv2.Update("user").Set(
|
|
User{Address: Address{Street: "111 Street", State: "NY"}, FirstName: "Greg", LastName: "Farley"},
|
|
)
|
|
updateSQL, args, _ := ds.ToSQL()
|
|
fmt.Println(updateSQL, args)
|
|
|
|
// Output:
|
|
// UPDATE "user" SET "address_state"='NY',"address_street"='111 Street',"firstname"='Greg',"lastname"='Farley' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withIgnoredEmbedded() {
|
|
type Address struct {
|
|
Street string
|
|
State string
|
|
}
|
|
type User struct {
|
|
Address `db:"-"`
|
|
FirstName string
|
|
LastName string
|
|
}
|
|
ds := dbv2.Update("user").Set(
|
|
User{Address: Address{Street: "111 Street", State: "NY"}, FirstName: "Greg", LastName: "Farley"},
|
|
)
|
|
updateSQL, args, _ := ds.ToSQL()
|
|
fmt.Println(updateSQL, args)
|
|
|
|
// Output:
|
|
// UPDATE "user" SET "firstname"='Greg',"lastname"='Farley' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_Set_withNilEmbeddedPointer() {
|
|
type Address struct {
|
|
Street string
|
|
State string
|
|
}
|
|
type User struct {
|
|
*Address
|
|
FirstName string
|
|
LastName string
|
|
}
|
|
ds := dbv2.Update("user").Set(
|
|
User{FirstName: "Greg", LastName: "Farley"},
|
|
)
|
|
updateSQL, args, _ := ds.ToSQL()
|
|
fmt.Println(updateSQL, args)
|
|
|
|
// Output:
|
|
// UPDATE "user" SET "firstname"='Greg',"lastname"='Farley' []
|
|
}
|
|
|
|
func ExampleUpdateDataset_ToSQL_prepared() {
|
|
type item struct {
|
|
Address string `db:"address"`
|
|
Name string `db:"name"`
|
|
}
|
|
|
|
sql, args, _ := dbv2.From("items").Prepared(true).Update().Set(
|
|
item{Name: "Test", Address: "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
sql, args, _ = dbv2.From("items").Prepared(true).Update().Set(
|
|
dbv2.Record{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
sql, args, _ = dbv2.From("items").Prepared(true).Update().Set(
|
|
map[string]interface{}{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
// Output:
|
|
// UPDATE "items" SET "address"=?,"name"=? [111 Test Addr Test]
|
|
// UPDATE "items" SET "address"=?,"name"=? [111 Test Addr Test]
|
|
// UPDATE "items" SET "address"=?,"name"=? [111 Test Addr Test]
|
|
}
|
|
|
|
func ExampleUpdateDataset_Prepared() {
|
|
sql, args, _ := dbv2.Update("items").Prepared(true).Set(
|
|
dbv2.Record{"name": "Test", "address": "111 Test Addr"},
|
|
).ToSQL()
|
|
fmt.Println(sql, args)
|
|
|
|
// Output:
|
|
// UPDATE "items" SET "address"=?,"name"=? [111 Test Addr Test]
|
|
}
|