-
Notifications
You must be signed in to change notification settings - Fork 12
/
named_parameters_table.go
85 lines (75 loc) · 3.57 KB
/
named_parameters_table.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright 2020 The searKing Author. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package sqlx
import (
"fmt"
)
// NamedTableSelectArguments returns columns and arguments for SQL SELECT statements based on columns.
//
// query := fmt.Sprintf("SELECT %s FROM foo", NamedTableSelectArguments("table", "foo", "bar"))
// // SELECT table.foo AS table.foo, table.bar AS table.bar FROM table
//
// query := fmt.Sprintf("SELECT %s FROM table", NamedTableSelectArguments("table", "foo"))
// // SELECT table.foo AS table.foo FROM table
//
// query := fmt.Sprintf("SELECT %s FROM table", NamedTableSelectArguments("table"))
// // SELECT * FROM table
func NamedTableSelectArguments(table string, cols ...string) (arguments string) {
cols = ShrinkEmptyColumns(cols...)
if len(cols) == 0 {
return "*"
}
return JoinTableColumnsWithAs(table, cols...)
}
// NamedTableInsertArgumentsCombined returns columns and arguments together
// for SQL INSERT statements based on columns.
//
// query := fmt.Sprintf("INSERT INTO table %s", NamedTableInsertArgumentsCombined("table", "foo", "bar"))
// // INSERT INTO table (table.foo, table.bar) VALUES (:table.foo, :table.bar)
//
// query := fmt.Sprintf("INSERT INTO table %s", NamedTableInsertArgumentsCombined("table"))
// // INSERT INTO table (foo, bar) DEFAULT VALUES
func NamedTableInsertArgumentsCombined(table string, cols ...string) (arguments string) {
cols = ShrinkEmptyColumns(cols...)
//if len(cols) == 0 {
// // https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sql?view=sql-server-ver15#d-inserting-data-into-a-table-with-columns-that-have-default-values
// return `DEFAULT VALUES`
//}
if len(cols) == 0 {
return `VALUES(DEFAULT)`
}
return fmt.Sprintf(`(%s) VALUES (%s)`, JoinTableColumns(table, cols...), JoinNamedTableValues(table, cols...))
}
// NamedTableInsertArguments returns columns and arguments for SQL INSERT statements based on columns.
//
// columns, arguments := NamedTableInsertArguments("table", "foo", "bar")
// query := fmt.Sprintf("INSERT INTO table (%s) VALUES (%s)", columns, arguments)
// // INSERT INTO table (table.foo, table.bar) VALUES (:table.foo, :table.bar)
//
// Deprecated: Use NamedTableInsertArgumentsCombined instead.
func NamedTableInsertArguments(table string, cols ...string) (columns string, arguments string) {
return JoinTableColumns(table, cols...), JoinNamedTableValues(table, cols...)
}
// NamedTableUpdateArguments returns columns and arguments for SQL UPDATE statements based on columns.
//
// statement := NamedTableUpdateArguments("table", "foo", "bar")
// query := fmt.Sprintf("UPDATE table SET %s", statement)
// // UPDATE foo SET table.foo=:table.foo, table.bar=:table.bar
func NamedTableUpdateArguments(table string, cols ...string) (arguments string) {
return JoinNamedTableColumnsValues(table, cols...)
}
// NamedTableWhereArguments returns conditions for SQL WHERE statements based on columns.
//
// query := fmt.Sprintf("SELECT * FROM table WHERE %s", NamedTableWhereArguments(SqlCompareEqual, SqlOperatorAnd, "table", "foo", "bar"))
// // SELECT * FROM table WHERE table.foo=:table.foo AND table.bar=:table.bar
//
// query := fmt.Sprintf("SELECT * FROM table WHERE %s", NamedTableWhereArguments(SqlCompareEqual, SqlOperatorAnd, "table"))
// // SELECT * FROM table WHERE TRUE
func NamedTableWhereArguments(cmp SqlCompare, operator SqlOperator, table string, cols ...string) (arguments string) {
cols = ShrinkEmptyColumns(cols...)
if len(cols) == 0 {
return "TRUE"
}
return JoinNamedTableCondition(cmp, operator, table, cols...)
}