1
0
Fork 0
mirror of synced 2024-10-03 19:53:33 +13:00

New Queries Activation

This commit is contained in:
fogelito 2023-03-23 16:08:38 +02:00
parent 588d6651a2
commit 969cff5e41
4 changed files with 104 additions and 26 deletions

View file

@ -298,7 +298,6 @@ function updateAttribute(
if ($type === Database::VAR_RELATIONSHIP) {
$options = array_merge($attribute->getAttribute('options', []), $options);
$attribute->setAttribute('options', $options);
var_dump($options);
$dbForProject->updateRelationship(
collection: $collectionId,

View file

@ -91,7 +91,6 @@ class Filter extends Base
// Validate method
$method = $query->getMethod();
$attribute = $query->getAttribute();
switch ($method) {
case Query::TYPE_EQUAL:
case Query::TYPE_NOTEQUAL:
@ -100,6 +99,11 @@ class Filter extends Base
case Query::TYPE_GREATER:
case Query::TYPE_GREATEREQUAL:
case Query::TYPE_SEARCH:
case Query::TYPE_STARTS_WITH:
case Query::TYPE_ENDS_WITH:
case Query::TYPE_BETWEEN:
case Query::TYPE_IS_NULL:
case Query::TYPE_IS_NOT_NULL:
$values = $query->getValues();
return $this->isValidAttributeAndValues($attribute, $values);

View file

@ -8,10 +8,7 @@ use Utopia\Database\Query;
class Select extends Base
{
/**
* @var array
*/
protected $schema = [];
protected array $schema = [];
/**
* Query constructor
@ -46,7 +43,7 @@ class Select extends Base
if (\str_contains($attribute, '.')) {
$attribute = \explode('.', $attribute)[0];
}
if (!isset($this->schema[$attribute])) {
if (!isset($this->schema[$attribute]) && $attribute !== '*') {
$this->message = 'Attribute not found in schema: ' . $attribute;
return false;
}

View file

@ -274,6 +274,18 @@ trait DatabasesBase
$this->assertEquals(201, $library['headers']['status-code']);
$fullname = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $person['body']['$id'] . '/attributes/string', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'key' => 'fullName',
'size' => 255,
'required' => false,
]);
sleep(1); // Wait for worker
$relation = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $person['body']['$id'] . '/attributes/relationship', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
@ -285,6 +297,8 @@ trait DatabasesBase
'onDelete' => Database::RELATION_MUTATE_CASCADE,
]);
sleep(1); // Wait for worker
$libraryName = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $library['body']['$id'] . '/attributes/string', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
@ -347,9 +361,7 @@ trait DatabasesBase
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
Query::equal('library', ['library1']),
],
'queries' => ['equal("library", "library1")', 'select(["library.*"])'],
]);
$this->assertEquals(1, $documents['body']['total']);
@ -430,6 +442,7 @@ trait DatabasesBase
], $this->getHeaders()), [
'documentId' => 'person10',
'data' => [
'fullName' => 'Stevie Wonder',
'libraries' => [
[
'$id' => 'library10',
@ -437,7 +450,7 @@ trait DatabasesBase
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
],
'libraryName' => 'Library 10',
],
[
@ -504,7 +517,73 @@ trait DatabasesBase
$this->assertEquals(false, $attribute['body']['twoWay']);
$this->assertEquals(Database::RELATION_MUTATE_CASCADE, $attribute['body']['onDelete']);
return [];
return ['databaseId' => $databaseId, 'personCollection' => $person['body']['$id']];
}
/**
* @depends testRelations
*/
public function testSelects(array $data): array
{
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $data['databaseId'] . '/collections/' . $data['personCollection'] . '/documents', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
'isNotNull("$id")',
'isNull("fullName")',
'startsWith("fullName", "Stevie")',
'endsWith("fullName", "Wonder")',
'between("$createdAt", ["1975-12-06", "2050-12-06"])',
'select(["fullName"])'
],
]);
$this->assertEquals(200, $response['headers']['status-code']);
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $data['databaseId'] . '/collections/' . $data['personCollection'] . '/documents', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
'equal("fullName", "Stevie Wonder")',
'select(["fullName"])'
],
]);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertArrayNotHasKey('libraries', $response['body']['documents'][0]);
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $data['databaseId'] . '/collections/' . $data['personCollection'] . '/documents', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
'select(["libraries.*"])',
],
]);
$document = $response['body']['documents'][0];
$this->assertEquals(200, $response['headers']['status-code']);
// $this->assertArrayNotHasKey('fullName', $document); // todo:this should work?
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $data['databaseId'] . '/collections/' . $data['personCollection'] . '/documents/' . $document['$id'], array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
// 'select(["fullName"])'
],
]);
var_dump($response);
$this->assertEquals(200, $response['headers']['status-code']);
// $this->assertArrayNotHasKey('fullName', $doc);
die;
}
/**
@ -1391,22 +1470,21 @@ trait DatabasesBase
public function testGetDocumentWithQueries(array $data): void
{
$databaseId = $data['databaseId'];
$document = $data['documents'][0];
foreach ($data['documents'] as $document) {
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
'select(["title", "releaseYear"])',
],
]);
$response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
'select(["title", "releaseYear"])',
],
]);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals($document['title'], $response['body']['title']);
$this->assertEquals($document['releaseYear'], $response['body']['releaseYear']);
$this->assertArrayNotHasKey('birthDay', $response['body']);
}
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals($document['title'], $response['body']['title']);
$this->assertEquals($document['releaseYear'], $response['body']['releaseYear']);
$this->assertArrayNotHasKey('birthDay', $response['body']);
}
/**