()
| 33 | export default getDatabase; |
| 34 | |
| 35 | export function getDatabase(): Knex { |
| 36 | if (database) { |
| 37 | return database; |
| 38 | } |
| 39 | |
| 40 | const env = useEnv(); |
| 41 | const logger = useLogger(); |
| 42 | const metrics = useMetrics(); |
| 43 | |
| 44 | const { |
| 45 | client, |
| 46 | version, |
| 47 | searchPath, |
| 48 | connectionString, |
| 49 | pool: poolConfig = {}, |
| 50 | ...connectionConfig |
| 51 | } = getConfigFromEnv('DB_', { omitPrefix: 'DB_EXCLUDE_TABLES' }); |
| 52 | |
| 53 | const requiredEnvVars = ['DB_CLIENT']; |
| 54 | |
| 55 | switch (client) { |
| 56 | case 'sqlite3': |
| 57 | requiredEnvVars.push('DB_FILENAME'); |
| 58 | break; |
| 59 | |
| 60 | case 'oracledb': |
| 61 | if (!env['DB_CONNECT_STRING']) { |
| 62 | requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER', 'DB_PASSWORD'); |
| 63 | } else { |
| 64 | requiredEnvVars.push('DB_USER', 'DB_PASSWORD', 'DB_CONNECT_STRING'); |
| 65 | } |
| 66 | |
| 67 | break; |
| 68 | |
| 69 | case 'cockroachdb': |
| 70 | case 'pg': |
| 71 | if (!connectionString) { |
| 72 | requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER'); |
| 73 | } else { |
| 74 | requiredEnvVars.push('DB_CONNECTION_STRING'); |
| 75 | } |
| 76 | |
| 77 | break; |
| 78 | case 'mysql': |
| 79 | if (!env['DB_SOCKET_PATH']) { |
| 80 | requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER', 'DB_PASSWORD'); |
| 81 | } else { |
| 82 | requiredEnvVars.push('DB_DATABASE', 'DB_USER', 'DB_PASSWORD', 'DB_SOCKET_PATH'); |
| 83 | } |
| 84 | |
| 85 | break; |
| 86 | case 'mssql': |
| 87 | if (!env['DB_TYPE'] || env['DB_TYPE'] === 'default') { |
| 88 | requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER', 'DB_PASSWORD'); |
| 89 | } |
| 90 | |
| 91 | break; |
| 92 | default: |
no test coverage detected