Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 21 additions & 14 deletions tests/System/plugins/db.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import postgres from 'postgres';
// Items cache which are added by an insert statement
let insertedItems = [];

// Use of the PostgreSQL connection pool to limit the number of sessions, see
// https://github.com/porsager/postgres?tab=readme-ov-file#connection-details
let postgresConnectionPool = null;

/**
* Does run the given query against the database from the configuration. It caches all inserted items.
*
Expand All @@ -29,17 +33,20 @@ function queryTestDB(joomlaQuery, config) {
insertedItems.push(insertItem);
}

// Check if the DB is from postgres
// Do we use PostgreSQL?
if (config.env.db_type === 'pgsql' || config.env.db_type === 'PostgreSQL (PDO)') {
const connection = postgres({
host: config.env.db_host,
port: config.env.db_port,
database: config.env.db_name,
username: config.env.db_user,
password: config.env.db_password,
idle_timeout: 1,
max_lifetime: 1,
});

if (postgresConnectionPool === null) {
// Initialisation on the first call
postgresConnectionPool = postgres({
host: config.env.db_host,
port: config.env.db_port,
database: config.env.db_name,
username: config.env.db_user,
password: config.env.db_password,
max: 10, // Use only this (unchanged default) maximum number of connections in the pool
});
}

// Postgres delivers the data direct as result of the insert query
if (insertItem) {
Expand All @@ -49,7 +56,7 @@ function queryTestDB(joomlaQuery, config) {
// Postgres needs double quotes
query = query.replaceAll('`', '"');

return connection.unsafe(query).then((result) => {
return postgresConnectionPool.unsafe(query).then((result) => {
// Select query should always return an array
if (query.indexOf('SELECT') === 0 && !Array.isArray(result)) {
return [result];
Expand All @@ -64,12 +71,12 @@ function queryTestDB(joomlaQuery, config) {
insertItem.rows.push(result[0].id);
}

// Normalize the object
// Normalize the object and return from PostgreSQL
return { insertId: result[0].id };
});
}

// Return a promise which runs the query
// Return a promise which runs the query for MariaDB / MySQL
return new Promise((resolve, reject) => {
// Create the connection and connect
const connection = mysql.createConnection({
Expand All @@ -94,7 +101,7 @@ function queryTestDB(joomlaQuery, config) {
insertItem.rows.push(results.insertId);
}

// Resolve the result
// Resolve the result from MariaDB / MySQL
return resolve(results);
});
});
Expand Down