diff --git a/integration-tests/docker-compose.yaml b/integration-tests/docker-compose.yaml index 208d2ec07..e4f49e83b 100644 --- a/integration-tests/docker-compose.yaml +++ b/integration-tests/docker-compose.yaml @@ -74,9 +74,9 @@ services: # - cockroachdb # restart: on-failure -# oracle: -# image: gvenzl/oracle-xe:21-slim -# environment: -# ORACLE_PASSWORD: Pwd2020Db -# ports: -# - 15006:1521 + oracle: + image: gvenzl/oracle-xe:21-slim + environment: + ORACLE_PASSWORD: Pwd2020Db + ports: + - 15006:1521 diff --git a/packages/api/src/shell/importDbFromFolder.js b/packages/api/src/shell/importDbFromFolder.js index e19303dbb..46edcc9fb 100644 --- a/packages/api/src/shell/importDbFromFolder.js +++ b/packages/api/src/shell/importDbFromFolder.js @@ -52,7 +52,7 @@ async function importDbFromFolder({ connection, systemConnection, driver, folder // console.log('CREATING STRUCTURE:', sql); await executeQuery({ connection, systemConnection: dbhan, driver, sql, logScriptItems: true }); - for (const table of model.tables) { + for (const table of modelAdapted.tables) { const fileName = path.join(folder, `${table.pureName}.jsonl`); if (await fs.exists(fileName)) { const src = await jsonLinesReader({ fileName }); diff --git a/packages/tools/src/createBulkInsertStreamBase.ts b/packages/tools/src/createBulkInsertStreamBase.ts index b21b9e7a5..534ad9fe2 100644 --- a/packages/tools/src/createBulkInsertStreamBase.ts +++ b/packages/tools/src/createBulkInsertStreamBase.ts @@ -1,5 +1,6 @@ import { EngineDriver, WriteTableOptions } from 'dbgate-types'; import _intersection from 'lodash/intersection'; +import _fromPairs from 'lodash/fromPairs'; import { getLogger } from './getLogger'; import { prepareTableForImport } from './tableTransforms'; @@ -18,6 +19,7 @@ export function createBulkInsertStreamBase(driver: EngineDriver, stream, dbhan, writable.buffer = []; writable.structure = null; writable.columnNames = null; + writable.columnDataTypes = null; writable.requireFixedStructure = driver.databaseEngineTypes.includes('sql'); writable.addRow = async row => { @@ -58,6 +60,12 @@ export function createBulkInsertStreamBase(driver: EngineDriver, stream, dbhan, structure.columns.map(x => x.columnName), writable.structure.columns.map(x => x.columnName) ); + writable.columnDataTypes = _fromPairs( + writable.columnNames.map(colName => [ + colName, + writable.structure.columns.find(x => x.columnName == colName)?.dataType, + ]) + ); }; writable.send = async () => { @@ -74,7 +82,9 @@ export function createBulkInsertStreamBase(driver: EngineDriver, stream, dbhan, for (const row of rows) { if (wasRow) dmp.putRaw(',\n'); dmp.putRaw('('); - dmp.putCollection(',', writable.columnNames, col => dmp.putValue(row[col as string])); + dmp.putCollection(',', writable.columnNames, col => + dmp.putValue(row[col as string], writable.columnDataTypes?.[col as string]) + ); dmp.putRaw(')'); wasRow = true; } diff --git a/plugins/dbgate-plugin-oracle/src/frontend/Dumper.js b/plugins/dbgate-plugin-oracle/src/frontend/Dumper.js index 15e387972..99d592d4f 100644 --- a/plugins/dbgate-plugin-oracle/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-oracle/src/frontend/Dumper.js @@ -139,6 +139,16 @@ class Dumper extends SqlDumper { // putByteArrayValue(value) { // this.putRaw(`e'\\\\x${arrayToHexString(value)}'`); // } + + putValue(value, dataType) { + if (dataType?.toLowerCase() == 'timestamp') { + this.putRaw(`TO_TIMESTAMP('${value}', 'YYYY-MM-DD"T"HH24:MI:SS')`); + } else if (dataType?.toLowerCase() == 'date') { + this.putRaw(`TO_DATE('${value}', 'YYYY-MM-DD"T"HH24:MI:SS')`); + } else { + super.putValue(value); + } + } } module.exports = Dumper;