@@ -8,6 +8,9 @@ import { CloudflareD1Connection, MongoDBConnection, MySQLConnection, PostgreSQLC
88import { DataSource } from './types' ;
99import { Env } from './'
1010import { MongoClient } from 'mongodb' ;
11+ import { afterQueryCache , beforeQueryCache } from './cache' ;
12+
13+ let globalConnection : any = null ;
1114
1215export type OperationQueueItem = {
1316 queries : { sql : string ; params ?: any [ ] } [ ] ;
@@ -46,7 +49,7 @@ async function afterQuery(sql: string, result: any, isRaw: boolean, dataSource?:
4649 result = isRaw ? transformRawResults ( result , 'from' ) : result ;
4750
4851 // ## DO NOT REMOVE: POST QUERY HOOK ##
49-
52+
5053 return isRaw ? transformRawResults ( result , 'to' ) : result ;
5154}
5255
@@ -132,6 +135,13 @@ export async function executeQuery(sql: string, params: any | undefined, isRaw:
132135 }
133136
134137 const { sql : updatedSQL , params : updatedParams } = await beforeQuery ( sql , params , dataSource , env )
138+
139+ // If a cached version of this query request exists, this function will fetch the cached results.
140+ const cache = await beforeQueryCache ( updatedSQL , updatedParams , dataSource )
141+ if ( cache ) {
142+ return cache
143+ }
144+
135145 let response ;
136146
137147 if ( dataSource . source === 'internal' ) {
@@ -140,6 +150,9 @@ export async function executeQuery(sql: string, params: any | undefined, isRaw:
140150 response = await executeExternalQuery ( updatedSQL , updatedParams , isRaw , dataSource , env ) ;
141151 }
142152
153+ // If this is a cacheable query, this function will handle that logic.
154+ await afterQueryCache ( sql , updatedParams , response , dataSource )
155+
143156 return await afterQuery ( updatedSQL , response , isRaw , dataSource , env ) ;
144157}
145158
@@ -248,30 +261,31 @@ export async function executeSDKQuery(sql: string, params: any | undefined, isRa
248261 return [ ]
249262 }
250263
251- let db ;
252-
253- if ( env ?. EXTERNAL_DB_TYPE === 'postgres' ) {
254- const { database } = await createSDKPostgresConnection ( env )
255- db = database
256- } else if ( env ?. EXTERNAL_DB_TYPE === 'mysql' && env ) {
257- const { database } = await createSDKMySQLConnection ( env )
258- db = database
259- } else if ( env ?. EXTERNAL_DB_TYPE === 'mongo' && env ) {
260- const { database } = await createSDKMongoConnection ( env )
261- db = database
262- } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_CLOUDFLARE_API_KEY && env ) {
263- const { database } = await createSDKCloudflareConnection ( env )
264- db = database
265- } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_STARBASEDB_URI && env ) {
266- const { database } = await createSDKStarbaseConnection ( env )
267- db = database
268- } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_TURSO_URI && env ) {
269- const { database } = await createSDKTursoConnection ( env )
270- db = database
264+ // Initialize connection if it doesn't exist
265+ if ( ! globalConnection ) {
266+ if ( env ?. EXTERNAL_DB_TYPE === 'postgres' ) {
267+ const { database } = await createSDKPostgresConnection ( env )
268+ globalConnection = database ;
269+ } else if ( env ?. EXTERNAL_DB_TYPE === 'mysql' && env ) {
270+ const { database } = await createSDKMySQLConnection ( env )
271+ globalConnection = database ;
272+ } else if ( env ?. EXTERNAL_DB_TYPE === 'mongo' && env ) {
273+ const { database } = await createSDKMongoConnection ( env )
274+ globalConnection = database ;
275+ } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_CLOUDFLARE_API_KEY && env ) {
276+ const { database } = await createSDKCloudflareConnection ( env )
277+ globalConnection = database ;
278+ } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_STARBASEDB_URI && env ) {
279+ const { database } = await createSDKStarbaseConnection ( env )
280+ globalConnection = database ;
281+ } else if ( env ?. EXTERNAL_DB_TYPE === 'sqlite' && env ?. EXTERNAL_DB_TURSO_URI && env ) {
282+ const { database } = await createSDKTursoConnection ( env )
283+ globalConnection = database ;
284+ }
285+
286+ await globalConnection . connect ( ) ;
271287 }
272288
273- await db . connect ( ) ;
274- const { data } = await db . raw ( sql , params ) ;
275-
289+ const { data } = await globalConnection . raw ( sql , params ) ;
276290 return data ;
277291}
0 commit comments