diff --git a/src/Database/Adapter.php b/src/Database/Adapter.php index de46dea6a..4e25c8f81 100644 --- a/src/Database/Adapter.php +++ b/src/Database/Adapter.php @@ -23,7 +23,7 @@ abstract class Adapter protected bool $sharedTables = false; - protected ?int $tenant = null; + protected int|string|null $tenant = null; protected bool $tenantPerDocument = false; @@ -219,11 +219,11 @@ public function getSharedTables(): bool * * Set tenant to use if tables are shared * - * @param ?int $tenant + * @param int|string|null $tenant * * @return bool */ - public function setTenant(?int $tenant): bool + public function setTenant(int|string|null $tenant): bool { $this->tenant = $tenant; @@ -235,9 +235,9 @@ public function setTenant(?int $tenant): bool * * Get tenant to use for shared tables * - * @return ?int + * @return int|string|null */ - public function getTenant(): ?int + public function getTenant(): int|string|null { return $this->tenant; } diff --git a/src/Database/Adapter/Mongo.php b/src/Database/Adapter/Mongo.php index 6ab7e7186..789aa691a 100644 --- a/src/Database/Adapter/Mongo.php +++ b/src/Database/Adapter/Mongo.php @@ -3601,13 +3601,13 @@ public function getSchemaAttributes(string $collection): array /** * @param string $collection - * @param array $tenants - * @return int|null|array> + * @param array $tenants + * @return int|string|null|array> */ public function getTenantFilters( string $collection, array $tenants = [], - ): int|null|array { + ): int|string|null|array { $values = []; if (!$this->sharedTables) { return $values; diff --git a/src/Database/Database.php b/src/Database/Database.php index 1207b38b2..0984b33bd 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -920,6 +920,18 @@ public function getNamespace(): string return $this->adapter->getNamespace(); } + /** + * Get ID Attribute Type. + * + * Returns the type of the internal ID attribute (e.g. VAR_INTEGER for SQL, VAR_UUID7 for MongoDB) + * + * @return string + */ + public function getIdAttributeType(): string + { + return $this->adapter->getIdAttributeType(); + } + /** * Set database to use for current scope * @@ -1224,10 +1236,10 @@ public function setSharedTables(bool $sharedTables): static * * Set tenant to use if tables are shared * - * @param ?int $tenant + * @param int|string|null $tenant * @return static */ - public function setTenant(?int $tenant): static + public function setTenant(int|string|null $tenant): static { $this->adapter->setTenant($tenant); @@ -1239,9 +1251,9 @@ public function setTenant(?int $tenant): static * * Get tenant to use if tables are shared * - * @return ?int + * @return int|string|null */ - public function getTenant(): ?int + public function getTenant(): int|string|null { return $this->adapter->getTenant(); } @@ -1251,11 +1263,11 @@ public function getTenant(): ?int * * Execute a callback with a specific tenant * - * @param int|null $tenant + * @param int|string|null $tenant * @param callable $callback * @return mixed */ - public function withTenant(?int $tenant, callable $callback): mixed + public function withTenant(int|string|null $tenant, callable $callback): mixed { $previous = $this->adapter->getTenant(); $this->adapter->setTenant($tenant); diff --git a/src/Database/Document.php b/src/Database/Document.php index e8a7a3a08..d50a957ca 100644 --- a/src/Database/Document.php +++ b/src/Database/Document.php @@ -173,17 +173,17 @@ public function getUpdatedAt(): ?string } /** - * @return int|null + * @return int|string|null */ - public function getTenant(): ?int + public function getTenant(): int|string|null { $tenant = $this->getAttribute('$tenant'); - if ($tenant === null) { - return null; + if (\is_numeric($tenant)) { + return (int) $tenant; } - return (int) $tenant; + return $tenant; } /** diff --git a/src/Database/Mirror.php b/src/Database/Mirror.php index 6754af789..f740cab3e 100644 --- a/src/Database/Mirror.php +++ b/src/Database/Mirror.php @@ -123,7 +123,7 @@ public function setSharedTables(bool $sharedTables): static return $this; } - public function setTenant(?int $tenant): static + public function setTenant(int|string|null $tenant): static { $this->delegate(__FUNCTION__, \func_get_args());