//nolint:lll // SQL statements are long package db_test import ( "database/sql" "fmt" "time" dbv2 "git.fsdpf.net/go/db/v2" _ "git.fsdpf.net/go/db/v2/dialect/postgres" ) func ExampleInsert_dbv2Record() { ds := dbv2.Insert("user").Rows( dbv2.Record{"first_name": "Greg", "last_name": "Farley"}, dbv2.Record{"first_name": "Jimmy", "last_name": "Stewart"}, dbv2.Record{"first_name": "Jeff", "last_name": "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsert_map() { ds := dbv2.Insert("user").Rows( map[string]interface{}{"first_name": "Greg", "last_name": "Farley"}, map[string]interface{}{"first_name": "Jimmy", "last_name": "Stewart"}, map[string]interface{}{"first_name": "Jeff", "last_name": "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsert_struct() { type User struct { FirstName string `db:"first_name"` LastName string `db:"last_name"` } ds := dbv2.Insert("user").Rows( User{FirstName: "Greg", LastName: "Farley"}, User{FirstName: "Jimmy", LastName: "Stewart"}, User{FirstName: "Jeff", LastName: "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsert_prepared() { ds := dbv2.Insert("user").Prepared(true).Rows( dbv2.Record{"first_name": "Greg", "last_name": "Farley"}, dbv2.Record{"first_name": "Jimmy", "last_name": "Stewart"}, dbv2.Record{"first_name": "Jeff", "last_name": "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") VALUES (?, ?), (?, ?), (?, ?) [Greg Farley Jimmy Stewart Jeff Jeffers] } func ExampleInsert_fromQuery() { ds := dbv2.Insert("user").Prepared(true). FromQuery(dbv2.From("other_table")) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" SELECT * FROM "other_table" [] } func ExampleInsert_fromQueryWithCols() { ds := dbv2.Insert("user").Prepared(true). Cols("first_name", "last_name"). FromQuery(dbv2.From("other_table").Select("fn", "ln")) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") SELECT "fn", "ln" FROM "other_table" [] } func ExampleInsert_colsAndVals() { ds := dbv2.Insert("user"). Cols("first_name", "last_name"). Vals( dbv2.Vals{"Greg", "Farley"}, dbv2.Vals{"Jimmy", "Stewart"}, dbv2.Vals{"Jeff", "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("first_name", "last_name") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsertDataset_Executor_withRecord() { db := getDB() insert := db.Insert("test_user").Rows( dbv2.Record{"first_name": "Jed", "last_name": "Riley", "created": time.Now()}, ).Executor() if _, err := insert.Exec(); err != nil { fmt.Println(err.Error()) } else { fmt.Println("Inserted 1 user") } users := []dbv2.Record{ {"first_name": "Greg", "last_name": "Farley", "created": time.Now()}, {"first_name": "Jimmy", "last_name": "Stewart", "created": time.Now()}, {"first_name": "Jeff", "last_name": "Jeffers", "created": time.Now()}, } if _, err := db.Insert("test_user").Rows(users).Executor().Exec(); err != nil { fmt.Println(err.Error()) } else { fmt.Printf("Inserted %d users", len(users)) } // Output: // Inserted 1 user // Inserted 3 users } func ExampleInsertDataset_Executor_recordReturning() { db := getDB() type User struct { ID sql.NullInt64 `db:"id"` FirstName string `db:"first_name"` LastName string `db:"last_name"` Created time.Time `db:"created"` } insert := db.Insert("test_user").Returning(dbv2.C("id")).Rows( dbv2.Record{"first_name": "Jed", "last_name": "Riley", "created": time.Now()}, ).Executor() var id int64 if _, err := insert.ScanVal(&id); err != nil { fmt.Println(err.Error()) } else { fmt.Printf("Inserted 1 user id:=%d\n", id) } insert = db.Insert("test_user").Returning(dbv2.Star()).Rows([]dbv2.Record{ {"first_name": "Greg", "last_name": "Farley", "created": time.Now()}, {"first_name": "Jimmy", "last_name": "Stewart", "created": time.Now()}, {"first_name": "Jeff", "last_name": "Jeffers", "created": time.Now()}, }).Executor() var insertedUsers []User if err := insert.ScanStructs(&insertedUsers); err != nil { fmt.Println(err.Error()) } else { for _, u := range insertedUsers { fmt.Printf("Inserted user: [ID=%d], [FirstName=%+s] [LastName=%s]\n", u.ID.Int64, u.FirstName, u.LastName) } } // Output: // Inserted 1 user id:=5 // Inserted user: [ID=6], [FirstName=Greg] [LastName=Farley] // Inserted user: [ID=7], [FirstName=Jimmy] [LastName=Stewart] // Inserted user: [ID=8], [FirstName=Jeff] [LastName=Jeffers] } func ExampleInsertDataset_Executor_scanStructs() { db := getDB() type User struct { ID sql.NullInt64 `db:"id" ff:"skipinsert"` FirstName string `db:"first_name"` LastName string `db:"last_name"` Created time.Time `db:"created"` } insert := db.Insert("test_user").Returning("id").Rows( User{FirstName: "Jed", LastName: "Riley"}, ).Executor() var id int64 if _, err := insert.ScanVal(&id); err != nil { fmt.Println(err.Error()) } else { fmt.Printf("Inserted 1 user id:=%d\n", id) } insert = db.Insert("test_user").Returning(dbv2.Star()).Rows([]User{ {FirstName: "Greg", LastName: "Farley", Created: time.Now()}, {FirstName: "Jimmy", LastName: "Stewart", Created: time.Now()}, {FirstName: "Jeff", LastName: "Jeffers", Created: time.Now()}, }).Executor() var insertedUsers []User if err := insert.ScanStructs(&insertedUsers); err != nil { fmt.Println(err.Error()) } else { for _, u := range insertedUsers { fmt.Printf("Inserted user: [ID=%d], [FirstName=%+s] [LastName=%s]\n", u.ID.Int64, u.FirstName, u.LastName) } } // Output: // Inserted 1 user id:=5 // Inserted user: [ID=6], [FirstName=Greg] [LastName=Farley] // Inserted user: [ID=7], [FirstName=Jimmy] [LastName=Stewart] // Inserted user: [ID=8], [FirstName=Jeff] [LastName=Jeffers] } func ExampleInsertDataset_FromQuery() { insertSQL, _, _ := dbv2.Insert("test"). FromQuery(dbv2.From("test2").Where(dbv2.C("age").Gt(10))). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" SELECT * FROM "test2" WHERE ("age" > 10) } func ExampleInsertDataset_ToSQL() { type item struct { ID uint32 `db:"id" ff:"skipinsert"` Address string `db:"address"` Name string `db:"name"` } insertSQL, args, _ := dbv2.Insert("items").Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items").Rows( dbv2.Record{"name": "Test1", "address": "111 Test Addr"}, dbv2.Record{"name": "Test2", "address": "112 Test Addr"}, ).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items").Rows( []item{ {Name: "Test1", Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.From("items").Insert().Rows( []dbv2.Record{ {"name": "Test1", "address": "111 Test Addr"}, {"name": "Test2", "address": "112 Test Addr"}, }).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] } func ExampleInsertDataset_Prepared() { type item struct { ID uint32 `db:"id" ff:"skipinsert"` Address string `db:"address"` Name string `db:"name"` } insertSQL, args, _ := dbv2.Insert("items").Prepared(true).Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items").Prepared(true).Rows( dbv2.Record{"name": "Test1", "address": "111 Test Addr"}, dbv2.Record{"name": "Test2", "address": "112 Test Addr"}, ).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items").Prepared(true).Rows( []item{ {Name: "Test1", Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }).ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items").Prepared(true).Rows( []dbv2.Record{ {"name": "Test1", "address": "111 Test Addr"}, {"name": "Test2", "address": "112 Test Addr"}, }).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES (?, ?), (?, ?) [111 Test Addr Test1 112 Test Addr Test2] // INSERT INTO "items" ("address", "name") VALUES (?, ?), (?, ?) [111 Test Addr Test1 112 Test Addr Test2] // INSERT INTO "items" ("address", "name") VALUES (?, ?), (?, ?) [111 Test Addr Test1 112 Test Addr Test2] // INSERT INTO "items" ("address", "name") VALUES (?, ?), (?, ?) [111 Test Addr Test1 112 Test Addr Test2] } func ExampleInsertDataset_ClearRows() { type item struct { ID uint32 `ff:"skipinsert"` Address string Name string } ds := dbv2.Insert("items").Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ) insertSQL, args, _ := ds.ClearRows().ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" DEFAULT VALUES [] } func ExampleInsertDataset_Rows_withNoDbTag() { type item struct { ID uint32 `ff:"skipinsert"` Address string Name string } insertSQL, args, _ := dbv2.Insert("items"). Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ). ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items"). Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ). ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items"). Rows([]item{ {Name: "Test1", Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }). ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] } func ExampleInsertDataset_Rows_withDbv2SkipInsertTag() { type item struct { ID uint32 `ff:"skipinsert"` Address string Name string `ff:"skipinsert"` } insertSQL, args, _ := dbv2.Insert("items"). Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ). ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items"). Rows([]item{ {Name: "Test1", Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }). ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address") VALUES ('111 Test Addr'), ('112 Test Addr') [] // INSERT INTO "items" ("address") VALUES ('111 Test Addr'), ('112 Test Addr') [] } func ExampleInsertDataset_Rows_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 := "111 Test Addr" var emptyString string i := item{ FirstName: "Test First Name", LastName: "", Address1: &address1, Address2: &emptyString, Address3: nil, // will omit nil pointer } insertSQL, args, _ := dbv2.Insert("items").Rows(i).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address1", "address2", "first_name", "last_name") VALUES ('111 Test Addr', '', 'Test First Name', '') [] } func ExampleInsertDataset_Rows_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 := "112 Test Addr" var emptyString string i := item{ FirstName: "Test First Name", LastName: "", // will omit zero field Address1: &address1, Address2: &emptyString, Address3: nil, // will omit nil pointer } insertSQL, args, _ := dbv2.Insert("items").Rows(i).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address1", "address2", "first_name") VALUES ('112 Test Addr', '', 'Test First Name') [] } func ExampleInsertDataset_Rows_withOmitEmptyTag_Valuer() { type item struct { FirstName sql.NullString `db:"first_name" ff:"omitempty"` MiddleName sql.NullString `db:"middle_name" ff:"omitempty"` LastName sql.NullString `db:"last_name" ff:"omitempty"` Address1 *sql.NullString `db:"address1" ff:"omitempty"` Address2 *sql.NullString `db:"address2" ff:"omitempty"` Address3 *sql.NullString `db:"address3" ff:"omitempty"` Address4 *sql.NullString `db:"address4" ff:"omitempty"` } i := item{ FirstName: sql.NullString{Valid: true, String: "Test First Name"}, MiddleName: sql.NullString{Valid: true, String: ""}, LastName: sql.NullString{}, // will omit zero valuer struct Address1: &sql.NullString{Valid: true, String: "Test Address 1"}, Address2: &sql.NullString{Valid: true, String: ""}, Address3: &sql.NullString{}, Address4: nil, // will omit nil pointer } insertSQL, args, _ := dbv2.Insert("items").Rows(i).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address1", "address2", "address3", "first_name", "middle_name") VALUES ('Test Address 1', '', NULL, 'Test First Name', '') [] } func ExampleInsertDataset_Rows_withDbv2DefaultIfEmptyTag() { type item struct { ID uint32 `ff:"skipinsert"` Address string Name string `ff:"defaultifempty"` } insertSQL, args, _ := dbv2.Insert("items"). Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Address: "112 Test Addr"}, ). ToSQL() fmt.Println(insertSQL, args) insertSQL, args, _ = dbv2.Insert("items"). Rows([]item{ {Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }). ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', DEFAULT) [] // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', DEFAULT), ('112 Test Addr', 'Test2') [] } func ExampleInsertDataset_Rows_withEmbeddedStruct() { type Address struct { Street string `db:"address_street"` State string `db:"address_state"` } type User struct { Address FirstName string LastName string } ds := dbv2.Insert("user").Rows( User{Address: Address{Street: "111 Street", State: "NY"}, FirstName: "Greg", LastName: "Farley"}, User{Address: Address{Street: "211 Street", State: "NY"}, FirstName: "Jimmy", LastName: "Stewart"}, User{Address: Address{Street: "311 Street", State: "NY"}, FirstName: "Jeff", LastName: "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("address_state", "address_street", "firstname", "lastname") VALUES ('NY', '111 Street', 'Greg', 'Farley'), ('NY', '211 Street', 'Jimmy', 'Stewart'), ('NY', '311 Street', 'Jeff', 'Jeffers') [] } func ExampleInsertDataset_Rows_withIgnoredEmbedded() { type Address struct { Street string State string } type User struct { Address `db:"-"` FirstName string LastName string } ds := dbv2.Insert("user").Rows( User{Address: Address{Street: "111 Street", State: "NY"}, FirstName: "Greg", LastName: "Farley"}, User{Address: Address{Street: "211 Street", State: "NY"}, FirstName: "Jimmy", LastName: "Stewart"}, User{Address: Address{Street: "311 Street", State: "NY"}, FirstName: "Jeff", LastName: "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("firstname", "lastname") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsertDataset_Rows_withNilEmbeddedPointer() { type Address struct { Street string State string } type User struct { *Address FirstName string LastName string } ds := dbv2.Insert("user").Rows( User{FirstName: "Greg", LastName: "Farley"}, User{FirstName: "Jimmy", LastName: "Stewart"}, User{FirstName: "Jeff", LastName: "Jeffers"}, ) insertSQL, args, _ := ds.ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "user" ("firstname", "lastname") VALUES ('Greg', 'Farley'), ('Jimmy', 'Stewart'), ('Jeff', 'Jeffers') [] } func ExampleInsertDataset_ClearOnConflict() { type item struct { ID uint32 `db:"id" ff:"skipinsert"` Address string `db:"address"` Name string `db:"name"` } ds := dbv2.Insert("items").OnConflict(dbv2.DoNothing()) insertSQL, args, _ := ds.ClearOnConflict().Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') [] } func ExampleInsertDataset_OnConflict_doNothing() { type item struct { ID uint32 `db:"id" ff:"skipinsert"` Address string `db:"address"` Name string `db:"name"` } insertSQL, args, _ := dbv2.Insert("items").Rows( item{Name: "Test1", Address: "111 Test Addr"}, item{Name: "Test2", Address: "112 Test Addr"}, ).OnConflict(dbv2.DoNothing()).ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') ON CONFLICT DO NOTHING [] } func ExampleInsertDataset_OnConflict_doUpdate() { insertSQL, args, _ := dbv2.Insert("items"). Rows( dbv2.Record{"name": "Test1", "address": "111 Test Addr"}, dbv2.Record{"name": "Test2", "address": "112 Test Addr"}, ). OnConflict(dbv2.DoUpdate("key", dbv2.Record{"updated": dbv2.L("NOW()")})). ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') ON CONFLICT (key) DO UPDATE SET "updated"=NOW() [] } func ExampleInsertDataset_OnConflict_doUpdateWithWhere() { type item struct { ID uint32 `db:"id" ff:"skipinsert"` Address string `db:"address"` Name string `db:"name"` } insertSQL, args, _ := dbv2.Insert("items"). Rows([]item{ {Name: "Test1", Address: "111 Test Addr"}, {Name: "Test2", Address: "112 Test Addr"}, }). OnConflict(dbv2.DoUpdate( "key", dbv2.Record{"updated": dbv2.L("NOW()")}).Where(dbv2.C("allow_update").IsTrue()), ). ToSQL() fmt.Println(insertSQL, args) // Output: // INSERT INTO "items" ("address", "name") VALUES ('111 Test Addr', 'Test1'), ('112 Test Addr', 'Test2') ON CONFLICT (key) DO UPDATE SET "updated"=NOW() WHERE ("allow_update" IS TRUE) [] } func ExampleInsertDataset_Returning() { insertSQL, _, _ := dbv2.Insert("test"). Returning("id"). Rows(dbv2.Record{"a": "a", "b": "b"}). ToSQL() fmt.Println(insertSQL) insertSQL, _, _ = dbv2.Insert("test"). Returning(dbv2.T("test").All()). Rows(dbv2.Record{"a": "a", "b": "b"}). ToSQL() fmt.Println(insertSQL) insertSQL, _, _ = dbv2.Insert("test"). Returning("a", "b"). Rows(dbv2.Record{"a": "a", "b": "b"}). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("a", "b") VALUES ('a', 'b') RETURNING "id" // INSERT INTO "test" ("a", "b") VALUES ('a', 'b') RETURNING "test".* // INSERT INTO "test" ("a", "b") VALUES ('a', 'b') RETURNING "a", "b" } func ExampleInsertDataset_With() { insertSQL, _, _ := dbv2.Insert("foo"). With("other", dbv2.From("bar").Where(dbv2.C("id").Gt(10))). FromQuery(dbv2.From("other")). ToSQL() fmt.Println(insertSQL) // Output: // WITH other AS (SELECT * FROM "bar" WHERE ("id" > 10)) INSERT INTO "foo" SELECT * FROM "other" } func ExampleInsertDataset_WithRecursive() { insertSQL, _, _ := dbv2.Insert("num_count"). WithRecursive("nums(x)", dbv2.From().Select(dbv2.L("1")). UnionAll(dbv2.From("nums"). Select(dbv2.L("x+1")).Where(dbv2.C("x").Lt(5))), ). FromQuery(dbv2.From("nums")). ToSQL() fmt.Println(insertSQL) // Output: // WITH RECURSIVE nums(x) AS (SELECT 1 UNION ALL (SELECT x+1 FROM "nums" WHERE ("x" < 5))) INSERT INTO "num_count" SELECT * FROM "nums" } func ExampleInsertDataset_Into() { ds := dbv2.Insert("test") insertSQL, _, _ := ds.Into("test2").Rows(dbv2.Record{"first_name": "bob", "last_name": "yukon"}).ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test2" ("first_name", "last_name") VALUES ('bob', 'yukon') } func ExampleInsertDataset_Into_aliased() { ds := dbv2.Insert("test") insertSQL, _, _ := ds. Into(dbv2.T("test").As("t")). Rows(dbv2.Record{"first_name": "bob", "last_name": "yukon"}). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" AS "t" ("first_name", "last_name") VALUES ('bob', 'yukon') } func ExampleInsertDataset_Cols() { insertSQL, _, _ := dbv2.Insert("test"). Cols("a", "b", "c"). Vals( []interface{}{"a1", "b1", "c1"}, []interface{}{"a2", "b1", "c1"}, []interface{}{"a3", "b1", "c1"}, ). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("a", "b", "c") VALUES ('a1', 'b1', 'c1'), ('a2', 'b1', 'c1'), ('a3', 'b1', 'c1') } func ExampleInsertDataset_Cols_withFromQuery() { insertSQL, _, _ := dbv2.Insert("test"). Cols("a", "b", "c"). FromQuery(dbv2.From("foo").Select("d", "e", "f")). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("a", "b", "c") SELECT "d", "e", "f" FROM "foo" } func ExampleInsertDataset_ColsAppend() { insertSQL, _, _ := dbv2.Insert("test"). Cols("a", "b"). ColsAppend("c"). Vals( []interface{}{"a1", "b1", "c1"}, []interface{}{"a2", "b1", "c1"}, []interface{}{"a3", "b1", "c1"}, ). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("a", "b", "c") VALUES ('a1', 'b1', 'c1'), ('a2', 'b1', 'c1'), ('a3', 'b1', 'c1') } func ExampleInsertDataset_ClearCols() { ds := dbv2.Insert("test").Cols("a", "b", "c") insertSQL, _, _ := ds.ClearCols().Cols("other_a", "other_b", "other_c"). FromQuery(dbv2.From("foo").Select("d", "e", "f")). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("other_a", "other_b", "other_c") SELECT "d", "e", "f" FROM "foo" } func ExampleInsertDataset_Vals() { insertSQL, _, _ := dbv2.Insert("test"). Cols("a", "b", "c"). Vals( []interface{}{"a1", "b1", "c1"}, []interface{}{"a2", "b2", "c2"}, []interface{}{"a3", "b3", "c3"}, ). ToSQL() fmt.Println(insertSQL) insertSQL, _, _ = dbv2.Insert("test"). Cols("a", "b", "c"). Vals([]interface{}{"a1", "b1", "c1"}). Vals([]interface{}{"a2", "b2", "c2"}). Vals([]interface{}{"a3", "b3", "c3"}). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" ("a", "b", "c") VALUES ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ('a3', 'b3', 'c3') // INSERT INTO "test" ("a", "b", "c") VALUES ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ('a3', 'b3', 'c3') } func ExampleInsertDataset_ClearVals() { insertSQL, _, _ := dbv2.Insert("test"). Cols("a", "b", "c"). Vals( []interface{}{"a1", "b1", "c1"}, []interface{}{"a2", "b1", "c1"}, []interface{}{"a3", "b1", "c1"}, ). ClearVals(). ToSQL() fmt.Println(insertSQL) insertSQL, _, _ = dbv2.Insert("test"). Cols("a", "b", "c"). Vals([]interface{}{"a1", "b1", "c1"}). Vals([]interface{}{"a2", "b2", "c2"}). Vals([]interface{}{"a3", "b3", "c3"}). ClearVals(). ToSQL() fmt.Println(insertSQL) // Output: // INSERT INTO "test" DEFAULT VALUES // INSERT INTO "test" DEFAULT VALUES }