Skip to content

Commit 4a579f7

Browse files
feat: [Datastore] add sample for GqlQuery (#1684)
1 parent 4149481 commit 4a579f7

2 files changed

Lines changed: 64 additions & 1 deletion

File tree

datastore/api/src/functions/concepts.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Google\Cloud\Datastore\Entity;
2323
use Google\Cloud\Datastore\EntityIterator;
2424
use Google\Cloud\Datastore\Key;
25+
use Google\Cloud\Datastore\Query\GqlQuery;
2526
use Google\Cloud\Datastore\Query\Query;
2627

2728
/**
@@ -314,16 +315,46 @@ function basic_query(DatastoreClient $datastore)
314315
return $query;
315316
}
316317

318+
/**
319+
* Create a basic Datastore Gql query.
320+
*
321+
* @param DatastoreClient $datastore
322+
* @return GqlQuery
323+
*/
324+
function basic_gql_query(DatastoreClient $datastore)
325+
{
326+
// [START datastore_basic_gql_query]
327+
$gql = <<<EOF
328+
SELECT * from Task
329+
where
330+
done = @a
331+
AND priority >= @b
332+
order by
333+
priority desc
334+
EOF;
335+
$query = $datastore->gqlQuery($gql, [
336+
'bindings' => [
337+
'a' => false,
338+
'b' => 4,
339+
],
340+
]);
341+
// [END datastore_basic_gql_query]
342+
return $query;
343+
}
344+
317345
/**
318346
* Run a given query.
319347
*
320348
* @param DatastoreClient $datastore
349+
* @param Query|GqlQuery $query
321350
* @return EntityIterator<Entity>
322351
*/
323-
function run_query(DatastoreClient $datastore, Query $query)
352+
function run_query(DatastoreClient $datastore, $query)
324353
{
325354
// [START datastore_run_query]
355+
// [START datastore_run_gql_query]
326356
$result = $datastore->runQuery($query);
357+
// [END datastore_run_gql_query]
327358
// [END datastore_run_query]
328359
return $result;
329360
}

datastore/api/test/ConceptsTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Iterator;
2121
use Google\Cloud\Datastore\DatastoreClient;
2222
use Google\Cloud\Datastore\Entity;
23+
use Google\Cloud\Datastore\Query\GqlQuery;
2324
use Google\Cloud\Datastore\Query\Query;
2425
use Google\Cloud\TestUtils\EventuallyConsistentTestTrait;
2526
use PHPUnit\Framework\TestCase;
@@ -417,6 +418,37 @@ function () use ($key1, $key2, $query) {
417418
});
418419
}
419420

421+
public function testRunGqlQuery()
422+
{
423+
$key1 = self::$datastore->key('Task', generateRandomString());
424+
$key2 = self::$datastore->key('Task', generateRandomString());
425+
$entity1 = self::$datastore->entity($key1);
426+
$entity2 = self::$datastore->entity($key2);
427+
$entity1['priority'] = 4;
428+
$entity1['done'] = false;
429+
$entity2['priority'] = 5;
430+
$entity2['done'] = false;
431+
self::$keys = [$key1, $key2];
432+
self::$datastore->upsertBatch([$entity1, $entity2]);
433+
$query = basic_gql_query(self::$datastore);
434+
$this->assertInstanceOf(GqlQuery::class, $query);
435+
436+
$this->runEventuallyConsistentTest(
437+
function () use ($key1, $key2, $query) {
438+
$result = run_query(self::$datastore, $query);
439+
$num = 0;
440+
$entities = [];
441+
/* @var Entity $e */
442+
foreach ($result as $e) {
443+
$entities[] = $e;
444+
$num += 1;
445+
}
446+
self::assertEquals(2, $num);
447+
$this->assertTrue($entities[0]->key()->path() == $key2->path());
448+
$this->assertTrue($entities[1]->key()->path() == $key1->path());
449+
});
450+
}
451+
420452
public function testPropertyFilter()
421453
{
422454
$key1 = self::$datastore->key('Task', generateRandomString());

0 commit comments

Comments
 (0)