@@ -44,7 +44,8 @@ export const preparePostgresDB = async (
4444 | 'pg'
4545 | 'postgres'
4646 | '@vercel/postgres'
47- | '@neondatabase/serverless' ;
47+ | '@neondatabase/serverless'
48+ | 'bun' ;
4849 proxy : Proxy ;
4950 transactionProxy : TransactionProxy ;
5051 migrate : ( config : string | MigrationConfig ) => Promise < void | MigratorInitFailResponse > ;
@@ -559,8 +560,64 @@ export const preparePostgresDB = async (
559560 return { packageName : '@neondatabase/serverless' , query, proxy, transactionProxy, migrate : migrateFn } ;
560561 }
561562
563+ if ( await checkPackage ( 'bun' ) ) {
564+ console . log ( withStyle . info ( `Using 'bun' driver for database querying` ) ) ;
565+ const { SQL } = await import ( 'bun' ) ;
566+ const { drizzle } = await import ( 'drizzle-orm/bun-sql' ) ;
567+ const { migrate } = await import ( 'drizzle-orm/bun-sql/migrator' ) ;
568+
569+ const ssl = 'ssl' in credentials
570+ ? credentials . ssl === 'prefer'
571+ || credentials . ssl === 'require'
572+ || credentials . ssl === 'allow'
573+ ? true
574+ : false
575+ : undefined ;
576+
577+ const client = new SQL ( {
578+ adapter : 'postgres' ,
579+ ...credentials ,
580+ ssl,
581+ max : 1 ,
582+ } ) ;
583+ const db = drizzle ( { client } ) ;
584+ const migrateFn = async ( config : MigrationConfig ) => {
585+ return migrate ( db , config ) ;
586+ } ;
587+
588+ const query = async ( sql : string , params ?: any [ ] ) => {
589+ const result = await client . unsafe ( sql , params ?? [ ] ) ;
590+ return result ;
591+ } ;
592+
593+ const proxy : Proxy = async ( params ) => {
594+ const query = client . unsafe ( params . sql , params . params ) ;
595+ if ( params . mode === 'array' ) {
596+ return await query . values ( ) ;
597+ }
598+ return await query ;
599+ } ;
600+
601+ const transactionProxy : TransactionProxy = async ( queries ) => {
602+ const results : any [ ] = [ ] ;
603+ try {
604+ await client . transaction ( async ( tx ) => {
605+ for ( const query of queries ) {
606+ const result = await tx . unsafe ( query . sql ) ;
607+ results . push ( result ) ;
608+ }
609+ } ) ;
610+ } catch ( error ) {
611+ results . push ( error as Error ) ;
612+ }
613+ return results ;
614+ } ;
615+
616+ return { packageName : 'bun' , query, proxy, transactionProxy, migrate : migrateFn } ;
617+ }
618+
562619 console . error (
563- "To connect to Postgres database - please install either of 'pg', 'postgres', '@neondatabase/serverless' or '@vercel/postgres' drivers" ,
620+ "To connect to Postgres database - please install either of 'pg', 'postgres', 'bun', ' @neondatabase/serverless' or '@vercel/postgres' drivers" ,
564621 ) ;
565622 process . exit ( 1 ) ;
566623} ;
@@ -859,7 +916,7 @@ export const connectToMySQL = async (
859916 it : MysqlCredentials ,
860917) : Promise < {
861918 db : DB ;
862- packageName : 'mysql2' | '@planetscale/database' ;
919+ packageName : 'mysql2' | '@planetscale/database' | 'bun' ;
863920 proxy : Proxy ;
864921 transactionProxy : TransactionProxy ;
865922 database : string ;
@@ -868,6 +925,7 @@ export const connectToMySQL = async (
868925 const result = parseMysqlCredentials ( it ) ;
869926
870927 if ( await checkPackage ( 'mysql2' ) ) {
928+ console . log ( withStyle . info ( `Using 'mysql2' driver for database querying` ) ) ;
871929 const { createConnection } = await import ( 'mysql2/promise' ) ;
872930 const { drizzle } = await import ( 'drizzle-orm/mysql2' ) ;
873931 const { migrate } = await import ( 'drizzle-orm/mysql2/migrator' ) ;
@@ -945,6 +1003,7 @@ export const connectToMySQL = async (
9451003 }
9461004
9471005 if ( await checkPackage ( '@planetscale/database' ) ) {
1006+ console . log ( withStyle . info ( `Using '@planetscale/database' driver for database querying` ) ) ;
9481007 const { Client } = await import ( '@planetscale/database' ) ;
9491008 const { drizzle } = await import ( 'drizzle-orm/planetscale-serverless' ) ;
9501009 const { migrate } = await import (
@@ -1000,8 +1059,73 @@ export const connectToMySQL = async (
10001059 } ;
10011060 }
10021061
1062+ if ( await checkPackage ( 'bun' ) ) {
1063+ console . log ( withStyle . info ( `Using 'bun' driver for database querying` ) ) ;
1064+ const { SQL } = await import ( 'bun' ) ;
1065+ const { drizzle } = await import ( 'drizzle-orm/bun-sql' ) ;
1066+ const { migrate } = await import ( 'drizzle-orm/bun-sql/migrator' ) ;
1067+
1068+ const ssl = result . credentials && 'ssl' in result . credentials
1069+ ? result . credentials . ssl === 'prefer'
1070+ || result . credentials . ssl === 'require'
1071+ || result . credentials . ssl === 'allow'
1072+ ? true
1073+ : false
1074+ : undefined ;
1075+
1076+ const client = result . url
1077+ ? new SQL ( result . url )
1078+ : new SQL ( {
1079+ adapter : 'mysql' ,
1080+ ...result . credentials ,
1081+ ssl,
1082+ } ) ;
1083+
1084+ const db = drizzle ( { client } ) ;
1085+ const migrateFn = async ( config : MigrationConfig ) => {
1086+ return migrate ( db , config ) ;
1087+ } ;
1088+
1089+ const query = async ( sql : string , params ?: any [ ] ) => {
1090+ const result = await client . unsafe ( sql , params ?? [ ] ) ;
1091+ return result ;
1092+ } ;
1093+
1094+ const proxy : Proxy = async ( params ) => {
1095+ const query = client . unsafe ( params . sql , params . params ) ;
1096+ if ( params . mode === 'array' ) {
1097+ return await query . values ( ) ;
1098+ }
1099+ return await query ;
1100+ } ;
1101+
1102+ const transactionProxy : TransactionProxy = async ( queries ) => {
1103+ const results : any [ ] = [ ] ;
1104+ try {
1105+ await client . transaction ( async ( tx ) => {
1106+ for ( const query of queries ) {
1107+ const result = await tx . unsafe ( query . sql ) ;
1108+ results . push ( result ) ;
1109+ }
1110+ } ) ;
1111+ } catch ( error ) {
1112+ results . push ( error as Error ) ;
1113+ }
1114+ return results ;
1115+ } ;
1116+
1117+ return {
1118+ packageName : 'bun' ,
1119+ db : { query } ,
1120+ proxy,
1121+ transactionProxy,
1122+ migrate : migrateFn ,
1123+ database : result . database ,
1124+ } ;
1125+ }
1126+
10031127 console . error (
1004- "To connect to MySQL database - please install either of 'mysql2' or '@planetscale/database' drivers" ,
1128+ "To connect to MySQL database - please install either of 'mysql2', 'bun' or '@planetscale/database' drivers" ,
10051129 ) ;
10061130 process . exit ( 1 ) ;
10071131} ;
@@ -1129,7 +1253,13 @@ export const connectToSQLite = async (
11291253) : Promise <
11301254 & SQLiteDB
11311255 & {
1132- packageName : 'd1-http' | '@libsql/client' | 'better-sqlite3' | '@sqlitecloud/drivers' | '@tursodatabase/database' ;
1256+ packageName :
1257+ | 'd1-http'
1258+ | '@libsql/client'
1259+ | 'better-sqlite3'
1260+ | '@sqlitecloud/drivers'
1261+ | '@tursodatabase/database'
1262+ | 'bun' ;
11331263 migrate : ( config : string | MigrationConfig ) => Promise < void | MigratorInitFailResponse > ;
11341264 proxy : Proxy ;
11351265 transactionProxy : TransactionProxy ;
@@ -1246,15 +1376,14 @@ export const connectToSQLite = async (
12461376 ) ;
12471377 } ;
12481378
1249- const db : SQLiteDB = {
1250- query : async < T > ( sql : string , params ?: any [ ] ) => {
1251- const res = await remoteCallback ( sql , params || [ ] , 'all' ) ;
1252- return res . rows as T [ ] ;
1253- } ,
1254- run : async ( query : string ) => {
1255- await remoteCallback ( query , [ ] , 'run' ) ;
1256- } ,
1379+ const query = async < T > ( sql : string , params ?: any [ ] ) => {
1380+ const res = await remoteCallback ( sql , params || [ ] , 'all' ) ;
1381+ return res . rows as T [ ] ;
1382+ } ;
1383+ const run = async ( query : string ) => {
1384+ await remoteCallback ( query , [ ] , 'run' ) ;
12571385 } ;
1386+
12581387 const proxy : Proxy = async ( params ) => {
12591388 const preparedParams = prepareSqliteParams ( params . params || [ ] , 'd1-http' ) ;
12601389 const result = await remoteCallback (
@@ -1269,7 +1398,7 @@ export const connectToSQLite = async (
12691398 const result = await remoteBatchCallback ( queries ) ;
12701399 return result . rows ;
12711400 } ;
1272- return { ... db , packageName : 'd1-http' , proxy, transactionProxy, migrate : migrateFn } ;
1401+ return { query , run , packageName : 'd1-http' , proxy, transactionProxy, migrate : migrateFn } ;
12731402 } else if ( driver === 'sqlite-cloud' ) {
12741403 assertPackages ( '@sqlitecloud/drivers' ) ;
12751404 const { Database } = await import ( '@sqlitecloud/drivers' ) ;
@@ -1360,6 +1489,7 @@ export const connectToSQLite = async (
13601489 }
13611490
13621491 if ( await checkPackage ( '@libsql/client' ) ) {
1492+ console . log ( withStyle . info ( `Using '@libsql/client' driver for database querying` ) ) ;
13631493 const { createClient } = await import ( '@libsql/client' ) ;
13641494 const { drizzle } = await import ( 'drizzle-orm/libsql' ) ;
13651495 const { migrate } = await import ( 'drizzle-orm/libsql/migrator' ) ;
@@ -1372,18 +1502,12 @@ export const connectToSQLite = async (
13721502 return migrate ( drzl , config ) ;
13731503 } ;
13741504
1375- const db : SQLiteDB = {
1376- query : async < T > ( sql : string , params ?: any [ ] ) => {
1377- const res = await client . execute ( { sql, args : params || [ ] } ) . catch ( ( e ) => {
1378- throw new QueryError ( e , sql , params || [ ] ) ;
1379- } ) ;
1380- return res . rows as T [ ] ;
1381- } ,
1382- run : async ( query : string ) => {
1383- await client . execute ( query ) . catch ( ( e ) => {
1384- throw new QueryError ( e , query , [ ] ) ;
1385- } ) ;
1386- } ,
1505+ const query = async < T > ( sql : string , params ?: any [ ] ) => {
1506+ const res = await client . execute ( { sql, args : params || [ ] } ) ;
1507+ return res . rows as T [ ] ;
1508+ } ;
1509+ const run = async ( query : string ) => {
1510+ await client . execute ( query ) ;
13871511 } ;
13881512
13891513 type Transaction = Awaited < ReturnType < typeof client . transaction > > ;
@@ -1423,7 +1547,7 @@ export const connectToSQLite = async (
14231547 return results ;
14241548 } ;
14251549
1426- return { ... db , packageName : '@libsql/client' , proxy, transactionProxy, migrate : migrateFn } ;
1550+ return { query , run , packageName : '@libsql/client' , proxy, transactionProxy, migrate : migrateFn } ;
14271551 }
14281552
14291553 if ( await checkPackage ( '@tursodatabase/database' ) ) {
@@ -1482,6 +1606,7 @@ export const connectToSQLite = async (
14821606 }
14831607
14841608 if ( await checkPackage ( 'better-sqlite3' ) ) {
1609+ console . log ( withStyle . info ( `Using 'better-sqlite3' driver for database querying` ) ) ;
14851610 const { default : Database } = await import ( 'better-sqlite3' ) ;
14861611 const { drizzle } = await import ( 'drizzle-orm/better-sqlite3' ) ;
14871612 const { migrate } = await import ( 'drizzle-orm/better-sqlite3/migrator' ) ;
@@ -1550,8 +1675,65 @@ export const connectToSQLite = async (
15501675 return { ...db , packageName : 'better-sqlite3' , proxy, transactionProxy, migrate : migrateFn } ;
15511676 }
15521677
1678+ if ( await checkPackage ( 'bun' ) ) {
1679+ console . log ( withStyle . info ( `Using 'bun' driver for database querying` ) ) ;
1680+ const { SQL } = await import ( 'bun' ) ;
1681+ const { drizzle } = await import ( 'drizzle-orm/bun-sql' ) ;
1682+ const { migrate } = await import ( 'drizzle-orm/bun-sql/migrator' ) ;
1683+
1684+ const client = new SQL ( {
1685+ adapter : 'sqlite' ,
1686+ filename : normaliseSQLiteUrl ( credentials . url , 'bun' ) ,
1687+ } ) ;
1688+
1689+ const db = drizzle ( { client } ) ;
1690+ const migrateFn = async ( config : MigrationConfig ) => {
1691+ return migrate ( db , config ) ;
1692+ } ;
1693+
1694+ const query = async ( sql : string , params ?: any [ ] ) => {
1695+ const result = await client . unsafe ( sql , params ?? [ ] ) ;
1696+ return result ;
1697+ } ;
1698+ const run = async ( sql : string ) => {
1699+ await client . unsafe ( sql ) ;
1700+ } ;
1701+
1702+ const proxy : Proxy = async ( params ) => {
1703+ const query = client . unsafe ( params . sql , params . params ) ;
1704+ if ( params . mode === 'array' ) {
1705+ return await query . values ( ) ;
1706+ }
1707+ return await query ;
1708+ } ;
1709+
1710+ const transactionProxy : TransactionProxy = async ( queries ) => {
1711+ const results : any [ ] = [ ] ;
1712+ try {
1713+ await client . transaction ( async ( tx ) => {
1714+ for ( const query of queries ) {
1715+ const result = await tx . unsafe ( query . sql ) ;
1716+ results . push ( result ) ;
1717+ }
1718+ } ) ;
1719+ } catch ( error ) {
1720+ results . push ( error as Error ) ;
1721+ }
1722+ return results ;
1723+ } ;
1724+
1725+ return {
1726+ packageName : 'bun' ,
1727+ query,
1728+ run,
1729+ proxy,
1730+ transactionProxy,
1731+ migrate : migrateFn ,
1732+ } ;
1733+ }
1734+
15531735 console . log (
1554- "Please install either 'better-sqlite3' or '@libsql/client' for Drizzle Kit to connect to SQLite databases" ,
1736+ "Please install either 'better-sqlite3', '@libsql/client' or 'bun ' for Drizzle Kit to connect to SQLite databases" ,
15551737 ) ;
15561738 process . exit ( 1 ) ;
15571739} ;
0 commit comments