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;