Skip to content

Commit

Permalink
enabled support, pre tests
Browse files Browse the repository at this point in the history
  • Loading branch information
yoav0gal committed Jan 10, 2024
1 parent 51c4857 commit 234c4cd
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 27 deletions.
16 changes: 8 additions & 8 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ export default fp<HanaOptions>(
*/
async function executeQuery(
query: string,
parameters: ExecuteQueryParameters
parameters: ExecuteQueryParameters = []
) {
//Convert named parameter binding format to the hana client index based binding format
if (!Array.isArray(parameters)) {
[query, parameters] = namedParameterBindingSupport(query, parameters);
}

const conn = await pool.getConnection();
const conn = pool.getConnection();
try {
const result = await conn.exec(query, parameters);
return result;
Expand All @@ -47,11 +47,11 @@ export default fp<HanaOptions>(
) {
const conn = await pool.getConnection();
try {
await conn.setAutoCommit(false);
conn.setAutoCommit(false);
await actions(conn);
await conn.commit();
conn.commit();
} catch (err) {
await conn.rollback();
conn.rollback();
throw err;
} finally {
conn.disconnect();
Expand All @@ -64,9 +64,9 @@ export default fp<HanaOptions>(
fastify.decorate("executeInTransaction", executeInTransaction);

// Clear the pool on application close
fastify.addHook("onClose", async (_instance, done) => {
//@ts-ignore
fastify.addHook("onClose", async (_instance) => {
await pool.clear();
done();
});
},
{
Expand All @@ -76,4 +76,4 @@ export default fp<HanaOptions>(
);

export { namedParameterBindingSupport } from "./namedParametersSupport";
export { HanaOptions } from "./types";
export type { HanaOptions } from "./types";
2 changes: 1 addition & 1 deletion src/namedParametersSupport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export function namedParameterBindingSupport(

// Replace all parameter placeholders in the query string
const formattedQuery = query.replaceAll(
/:(\w+)/g,
/(?<!:):(\w+)/g,
(_matchedSubString, paramName) => {
const paramValue = params[paramName];

Expand Down
51 changes: 33 additions & 18 deletions test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ async function executeQueryTest(t) {
await fastify.ready();

const result = await fastify.executeQuery(
"SELECT * FROM TestTable WHERE id = :id",
'SELECT * FROM "test_module.test_folder::TestTable" WHERE id = :id',
{ id: 1 }
);
t.same(result, MOCK_DATA);
Expand All @@ -53,7 +53,10 @@ async function executeQueryFailTest(t) {
await fastify.ready();

try {
await fastify.executeQuery("SELECT * FROM TestTable WHERE id = ?", []);
await fastify.executeQuery(
'SELECT * FROM "test_module.test_folder::TestTable" WHERE id = ?',
[]
);
t.fail("Should have thrown an error");
} catch (error) {
t.type(error, Error);
Expand All @@ -76,14 +79,17 @@ async function executeInTransactionTest(t) {
// This function was created in order to avoid tap's to-do mesage
async function validExecuteInTransaction() {
await fastify.executeInTransaction(async (conn) => {
await conn.exec("INSERT INTO MY_TABLE (ID, NAME) VALUES (:id, :name)", {
id: 1,
name: "test",
});
await conn.exec("INSERT INTO MY_TABLE (ID, NAME) VALUES (?, ?)", [
2,
"name2",
]);
await conn.exec(
'INSERT INTO "my_module.my_folder::MY_TABLE" (ID, NAME) VALUES (:id, :name)',
{
id: 1,
name: "test",
}
);
await conn.exec(
'INSERT INTO "my_module.my_folder::MY_TABLE" (ID, NAME) VALUES (?, ?)',
[2, "name2"]
);
});
}

Expand All @@ -105,11 +111,17 @@ async function executeInTransactionFailTest(t) {

try {
await fastify.executeInTransaction(async (conn) => {
await conn.exec("INSERT INTO MY_TABLE (ID, NAME) VALUES (:id, :name)", {
id: 1,
name: "test",
});
await conn.exec("INSERT INTO MY_TABLE (ID, NAME) VALUES (?, ?)", [2]);
await conn.exec(
'INSERT INTO "my_module.my_folder::MY_TABLE" (ID, NAME) VALUES (:id, :name)',
{
id: 1,
name: "test",
}
);
await conn.exec(
'INSERT INTO "my_module.my_folder::MY_TABLE" (ID, NAME) VALUES (?, ?)',
[2]
);
});
t.fail("Should have thrown an error");
} catch (error) {
Expand All @@ -124,11 +136,14 @@ async function executeInTransactionFailTest(t) {
*/
function namedParameterBindingTest(t) {
const [query, parameters] = namedParameterBindingSupport(
"SELECT * FROM TestTable WHERE id = :id AND value = :value",
'SELECT * FROM "test_module.test_folder::TestTable" WHERE id = :id AND value = :value',
{ id: 1, value: "test" }
);

t.equal(query, "SELECT * FROM TestTable WHERE id = ? AND value = ?");
t.equal(
query,
'SELECT * FROM "test_module.test_folder::TestTable" WHERE id = ? AND value = ?'
);
t.same(parameters, [1, "test"]);
t.end();
}
Expand All @@ -140,7 +155,7 @@ function namedParameterBindingErrorTest(t) {
t.throws(
() =>
namedParameterBindingSupport(
"SELECT * FROM TestTable WHERE id = :id AND value = :value",
'SELECT * FROM "test_module.test_folder::TestTable" WHERE id = :id AND value = :value',
{ id: 1 }
),
new Error("value is missing")
Expand Down

0 comments on commit 234c4cd

Please sign in to comment.