enabled support for mysql, pgsql as PDO backends.

This commit is contained in:
Abdulmhsen B. A. A
2022-03-18 14:25:07 +03:00
parent f5c4795947
commit 711cfbf8a7
7 changed files with 92 additions and 33 deletions

View File

@@ -0,0 +1,32 @@
-- # migrate_up
CREATE TABLE `state`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL,
`updated` int(11) NOT NULL,
`watched` tinyint(4) NOT NULL DEFAULT 0,
`meta` text DEFAULT NULL,
`guid_plex` varchar(255) DEFAULT NULL,
`guid_imdb` varchar(255) DEFAULT NULL,
`guid_tvdb` varchar(255) DEFAULT NULL,
`guid_tmdb` varchar(255) DEFAULT NULL,
`guid_tvmaze` varchar(255) DEFAULT NULL,
`guid_tvrage` varchar(255) DEFAULT NULL,
`guid_anidb` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `type` (`type`),
KEY `watched` (`watched`),
KEY `updated` (`updated`),
KEY `guid_plex` (`guid_plex`),
KEY `guid_imdb` (`guid_imdb`),
KEY `guid_tvdb` (`guid_tvdb`),
KEY `guid_tmdb` (`guid_tmdb`),
KEY `guid_tvmaze` (`guid_tvmaze`),
KEY `guid_tvrage` (`guid_tvrage`),
KEY `guid_anidb` (`guid_anidb`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- # migrate_down
DROP TABLE IF EXISTS `state`;

View File

@@ -0,0 +1,35 @@
-- # migrate_up
CREATE SEQUENCE state_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;
CREATE TABLE "state" (
"id" integer DEFAULT nextval('state_id_seq') NOT NULL,
"type" character varying NOT NULL,
"updated" integer NOT NULL,
"watched" smallint NOT NULL,
"meta" json,
"guid_plex" character varying,
"guid_imdb" character varying,
"guid_tvdb" character varying,
"guid_tmdb" character varying,
"guid_tvmaze" character varying,
"guid_tvrage" character varying,
"guid_anidb" character varying,
CONSTRAINT "state_pkey" PRIMARY KEY ("id")
) WITH (oids = false);
CREATE INDEX "state_guid_anidb" ON "state" USING btree ("guid_anidb");
CREATE INDEX "state_guid_imdb" ON "state" USING btree ("guid_imdb");
CREATE INDEX "state_guid_plex" ON "state" USING btree ("guid_plex");
CREATE INDEX "state_guid_tmdb" ON "state" USING btree ("guid_tmdb");
CREATE INDEX "state_guid_tvdb" ON "state" USING btree ("guid_tvdb");
CREATE INDEX "state_guid_tvmaze" ON "state" USING btree ("guid_tvmaze");
CREATE INDEX "state_guid_tvrage" ON "state" USING btree ("guid_tvrage");
CREATE INDEX "state_type" ON "state" USING btree ("type");
CREATE INDEX "state_updated" ON "state" USING btree ("updated");
CREATE INDEX "state_watched" ON "state" USING btree ("watched");
-- # migrate_down
DROP TABLE IF EXISTS "state";
DROP SEQUENCE IF EXISTS state_id_seq;

View File

@@ -20,9 +20,8 @@ final class PDOAdapter implements StorageInterface
{
private array $supported = [
'sqlite',
// @TODO For v1.x support mysql/pgsql
//'mysql',
//'pgsql'
'mysql',
'pgsql'
];
private PDO|null $pdo = null;
@@ -50,18 +49,22 @@ final class PDOAdapter implements StorageInterface
throw new StorageException('No storage.opts.dsn (Data Source Name) was provided.', 10);
}
$this->pdo = new PDO(
$opts['dsn'], $opts['username'] ?? null, $opts['password'] ?? null,
array_replace_recursive(
[
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
],
$opts['options'] ?? []
)
);
try {
$this->pdo = new PDO(
$opts['dsn'], $opts['username'] ?? null, $opts['password'] ?? null,
array_replace_recursive(
[
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
],
$opts['options'] ?? []
)
);
} catch (PDOException $e) {
throw new \RuntimeException(sprintf('Unable to connect to storage backend. \'%s\'.', $e->getMessage()));
}
$driver = $this->getDriver();

View File

@@ -21,8 +21,8 @@ final class PDOMigrations
public function __construct(private PDO $pdo, private LoggerInterface $logger)
{
$this->path = __DIR__ . '/Migrations';
$this->versionFile = Config::get('path') . '/db/pdo_migrations_version';
$this->driver = $this->getDriver();
$this->versionFile = Config::get('path') . sprintf('/db/%s.migration', $this->driver);
}
public function setLogger(LoggerInterface $logger): self