. * * @author Daniil Gentili * @copyright 2016-2023 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto\Db; use danog\MadelineProto\Magic; use danog\MadelineProto\Settings\Database\DriverDatabaseAbstract; use danog\MadelineProto\Settings\Database\SerializerType; use danog\MadelineProto\Settings\DatabaseAbstract; /** * This factory class initializes the correct database backend for MadelineProto. * * @internal */ final class DbPropertiesFactory { /** * @param array{serializer?: SerializerType, enableCache?: bool, cacheTtl?: int, innerMadelineProto?: bool, innerMadelineProtoSerializer?: SerializerType}|'array' $config */ public static function get(DatabaseAbstract $dbSettings, string $table, string|array $config, ?DbArray $value = null): DbArray { // Legacy if ($config === 'array') { $config = []; } $dbSettings = clone $dbSettings; if ($dbSettings instanceof DriverDatabaseAbstract) { $config = \array_merge([ 'serializer' => $dbSettings->getSerializer() ?? ( Magic::$can_use_igbinary ? SerializerType::IGBINARY : SerializerType::SERIALIZE ), 'innerMadelineProto' => false, 'cacheTtl' => $dbSettings->getCacheTtl(), ], $config); if ($config['innerMadelineProto'] && $config['serializer'] !== SerializerType::IGBINARY && $config['serializer'] !== SerializerType::SERIALIZE ) { $config['serializer'] = $config['innerMadelineProtoSerializer'] ?? ( Magic::$can_use_igbinary ? SerializerType::IGBINARY : SerializerType::SERIALIZE ); } $dbSettings->setSerializer($config['serializer']); $dbSettings->setCacheTtl($config['cacheTtl']); } if (!($config['enableCache'] ?? true)) { return $dbSettings->getDriverClass()::getInstance($table, $value, $dbSettings); } return CachedArray::getInstance($table, $value, $dbSettings); } }