| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- <?php
 
- class LtDbConfigBuilder
 
- {
 
- 	protected $servers = array();
 
- 	protected $tables = array();
 
- 	protected $adapters = array(
 
- 	  //"php_ext"  => array("connection_adapter" => "",        "sql_adapter" => "")
 
- 		"pgsql"      => array("connection_adapter" => "pgsql",   "sql_adapter" => "pgsql"),
 
- 		"pdo_pgsql"  => array("connection_adapter" => "pdo",     "sql_adapter" => "pgsql"),
 
- 		"oci"        => array("connection_adapter" => "oci",     "sql_adapter" => "oracle"),
 
- 		"pdo_oci"    => array("connection_adapter" => "pdo",     "sql_adapter" => "oracle"),
 
- 		"mssql"      => array("connection_adapter" => "mssql",   "sql_adapter" => "mssql"),
 
- 		"pdo_dblib"  => array("connection_adapter" => "pdo",     "sql_adapter" => "mssql"),
 
- 		"mysql"      => array("connection_adapter" => "mysql",   "sql_adapter" => "mysql"),
 
- 		"mysqli"     => array("connection_adapter" => "mysqli",  "sql_adapter" => "mysql"),
 
- 		"pdo_mysql"  => array("connection_adapter" => "pdo",     "sql_adapter" => "mysql"),
 
- 		"sqlite"     => array("connection_adapter" => "sqlite",  "sql_adapter" => "sqlite"),
 
- 		"sqlite3"    => array("connection_adapter" => "sqlite3", "sql_adapter" => "sqlite"),
 
- 		"pdo_sqlite" => array("connection_adapter" => "pdo",     "sql_adapter" => "sqlite"),
 
- 	);
 
- 	protected $defaultConfig = array(
 
- 		"host"               => "localhost",          //some ip, hostname
 
- 	//"port"             => 3306,
 
- 		"username"           => "root",
 
- 		"password"           => null,
 
- 	//"adapter"          => "mysql",              //mysql,mysqli,pdo_mysql,sqlite,pdo_sqlite
 
- 		"charset"            => "UTF-8",
 
- 		"pconnect"           => true,                 //true,false
 
- 		"connection_ttl"     => 3600,                 //any seconds
 
- 		"dbname"             => null,                 //default dbname
 
- 		"schema"             => null,                 //default schema
 
- 		"connection_adapter" => null,
 
- 		"sql_adapter"        => null,
 
- 	);
 
- 	protected $defaultAdapterConfigs = array(
 
- 		"pgsql" => array(
 
- 			"port"           => 5432,
 
- 		),
 
- 		"oracle" => array(
 
- 			"port"           => 1521,
 
- 		),
 
- 		"mssql" => array(
 
- 			"port"           => 1433,
 
- 		),
 
- 		"mysql" => array(
 
- 			"port"           => 3306,
 
- 			"pconnect"       => false,
 
- 			"connection_ttl" => 30,
 
- 		),
 
- 	);
 
- 	public function addSingleHost($hostConfig)
 
- 	{
 
- 		$this->addHost("group_0", "node_0", "master", $hostConfig);
 
- 	}
 
- 	public function addHost($groupId, $nodeId = "node_0", $role = "master", $hostConfig)
 
- 	{
 
- 		if (isset($this->servers[$groupId][$nodeId][$role]))
 
- 		{//以相同role的第一个host为默认配置
 
- 			$ref = $this->servers[$groupId][$nodeId][$role][0];
 
- 		}
 
- 		else if ("slave" == $role && isset($this->servers[$groupId][$nodeId]["master"]))
 
- 		{//slave host以master的第一个host为默认配置
 
- 			$ref = $this->servers[$groupId][$nodeId]["master"][0];
 
- 		}
 
- 		else if (isset($this->servers[$groupId]) && count($this->servers[$groupId]))
 
- 		{//以本group第一个node的master第一个host为默认配置
 
- 			$refNode = key($this->servers[$groupId]);
 
- 			$ref = $this->servers[$groupId][$refNode]["master"][0];
 
- 		}
 
- 		else
 
- 		{
 
- 			if (!isset($hostConfig["adapter"]))
 
- 			{
 
- 				trigger_error("No db adapter specified");
 
- 			}
 
- 			$ref = $this->defaultConfig;
 
- 			if (isset($this->defaultAdapterConfigs[$this->adapters[$hostConfig["adapter"]]["sql_adapter"]]))
 
- 			{
 
- 				$ref = array_merge($ref, $this->defaultAdapterConfigs[$this->adapters[$hostConfig["adapter"]]["sql_adapter"]]);
 
- 			}
 
- 		}
 
- 		$conf = array_merge($ref, $hostConfig);
 
- 		$conf = array_merge($conf, $this->adapters[$conf["adapter"]]);
 
- 		$conf = $this->convertDbnameToSchema($conf);
 
- 		$this->servers[$groupId][$nodeId][$role][] = $conf;
 
- 	}
 
- 	public function getServers()
 
- 	{
 
- 		return $this->servers;
 
- 	}
 
- 	public function getTables()
 
- 	{
 
- 		return $this->tables;
 
- 	}
 
- 	public function buildTablesConfig()
 
- 	{
 
- 	}
 
- 	/**
 
- 	 * Convert dbname to schema for: FrontBase, MySQL, mSQL, MS SQL Server, MaxDB, Sybase
 
- 	 * See: http://www.php.net/manual-lookup.php?pattern=_select_db
 
- 	 */
 
- 	protected function convertDbnameToSchema($conf)
 
- 	{
 
- 		if (preg_match("/fbsql|mysql|msql|mssql|maxdb|sybase/i", $conf["sql_adapter"]) && isset($conf["dbname"]))
 
- 		{
 
- 			$conf["schema"] = $conf["dbname"];
 
- 			$conf["dbname"] = null;
 
- 		}
 
- 		return $conf;
 
- 	}
 
- }
 
 
  |