|  | @@ -0,0 +1,91 @@
 | 
											
												
													
														|  | 
 |  | +# Go Arango
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +This package offers a simple syntax to construct [AQL queries](https://docs.arangodb.com/3.11/aql/) with bind parameters, which can be used with the [official ArangoDB driver](https://pkg.go.dev/github.com/arangodb/go-driver).
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +While it's entirely possible to write static queries and bind parameters externally, sometimes you need more flexibility to create queries, particularly if you are providing a consumer API with querying capabilities. See also:
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +- [Go Query String](../qs/README.md)
 | 
											
												
													
														|  | 
 |  | +- [Go REST](../rest/README.md)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +This package allows you to build your query piece-by-piece and attach parameters in whatever way serves you best.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +> :warning: This package has not yet been tested with the [v2 driver](https://pkg.go.dev/github.com/arangodb/go-driver/v2/arangodb).
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +## Examples
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +In this example, the `tastiness` value is bound to a parameter _while_ constructing the query.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +```go
 | 
											
												
													
														|  | 
 |  | +package main
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +import (
 | 
											
												
													
														|  | 
 |  | +	"errors"
 | 
											
												
													
														|  | 
 |  | +	"fmt"
 | 
											
												
													
														|  | 
 |  | +	"os"
 | 
											
												
													
														|  | 
 |  | +	"strconv"
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	"github.com/annybs/go/arango"
 | 
											
												
													
														|  | 
 |  | +)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func main() {
 | 
											
												
													
														|  | 
 |  | +	query := arango.NewQuery().Append("FOR f IN @@foodColl", "food")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	tastiness := 1
 | 
											
												
													
														|  | 
 |  | +	if len(os.Args) > 1 {
 | 
											
												
													
														|  | 
 |  | +		t, err := strconv.Atoi(os.Args[1])
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			fmt.Println(errors.New("invalid minimum tastiness"))
 | 
											
												
													
														|  | 
 |  | +			os.Exit(1)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		tastiness = t
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	query.
 | 
											
												
													
														|  | 
 |  | +		Append("FILTER f.tastiness > @tastiness", tastiness).
 | 
											
												
													
														|  | 
 |  | +		Append("RETURN f")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Query:", query.String())
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Params:", query.Params)
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +```
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +For simpler cases, you may prefer to construct your query first and then bind parameters separately:
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +```go
 | 
											
												
													
														|  | 
 |  | +package main
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +import (
 | 
											
												
													
														|  | 
 |  | +	"errors"
 | 
											
												
													
														|  | 
 |  | +	"fmt"
 | 
											
												
													
														|  | 
 |  | +	"os"
 | 
											
												
													
														|  | 
 |  | +	"strconv"
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	"github.com/annybs/go/arango"
 | 
											
												
													
														|  | 
 |  | +)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func main() {
 | 
											
												
													
														|  | 
 |  | +	query := arango.NewQuery().
 | 
											
												
													
														|  | 
 |  | +		Append("FOR f IN @@foodColl", "food").
 | 
											
												
													
														|  | 
 |  | +		Append("FILTER f.tastiness > @tastiness").
 | 
											
												
													
														|  | 
 |  | +		Append("RETURN f")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	tastiness := 1
 | 
											
												
													
														|  | 
 |  | +	if len(os.Args) > 1 {
 | 
											
												
													
														|  | 
 |  | +		t, err := strconv.Atoi(os.Args[1])
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			fmt.Println(errors.New("invalid minimum tastiness"))
 | 
											
												
													
														|  | 
 |  | +			os.Exit(1)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		tastiness = t
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	query.Bind("tastiness", tastiness)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Query:", query.String())
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Params:", query.Params)
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +```
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +## License
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +See [LICENSE.md](../LICENSE.md)
 |