Reputation: 7588
I have the following query in GQL:
"SELECT * FROM Task WHERE Uuid = \"FOOBAR\" ORDER BY CreateTimeMs DESC LIMIT 1"
How can I directly run this query in Golang?
query := datastore.NewQuery("SELECT * FROM Task WHERE Uuid = \"FOOBAR\" ORDER BY CreateTimeMs DESC LIMIT 1")
seems to be incorrect.
UPDATE:
I am very aware of the Query types. The thing is that I would like to use GQL directly instead of translating them into Query types.
Upvotes: 5
Views: 1485
Reputation: 26
I was searching to solve exactly the same problem when I came across this note in the GQL documentation:
Note: Google Cloud Client Library for Java and Google Cloud Client Library for Ruby support GQL, but other Google Cloud client libraries do not.
So that's a no-go ...
However, it should be feasible to implement it over the REST api projects.runQuery but then you have to unmarshal the result into structs by yourself.
Upvotes: 1
Reputation: 38203
Take a look at the Query type documentation, from looking at its methods and reading their respective documentation you should be able to understand how to translate your SQL into datastore.Query
specific method calls.
For example your sql can be written as:
q := datastore.NewQuery("Task").Filter("Uuid =", "FOOBAR").Order("-CreateTimeMs").Limit(1)
This just builds your Query value, to get the actual result you need to run the query to get an iterator whose Next method can be used to read the result.
If you want to avoid the run-iterate-next dance you can use the GetAll query method.
var tt = []*Task{}
q := datastore.NewQuery("Task").Filter("Uuid =", "FOOBAR").Order("-CreateTimeMs").Limit(1)
if _, err := q.GetAll(tt); err != nil {
panic(err)
}
log.Println(tt[0]) // your task
Read more here:
Upvotes: 0