// Copyright 2018 Huan Du. All rights reserved. // Licensed under the MIT license that can be found in the LICENSE file. package sqlbuilder import ( "fmt" "testing" "github.com/huandu/go-assert" ) func ExampleDeleteFrom() { sql := DeleteFrom("demo.user"). Where( "status = 1", ). Limit(10). String() fmt.Println(sql) // Output: // DELETE FROM demo.user WHERE status = 1 LIMIT 10 } func ExampleDeleteBuilder() { db := NewDeleteBuilder() db.DeleteFrom("demo.user") db.Where( db.GreaterThan("id", 1234), db.Like("name", "%Du"), db.Or( db.IsNull("id_card"), db.In("status", 1, 2, 5), ), "modified_at > created_at + "+db.Var(86400), // It's allowed to write arbitrary SQL. ) sql, args := db.Build() fmt.Println(sql) fmt.Println(args) // Output: // DELETE FROM demo.user WHERE id > ? AND name LIKE ? AND (id_card IS NULL OR status IN (?, ?, ?)) AND modified_at > created_at + ? // [1234 %Du 1 2 5 86400] } func ExampleDeleteBuilder_SQL() { db := NewDeleteBuilder() db.SQL(`/* before */`) db.DeleteFrom("demo.user") db.SQL("PARTITION (p0)") db.Where( db.GreaterThan("id", 1234), ) db.SQL("/* after where */") db.OrderBy("id") db.SQL("/* after order by */") db.Limit(10) db.SQL("/* after limit */") sql, args := db.Build() fmt.Println(sql) fmt.Println(args) // Output: // /* before */ DELETE FROM demo.user PARTITION (p0) WHERE id > ? /* after where */ ORDER BY id /* after order by */ LIMIT 10 /* after limit */ // [1234] } func ExampleDeleteBuilder_With() { sql := With( CTEQuery("users").As( Select("id", "name").From("users").Where("name IS NULL"), ), ).DeleteFrom("orders").Where( "users.id = orders.user_id", ).String() fmt.Println(sql) // Output: // WITH users AS (SELECT id, name FROM users WHERE name IS NULL) DELETE FROM orders WHERE users.id = orders.user_id } func TestDeleteBuilderGetFlavor(t *testing.T) { a := assert.New(t) db := newDeleteBuilder() db.SetFlavor(PostgreSQL) flavor := db.Flavor() a.Equal(PostgreSQL, flavor) dbClick := ClickHouse.NewDeleteBuilder() flavor = dbClick.Flavor() a.Equal(ClickHouse, flavor) }