diff --git a/packages/tools/src/SqlDumper.ts b/packages/tools/src/SqlDumper.ts index 5e54f0dd..e0a72d0c 100644 --- a/packages/tools/src/SqlDumper.ts +++ b/packages/tools/src/SqlDumper.ts @@ -133,11 +133,30 @@ export class SqlDumper implements AlterProcessor { i++; switch (c) { case '^': + if (format[i] == '^') { + this.putRaw('^'); + i++; + break; + } + while (i < length && format[i].match(/[a-z0-9_]/i)) { this.putRaw(SqlDumper.convertKeywordCase(format[i])); i++; } break; + case '~': + if (format[i] == '~') { + this.putRaw('~'); + i++; + break; + } + let ident = ''; + while (i < length && format[i].match(/[a-z0-9_]/i)) { + ident += format[i]; + i++; + } + this.putRaw(this.dialect.quoteIdentifier(ident)); + break; case '%': c = format[i]; i++; diff --git a/plugins/dbgate-plugin-oracle/src/backend/driver.js b/plugins/dbgate-plugin-oracle/src/backend/driver.js index 60516a04..ad4bb31e 100644 --- a/plugins/dbgate-plugin-oracle/src/backend/driver.js +++ b/plugins/dbgate-plugin-oracle/src/backend/driver.js @@ -86,17 +86,18 @@ const driver = { return pool.end(); }, async query(client, sql) { - if (sql.trim() == 'COMMIT;') { - sql = 'COMMIT'; - } - if (sql == null) { return { rows: [], columns: [], }; } - + + const mtrim = sql.match(/(.*);\s*$/); + if (mtrim) { + sql = mtrim[1]; + } + const res = await client.execute(sql); const columns = extractOracleColumns(res.metaData); return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns };