1 module mysql.client; 2 3 import vibe.core.connectionpool; 4 5 public import mysql.connection; 6 import mysql.socket; 7 8 9 final class MySQLClientT(SocketType, ConnectionOptions Options = ConnectionOptions.Default) { 10 this(string connectionString) { 11 connections_ = new ConnectionPoolType({ 12 auto ret = new ConnectionType(); 13 ret.connect(connectionString); 14 return ret; 15 }); 16 } 17 18 this(ConnectionSettings settings) { 19 connections_ = new ConnectionPoolType({ 20 auto ret = new ConnectionType(); 21 ret.connect(settings); 22 return ret; 23 }); 24 } 25 26 this(string host, ushort port, string user, string pwd, string db) { 27 connections_ = new ConnectionPoolType({ 28 auto ret = new ConnectionType(); 29 ret.connect(host, port, user, pwd, db); 30 return ret; 31 }); 32 } 33 34 auto lockConnection() { 35 auto connection = connections_.lockConnection(); 36 connection.onStatus = null; 37 38 if (connection.inTransaction) 39 connection.rollback; 40 if (connection.settings.db.length && (connection.settings.db != connection.schema)) 41 connection.use(connection.settings.db); 42 return connection; 43 } 44 45 @property const(ConnectionPoolType) pool() inout { 46 return connections_; 47 } 48 49 alias LockedConnection = vibe.core.connectionpool.LockedConnection!(ConnectionType*); 50 alias ConnectionType = Connection!(VibeSocket, Options); 51 alias ConnectionPoolType = ConnectionPool!(ConnectionType*); 52 53 private ConnectionPoolType connections_; 54 } 55 56 alias MySQLClient = MySQLClientT!VibeSocket;