2 Commits

6 changed files with 44 additions and 359 deletions

100
package-lock.json generated
View File

@@ -431,43 +431,23 @@
} }
}, },
"node_modules/body-parser": { "node_modules/body-parser": {
"version": "2.2.1", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
"integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bytes": "^3.1.2", "bytes": "^3.1.2",
"content-type": "^1.0.5", "content-type": "^1.0.5",
"debug": "^4.4.3", "debug": "^4.4.0",
"http-errors": "^2.0.0", "http-errors": "^2.0.0",
"iconv-lite": "^0.7.0", "iconv-lite": "^0.6.3",
"on-finished": "^2.4.1", "on-finished": "^2.4.1",
"qs": "^6.14.0", "qs": "^6.14.0",
"raw-body": "^3.0.1", "raw-body": "^3.0.0",
"type-is": "^2.0.1" "type-is": "^2.0.0"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
"integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/buffer": { "node_modules/buffer": {
@@ -627,9 +607,9 @@
} }
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.4.3", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ms": "^2.1.3" "ms": "^2.1.3"
@@ -1079,23 +1059,28 @@
} }
}, },
"node_modules/http-errors": { "node_modules/http-errors": {
"version": "2.0.1", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"depd": "~2.0.0", "depd": "2.0.0",
"inherits": "~2.0.4", "inherits": "2.0.4",
"setprototypeof": "~1.2.0", "setprototypeof": "1.2.0",
"statuses": "~2.0.2", "statuses": "2.0.1",
"toidentifier": "~1.0.1" "toidentifier": "1.0.1"
}, },
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.8"
}
}, },
"funding": { "node_modules/http-errors/node_modules/statuses": {
"type": "opencollective", "version": "2.0.1",
"url": "https://opencollective.com/express" "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
} }
}, },
"node_modules/http-proxy-agent": { "node_modules/http-proxy-agent": {
@@ -1569,7 +1554,6 @@
"resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
"integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"pg-connection-string": "^2.9.1", "pg-connection-string": "^2.9.1",
"pg-pool": "^3.10.1", "pg-pool": "^3.10.1",
@@ -1746,34 +1730,18 @@
} }
}, },
"node_modules/raw-body": { "node_modules/raw-body": {
"version": "3.0.2", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
"integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bytes": "~3.1.2", "bytes": "3.1.2",
"http-errors": "~2.0.1", "http-errors": "2.0.0",
"iconv-lite": "~0.7.0", "iconv-lite": "0.6.3",
"unpipe": "~1.0.0" "unpipe": "1.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.10" "node": ">= 0.8"
}
},
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
"integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/readable-stream": { "node_modules/readable-stream": {

View File

@@ -2,9 +2,7 @@
require('dotenv').config(); require('dotenv').config();
const sql = require('mssql'); const sql = require('mssql');
const oracledb = require('oracledb');
const mysql = require('mysql2/promise'); const mysql = require('mysql2/promise');
const { Client } = require('pg');
/** /**
* Gets a connection based on the configured database type. * Gets a connection based on the configured database type.
@@ -18,14 +16,8 @@ async function getConnection() {
switch (dbType) { switch (dbType) {
case 'MSSQL': case 'MSSQL':
return await sql.connect(config); return await sql.connect(config);
case 'ORACLE':
return await oracledb.getConnection(config);
case 'MARIADB': case 'MARIADB':
return await mysql.createConnection(config); return await mysql.createConnection(config);
case 'POSTGRES':
const client = new Client(config);
await client.connect();
return client;
default: default:
throw new Error('Unsupported database type'); throw new Error('Unsupported database type');
} }
@@ -50,12 +42,6 @@ function getDBConfig(dbType) {
trustServerCertificate: true trustServerCertificate: true
} }
}; };
case 'ORACLE':
return {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
connectString: process.env.ORACLE_CONNECTION_STRING
};
case 'MARIADB': case 'MARIADB':
return { return {
host: process.env.DB_SERVER, host: process.env.DB_SERVER,
@@ -65,14 +51,6 @@ function getDBConfig(dbType) {
database: process.env.DB_DATABASE, database: process.env.DB_DATABASE,
namedPlaceholders: true namedPlaceholders: true
}; };
case 'POSTGRES':
return {
host: process.env.DB_SERVER,
port: parseInt(process.env.DB_PORT, 10) || 5432,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
};
default: default:
throw new Error('Unsupported database type'); throw new Error('Unsupported database type');
} }

View File

@@ -28,15 +28,11 @@ async function formatQueryParams(params) {
case 'MSSQL': case 'MSSQL':
formattedParams = formatMSSQLParams(params, paramsConfig.mssql); formattedParams = formatMSSQLParams(params, paramsConfig.mssql);
break; break;
case 'ORACLE':
formattedParams = formatOracleParams(params, paramsConfig.oracle);
break;
case 'MARIADB': case 'MARIADB':
formattedParams = formatMariaDBParams(params, paramsConfig.mariaDB); formattedParams = formatMariaDBParams(params, paramsConfig.mariaDB);
break; break;
case 'POSTGRES':
formattedParams = formatPostgresParams(params, paramsConfig.postgres);
break;
default: default:
throw new Error('Unsupported database type'); throw new Error('Unsupported database type');
} }
@@ -91,51 +87,6 @@ function formatMSSQLParams(params, config) {
return formattedParams; return formattedParams;
} }
/**
* Formats query parameters for Oracle.
*
* @param {Object} params - An object containing the parameters to format.
* @param {Object} config - Database-specific configuration from JSON.
* @returns {Object} Formatted parameters.
*/
function formatOracleParams(params, config) {
const formattedParams = {};
for (const key in params) {
if (!config[key]) {
console.warn(`Parameter '${key}' not defined in the configuration.`);
continue;
}
const paramConfig = config[key];
let type;
switch (paramConfig.type.toLowerCase()) {
case 'string':
type = oracledb.STRING;
break;
case 'varchar2':
if (!paramConfig.maxLength) {
throw new Error(`Parameter '${key}' is missing maxLength in configuration.`);
}
type = oracledb.VARCHAR2(paramConfig.maxLength);
break;
case 'clob':
type = oracledb.CLOB;
break;
case 'number':
type = oracledb.NUMBER;
break;
case 'boolean':
type = oracledb.BOOLEAN;
break;
default:
throw new Error(`Unsupported parameter type: ${paramConfig.type} for parameter '${key}'`);
}
formattedParams[key] = { type, value: params[key] };
}
return formattedParams;
}
/** /**
* Formats query parameters for MariaDB. * Formats query parameters for MariaDB.
@@ -186,51 +137,5 @@ function formatMariaDBParams(params, config) {
return formattedParams; return formattedParams;
} }
/**
* Formats query parameters for PostgreSQL.
*
* @param {Object} params - An object containing the parameters to format.
* @param {Object} config - Database-specific configuration from JSON.
* @returns {Object} Formatted parameters.
*/
function formatPostgresParams(params, config) {
const formattedParams = {};
for (const key in params) {
if (!config[key]) {
console.warn(`Parameter '${key}' not defined in the configuration.`);
continue;
}
const paramConfig = config[key];
let type;
switch (paramConfig.type.toLowerCase()) {
case 'uuid':
type = 'uuid';
break;
case 'varchar':
if (!paramConfig.length) {
throw new Error(`Parameter '${key}' is missing length in configuration.`);
}
type = { type: 'VARCHAR', length: paramConfig.length };
break;
case 'text':
type = 'text';
break;
case 'int':
type = 'int';
break;
case 'boolean':
type = 'boolean';
break;
default:
throw new Error(`Unsupported parameter type: ${paramConfig.type} for parameter '${key}'`);
}
formattedParams[key] = { type, value: params[key] };
}
return formattedParams;
}
module.exports = { formatQueryParams }; module.exports = { formatQueryParams };

View File

@@ -4,6 +4,7 @@
"Name": { "type": "nvarchar", "maxLength": 255 }, "Name": { "type": "nvarchar", "maxLength": 255 },
"Description": { "type": "nvarchar", "maxLength": 255 }, "Description": { "type": "nvarchar", "maxLength": 255 },
"Building": { "type": "nvarchar", "maxLength": 255 }, "Building": { "type": "nvarchar", "maxLength": 255 },
"Bin": { "type": "nvarchar", "maxLength": 255 },
"Owner": { "type": "nvarchar", "maxLength": 255 }, "Owner": { "type": "nvarchar", "maxLength": 255 },
"Role": { "type": "nvarchar", "maxLength": 255 }, "Role": { "type": "nvarchar", "maxLength": 255 },
"Location": { "type": "nvarchar", "maxLength": 255 }, "Location": { "type": "nvarchar", "maxLength": 255 },
@@ -14,34 +15,14 @@
"Username": { "type": "nvarchar", "maxLength": 50 }, "Username": { "type": "nvarchar", "maxLength": 50 },
"AuthenticatedUsername": { "type": "nvarchar", "maxLength": 50 }, "AuthenticatedUsername": { "type": "nvarchar", "maxLength": 50 },
"UITheme": { "type": "nvarchar", "maxLength": 50 }, "UITheme": { "type": "nvarchar", "maxLength": 50 },
"Bio": { "type": "text" }, "Bio": { "type": "nvarchar", "maxlength": 255 },
"PasswordHash": { "type": "text" }, "PasswordHash": { "type": "text" },
"Image": { "type": "text" }, "Image": { "type": "nvarchar", "maxLength": 255 },
"AvatarURL": { "type": "text" }, "AvatarURL": { "type": "nvarchar", "maxlength": 255 },
"SQL_USER": { "type": "bit" }, "SQL_USER": { "type": "bit" },
"Text": { "type": "nvarchar", "maxLength": 255 } "Text": { "type": "nvarchar", "maxLength": 255 },
}, "Quantity": { "type": "int" },
"oracle": { "RequestPayload": { "type": "text" }
"ID": { "type": "string" },
"Name": { "type": "varchar2", "maxLength": 255 },
"Description": { "type": "varchar2", "maxLength": 255 },
"Text": { "type": "varchar2", "maxLength": 255 },
"Building": { "type": "varchar2", "maxLength": 255 },
"Owner": { "type": "varchar2", "maxLength": 255 },
"Role": { "type": "varchar2", "maxLength": 255 },
"Location": { "type": "varchar2", "maxLength": 255 },
"Route": { "type": "varchar2", "maxLength": 255 },
"Email": { "type": "varchar2", "maxLength": 255 },
"DisplayName": { "type": "varchar2", "maxLength": 255 },
"Team": { "type": "varchar2", "maxLength": 255 },
"Username": { "type": "varchar2", "maxLength": 50 },
"AuthenticatedUsername": { "type": "varchar2", "maxLength": 50 },
"UITheme": { "type": "varchar2", "maxLength": 50 },
"Bio": { "type": "clob" },
"PasswordHash": { "type": "clob" },
"Image": { "type": "clob" },
"AvatarURL": { "type": "clob" },
"SQL_USER": { "type": "boolean" }
}, },
"mariaDB": { "mariaDB": {
"ID": { "type": "uuid" }, "ID": { "type": "uuid" },
@@ -64,27 +45,5 @@
"Image": { "type": "text" }, "Image": { "type": "text" },
"AvatarURL": { "type": "text" }, "AvatarURL": { "type": "text" },
"SQL_USER": { "type": "boolean" } "SQL_USER": { "type": "boolean" }
},
"postgres": {
"ID": { "type": "uuid" },
"Name": { "type": "varchar", "length": 255 },
"Description": { "type": "varchar", "length": 255 },
"Text": { "type": "varchar", "length": 255 },
"Building": { "type": "varchar", "length": 255 },
"Owner": { "type": "varchar", "length": 255 },
"Role": { "type": "varchar", "length": 255 },
"Location": { "type": "varchar", "length": 255 },
"Route": { "type": "varchar", "length": 255 },
"Email": { "type": "varchar", "length": 255 },
"DisplayName": { "type": "varchar", "length": 255 },
"Team": { "type": "varchar", "length": 255 },
"Username": { "type": "varchar", "length": 50 },
"AuthenticatedUsername": { "type": "varchar", "length": 50 },
"UITheme": { "type": "varchar", "length": 50 },
"Bio": { "type": "text" },
"PasswordHash": { "type": "text" },
"Image": { "type": "text" },
"AvatarURL": { "type": "text" },
"SQL_USER": { "type": "boolean" }
} }
} }

View File

@@ -117,14 +117,9 @@ function generateCreateQuery(dbType, table, params) {
.map(key => `@${key}`) .map(key => `@${key}`)
.join(', '); .join(', ');
break; break;
case 'POSTGRES':
placeholders = Object.keys(params).map(() => '?').join(', '); // Use ? for PostgreSQL
break;
case 'MARIADB': case 'MARIADB':
placeholders = Object.keys(params).map(() => `?`).join(', '); // Use ? for MariaDB placeholders = Object.keys(params).map(() => `?`).join(', '); // Use ? for MariaDB
break; break;
case 'ORACLE':
throw new Error('CREATE operation is not supported for ORACLE in this implementation.');
default: default:
throw new Error('Unsupported database type for this operation!'); throw new Error('Unsupported database type for this operation!');
} }
@@ -161,22 +156,6 @@ function generateReadQuery(dbType, table, params) {
condition = `${key} = @${key}`; condition = `${key} = @${key}`;
} }
break; break;
case 'ORACLE':
if (params.partialMatch) {
condition = `${key} LIKE '%' || :${key} || '%'`;
params[key] = `%${params[key]}%`; // Add % wildcard in params
} else {
condition = `${key} = :${key}`;
}
break;
case 'POSTGRES':
if (params.partialMatch) {
condition = `${key} LIKE $1`;
params[key] = `%${params[key]}%`; // Add % wildcard in params
} else {
condition = `${key} = $1`;
}
break;
case 'MARIADB': case 'MARIADB':
if (params.partialMatch) { if (params.partialMatch) {
condition = `${key} LIKE ?`; condition = `${key} LIKE ?`;
@@ -231,9 +210,6 @@ async function generateUpdateQuery(dbType, table, params) {
case 'MSSQL': case 'MSSQL':
whereClause = `WHERE ID = @ID`; whereClause = `WHERE ID = @ID`;
break; break;
case 'POSTGRES':
whereClause = `WHERE ID = $2`;
break;
case 'MARIADB': case 'MARIADB':
whereClause = `WHERE ID = ?`; whereClause = `WHERE ID = ?`;
break; break;
@@ -258,12 +234,8 @@ async function generateDeleteQuery(dbType, table, params) {
switch (dbType.toUpperCase()) { switch (dbType.toUpperCase()) {
case 'MSSQL': case 'MSSQL':
return `DELETE FROM ${table} WHERE ID = @ID;`; return `DELETE FROM ${table} WHERE ID = @ID;`;
case 'POSTGRES':
return `DELETE FROM ${table} WHERE ID = $1;`; // Use $1 for PostgreSQL
case 'MARIADB': case 'MARIADB':
return `DELETE FROM ${table} WHERE ID = ?;`; return `DELETE FROM ${table} WHERE ID = ?;`;
case 'ORACLE':
throw new Error('DELETE operation is not supported for ORACLE in this implementation.');
default: default:
throw new Error('Unsupported database type!'); throw new Error('Unsupported database type!');
} }
@@ -279,57 +251,10 @@ async function generateTestQuery(dbType) {
switch (dbType.toUpperCase()) { switch (dbType.toUpperCase()) {
case 'MSSQL': case 'MSSQL':
return `SELECT @@SPID;`; return `SELECT @@SPID;`;
case 'POSTGRES':
return `SELECT pg_backend_pid();`; // Use $1 for PostgreSQL
case 'MARIADB': case 'MARIADB':
return `SELECT CONNECTION_ID();`; return `SELECT CONNECTION_ID();`;
case 'ORACLE':
return `SELECT SYS_CONTEXT('USERENV', 'SESSIONID') FROM dual;`;
default: default:
throw new Error('Unsupported database type!'); throw new Error('Unsupported database type!');
} }
} }
/*
*
* I intend to implement "compare" functionality but haven't yet decided how to do so. This is some spitballed code that I came up with for this exercise, and I hope to complete work on it in the future.
/**
* Generates a COMPARE SQL query string based on database type, table, and parameters.
*
* @param {string} dbType - Type of database (e.g., 'MSSQL', 'ORACLE').
* @param {Object} params - Parameters for the SQL query.
* @returns {string} The constructed COMPARE SQL query string.
*
function generateCompareQuery(dbType, table, params) {
const { compareTable, idField } = params;
switch (dbType.toUpperCase()) {
case 'MSSQL':
return `
SELECT a.*
FROM ${table} a
JOIN ${compareTable} b ON a.${idField} = b.${idField}
`;
case 'ORACLE':
return `
SELECT a.*
FROM ${table} a
JOIN ${compareTable} b ON a.${idField} = b.${idField}
`;
case 'POSTGRES':
return `
SELECT a.*
FROM ${table} a
JOIN ${compareTable} b ON a.${idField} = b.${idField}
`;
case 'MARIADB':
return `
SELECT a.*
FROM ${table} a
JOIN ${compareTable} b ON a.${idField} = b.${idField}
`;
default:
throw new Error('Unsupported database type');
}
}*/
module.exports = { generateQuery }; module.exports = { generateQuery };

View File

@@ -32,21 +32,11 @@ async function executeQuery(table, operation, params) {
console.log('Formatted parameters for MSSQL:', formattedParams); // Log the formatted parameters console.log('Formatted parameters for MSSQL:', formattedParams); // Log the formatted parameters
result = await executeMSSQLQuery(connection, query, formattedParams); result = await executeMSSQLQuery(connection, query, formattedParams);
break; break;
case 'ORACLE':
console.log('Executing Oracle query:', query); // Debugging log
console.log('Formatted parameters for Oracle:', formattedParams); // Log the formatted parameters
result = await executeOracleQuery(connection, query, formattedParams);
break;
case 'MARIADB': case 'MARIADB':
console.log('Executing MariaDB query:', query); // Debugging log console.log('Executing MariaDB query:', query); // Debugging log
console.log('Formatted parameters for MariaDB:', formattedParams); // Log the formatted parameters console.log('Formatted parameters for MariaDB:', formattedParams); // Log the formatted parameters
result = await executeMariaDBQuery(connection, query, formattedParams); result = await executeMariaDBQuery(connection, query, formattedParams);
break; break;
case 'POSTGRES':
console.log('Executing PostgreSQL query:', query); // Debugging log
console.log('Formatted parameters for PostgreSQL:', formattedParams); // Log the formatted parameters
result = await executePostgresQuery(connection, query, formattedParams);
break;
default: default:
throw new Error('Unsupported database type'); throw new Error('Unsupported database type');
} }
@@ -91,30 +81,6 @@ async function executeMSSQLQuery(connection, query, params) {
} }
} }
async function executeOracleQuery(connection, query, params) {
const binds = {};
// Bind each parameter with its name and value
Object.keys(params).forEach((key, index) => {
binds[`param${index + 1}`] = { type: params[key].type, val: params[key].value };
});
const options = {
outFormat: require('oracledb').OUT_FORMAT_OBJECT
};
try {
console.log('Executing Oracle query:', query); // Debugging log
console.log('Binding parameters for Oracle:', binds); // Debugging log
const result = await connection.execute(query, binds, options);
return { recordset: result.rows, affectedRows: result.rowsAffected };
} catch (error) {
console.error('Error executing Oracle query:', error.message);
throw error;
}
}
async function executeMariaDBQuery(connection, query, params) { async function executeMariaDBQuery(connection, query, params) {
try { try {
// Extract parameter values in order // Extract parameter values in order
@@ -130,20 +96,4 @@ async function executeMariaDBQuery(connection, query, params) {
} }
} }
async function executePostgresQuery(connection, query, params) {
try {
// Extract parameter values in order
const paramValues = Object.keys(params).map(key => params[key].value);
console.log('Executing PostgreSQL query:', query); // Debugging log
console.log('Binding parameters for PostgreSQL:', paramValues); // Debugging log
const result = await connection.query(query, paramValues);
return { recordset: result.rows };
} catch (error) {
console.error('Error executing PostgreSQL query:', error.message);
throw error;
}
}
module.exports = { executeQuery }; module.exports = { executeQuery };