AQL query builder for Go https://pkg.go.dev/github.com/annybs/go-aql

Aneurin Barker Snook 135ef33c01 add test workflow 10 tháng trước cách đây
.github 135ef33c01 add test workflow 10 tháng trước cách đây
.gitignore 991d10ab70 ensure go.sum not committed 10 tháng trước cách đây
LICENSE.md 2fb856fcc1 duplicate license to each package 11 tháng trước cách đây
README.md 20f4c4fad9 fix link to license 10 tháng trước cách đây
go.mod f359f39f77 rename package 10 tháng trước cách đây
operator.go 6a287e6d48 migrate from recipeer org to annybs 1 năm trước cách đây
params.go 1895ee990a fix staticcheck suggestions 1 năm trước cách đây
params_test.go 6f85786542 fix parsing of collection bind params 1 năm trước cách đây
query.go 1895ee990a fix staticcheck suggestions 1 năm trước cách đây
query_test.go 6f85786542 fix parsing of collection bind params 1 năm trước cách đây
sort.go 6a287e6d48 migrate from recipeer org to annybs 1 năm trước cách đây

README.md

Go AQL

This package offers a simple syntax to construct AQL queries with bind parameters, which can be used with the official ArangoDB 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:

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.

Examples

In this example, the tastiness value is bound to a parameter while constructing the query.

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:

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