diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index 945ce305f..0ff1bbc4a 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -59,7 +59,7 @@ module.exports = { if (connection.useRedirectDbLogin) { throw new MissingCredentialsError({ conid, redirectToDbLogin: true }); } - const subprocess = fork( + const subprocess = fork( global['API_PACKAGE'] || process.argv[1], [ '--is-forked-api', @@ -184,22 +184,29 @@ module.exports = { return { status: 'ok' }; }, - createDatabase_meta: true, - async createDatabase({ conid, name }, req) { + async sendDatabaseOp({ conid, msgtype, name }, req) { testConnectionPermission(conid, req); const opened = await this.ensureOpened(conid); if (opened.connection.isReadOnly) return false; - opened.subprocess.send({ msgtype: 'createDatabase', name }); - return { status: 'ok' }; + const res = await this.sendRequest(opened, { msgtype, name }); + if (res.errorMessage) { + console.error(res.errorMessage); + + return { + apiErrorMessage: res.errorMessage, + }; + } + return res.result || null; + }, + + createDatabase_meta: true, + async createDatabase({ conid, name }, req) { + return this.sendDatabaseOp({ conid, msgtype: 'createDatabase', name }, req); }, dropDatabase_meta: true, async dropDatabase({ conid, name }, req) { - testConnectionPermission(conid, req); - const opened = await this.ensureOpened(conid); - if (opened.connection.isReadOnly) return false; - opened.subprocess.send({ msgtype: 'dropDatabase', name }); - return { status: 'ok' }; + return this.sendDatabaseOp({ conid, msgtype: 'dropDatabase', name }, req); }, sendRequest(conn, message) { diff --git a/packages/api/src/proc/serverConnectionProcess.js b/packages/api/src/proc/serverConnectionProcess.js index 717c9e96d..66f48bcec 100644 --- a/packages/api/src/proc/serverConnectionProcess.js +++ b/packages/api/src/proc/serverConnectionProcess.js @@ -105,18 +105,24 @@ function handlePing() { lastPing = new Date().getTime(); } -async function handleDatabaseOp(op, { name }) { - const driver = requireEngineDriver(storedConnection); - systemConnection = await connectUtility(driver, storedConnection, 'app'); - if (driver[op]) { - await driver[op](systemConnection, name); - } else { - const dmp = driver.createDumper(); - dmp[op](name); - logger.info({ sql: dmp.s }, 'Running script'); - await driver.query(systemConnection, dmp.s); +async function handleDatabaseOp(op, { msgid, name }) { + try { + const driver = requireEngineDriver(storedConnection); + systemConnection = await connectUtility(driver, storedConnection, 'app'); + if (driver[op]) { + await driver[op](systemConnection, name); + } else { + const dmp = driver.createDumper(); + dmp[op](name); + logger.info({ sql: dmp.s }, 'Running script'); + await driver.query(systemConnection, dmp.s); + } + await handleRefresh(); + + process.send({ msgtype: 'response', msgid, status: 'ok' }); + } catch (err) { + process.send({ msgtype: 'response', msgid, errorMessage: err.message }); } - await handleRefresh(); } async function handleDriverDataCore(msgid, callMethod) { diff --git a/plugins/dbgate-plugin-oracle/src/backend/driver.js b/plugins/dbgate-plugin-oracle/src/backend/driver.js index e57e867ad..60516a048 100644 --- a/plugins/dbgate-plugin-oracle/src/backend/driver.js +++ b/plugins/dbgate-plugin-oracle/src/backend/driver.js @@ -96,18 +96,10 @@ const driver = { columns: [], }; } - try { - //console.log('sql3', sql); - const res = await client.execute(sql); - //console.log('res', res); - const columns = extractOracleColumns(res.metaData); - //console.log('columns', columns); - return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns }; - } catch (err) { - console.log('Error query', err, sql); - } finally { - //console.log('finally', sql); - } + + const res = await client.execute(sql); + const columns = extractOracleColumns(res.metaData); + return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns }; }, stream(client, sql, options) { /*