mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-18 05:04:51 +08:00
add postgres support (#236)
This commit is contained in:
parent
fe890025c5
commit
6238224e8c
@ -324,7 +324,7 @@ class Framework
|
||||
}
|
||||
$properties['db[' . $name . ']'] = match ($db['type']) {
|
||||
'sqlite' => $db['type'] . '://' . $db['dbname'],
|
||||
'mysql' => $db['type'] . '://' . $db['host'] . ':' . $db['port'] . '/' . $db['dbname'],
|
||||
'mysql', 'pgsql' => $db['type'] . '://' . $db['host'] . ':' . $db['port'] . '/' . $db['dbname'],
|
||||
default => '未知数据库类型',
|
||||
};
|
||||
}
|
||||
|
||||
@ -53,6 +53,19 @@ class DBPool
|
||||
$args = [];
|
||||
$connect_str = str_replace(array_keys($table), array_values($table), $connect_str);
|
||||
break;
|
||||
case 'postgres':
|
||||
case 'pgsql':
|
||||
$connect_str = 'pgsql:host={host};port={port};dbname={dbname};user={username};password={password}';
|
||||
$table = [
|
||||
'{host}' => $config['host'],
|
||||
'{port}' => $config['port'],
|
||||
'{dbname}' => $config['dbname'],
|
||||
'{username}' => $config['username'],
|
||||
'{password}' => $config['password'],
|
||||
];
|
||||
$connect_str = str_replace(array_keys($table), array_values($table), $connect_str);
|
||||
$args = [];
|
||||
break;
|
||||
default:
|
||||
throw new DBException('type ' . $config['type'] . ' not supported yet');
|
||||
}
|
||||
@ -76,6 +89,15 @@ class DBPool
|
||||
case 'mysql':
|
||||
// TODO: 编写验证 MySQL 连接有效性的功能
|
||||
break;
|
||||
case 'postgres':
|
||||
case 'pgsql':
|
||||
$pool = self::$pools[$name]->get();
|
||||
$a = $pool->query('select version();')->fetchAll()[0][0] ?? '';
|
||||
if (str_starts_with($a, 'PostgreSQL')) {
|
||||
logger()->debug('pgsql ' . $name . ' connected');
|
||||
}
|
||||
self::$pools[$name]->put($pool);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -600,6 +600,7 @@ class DBWrapper
|
||||
return match ($type) {
|
||||
'mysql' => MySQLDriver::class,
|
||||
'sqlite' => SQLiteDriver::class,
|
||||
'pgsql', 'postgres' => PgSQLDriver::class,
|
||||
default => throw new DBException('Unknown database type: ' . $type),
|
||||
};
|
||||
}
|
||||
|
||||
30
src/ZM/Store/Database/PgSQLDriver.php
Normal file
30
src/ZM/Store/Database/PgSQLDriver.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ZM\Store\Database;
|
||||
|
||||
use Doctrine\DBAL\Driver\AbstractPostgreSQLDriver;
|
||||
use Doctrine\DBAL\Driver\Connection;
|
||||
|
||||
class PgSQLDriver extends AbstractPostgreSQLDriver
|
||||
{
|
||||
public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
|
||||
{
|
||||
logger()->debug('Requiring new connection');
|
||||
return new DBConnection($params);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'pdo_pgsql_pool';
|
||||
}
|
||||
|
||||
public function getDatabase(Connection $conn)
|
||||
{
|
||||
if ($conn instanceof DBConnection) {
|
||||
return config('database')[$conn->getPoolName()]['dbname'] ?? '';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user