/++
A lightweight interface to a MySQL database using vibe.d's connectionpool.

You have to include vibe.d in your project to be able to use this class.
If you don't want to, refer to mysql.connection.
+/
module mysql.db;

public import mysql.connection;
import std.conv;

version(Have_vibe_d_core)
{
	import vibe.core.connectionpool;

	class MysqlDB {
		private {
			string m_host;
			string m_user;
			string m_password;
			string m_database;
			ushort m_port;
			SvrCapFlags m_capFlags;
			ConnectionPool!Connection m_pool;
		}

		this(string host, string user, string password, string database, ushort port = 3306, SvrCapFlags capFlags = defaultClientFlags)
		{
			m_host = host;
			m_user = user;
			m_password = password;
			m_database = database;
			m_port = port;
			m_capFlags = capFlags;
			m_pool = new ConnectionPool!Connection(&createConnection);
		}

		this(string connStr, SvrCapFlags capFlags = defaultClientFlags)
		{
			auto parts = Connection.parseConnectionString(connStr);
			this(parts[0], parts[1], parts[2], parts[3], to!ushort(parts[4]), capFlags);
		}

		auto lockConnection() { return m_pool.lockConnection(); }

		private Connection createConnection()
		{
			return new Connection(m_host, m_user, m_password, m_database, m_port, m_capFlags);
		}
	}
}