1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-26 17:24:40 +01:00

More migration fixes

This commit is contained in:
Daniil Gentili 2024-04-06 21:25:12 +02:00
parent 2c340f9963
commit c955345b22
5 changed files with 24 additions and 11 deletions

View File

@ -36,6 +36,7 @@ use Amp\Sync\LocalMutex;
use AssertionError;
use danog\AsyncOrm\Annotations\OrmMappedArray;
use danog\AsyncOrm\DbArray;
use danog\AsyncOrm\DbArrayBuilder;
use danog\AsyncOrm\DbAutoProperties;
use danog\AsyncOrm\Driver\MemoryArray;
use danog\AsyncOrm\KeyType;
@ -422,7 +423,12 @@ final class MTProto implements TLCallback, LoggerGetter, SettingsGetter
$db []= async($this->event_handler_instance->internalSaveDbProperties(...));
}
await($db);
return $this->getDbPrefix().'session';
return new DbArrayBuilder(
$this->getDbPrefix().'session',
$this->getDbSettings(),
KeyType::STRING,
ValueType::SCALAR
);
}
/**

View File

@ -107,6 +107,7 @@ final class ReferenceDatabase implements TLCallback
}
public function init(): void
{
var_dump($this->db);
$this->initDbProperties($this->API->getDbSettings(), $this->API->getDbPrefix());
if ($this->v === 0) {
$this->db->clear();

View File

@ -220,29 +220,35 @@ abstract class Serialization
} else {
$unserialized = null;
}
if ($unserialized instanceof DriverArray || \is_string($unserialized) || !$exists) {
if ($unserialized instanceof DriverArray || $unserialized instanceof DbArrayBuilder || !$exists) {
if ($settings instanceof Settings) {
$settings = $settings->getDb();
}
$tableName = null;
$array = null;
if ($settings instanceof DriverDatabaseAbstract
&& $prefix = $settings->getEphemeralFilesystemPrefix()
) {
$tableName = "{$prefix}_MTProto_session";
} elseif ($unserialized instanceof DriverArray) {
$tableName = ((array) $unserialized)["\0*\0table"];
$unserialized = (array) $unserialized;
$tableName = $unserialized["\0*\0table"];
$settings = $unserialized["\0*\0dbSettings"];
} else {
$tableName = $unserialized;
\assert($unserialized instanceof DbArrayBuilder);
$array = $unserialized->build();
}
$unserialized = null;
if ($tableName !== null && $settings instanceof DriverDatabaseAbstract) {
Logger::log('Extracting session from database...');
$unserialized = (new DbArrayBuilder(
$array = (new DbArrayBuilder(
$tableName,
$settings->getOrmSettings(),
KeyType::STRING,
ValueType::SCALAR,
))->build()->get('data');
))->build();
}
\assert($array !== null);
$unserialized = $array->get('data');
if (!$unserialized && $exists) {
throw new Exception('Could not extract session from database!');
}

View File

@ -5,6 +5,8 @@ if (class_exists('\\danog\\MadelineProto\\Db\\NullCache\\MysqlArray')) {
}
use danog\AsyncOrm\Driver\MemoryArray;
use danog\AsyncOrm\Internal\Containers\CacheContainer;
use danog\AsyncOrm\Internal\Driver\CachedArray;
use danog\AsyncOrm\Internal\Driver\MysqlArray;
use danog\AsyncOrm\Internal\Driver\PostgresArray;
use danog\AsyncOrm\Internal\Driver\RedisArray;
@ -18,6 +20,8 @@ class_alias(PostgresArray::class, '\\danog\\MadelineProto\\Db\\PostgresArray');
class_alias(PostgresArray::class, '\\danog\\MadelineProto\\Db\\PostgresArrayBytea');
class_alias(RedisArray::class, '\\danog\\MadelineProto\\Db\\RedisArray');
class_alias(MemoryArray::class, '\\danog\\MadelineProto\\Db\\MemoryArray');
class_alias(CachedArray::class, '\\danog\\MadelineProto\\Db\\CachedArray');
class_alias(CacheContainer::class, '\\danog\\MadelineProto\\Db\\CacheContainer');
if ((PHP_MINOR_VERSION === 2 && PHP_VERSION_ID < 80204)
|| PHP_MAJOR_VERSION < 8

View File

@ -10,7 +10,6 @@ use danog\MadelineProto\Bug74586Exception;
use danog\MadelineProto\Connection;
use danog\MadelineProto\DataCenter;
use danog\MadelineProto\DataCenterConnection;
use danog\MadelineProto\Db\DbPropertiesTrait;
use danog\MadelineProto\Doc\MethodDoc;
use danog\MadelineProto\Doc\NamespaceDoc;
use danog\MadelineProto\DocsBuilder;
@ -110,9 +109,6 @@ $filter = static function (string $class) use ($ignore): bool {
|| str_starts_with($class, 'danog\\MadelineProto\\Db\\NullCache')) {
return false;
}
if ($class === DbPropertiesTrait::class) {
return true;
}
$class = new ReflectionClass($class);
return !$class->isTrait();
};