feat: add createFirebirdInsertStream with datetime fields transform

This commit is contained in:
Pavel
2025-06-12 13:44:24 +02:00
parent 17711bc5c9
commit d708616a6a
2 changed files with 33 additions and 2 deletions

View File

@@ -4,7 +4,7 @@ const stream = require('stream');
const driverBase = require('../frontend/driver');
const Analyser = require('./Analyser');
const Firebird = require('node-firebird');
const { normalizeRow } = require('./helpers');
const { normalizeRow, createFirebirdInsertStream } = require('./helpers');
const { getLogger, extractErrorLogData, createBulkInsertStreamBase } = require('dbgate-tools');
const sql = require('./sql');
@@ -151,7 +151,7 @@ const driver = {
},
async writeTable(dbhan, name, options) {
return createBulkInsertStreamBase(this, stream, dbhan, name, options);
return createFirebirdInsertStream(this, stream, dbhan, name, options);
},
async getVersion(dbhan) {

View File

@@ -1,3 +1,5 @@
const { createBulkInsertStreamBase } = require('dbgate-tools');
function getDataTypeString({ dataTypeCode, scale, length, precision }) {
switch (dataTypeCode) {
case 7:
@@ -127,6 +129,34 @@ async function normalizeRow(row) {
return Object.fromEntries(entries);
}
function transformRow(row) {
return Object.fromEntries(
Object.entries(row).map(([key, value]) => {
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(value)) {
return [key, value.replace('T', ' ')];
}
return [key, value];
})
);
}
function createFirebirdInsertStream(driver, stream, dbhan, name, options) {
const writable = createBulkInsertStreamBase(driver, stream, dbhan, name, options);
writable.addRow = async row => {
const transformedRow = transformRow(row);
if (writable.structure) {
writable.buffer.push(transformedRow);
} else {
writable.structure = transformedRow;
await writable.checkStructure();
}
};
return writable;
}
module.exports = {
getDataTypeString,
getTriggerEventType,
@@ -135,4 +165,5 @@ module.exports = {
getTriggerCreateSql,
blobStreamToString,
normalizeRow,
createFirebirdInsertStream,
};