@@ -168,15 +168,22 @@ func genQueryFile(cat *pb.Catalog, pkg, sourceName string, queries []*pb.Query)
168168 var buf bytes.Buffer
169169 buf .WriteString ("// Code generated by sqlc. DO NOT EDIT.\n // source: " + sourceName + "\n \n " )
170170 buf .WriteString ("package " + pkg + "\n \n " )
171- buf .WriteString ("import (\n \t \" context\" \n \t \" database/sql\" \n )\n \n " )
172-
173- for _ , q := range queries {
171+ buf .WriteString ("import (\n " )
172+ buf .WriteString ("\t \" context\" \n \n " )
173+ buf .WriteString ("\t _ \" github.com/ydb-platform/ydb-go-sdk/v3\" \n " )
174+ buf .WriteString ("\t \" github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors\" \n " )
175+ buf .WriteString ("\t \" github.com/ydb-platform/ydb-go-sdk/v3/retry\" \n " )
176+ buf .WriteString (")\n \n " )
177+
178+ for i , q := range queries {
174179 block , err := genQuery (cat , pkg , q )
175180 if err != nil {
176181 return nil , err
177182 }
178183 buf .Write (block )
179- buf .WriteString ("\n " )
184+ if i < len (queries )- 1 {
185+ buf .WriteString ("\n " )
186+ }
180187 }
181188 return buf .Bytes (), nil
182189}
@@ -261,17 +268,27 @@ func genOne(cat *pb.Catalog, name, constName string, q *pb.Query) string {
261268 sig = "ctx context.Context, arg " + name + "Params"
262269 args = argList (params )
263270 }
264- b .WriteString ("func (q *Queries) " + name + "(" + sig + ") (" + retType + ", error) {\n " )
265- b .WriteString ("\t row := q.db.QueryRowContext(ctx, " + constName + ", " + args + ")\n " )
266- b .WriteString ("\t var i " + retType + "\n " )
267- b .WriteString ("\t err := row.Scan(" + scanTargets (cols ) + ")\n " )
268- b .WriteString ("\t if err != nil {\n \t \t return i, err\n \t }\n " )
269- b .WriteString ("\t return i, nil\n }\n \n " )
271+ b .WriteString ("func (q *Queries) " + name + "(" + sig + ") (*" + retType + ", error) {\n " )
272+ b .WriteString ("\t i, err := retry.RetryWithResult(ctx, func(ctx context.Context) (*" + retType + ", error) {\n " )
273+ b .WriteString ("\t \t row := q.db.QueryRowContext(ctx, " + constName + ", " + args + ")\n " )
274+ b .WriteString ("\t \t var i " + retType + "\n " )
275+ b .WriteString ("\t \t err := row.Scan(" + scanTargets (cols ) + ")\n " )
276+ b .WriteString ("\t \t if err != nil {\n " )
277+ b .WriteString ("\t \t \t return nil, xerrors.WithStackTrace(err)\n " )
278+ b .WriteString ("\t \t }\n \n " )
279+ b .WriteString ("\t \t return &i, nil\n " )
280+ b .WriteString ("\t }, retry.WithLabel(\" " + name + "\" ))\n " )
281+ b .WriteString ("\t if err != nil {\n " )
282+ b .WriteString ("\t \t return nil, xerrors.WithStackTrace(err)\n " )
283+ b .WriteString ("\t }\n \n " )
284+ b .WriteString ("\t return i, nil\n " )
285+ b .WriteString ("}\n " )
270286 return b .String ()
271287}
272288
273289func genMany (cat * pb.Catalog , name , constName string , q * pb.Query ) string {
274290 var b bytes.Buffer
291+ params := q .GetParams ()
275292 cols := q .GetColumns ()
276293 rowType := "interface{}"
277294 if len (cols ) > 0 {
@@ -285,18 +302,41 @@ func genMany(cat *pb.Catalog, name, constName string, q *pb.Query) string {
285302 rowType = name + "Row"
286303 }
287304 }
288- b .WriteString ("func (q *Queries) " + name + "(ctx context.Context) ([]" + rowType + ", error) {\n " )
289- b .WriteString ("\t rows, err := q.db.QueryContext(ctx, " + constName + ")\n " )
290- b .WriteString ("\t if err != nil {\n \t \t return nil, err\n \t }\n " )
291- b .WriteString ("\t defer rows.Close()\n " )
292- b .WriteString ("\t var items []" + rowType + "\n " )
293- b .WriteString ("\t for rows.Next() {\n " )
294- b .WriteString ("\t \t var i " + rowType + "\n " )
295- b .WriteString ("\t \t if err := rows.Scan(" + scanTargets (cols ) + "); err != nil {\n \t \t \t return nil, err\n \t \t }\n " )
296- b .WriteString ("\t \t items = append(items, i)\n " )
297- b .WriteString ("\t }\n " )
298- b .WriteString ("\t if err := rows.Err(); err != nil {\n \t \t return nil, err\n \t }\n " )
299- b .WriteString ("\t return items, nil\n }\n \n " )
305+ sig := "ctx context.Context"
306+ args := ""
307+ if len (params ) > 0 {
308+ sig = "ctx context.Context, arg " + name + "Params"
309+ args = argList (params )
310+ }
311+ b .WriteString ("func (q *Queries) " + name + "(" + sig + ") ([]" + rowType + ", error) {\n " )
312+ b .WriteString ("\t items, err := retry.RetryWithResult(ctx, func(ctx context.Context) ([]" + rowType + ", error) {\n " )
313+ if len (params ) > 0 {
314+ b .WriteString ("\t \t rows, err := q.db.QueryContext(ctx, " + constName + ", " + args + ")\n " )
315+ } else {
316+ b .WriteString ("\t \t rows, err := q.db.QueryContext(ctx, " + constName + ")\n " )
317+ }
318+ b .WriteString ("\t \t if err != nil {\n " )
319+ b .WriteString ("\t \t \t return nil, err\n " )
320+ b .WriteString ("\t \t }\n " )
321+ b .WriteString ("\t \t defer rows.Close()\n " )
322+ b .WriteString ("\t \t var items []" + rowType + "\n " )
323+ b .WriteString ("\t \t for rows.Next() {\n " )
324+ b .WriteString ("\t \t \t var i " + rowType + "\n " )
325+ b .WriteString ("\t \t \t if err := rows.Scan(" + scanTargets (cols ) + "); err != nil {\n " )
326+ b .WriteString ("\t \t \t \t return nil, xerrors.WithStackTrace(err)\n " )
327+ b .WriteString ("\t \t \t }\n " )
328+ b .WriteString ("\t \t \t items = append(items, i)\n " )
329+ b .WriteString ("\t \t }\n " )
330+ b .WriteString ("\t \t if err := rows.Err(); err != nil {\n " )
331+ b .WriteString ("\t \t \t return nil, xerrors.WithStackTrace(err)\n " )
332+ b .WriteString ("\t \t }\n \n " )
333+ b .WriteString ("\t \t return items, nil\n " )
334+ b .WriteString ("\t }, retry.WithLabel(\" " + name + "\" ))\n " )
335+ b .WriteString ("\t if err != nil {\n " )
336+ b .WriteString ("\t \t return nil, xerrors.WithStackTrace(err)\n " )
337+ b .WriteString ("\t }\n \n " )
338+ b .WriteString ("\t return items, nil\n " )
339+ b .WriteString ("}\n " )
300340 return b .String ()
301341}
302342
@@ -310,12 +350,22 @@ func genExec(name, constName string, q *pb.Query) string {
310350 args = argList (params )
311351 }
312352 b .WriteString ("func (q *Queries) " + name + "(" + sig + ") error {\n " )
353+ b .WriteString ("\t err := retry.Retry(ctx, func(ctx context.Context) error {\n " )
313354 if len (params ) > 0 {
314- b .WriteString ("\t _, err := q.db.ExecContext(ctx, " + constName + ", " + args + ")\n " )
355+ b .WriteString ("\t \ t _, err := q.db.ExecContext(ctx, " + constName + ", " + args + ")\n " )
315356 } else {
316- b .WriteString ("\t _, err := q.db.ExecContext(ctx, " + constName + ")\n " )
357+ b .WriteString ("\t \ t _, err := q.db.ExecContext(ctx, " + constName + ")\n " )
317358 }
318- b .WriteString ("\t return err\n }\n \n " )
359+ b .WriteString ("\t \t if err != nil {\n " )
360+ b .WriteString ("\t \t \t return xerrors.WithStackTrace(err)\n " )
361+ b .WriteString ("\t \t }\n \n " )
362+ b .WriteString ("\t \t return nil\n " )
363+ b .WriteString ("\t }, retry.WithLabel(\" " + name + "\" ))\n " )
364+ b .WriteString ("\t if err != nil {\n " )
365+ b .WriteString ("\t \t return xerrors.WithStackTrace(err)\n " )
366+ b .WriteString ("\t }\n \n " )
367+ b .WriteString ("\t return nil\n " )
368+ b .WriteString ("}\n " )
319369 return b .String ()
320370}
321371
0 commit comments