From 91ddf2049b91b1390d24ae2805dc786555d32696 Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 20 Jun 2024 07:26:28 +0300 Subject: [PATCH] dont use placeholders in returning clause --- insert.go | 12 +++++------- tests/insert_test.go | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/insert.go b/insert.go index a7c3204..0250e53 100644 --- a/insert.go +++ b/insert.go @@ -52,16 +52,14 @@ func (s *SQURL) formatInsert() (query string, parameters []any, err error) { if s.fields != nil { fieldParams := "" - i := len(*s.changeKeys) + 1 + i := 0 for val := range *s.fields { - if i < len(*s.fields)+len(*s.changeKeys) { - placeholders += fmt.Sprintf("$%v,%v", i, s.delimiter) - fieldParams += fmt.Sprintf("$%v,%v", i, s.delimiter) + fieldParams += fmt.Sprintf(`"%v".%v`, s.table, val) + if i < len(*s.fields)-1 { + fieldParams += fmt.Sprintf(",%v", s.delimiter) } else { - placeholders += fmt.Sprintf("$%v%v", i, s.delimiter) - fieldParams += fmt.Sprintf("$%v%v", i, s.delimiter) + fieldParams += s.delimiter } - parameters = append(parameters, val) i++ } query += fmt.Sprintf(`RETURNING %s`, fieldParams) diff --git a/tests/insert_test.go b/tests/insert_test.go index 368359b..773e58e 100644 --- a/tests/insert_test.go +++ b/tests/insert_test.go @@ -59,10 +59,10 @@ func TestReturning(t *testing.T) { t.Error(err) } - expected := `INSERT INTO public."User" ( id, first_name, last_name ) VALUES ( $1, $2, $3 ) RETURNING $4, $5, $6 ` + expected := `INSERT INTO public."User" ( id, first_name, last_name ) VALUES ( $1, $2, $3 ) RETURNING "User".id, "User".first_name, "User".last_name ` if !strings.HasPrefix(query, `INSERT INTO public."User" ( `) || !strings.Contains(query, `) VALUES ( $1, $2, $3 ) `) || - !strings.HasSuffix(query, `RETURNING $4, $5, $6 `) { + !strings.HasSuffix(query, `RETURNING "User".id, "User".first_name, "User".last_name `) { t.Errorf("query mismatch\nexpected:\n'%v'\n actual:\n'%v'", expected, query) } }