Skip to content

Commit 4cef0f3

Browse files
committed
fix: correct configuration loading order in BaseCliCommand
- Load examples/config.{driver}.php first when PDODB_DRIVER is set and no explicit environment variables are provided - This ensures examples use the same config file that createExampleDb() uses - Fixes MariaDB example failure in CI where examples/config.mariadb.php was loaded after buildConfigFromEnv() returned null - Skip examples config if environment variables are explicitly set (allows CI/user override while preserving examples functionality) - Remove duplicate examples config check at the end of function
1 parent 3e47c5a commit 4cef0f3

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

src/cli/BaseCliCommand.php

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,34 @@ protected static function loadDatabaseConfig(): array
2727
// Get driver from environment
2828
$driver = mb_strtolower(getenv('PDODB_DRIVER') ?: '', 'UTF-8');
2929

30+
// Try examples config first (for testing/examples) - this takes precedence
31+
// because examples need to use the same config file that createExampleDb() uses
32+
// But skip if environment variables are explicitly set (CI or user override)
33+
$hasEnvConfig = false;
34+
if ($driver === 'sqlite') {
35+
$hasEnvConfig = getenv('PDODB_PATH') !== false;
36+
} elseif ($driver === 'mysql' || $driver === 'mariadb') {
37+
$hasEnvConfig = getenv('PDODB_DATABASE') !== false || getenv('DB_NAME') !== false;
38+
} elseif ($driver === 'pgsql') {
39+
$hasEnvConfig = getenv('PDODB_DATABASE') !== false;
40+
} elseif ($driver === 'sqlsrv') {
41+
$hasEnvConfig = getenv('PDODB_DATABASE') !== false || getenv('DB_NAME') !== false;
42+
}
43+
44+
if ($driver !== '' && !$hasEnvConfig) {
45+
$configFile = __DIR__ . "/../../examples/config.{$driver}.php";
46+
if (file_exists($configFile)) {
47+
return require $configFile;
48+
}
49+
// Handle sqlsrv -> mssql alias for config file (MSSQL uses sqlsrv driver but config.mssql.php)
50+
if ($driver === 'sqlsrv') {
51+
$configFile = __DIR__ . '/../../examples/config.mssql.php';
52+
if (file_exists($configFile)) {
53+
return require $configFile;
54+
}
55+
}
56+
}
57+
3058
// Build config from environment variables
3159
$config = static::buildConfigFromEnv($driver);
3260
if ($config !== null) {
@@ -93,21 +121,6 @@ protected static function loadDatabaseConfig(): array
93121
}
94122
}
95123

96-
// Try examples config (for testing only)
97-
if ($driver !== '') {
98-
$configFile = __DIR__ . "/../../examples/config.{$driver}.php";
99-
if (file_exists($configFile)) {
100-
return require $configFile;
101-
}
102-
// Handle sqlsrv -> mssql alias for config file (MSSQL uses sqlsrv driver but config.mssql.php)
103-
if ($driver === 'sqlsrv') {
104-
$configFile = __DIR__ . '/../../examples/config.mssql.php';
105-
if (file_exists($configFile)) {
106-
return require $configFile;
107-
}
108-
}
109-
}
110-
111124
// Throw error instead of fallback
112125
static::error("Database configuration not found.\n\n" .
113126
"Please configure your database connection:\n" .

0 commit comments

Comments
 (0)