diff --git a/zdb/pool.go b/zdb/pool.go index a33846d536c110ad6ae2801f7b6245ac767649f7..0e04d32dd45427f3d1f0bef5cbee9605161d4c4a 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) } } }