Browse Source

feat: support custom parameters on jdbc url

Signed-off-by: mertmit <mertmit99@gmail.com>
pull/3306/head
mertmit 2 years ago
parent
commit
446be9b3af
  1. 36
      packages/nocodb/src/lib/utils/NcConfigFactory.ts

36
packages/nocodb/src/lib/utils/NcConfigFactory.ts

@ -21,6 +21,7 @@ const {
const driverClientMapping = { const driverClientMapping = {
mysql: 'mysql2', mysql: 'mysql2',
postgres: 'pg', postgres: 'pg',
postgresql: 'pg',
sqlite: 'sqlite3', sqlite: 'sqlite3',
mssql: 'mssql', mssql: 'mssql',
}; };
@ -636,16 +637,35 @@ export default class NcConfigFactory implements NcConfig {
} }
public static extractXcUrlFromJdbc(url: string) { public static extractXcUrlFromJdbc(url: string) {
// drop the jdbc prefix
if (url.startsWith('jdbc:')) {
url = url.substring(5);
}
const config = parseDbUrl(url); const config = parseDbUrl(url);
const port = config.port || defaultClientPortMapping[config.driver];
const res = `${driverClientMapping[config.driver] || config.driver}://${ const parsedConfig: { driver?: string, host?: string, port?: string, database?: string, user?:string, password?: string } = {}
config.host for (const [key, value] of Object.entries(config)) {
}${port ? `:${port}` : ''}?p=${config.password}&u=${config.user}&d=${ const fnd = knownQueryParams.find((param) => param.parameter === key || param.aliases.includes(key))
config.database if (fnd) {
}`; parsedConfig[fnd.parameter] = value;
if (config.search_path) { } else {
return `${res}&search_path=${config.search_path}`; parsedConfig[key] = value;
}
} }
if (!parsedConfig?.port) parsedConfig.port = defaultClientPortMapping[parsedConfig.driver];
const { driver, host, port, database, user, password, ...extra } = parsedConfig;
let extraParams = '';
for (const [key, value] of Object.entries(extra)) {
extraParams += `&${key}=${value}`;
}
const res = `${driverClientMapping[driver] || driver}://${host}${port ? `:${port}` : ''}?u=${user}&p=${password}&d=${database}${extraParams}`;
return res; return res;
} }

Loading…
Cancel
Save