Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/Database/Adapter/MariaDB.php
Original file line number Diff line number Diff line change
Expand Up @@ -910,6 +910,8 @@ public function createDocument(string $collection, Document $document): Document
throw new DatabaseException('Error creating document empty "$sequence"');
}

$document['$sequence'] = (int)$document['$sequence'];

if (isset($stmtPermissions)) {
$stmtPermissions->execute();
}
Expand Down Expand Up @@ -1640,7 +1642,7 @@ public function find(string $collection, array $queries = [], ?int $limit = 25,
unset($results[$index]['_uid']);
}
if (\array_key_exists('_id', $document)) {
$results[$index]['$sequence'] = $document['_id'];
$results[$index]['$sequence'] = (int)$document['_id'];
unset($results[$index]['_id']);
}
if (\array_key_exists('_tenant', $document)) {
Expand Down
2 changes: 1 addition & 1 deletion src/Database/Adapter/SQL.php
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ public function getDocument(string $collection, string $id, array $queries = [],
$document = $document[0];

if (\array_key_exists('_id', $document)) {
$document['$sequence'] = $document['_id'];
$document['$sequence'] = (int)$document['_id'];
unset($document['_id']);
}
if (\array_key_exists('_uid', $document)) {
Expand Down
2 changes: 2 additions & 0 deletions src/Database/Database.php
Original file line number Diff line number Diff line change
Expand Up @@ -6508,6 +6508,8 @@ public function casting(Document $collection, Document $document): Document
$node = (bool)$node;
break;
case self::VAR_INTEGER:
case self::VAR_ID:
case self::VAR_ID:
$node = (int)$node;
break;
case self::VAR_FLOAT:
Expand Down
11 changes: 6 additions & 5 deletions src/Database/Validator/Sequence.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ public function isValid($value): bool
return false;
}

if (gettype($value) !== 'string') {
return false;
}

if ($this->idAttributeType === 'string') {
return preg_match('/^[a-f0-9]{24}$/i', $value) === 1;
} elseif ($this->idAttributeType === 'int') {
$validator = new Integer(loose: true);

if (gettype($value) !== 'integer') {
return false;
}

$validator = new Integer();
if (!$validator->isValid($value)) {
return false;
}
Expand Down
23 changes: 11 additions & 12 deletions tests/e2e/Adapter/Scopes/DocumentTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public function testCreateDocument(): Document
'colors' => ['pink', 'green', 'blue'],
'empty' => [],
'with-dash' => 'Works',
'id' => '1000000',
'id' => 1000000,
]));

$this->assertNotEmpty(true, $document->getId());
Expand All @@ -91,8 +91,8 @@ public function testCreateDocument(): Document
$this->assertEquals(['pink', 'green', 'blue'], $document->getAttribute('colors'));
$this->assertEquals([], $document->getAttribute('empty'));
$this->assertEquals('Works', $document->getAttribute('with-dash'));
$this->assertIsString($document->getAttribute('id'));
$this->assertEquals('1000000', $document->getAttribute('id'));
$this->assertIsInt($document->getAttribute('id'));
$this->assertEquals(1000000, $document->getAttribute('id'));

// Test create document with manual internal id
$manualIdDocument = $database->createDocument('documents', new Document([
Expand Down Expand Up @@ -270,7 +270,7 @@ public function testCreateDocument(): Document
* Insert ID attribute with '0'
*/
$documentId0 = $database->createDocument('documents', new Document([
'id' => '0',
'id' => 0,
'$permissions' => [Permission::read(Role::any())],
'string' => '',
'integer_signed' => 1,
Expand All @@ -285,21 +285,20 @@ public function testCreateDocument(): Document
'with-dash' => '',
]));
$this->assertNotEmpty(true, $documentId0->getSequence());
$this->assertIsString($documentId0->getAttribute('id'));
$this->assertEquals('0', $documentId0->getAttribute('id'));
$this->assertIsInt($documentId0->getAttribute('id'));
$this->assertEquals(0, $documentId0->getAttribute('id'));

$documentId0 = $database->getDocument('documents', $documentId0->getId());
$this->assertNotEmpty(true, $documentId0->getSequence());
$this->assertIsString($documentId0->getAttribute('id'));
$this->assertEquals('0', $documentId0->getAttribute('id'));
$this->assertIsInt($documentId0->getAttribute('id'));
$this->assertEquals(0, $documentId0->getAttribute('id'));

$documentId0 = $database->findOne('documents', [
query::equal('id', ['0'])
query::equal('id', [0])
]);
$this->assertNotEmpty(true, $documentId0->getSequence());
$this->assertIsString($documentId0->getAttribute('id'));
$this->assertEquals('0', $documentId0->getAttribute('id'));

$this->assertIsInt($documentId0->getAttribute('id'));
$this->assertEquals(0, $documentId0->getAttribute('id'));

return $document;
}
Expand Down
Loading