Aneurin Barker Snook 1 рік тому
батько
коміт
25b14743be
2 змінених файлів з 23 додано та 0 видалено
  1. 13 0
      query.go
  2. 10 0
      query_test.go

+ 13 - 0
query.go

@@ -1,6 +1,7 @@
 package arango
 
 import (
+	"fmt"
 	"strings"
 )
 
@@ -36,6 +37,18 @@ func (query *Query) Append(line string, values ...any) *Query {
 	return query.BindMap(params)
 }
 
+// Appendf adds a line to the query, replacing values directly into the string using standard formatting syntax.
+// This is a shorthand for:
+//
+//	// query *Query
+//	query.Append(fmt.Sprintf("my format (%s)", "example"))
+//
+// This method does not attach values to bind parameters.
+func (query *Query) Appendf(line string, a ...any) *Query {
+	line = fmt.Sprintf(line, a...)
+	return query.Append(line)
+}
+
 // Bind binds a value to a bind parameter.
 func (query *Query) Bind(name string, value any) *Query {
 	query.Params[name] = value

+ 10 - 0
query_test.go

@@ -77,6 +77,16 @@ RETURN doc`,
 				"title":      "Spaghetti",
 			},
 		},
+		// Append and Appendf
+		{
+			Input: NewQuery().
+				Appendf("FOR doc IN %s FILTER doc.title == @title RETURN doc", "recipes").
+				Bind("title", "Spaghetti"),
+			ExpectedStr: `FOR doc IN recipes FILTER doc.title == @title RETURN doc`,
+			ExpectedParams: map[string]any{
+				"title": "Spaghetti",
+			},
+		},
 	}
 
 	for n, tc := range testCases {