From b91b9cf639999e852db19ca41762b58beae13876 Mon Sep 17 00:00:00 2001 From: Vladimir Barsukov Date: Sat, 8 Feb 2025 18:22:02 +0200 Subject: [PATCH] fix --- zdb/pool.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/zdb/pool.go b/zdb/pool.go index a33846d..0e04d32 100644 --- a/zdb/pool.go +++ b/zdb/pool.go @@ -421,9 +421,27 @@ func (d *Pool) prepare(sql string, param map[string]any) (string, []any) { default: switch reflect.TypeOf(v).Kind() { case reflect.Slice, reflect.Array: + + //log.Printf("Kind: %v", fmt.Sprintf("%v", v)) + //log.Printf("Kind2: %v", reflect.TypeOf(v).Elem().Kind()) + //log.Printf("TAIL: %v", reflect.TypeOf(v).Elem().Kind().String()) + + tail := "" + if !strings.Contains(sql, ":"+n+":::") { + switch reflect.TypeOf(v).Elem().Kind().String() { + case "string": + tail = "::text[]" + case "bool": + tail = "::bool[]" + default: + tail = "::int[]" + } + } + idx++ - sql = strings.ReplaceAll(sql, ":"+n+":", fmt.Sprintf("$%d", idx)) - args = append(args, v) + sql = strings.ReplaceAll(sql, ":"+n+":", fmt.Sprintf("$%d%s", idx, tail)) + args = append(args, "{"+strings.Trim(strings.Join(strings.Split(fmt.Sprint(v), " "), ","), "[]")+"}") + default: idx++ sql = strings.ReplaceAll(sql, ":"+n+":", fmt.Sprintf("$%d", idx)) @@ -434,20 +452,20 @@ func (d *Pool) prepare(sql string, param map[string]any) (string, []any) { } if d.Debug { - d.logger.Printf("--SQL\n%v\n--SQL;\n--ARG\n%+v\n--ARG;", sql, param) + d.logger.Printf("\n---SQL_START---\n%v\n--SQL_END---\n\n---ARGS_START---\n%+v\n---ARGS_END---", sql, args) } else if v, ok := param["_debug"]; ok { switch vv := v.(type) { case bool: if vv { - d.logger.Printf("--SQL\n%v\n--SQL;\n--ARG\n%+v\n--ARG;", sql, param) + d.logger.Printf("\n---SQL_START---\n%v\n--SQL_END---\n\n---ARGS_START---\n%+v\n---ARGS_END---", sql, args) } case int, uint: if vv == 1 { - d.logger.Printf("--SQL\n%v\n--SQL;\n--ARG\n%+v\n--ARG;", sql, param) + d.logger.Printf("\n---SQL_START---\n%v\n--SQL_END---\n\n---ARGS_START---\n%+v\n---ARGS_END---", sql, args) } case string: if vv == "1" { - d.logger.Printf("--SQL\n%v\n--SQL;\n--ARG\n%+v\n--ARG;", sql, param) + d.logger.Printf("\n---SQL_START---\n%v\n--SQL_END---\n\n---ARGS_START---\n%+v\n---ARGS_END---", sql, args) } } } -- GitLab