diff options
| author | Shulhan <ms@kilabit.info> | 2024-01-25 21:07:27 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2024-01-25 21:09:00 +0700 |
| commit | c35eafe48695c6b8de34ebd6b64c4afa28940f34 (patch) | |
| tree | 20298587421ef6527e4e808baff36d239478fce0 /lib/sql | |
| parent | f9b7b2734bb52da14bf908a89a1c75b71d51471d (diff) | |
| download | pakakeh.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.go | 18 | ||||
| -rw-r--r-- | lib/sql/meta_example_test.go | 20 |
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 +} |
