powered by nequal
Home » MDB2_Fake » Timeline » 1505

Diffs

MDB2_Fake/trunk/MDB/MDB.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP versions 5                                                       |
+// +----------------------------------------------------------------------+
+// |                                                                      |
+// +----------------------------------------------------------------------+
+/**
+ * データーベースマネージャ
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+
+require_once("libs/DataBaseManager.php");
+
+/**
+ * ファクトリーパターン
+ */
+class MDB{
+	public static function factory($dsn){
+        	return new DataBaseManager($dsn);
+	}
+	public static function connect($dsn){
+    		return self::factory($dsn);
+	}
+}
+
+?>
属性に変更があったパス: MDB2_Fake/trunk/MDB/MDB.php
___________________________________________________________________
追加: svn:executable
+ *

MDB2_Fake/trunk/MDB/libs/SolveQuery.php

@@ -0,0 +1,29 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP versions 5                                                       |
+// +----------------------------------------------------------------------+
+// |                                                                      |
+// +----------------------------------------------------------------------+
+/**
+ * データーベースマネージャ
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+
+require_once("Query.php");
+
+/**
+ * ファクトリーパターン
+ */
+class SolveQuery{
+	final public static function factory($db_type, $result){
+		if($db_type === "mysql"){
+			return new Query($db_type, $result);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+}
+
+?>
属性に変更があったパス: MDB2_Fake/trunk/MDB/libs/SolveQuery.php
___________________________________________________________________
追加: svn:executable
+ *

MDB2_Fake/trunk/MDB/libs/DataBaseManager.php

@@ -0,0 +1,419 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP versions 5                                                       |
+// +----------------------------------------------------------------------+
+// |                                                                      |
+// +----------------------------------------------------------------------+
+/**
+ * データーベースマネージャ
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+
+require_once("SolveQuery.php");
+require_once("DB.php");
+
+/**
+ * データーベースマネージャのインターフェース
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+interface IMDB{
+	public function __init__($dsn);     //
+	public function open();             //データーベース接続を開く
+	public function close();            //データーベース接続を閉じる
+	public function free_connection();  //データーベース接続の破棄
+	public function query($query);      //sqlの実行
+	public function beginTransaction(); //トランザクション開始
+	public function rollback();         //ロールバック
+	public function commit();           //コミット
+}
+
+/**
+ * データーベースクラスの抽象クラス メンバ変数とアクセサーの実装を行う。
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ * @abstract
+ */
+abstract class AbstractMDB{
+	private $dsn = Array();         // DSN
+	private $flg_connected = null;
+
+	// Database type
+	final protected function set_db_type($db_type){
+		$this->dsn["db_type"] = $db_type;
+	}
+	final protected function get_db_type(){
+		return $this->dsn["db_type"];
+	}
+
+	// Database connection string
+	final protected function set_db_connection($db_connection){
+		$this->dsn["db_connection"] = $db_connection;
+	}
+	final protected function get_db_connection(){
+		return $this->dsn["db_connection"];
+	}
+
+	// The database username
+	final protected function set_db_username($db_username){
+		$this->dsn["db_username"] = $db_username;
+	}
+	final protected function get_db_username(){
+		return $this->dsn["db_username"];
+	}
+
+	// The database password
+	final protected function set_db_password($db_password){
+		$this->dsn["db_password"] = $db_password;
+	}
+	final protected function get_db_password(){
+		return $this->dsn["db_password"];
+	}
+
+	// Database server
+	final protected function set_db_server($db_server){
+		$this->dsn["db_server"] = $db_server;
+	}
+	final protected function get_db_server(){
+		return $this->dsn["db_server"];
+	}
+
+	// The database being connected to
+	final protected function set_db_database($db_database){
+		$this->dsn["db_database"] = $db_database;
+	}
+	final protected function get_db_database(){
+		return $this->dsn["db_database"];
+	}
+
+	// Determines if connection is established
+	final protected function set_flg_connected($flg_connected){
+		$this->flg_connected = $flg_connected;
+	}
+	final protected function get_flg_connected(){
+		return $this->flg_connected;
+	}
+
+}
+
+/**
+ * データベースマネージャ
+ * @package  MDB
+ * @author   Ike Tohru <ike.tohru@gmail.com>
+ * @param    string $dsn dsn
+ * @return   void
+ * @see      AbstractDBM, iDBM
+ */
+class DataBaseManager extends AbstractMDB implements IMDB{
+
+	/**
+	 * コンストラクタ
+	 * @param  string $dsn dsn
+	 * @return void
+	 * @access public
+	 */
+	public function __construct($dsn){
+		if(!$dsn){
+			throw new Exception("Error:dsn is empty.");
+		}
+
+		$this->__init__($dsn);
+	}
+
+	/**
+	 * コンストラクタの実体
+	 * @param  string $dsn dsn
+	 * @return void
+	 * @access public
+	 */
+	final public function __init__($dsn){
+		if(!$dsn){
+			throw new Exception("Error:dsn is empty.");
+		}
+
+		$result = $this->__analyse_dsn__($dsn);
+
+		$db_type = $result[0];
+		$db_username = $result[1];
+		$db_password = $result[2];
+		$db_server = $result[3];
+		$db_database = $result[4];
+
+		$this->set_db_type($db_type);
+		$this->set_db_username($db_username);
+		$this->set_db_password($db_password);
+		$this->set_db_server($db_server);
+		$this->set_db_database($db_database);
+		$this->set_flg_connected(false);
+
+		//unset($result);
+	}
+
+	/**
+	 * DataSourceNameの値を解析する
+	 * @param  string $dsn dsn
+	 * @return Array 0 db_type
+	 *               1 db_username
+	 *               2 db_password
+	 *               3 db_server
+	 *               4 db_database
+	 * @access public
+	 */
+	final protected function __analyse_dsn__($dsn){
+		if(!$dsn){
+			throw new Exception("Error:dsn is empty.");
+		}
+
+		$db_type = explode("://", $dsn);
+		$user = explode(":", $db_type[1]);
+		$pass_w = explode("@", $user[1]);
+		$sv = explode("/", $pass_w[1]);
+
+		$result = Array();
+		$result[0] = $db_type[0];
+		$result[1] = $user[0];
+		$result[2] = $pass_w[0];
+		$result[3] = $sv[0];
+		$result[4] = $sv[1];
+
+		return $result;
+	}
+
+	/**
+	 * データーベース接続の作成
+	 * @param  void
+	 * @return boolean true  接続成功
+	 *                 false 接続失敗
+	 * @access public
+	 */
+	final public function new_connection(){
+
+		$db_connection = null;
+		$db_type = $this->get_db_type();
+		$db_username = $this->get_db_username();
+		$db_password = $this->get_db_password();
+		$db_server = $this->get_db_server();
+		$db_database = $this->get_db_database();
+		$flg_connected = $this->get_flg_connected();
+
+		//check connected flag.
+		if($flg_connected){
+			throw new Exception("Error:DB Already connected!");
+		}
+
+		try{
+			// Create connection to MYSQL database
+			// Fourth true parameter will allow for multiple connections to be made
+			$db_connection = DB::connect($db_type, $db_server, $db_username, $db_password, true);
+			$this->set_db_connection($db_connection);
+
+			//select database.
+			DB::select_db($db_type, $db_database);
+
+			if(!$db_connection){
+				throw new Exception('Error:MySQL Connection Database Error: ' . mysql_error());
+			}
+			else{
+				$this->set_flg_connected(true);
+				return true;
+			}
+		}
+		catch (Exception $e){
+			die($e->getMessage());
+		}
+	}
+
+	/**
+	 * データーベース接続を開く
+	 * @param  void
+	 * @return boolean true  成功
+	 *                 false 失敗
+	 * @access public
+	 */
+	final public function open(){
+
+		$db_connection = null;
+		$db_type = $this->get_db_type();
+		$db_username = $this->get_db_username();
+		$db_password = $this->get_db_password();
+		$db_server = $this->get_db_server();
+		$db_database = $this->get_db_database();
+		$flg_connected = $this->get_flg_connected();
+
+		if($flg_connected){
+			throw new Exception("Error:No connection has been established to the database. Cannot open connection.");
+		}
+
+		try{
+		  $db_connection = DB::connect($db_type, $db_server, $db_username, $db_password, true);
+			$this->set_db_connection($db_connection);
+
+			//Select Database.
+			DB::select_db($db_type, $db_database);
+
+			if(!$db_connection){
+				throw new Exception('MySQL Connection Database Error: ' . mysql_error());
+			}
+			else{
+				$this->set_flg_connected(true);
+				return true;
+			}
+		}
+		catch (Exception $e){
+			die($e->GetMessage());
+		}
+	}
+
+	/**
+	 * データーベース接続を閉じる
+	 * @param  void
+	 * @return boolean
+	 * @access public
+	 */
+	final public function close(){
+
+		$db_type = $this->get_db_type();
+		$db_connection = $this->get_db_connection();
+		$flg_connected = $this->get_flg_connected();
+
+		if(!$flg_connected){
+			throw new Exception("Error:No connection has been established to the database. Cannot close connection.");
+        }
+
+		DB::close($db_type, $db_connection);
+		$this->set_flg_connected(false);
+		return true;
+	}
+
+	/**
+	 * データーベース接続の破棄
+	 * @param  void
+	 * @return void
+	 * @access public
+	 */
+	final public function free_connection(){
+		$this->db_connection = null;
+		$this->set_flg_connected(false);
+	}
+
+	/**
+	 * sqlの実行
+	 * @param  string $query 実行するクエリ
+	 * @return mixed  連想配列の入れ子を返す
+	 * @access public
+	 */
+	final public function query($query){
+
+		$db_type = $this->get_db_type();
+
+		if(!$query){
+			throw new Exception("Error:query is empty.");
+		}
+
+		$db_connection = $this->get_db_connection();
+		if(!$db_connection){
+			throw new Exception("DB Error: [DB not connected!]");
+		}
+
+		$result = DB::query($db_type, $query, $db_connection);
+		if(!$result){
+			throw new Exception("Error Invalid query: " . mysql_error());
+		}
+
+		return SolveQuery::factory($db_type, $result);
+
+	}
+
+	/**
+	 * トランザクション開始
+	 * @param  void
+	 * @return boolean True  トランザクション開始成功
+	 *                 False トランザクション開始失敗
+	 * @access public
+	 */
+	final public function beginTransaction(){
+
+		$db_connection = $this->get_db_connection();
+		if(!$db_connection){
+			throw new Exception("DB Error: [DB not connected!]");
+		}
+
+		$result = $this->query("START TRANSACTION", $db_connection);
+		if(!$result){
+			throw new Exception("Error Invalid query: " . mysql_error());
+		}
+
+		return true;
+	}
+
+	/**
+	 * ロールバック
+	 * @param  void
+	 * @return boolean True  ロールバック成功
+	 *                 False ロールバック失敗
+	 * @access public
+	 */
+	final public function rollback(){
+
+		$db_connection = $this->get_db_connection();
+		if(!$db_connection){
+			throw new Exception("DB Error: [DB not connected!]");
+		}
+
+		$result = $this->query("ROLLBACK", $db_connection);
+		if(!$result){
+			throw new Exception("Error Invalid query: " . mysql_error());
+		}
+
+		return true;
+	}
+
+	/**
+	 * コミット
+	 * @param  void
+	 * @return boolean True  コミット成功
+	 *                 False コミット失敗
+	 * @access public
+	 */
+	final public function commit(){
+
+		$db_connection = $this->get_db_connection();
+		if(!$db_connection){
+			throw new Exception("DB Error: [DB not connected!]");
+		}
+
+		$result = $this->query("COMMIT", $db_connection);
+		if(!$result){
+			throw new Exception("Error Invalid query: " . mysql_error());
+		}
+
+		return true;
+	}
+
+	/**
+	 * SQL文中で用いる文字列の特殊文字をエスケープする
+	 * @param  string  $unescaped_string
+	 * @return string  成功:エスケープ後の文字列
+	 *         boolean 失敗:false
+	 * @access public
+	 */
+	final public function escape($unescaped_string){
+
+		$db_type = $this->get_db_type();
+		$db_connection = $this->get_db_connection();
+
+		if($unescaped_string === ""){}
+		else if($unescaped_string === 0){}
+		else if(!$unescaped_string){
+            throw new Exception("Error: unescaped_string is empty");
+		}
+
+		$escaped_string = DB::escape($db_type, $unescaped_string, $db_connection);
+
+		return $escaped_string;
+	}
+
+}
+
+?>

MDB2_Fake/trunk/MDB/libs/DB.php

@@ -0,0 +1,67 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP versions 5                                                       |
+// +----------------------------------------------------------------------+
+// |                                                                      |
+// +----------------------------------------------------------------------+
+/**
+ * データーベースマネージャ
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+
+/**
+ * @package  MDB
+ */
+class DB{
+	final static public function connect($db_type, $server, $username, $password, $new_link){
+		if($db_type === "mysql"){
+			return mysql_connect($server, $username, $password, $new_link);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+	final static public function select_db($db_type, $database_name){
+		if($db_type === "mysql"){
+			return mysql_select_db($database_name);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+	final static public function query($db_type, $query){
+		if($db_type === "mysql"){
+			return mysql_query($query);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+	final static public function fetch_assoc($db_type, $result){
+		if($db_type === "mysql"){
+			return mysql_fetch_assoc($result);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+	final static public function escape($db_type, $unescaped_string, $link_identifier){
+		if($db_type === "mysql"){
+			return mysql_real_escape_string($unescaped_string, $link_identifier);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+	final static public function close($db_type, $link_identifier){
+		if($db_type === "mysql"){
+			return mysql_close($link_identifier);
+		}
+		else{
+			throw new Exception("Error: db_type is not mysql");
+		}
+	}
+}
+
+?>
属性に変更があったパス: MDB2_Fake/trunk/MDB/libs/DB.php
___________________________________________________________________
追加: svn:executable
+ *

MDB2_Fake/trunk/MDB/libs/Query.php

@@ -0,0 +1,115 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP versions 5                                                       |
+// +----------------------------------------------------------------------+
+// |                                                                      |
+// +----------------------------------------------------------------------+
+/**
+ * データーベースマネージャ
+ * @package   MDB
+ * @author    Ike Tohru <ike.tohru@gmail.com>
+ */
+
+require_once("DB.php");
+
+/**
+ * @package MDB
+ * @author  Ike Tohru <ike.tohru@gmail.com>
+ */
+interface IQuery{
+	public function fetchRow(); //一レコードを返す。
+	public function fetchAll(); //すべてを返す。
+	public function free();     //メモリを開放する。
+}
+
+/**
+ * データーベースクラスの抽象クラス メンバ変数とアクセサーの実装を行う。
+ * @package  MDB
+ * @author   Ike Tohru <ike.tohru@gmail.com>
+ * @abstract
+ */
+abstract class AbstractQuery{
+
+	private $db_type;       // DSN
+	private $result = null;
+
+	// Database type
+	final protected function set_db_type($db_type){
+		$this->db_type = $db_type;
+	}
+	final protected function get_db_type(){
+		return $this->db_type;
+	}
+
+	final protected function set_result($result){
+		$this->result = $result;
+	}
+	final protected function get_result(){
+		return $this->result;
+	}
+
+}
+
+/**
+ *
+ * @package  MDB
+ * @author   Ike Tohru <ike.tohru@gmail.com>
+ * @param    void
+ * @return   void
+ * @see      iSolveDBResult
+ */
+class Query extends AbstractQuery implements IQuery{
+
+	/**
+	 * コンストラクタ
+	 * @param  object $result DB result pointer
+	 * @return void
+	 * @access public
+	 */
+	public function __construct($db_type, $result){
+		$this->set_db_type($db_type);
+		$this->set_result($result);
+	}
+
+	/**
+	 * Fetch and return all rows from the current row pointer position
+	 * a two dimensional array and then frees the result set.
+	 * @param  void
+	 * @return mixed
+	 * @access public
+	 */
+	final public function fetchRow(){
+		$db_type = $this->get_db_type();
+		$result = $this->get_result();
+
+		$row = DB::fetch_assoc($db_type, $result);
+		return $row;
+	}
+
+	/**
+	 * Fetch and return all rows from the current row pointer position
+	 * @param  void
+	 * @return mixed
+	 * @access public
+	 */
+	final public function fetchAll(){
+		$all = Array();
+		while($row = $this->fetchRow()){
+			$all[] = $row;
+		}
+		return $all;
+	}
+
+	/**
+	 * Free the internal references so that the instance can be destroyed
+	 * @return boolean    true on success
+	 * @access public
+	 */
+	final public function free(){
+		$this->set_result(null);
+		return true;
+	}
+
+}
+
+?>
属性に変更があったパス: MDB2_Fake/trunk/MDB/libs/Query.php
___________________________________________________________________
追加: svn:executable
+ *

MDB2_Fake/trunk/tests/SolveQueryTest.php

@@ -10,7 +10,7 @@
// You may remove the following line when all tests have been implemented.
require_once "PHPUnit2/Framework/IncompleteTestError.php";
-require_once "../src/libs/SolveQuery.php";
+require_once "../MDB/libs/SolveQuery.php";
/**
* Test class for SolveQuery.

MDB2_Fake/trunk/tests/DataBaseManagerTest.php

@@ -10,7 +10,7 @@
// You may remove the following line when all tests have been implemented.
require_once "PHPUnit2/Framework/IncompleteTestError.php";
-require_once "../src/libs/DataBaseManager.php";
+require_once "../MDB/libs/DataBaseManager.php";
/**
* Test class for DataBaseManager.

MDB2_Fake/trunk/tests/MDBTest.php

@@ -10,7 +10,7 @@
// You may remove the following line when all tests have been implemented.
require_once "PHPUnit2/Framework/IncompleteTestError.php";
-require_once "../src/MDB.php";
+require_once "../MDB/MDB.php";
/**
* Test class for MDB.

MDB2_Fake/trunk/tests/DBTest.php

@@ -10,7 +10,7 @@
// You may remove the following line when all tests have been implemented.
require_once "PHPUnit2/Framework/IncompleteTestError.php";
-require_once "../src/libs/DB.php";
+require_once "../MDB/libs/DB.php";
/**
* Test class for DB.

MDB2_Fake/trunk/tests/QueryTest.php

@@ -10,7 +10,7 @@
// You may remove the following line when all tests have been implemented.
require_once "PHPUnit2/Framework/IncompleteTestError.php";
-require_once "../src/libs/Query.php";
+require_once "../MDB/libs/Query.php";
/**
* Test class for Query.