.Query()
Runs a set of SurrealQL statements against the database.
Method Syntax
db.Query[TResult any](sql string, vars map[string]interface{}) (*[]QueryResult[TResult], error)
Arguments
| Arguments | Description |
|---|
sql required | Specifies the SurrealQL statements. |
vars optional | Assigns the value to the variable name. |
Example usage
package main
import (
"fmt"
"time"
surrealdb "github.com/surrealdb/surrealdb.go"
"github.com/surrealdb/surrealdb.go/pkg/models"
)
func ExampleQuery() {
db := newSurrealDBConnection("examples", "query", "persons")
type NestedStruct struct {
City string `json:"city"`
}
type Person struct {
ID *models.RecordID `json:"id,omitempty"`
Name string `json:"name"`
NestedMap map[string]any `json:"nested_map,omitempty"`
NestedStruct `json:"nested_struct,omitempty"`
CreatedAt models.CustomDateTime `json:"created_at,omitempty"`
UpdatedAt *models.CustomDateTime `json:"updated_at,omitempty"`
}
createdAt, err := time.Parse(time.RFC3339, "2023-10-01T12:00:00Z")
if err != nil {
panic(err)
}
createQueryResults, err := surrealdb.Query[[]Person](
db,
`CREATE type::record($tb, $id) CONTENT $content`,
map[string]any{
"tb": "persons",
"id": "yusuke",
"content": map[string]any{
"name": "Yusuke",
"nested_struct": NestedStruct{
City: "Tokyo",
},
"created_at": models.CustomDateTime{
Time: createdAt,
},
},
})
if err != nil {
panic(err)
}
fmt.Printf("Number of query results: %d\n", len(*createQueryResults))
fmt.Printf("First query result's status: %+s\n", (*createQueryResults)[0].Status)
fmt.Printf("Persons contained in the first query result: %+v\n", (*createQueryResults)[0].Result)
}
Transaction example
package main
import (
"fmt"
surrealdb "github.com/surrealdb/surrealdb.go"
"github.com/surrealdb/surrealdb.go/pkg/models"
)
func ExampleQuery_transaction_let_return() {
db, err := surrealdb.New("ws://localhost:8000")
if err != nil {
panic(err)
}
if err = db.Use("test", "test"); err != nil {
panic(err)
}
token, err := db.SignIn(&surrealdb.Auth{
Username: "root",
Password: "root",
})
if err != nil {
panic(err)
}
if err = db.Authenticate(token); err != nil {
panic(err)
}
createQueryResults, err := surrealdb.Query[[]any](
db,
`BEGIN;
CREATE t:1 SET name = 'test';
LET $i = SELECT * FROM $id;
RETURN $i.name;
COMMIT
`,
map[string]any{
"id": models.NewRecordID("t", 1),
})
if err != nil {
panic(err)
}
fmt.Printf("Number of query results: %d\n", len(*createQueryResults))
fmt.Printf("First query result's status: %+s\n", (*createQueryResults)[0].Status)
fmt.Printf("Names contained in the first query result: %+v\n", (*createQueryResults)[0].Result)
}