Changeset 18790
- Timestamp:
- 2010/08/24 14:58:32 (13 years ago)
- bzr:base-revision:
- ohkouchi@loop-az.jp-20100820090626-dkyj2ngdh7vklaow
- bzr:committer:
- Kentaro Ohkouchi <ohkouchi@loop-az.jp>
- bzr:file-ids:
data/class/SC_Query.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_Query.php
data/class/db/SC_DB_DBFactory.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2FSC_DB_DBFactory.php
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2Fdbfactory%2FSC_DB_DBFactory_MYSQL.php
data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2Fdbfactory%2FSC_DB_DBFactory_PGSQL.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php
data/class/helper/SC_Helper_Session.php 15277@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_Session.php
html/install/index.php 16809@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Findex.php
test/class/SC_Query_Test.php sc_query_test.php-20100803024127-ljzonih8f5jpan9o-1
test/class/helper/SC_Helper_DB_Test.php 15242@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Ftest%2Fclass%2Fhelper%2FSC_Helper_DB_Test.php- bzr:mapping-version:
- v4
- bzr:repository-uuid:
- 1e3b908f-19a9-db11-a64c-001125224ba8
- bzr:revision-id:
- ohkouchi@loop-az.jp-20100824055828-2oy1qb3wcp85i76l
- bzr:revno:
- 2273
- bzr:revprop:branch-nick:
- branches/version-2_5-dev
- bzr:root:
- branches/version-2_5-dev
- bzr:text-parents:
data/class/SC_Query.php ohkouchi@loop-az.jp-20100819104758-beubop5hq0pwdqhx
data/class/helper/SC_Helper_Session.php ohkouchi@loop-az.jp-20100614082857-g3n9wn9zakpc7a0m
html/install/index.php ohkouchi@loop-az.jp-20100819104758-beubop5hq0pwdqhx
test/class/SC_Query_Test.php ohkouchi@loop-az.jp-20100803111301-u8ph4za35y4il0dh
test/class/helper/SC_Helper_DB_Test.php ohkouchi@loop-az.jp-20100726081655-tqxqwy02bxqhswcu- bzr:timestamp:
- 2010-08-24 14:58:28.038000107 +0900
- bzr:user-agent:
- bzr2.1.2+bzr-svn1.0.2
- svn:original-date:
- 2010-08-24T05:58:28.038000Z
- Location:
- branches/version-2_5-dev
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/SC_Query.php
r18788 r18790 687 687 688 688 /** 689 * auto_incrementを取得する. 690 * 691 * XXX MDB2 の sequence 関数を使用する 692 * 693 * @param string $table_name テーブル名 694 * @return integer 695 */ 696 function get_auto_increment($table_name){ 697 // ロックする 698 $this->conn->exec("LOCK TABLES $table_name WRITE"); 699 700 // 次のIncrementを取得 701 $arrRet = $this->getAll("SHOW TABLE STATUS LIKE ". $this->quote($table_name)); 702 $auto_inc_no = $arrRet[0]["Auto_increment"]; 703 704 // 値をカウントアップしておく 705 $this->conn->exec("ALTER TABLE $table_name AUTO_INCREMENT=" . $this->quote($auto_inc_no + 1)); 706 707 // 解除する 708 $this->conn->exec('UNLOCK TABLES'); 709 710 return $auto_inc_no; 689 * シーケンスの一覧を取得する. 690 * 691 * @return array シーケンス名の配列 692 */ 693 function listSequences() { 694 $this->conn->loadModule('Manager'); 695 return $this->conn->listSequences(); 696 } 697 698 /** 699 * テーブル一覧を取得する. 700 * 701 * @return array テーブル名の配列 702 */ 703 function listTables() { 704 $this->conn->loadModule('Manager'); 705 return $this->conn->listTables(); 706 } 707 708 /** 709 * テーブルのカラム一覧を取得する. 710 * 711 * @param string $table テーブル名 712 * @return array 指定のテーブルのカラム名の配列 713 */ 714 function listTableFields($table) { 715 $this->conn->loadModule('Manager'); 716 return $this->conn->listTableFields($table); 717 } 718 719 /** 720 * テーブルのインデックス一覧を取得する. 721 * 722 * @param string $table テーブル名 723 * @return array 指定のテーブルのインデックス一覧 724 */ 725 function listTableIndexes($table) { 726 $this->conn->loadModule('Manager'); 727 return $this->conn->listTableIndexes($table); 711 728 } 712 729 -
branches/version-2_5-dev/data/class/db/SC_DB_DBFactory.php
r18789 r18790 93 93 94 94 /** 95 * テーブルの存在チェックを行う SQL 文を返す.96 *97 * @param string $table_name 存在チェックを行うテーブル名98 * @return string テーブルの存在チェックを行う SQL 文99 */100 function getTableExistsSql($table_name) { return null; }101 102 /**103 95 * 昨日の売上高・売上件数を算出する SQL を返す. 104 96 * … … 139 131 140 132 /** 141 * インデックスの検索結果を配列で返す.142 *143 * @param string $index_name インデックス名144 * @param string $table_name テーブル名145 * @return array インデックスの検索結果の配列146 */147 function getTableIndex($index_name, $table_name = "") { return array(); }148 149 /**150 * インデックスを作成する.151 *152 * @param string $index_name インデックス名153 * @param string $table_name テーブル名154 * @param string $col_name カラム名155 * @param integer $length 作成するインデックスのバイト長156 * @return void157 */158 function createTableIndex($index_name, $table_name, $col_name, $length = 0) {}159 160 /**161 133 * テーブルのカラム一覧を取得する. 162 134 * 135 * @deprecated SC_Query::listTableFields() を使用してください 163 136 * @param string $table_name テーブル名 164 137 * @return array テーブルのカラム一覧の配列 … … 171 144 * 引数に部分一致するテーブル名を配列で返す. 172 145 * 146 * @deprecated SC_Query::listTables() を使用してください 173 147 * @param string $expression 検索文字列 174 148 * @return array テーブル名の配列 -
branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
r18789 r18790 83 83 $arrRet = $objQuery->getAll("SHOW VARIABLES LIKE 'char%'"); 84 84 return $arrRet; 85 }86 87 /**88 * テーブルの存在チェックを行う SQL 文を返す.89 *90 * @param string $table_name 存在チェックを行うテーブル名91 * @return string テーブルの存在チェックを行う SQL 文92 */93 function getTableExistsSql($table_name) {94 // XXX 何故かブレースホルダが使えない95 $objQuery =& SC_Query::getSingletonInstance();96 return "SHOW TABLE STATUS LIKE " . $objQuery->quote($table_name);97 85 } 98 86 … … 170 158 171 159 /** 172 * インデックスの検索結果を配列で返す.173 *174 * @param string $index_name インデックス名175 * @param string $table_name テーブル名176 * @return array インデックスの検索結果の配列177 */178 function getTableIndex($index_name, $table_name = "") {179 $objQuery =& SC_Query::getSingletonInstance();180 return $objQuery->getAll("SHOW INDEX FROM " . $table_name . " WHERE Key_name = ?",181 array($index_name));182 }183 184 /**185 * インデックスを作成する.186 *187 * @param string $index_name インデックス名188 * @param string $table_name テーブル名189 * @param string $col_name カラム名190 * @param integer $length 作成するインデックスのバイト長191 * @return void192 */193 function createTableIndex($index_name, $table_name, $col_name, $length = 0) {194 $objQuery =& SC_Query::getSingletonInstance();195 $objQuery->query("CREATE INDEX ? ON ? (?(?))", array($index_name, $table_name, $col_name, $length));196 }197 198 /**199 160 * テーブルのカラム一覧を取得する. 200 161 * 162 * @deprecated SC_Query::listTableFields() を使用してください 201 163 * @param string $table_name テーブル名 202 164 * @return array テーブルのカラム一覧の配列 -
branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php
r18789 r18790 63 63 function sfChangeMySQL($sql){ 64 64 return $sql; 65 }66 67 /**68 * テーブルの存在チェックを行う SQL 文を返す.69 *70 * @param string $table_name 存在チェックを行うテーブル名71 * @return string テーブルの存在チェックを行う SQL 文72 */73 function getTableExistsSql($table_name) {74 $objQuery =& SC_Query::getSingletonInstance();75 return " SELECT relname "76 . " FROM pg_class "77 . " WHERE (relkind = 'r' OR relkind = 'v') "78 . " AND relname = " . $objQuery->quote($table_name)79 . "GROUP BY relname";80 65 } 81 66 … … 152 137 153 138 /** 154 * インデックスの検索結果を配列で返す.155 *156 * @param string $index_name インデックス名157 * @param string $table_name テーブル名(PostgreSQL では使用しない)158 * @return array インデックスの検索結果の配列159 */160 function getTableIndex($index_name, $table_name = "") {161 $objQuery =& SC_Query::getSingletonInstance();162 return $objQuery->getAll("SELECT relname FROM pg_class WHERE relname = ?",163 array($index_name));164 }165 166 /**167 * インデックスを作成する.168 *169 * @param string $index_name インデックス名170 * @param string $table_name テーブル名171 * @param string $col_name カラム名172 * @param integer $length 作成するインデックスのバイト長173 * @return void174 */175 function createTableIndex($index_name, $table_name, $col_name, $length = 0) {176 $objQuery =& SC_Query::getSingletonInstance();177 $objQuery->query("CREATE INDEX ? ON ? (?)", array($index_name, $table_name, $col_name));178 }179 180 /**181 139 * テーブルのカラム一覧を取得する. 182 140 * 141 * @deprecated SC_Query::listTableFields() を使用してください 183 142 * @param string $table_name テーブル名 184 143 * @return array テーブルのカラム一覧の配列 … … 204 163 * 引数に部分一致するテーブル名を配列で返す. 205 164 * 165 * @deprecated SC_Query::listTables() を使用してください 206 166 * @param string $expression 検索文字列 207 167 * @return array テーブル名の配列 … … 225 185 return $arrColList[0]; 226 186 } 227 228 187 229 188 /** 230 189 * 文字コード情報を取得する -
branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php
r18789 r18790 60 60 61 61 /** 62 * テーブルの存在をチェックする.63 *64 * @param string $table_name チェック対象のテーブル名65 * @param string $dsn データソース名66 * @return テーブルが存在する場合 true67 */68 function sfTabaleExists($table_name, $dsn = "") {69 $dbFactory = SC_DB_DBFactory_Ex::getInstance();70 $dsn = $dbFactory->getDSN($dsn);71 72 $objQuery =& SC_Query::getSingletonInstance();73 // 正常に接続されている場合74 if(!$objQuery->isError()) {75 list($db_type) = split(":", $dsn);76 /*77 * XXX MySQL で, 何故かブレースホルダが使えない.78 */79 $sql = $dbFactory->getTableExistsSql($table_name);80 $arrRet = $objQuery->getAll($sql);81 if(count($arrRet) > 0) {82 return true;83 }84 }85 return false;86 }87 88 /**89 62 * カラムの存在チェックと作成を行う. 90 63 * … … 106 79 $dsn = $dbFactory->getDSN($dsn); 107 80 81 $objQuery =& SC_Query::getSingletonInstance($dsn); 82 108 83 // テーブルが無ければエラー 109 if(!$this->sfTabaleExists($table_name, $dsn)) return false; 110 111 $objQuery =& SC_Query::getSingletonInstance(); 84 if(!in_array($table_name, $objQuery->listTables())) return false; 85 112 86 // 正常に接続されている場合 113 87 if(!$objQuery->isError()) { … … 115 89 116 90 // カラムリストを取得 117 $arrRet = $dbFactory->sfGetColumnList($table_name); 118 if(count($arrRet) > 0) { 119 if(in_array($col_name, $arrRet)){ 120 return true; 121 } 91 $columns = $objQuery->listTableFields($table_name); 92 93 if(in_array($col_name, $columns)){ 94 return true; 122 95 } 123 96 } … … 126 99 if($add){ 127 100 $objQuery->query("ALTER TABLE $table_name ADD $col_name $col_type "); 128 return true;129 }130 return false;131 }132 133 /**134 * インデックスの存在チェックと作成を行う.135 *136 * チェック対象のテーブルに, 該当のインデックスが存在するかチェックする.137 * 引数 $add が true の場合, 該当のインデックスが存在しない場合は, インデックスの生成を行う.138 * インデックスの生成も行う場合で, DB_TYPE が mysql の場合は, $length も必須となる.139 *140 * @param string $table_name テーブル名141 * @param string $column_name カラム名142 * @param string $index_name インデックス名143 * @param integer|string $length インデックスを作成するデータ長144 * @param string $dsn データソース名145 * @param bool $add インデックスの生成もする場合 true146 * @return bool インデックスが存在する場合とインデックスの生成に成功した場合 true,147 * テーブルが存在しない場合 false,148 * 引数 $add == false でインデックスが存在しない場合 false149 */150 function sfIndexExists($table_name, $col_name, $index_name, $length = "", $dsn = "", $add = false) {151 $dbFactory = SC_DB_DBFactory_Ex::getInstance();152 $dsn = $dbFactory->getDSN($dsn);153 154 // テーブルが無ければエラー155 if (!$this->sfTabaleExists($table_name, $dsn)) return false;156 157 $objQuery =& SC_Query::getSingletonInstance();158 $arrRet = $dbFactory->getTableIndex($index_name, $table_name);159 160 // すでにインデックスが存在する場合161 if(count($arrRet) > 0) {162 return true;163 }164 165 // インデックスを作成する166 if($add){167 $dbFactory->createTableIndex($index_name, $table_name, $col_name, $length());168 101 return true; 169 102 } -
branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php
r18701 r18790 65 65 */ 66 66 function sfSessRead($id) { 67 if (!$this->objDb->sfTabaleExists("dtb_session")) return '';68 67 $objQuery = new SC_Query(); 69 68 $arrRet = $objQuery->select("sess_data", "dtb_session", "sess_id = ?", array($id)); … … 84 83 function sfSessWrite($id, $sess_data) 85 84 { 86 if (!$this->objDb->sfTabaleExists("dtb_session")) return false;87 85 $objQuery = new SC_Query(); 88 86 $count = $objQuery->count("dtb_session", "sess_id = ?", array($id)); … … 115 113 */ 116 114 function sfSessDestroy($id) { 117 if (!$this->objDb->sfTabaleExists("dtb_session")) return false;118 115 $objQuery = new SC_Query(); 119 116 $objQuery->delete("dtb_session", "sess_id = ?", array($id)); … … 130 127 function sfSessGc($maxlifetime) { 131 128 // MAX_LIFETIME以上更新されていないセッションを削除する。 132 if (!$this->objDb->sfTabaleExists("dtb_session")) return false;133 129 $objQuery = new SC_Query(); 134 130 $where = "update_date < current_timestamp + '-". MAX_LIFETIME . " secs'"; -
branches/version-2_5-dev/html/install/index.php
r18788 r18790 623 623 // 店名、管理者メールアドレスを取得する。(再インストール時) 624 624 if(defined('DEFAULT_DSN')) { 625 $ret = $objDb->sfTabaleExists("dtb_baseinfo", DEFAULT_DSN); 626 if($ret) { 627 $objQuery = new SC_Query(); 625 $objQuery = new SC_Query(); 626 $tables = $objQuery->listTables(); 627 if(in_array("dtb_baseinfo", $tables)) { 628 628 629 $arrRet = $objQuery->select("shop_name, email01", "dtb_baseinfo"); 629 630 $shop_name = $arrRet[0]['shop_name']; -
branches/version-2_5-dev/test/class/SC_Query_Test.php
r18773 r18790 48 48 function tearDown() { 49 49 $this->objQuery->rollback(); 50 // MySQL では CREATE TABLE がロールバックされないので DROP TABLE を行う 51 $this->dropTestTable(); 50 52 $this->objQuery = null; 51 53 } … … 217 219 218 220 $this->verify(); 221 } 222 223 function testListTables() { 224 $tables = $this->objQuery->listTables(); 225 $this->assertTrue(in_array("mtb_zip", $tables)); 226 } 227 228 function testListSequences() { 229 $sequences = $this->objQuery->listSequences(); 230 $this->assertTrue(in_array("dtb_products_product_id", $sequences)); 231 } 232 233 function testListTableFields() { 234 $this->expected = array("id", "name", "rank", "remarks"); 235 $this->actual = $this->objQuery->listTableFields("mtb_constants"); 236 $this->verify(); 237 } 238 239 function testListTableIndexes() { 240 $indexes = $this->objQuery->listTableIndexes("dtb_mobile_kara_mail"); 241 $this->assertTrue(in_array("dtb_mobile_kara_mail_create_date_key", $indexes)); 219 242 } 220 243 … … 229 252 } 230 253 254 function dropTestTable() { 255 return $this->objQuery->query("DROP TABLE test_table"); 256 } 257 231 258 function setTestData($column1, $column2, $column3) { 232 259 $fields_values = array($column1, $column2, $column3); -
branches/version-2_5-dev/test/class/helper/SC_Helper_DB_Test.php
r18763 r18790 36 36 37 37 /** 38 * sfTableExists() のテストケース.39 */40 function testSfTableExists() {41 $objDb = new SC_Helper_DB_Ex();42 $this->assertEquals(true, $objDb->sfTabaleExists("mtb_zip"));43 }44 45 /**46 38 * sfColumnExists() のテストケース. 47 39 */
Note: See TracChangeset
for help on using the changeset viewer.