@jakub.knejzlik/ts-query-server
Advanced tools
Comparing version
import { SelectQuery } from "@jakub.knejzlik/ts-query"; | ||
import * as mysql from "mysql2/promise"; | ||
import { QueryRouterClient, QueryRouterClientOpts } from "./client"; | ||
@@ -6,2 +7,3 @@ interface QueryRouterClientMySQLOpts extends Partial<QueryRouterClientOpts> { | ||
databaseName: string; | ||
poolOptions?: mysql.PoolOptions; | ||
} | ||
@@ -16,2 +18,3 @@ export declare class QueryRouterClientMySQL extends QueryRouterClient<QueryRouterClientMySQLOpts> { | ||
sqls: string[]; | ||
poolOptions?: mysql.PoolOptions; | ||
} | ||
@@ -21,3 +24,3 @@ export interface ExecuteQueryResult { | ||
} | ||
export declare const executeQueries: (event: ExecuteQueriesOpts) => Promise<ExecuteQueryResult>; | ||
export declare const executeQueries: (opts: ExecuteQueriesOpts) => Promise<ExecuteQueryResult>; | ||
export {}; |
@@ -48,6 +48,8 @@ "use strict"; | ||
async executeQueries(queries) { | ||
const { databaseUrl, databaseName, poolOptions } = this.opts; | ||
const res = await (0, exports.executeQueries)({ | ||
databaseUrl: this.opts.databaseUrl, | ||
databaseName: this.opts.databaseName, | ||
databaseUrl, | ||
databaseName, | ||
sqls: queries.map((query) => query.toSQL(this.opts.flavor)), | ||
poolOptions, | ||
}); | ||
@@ -64,23 +66,21 @@ return res.results; | ||
} | ||
function getPool(poolKey, databaseUrl) { | ||
function getPool(poolKey, databaseUrl, poolOptions) { | ||
if (!poolCache[poolKey]) { | ||
poolCache[poolKey] = mysql.createPool({ | ||
uri: databaseUrl, | ||
multipleStatements: true, | ||
}); | ||
poolCache[poolKey] = mysql.createPool(Object.assign(Object.assign({ uri: databaseUrl }, poolOptions), { multipleStatements: true })); | ||
} | ||
return poolCache[poolKey]; | ||
} | ||
const executeQueries = async (event) => { | ||
if (event.sqls.length === 0) | ||
const executeQueries = async (opts) => { | ||
const { poolOptions, databaseName, sqls } = opts; | ||
if (sqls.length === 0) | ||
return { results: [] }; | ||
const databaseUrl = event.databaseUrl | ||
const databaseUrl = opts.databaseUrl | ||
.replace("{{MYSQL_USER}}", process.env.MYSQL_USER || "") | ||
.replace("{{MYSQL_PASSWORD}}", process.env.MYSQL_PASSWORD || ""); | ||
const poolKey = createPoolKey(databaseUrl); | ||
const pool = getPool(poolKey, databaseUrl); | ||
const pool = getPool(poolKey, databaseUrl, poolOptions); | ||
let connection = null; | ||
try { | ||
connection = await pool.getConnection(); | ||
const sql = `USE \`${event.databaseName}\`;\n` + event.sqls.join(";\n"); | ||
const sql = `USE \`${databaseName}\`;\n` + sqls.join(";\n"); | ||
const [results] = await connection.query({ sql }); | ||
@@ -87,0 +87,0 @@ return { results: results.slice(1) }; |
{ | ||
"name": "@jakub.knejzlik/ts-query-server", | ||
"version": "0.1.18", | ||
"version": "0.1.19", | ||
"description": "TypeScript library for executing SQL queries built with ts-query across diverse server environments.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -9,2 +9,3 @@ import { Q, SelectQuery } from "@jakub.knejzlik/ts-query"; | ||
databaseName: string; | ||
poolOptions?: mysql.PoolOptions; | ||
} | ||
@@ -18,6 +19,8 @@ | ||
async executeQueries(queries: SelectQuery[]): Promise<any[]> { | ||
const { databaseUrl, databaseName, poolOptions } = this.opts; | ||
const res = await executeQueries({ | ||
databaseUrl: this.opts.databaseUrl, | ||
databaseName: this.opts.databaseName, | ||
databaseUrl, | ||
databaseName, | ||
sqls: queries.map((query) => query.toSQL(this.opts.flavor)), | ||
poolOptions, | ||
}); | ||
@@ -32,2 +35,3 @@ return res.results; | ||
sqls: string[]; | ||
poolOptions?: mysql.PoolOptions; | ||
} | ||
@@ -47,6 +51,11 @@ | ||
function getPool(poolKey: string, databaseUrl: string): mysql.Pool { | ||
function getPool( | ||
poolKey: string, | ||
databaseUrl: string, | ||
poolOptions?: mysql.PoolOptions | ||
): mysql.Pool { | ||
if (!poolCache[poolKey]) { | ||
poolCache[poolKey] = mysql.createPool({ | ||
uri: databaseUrl, | ||
...poolOptions, | ||
multipleStatements: true, | ||
@@ -59,11 +68,12 @@ }); | ||
export const executeQueries = async ( | ||
event: ExecuteQueriesOpts | ||
opts: ExecuteQueriesOpts | ||
): Promise<ExecuteQueryResult> => { | ||
if (event.sqls.length === 0) return { results: [] }; | ||
const { poolOptions, databaseName, sqls } = opts; | ||
if (sqls.length === 0) return { results: [] }; | ||
const databaseUrl = event.databaseUrl | ||
const databaseUrl = opts.databaseUrl | ||
.replace("{{MYSQL_USER}}", process.env.MYSQL_USER || "") | ||
.replace("{{MYSQL_PASSWORD}}", process.env.MYSQL_PASSWORD || ""); | ||
const poolKey = createPoolKey(databaseUrl); | ||
const pool = getPool(poolKey, databaseUrl); | ||
const pool = getPool(poolKey, databaseUrl, poolOptions); | ||
let connection: mysql.PoolConnection | null = null; | ||
@@ -74,3 +84,3 @@ | ||
const sql = `USE \`${event.databaseName}\`;\n` + event.sqls.join(";\n"); | ||
const sql = `USE \`${databaseName}\`;\n` + sqls.join(";\n"); | ||
const [results] = await connection.query({ sql }); | ||
@@ -77,0 +87,0 @@ |
24133
1.91%549
2.43%