aboutsummaryrefslogtreecommitdiff
path: root/lib/sql
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2024-01-25 21:07:27 +0700
committerShulhan <ms@kilabit.info>2024-01-25 21:09:00 +0700
commitc35eafe48695c6b8de34ebd6b64c4afa28940f34 (patch)
tree20298587421ef6527e4e808baff36d239478fce0 /lib/sql
parentf9b7b2734bb52da14bf908a89a1c75b71d51471d (diff)
downloadpakakeh.go-c35eafe48695c6b8de34ebd6b64c4afa28940f34.tar.xz
lib/sql: add method WhereHolder to Meta type
The WhereHolder method generate string of holder, for example "$1,$2,...", based on number of item added with [Meta.AddWhere]. Similar to method Holders but for where condition.
Diffstat (limited to 'lib/sql')
-rw-r--r--lib/sql/meta.go18
-rw-r--r--lib/sql/meta_example_test.go20
2 files changed, 38 insertions, 0 deletions
diff --git a/lib/sql/meta.go b/lib/sql/meta.go
index 7ce51f67..db0e2aed 100644
--- a/lib/sql/meta.go
+++ b/lib/sql/meta.go
@@ -25,6 +25,10 @@ type Meta struct {
// select.
ListValue []any
+ // ListWhereHolder contains list of column holder, as in "?" or
+ // "$x", depends on driver; expanded by calling AddWhere.
+ ListWhereHolder []string
+
// ListWhereValue contains list of values for where condition.
ListWhereValue []any
}
@@ -55,6 +59,13 @@ func (meta *Meta) Add(colName string, val any) {
// It return the length of ListWhereValue in list after addition.
func (meta *Meta) AddWhere(val any) int {
meta.ListWhereValue = append(meta.ListWhereValue, val)
+
+ if meta.driver == DriverNamePostgres {
+ meta.ListWhereHolder = append(meta.ListWhereHolder, fmt.Sprintf(`$%d`, len(meta.ListWhereValue)))
+ } else {
+ meta.ListWhereHolder = append(meta.ListWhereHolder, DefaultPlaceHolder)
+ }
+
return len(meta.ListWhereValue)
}
@@ -82,3 +93,10 @@ func (meta *Meta) UpdateFields() string {
}
return sb.String()
}
+
+// WhereHolders generate string of holder, for example "$1,$2, ...", based
+// on number of item added with [Meta.AddWhere].
+// Similar to method Holders but for where condition.
+func (meta *Meta) WhereHolders() string {
+ return strings.Join(meta.ListWhereHolder, `,`)
+}
diff --git a/lib/sql/meta_example_test.go b/lib/sql/meta_example_test.go
index 8f85b671..499a79fd 100644
--- a/lib/sql/meta_example_test.go
+++ b/lib/sql/meta_example_test.go
@@ -71,7 +71,27 @@ func ExampleMeta_AddWhere() {
idx = meta.AddWhere(vals[1])
fmt.Println(idx, meta.ListWhereValue)
+
// Output:
// 1 [1000]
// 2 [1000 name]
}
+
+func ExampleMeta_WhereHolders() {
+ var (
+ meta = sql.NewMeta(sql.DriverNamePostgres)
+ vals = []any{
+ int(1000),
+ string(`name`),
+ }
+ v any
+ )
+
+ for _, v = range vals {
+ meta.AddWhere(v)
+ }
+ fmt.Println(meta.WhereHolders())
+
+ // Output:
+ // $1,$2
+}