- Timestamp:
- 2007/07/26 22:05:08 (16 years ago)
- Location:
- branches/feature-module-update
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/data/class/db/SC_DB_MasterData.php
r15134 r15135 8 8 /** 9 9 * マスタデータを扱うクラス. 10 * 11 * プルダウン等で使用するマスタデータを扱う. 12 * マスタデータは, DB に格納されているが, パフォーマンスを得るため, 13 * 初回のみ DBへアクセスし, データを定義したキャッシュファイルを生成する. 14 * 15 * マスタデータのテーブルは, 下記のようなカラムが必要がある. 16 * 1. キーとなる文字列 17 * 2. 表示文字列 18 * 3. 表示順 19 * 上記カラムのデータ型は特に指定しないが, 1 と 2 は常に string 型となる. 20 * 21 * マスタデータがキャッシュされると, key => value 形式の配列として使用できる. 22 * マスタデータのキャッシュは, MASTER_DATA_DIR/マスタデータ名.php というファイルが生成される. 10 23 * 11 24 * @package DB … … 15 28 class SC_DB_MasterData { 16 29 30 // {{{ properties 31 32 /** SC_Query インスタンス **/ 33 var $objQuery; 34 17 35 // }}} 18 36 // {{{ functions … … 22 40 * 23 41 * 以下の順序でマスタデータを取得する. 24 * 1. data/conf/cacheのマスタデータキャッシュを include_once() で読み込む42 * 1. MASTER_DATA_DIR のマスタデータキャッシュを include_once() で読み込む 25 43 * 2. 1 で読み込んだ値をチェックし, 値が変数定義されていれば値を返す. 26 44 * されていなければ, 次の処理を行う. … … 28 46 * 4. 取得した後, マスタデータのキャッシュを生成し, 値を返す. 29 47 * 30 * @param string $name マスタデータ名 48 * 返り値は, key => value 形式の配列である. 49 * 50 * @param string $name マスタデータ名 51 * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 52 * を表すカラム名を格納した配列 31 53 * @return array マスタデータ 32 54 */ 33 function getMasterData($name) { 34 $objQuery = new SC_Query(); 35 $result = $objQuery->select("*", $name); 36 return $result; 55 function getMasterData($name, $columns) { 56 // 可変変数を定義 57 $valiable = "_" . $name . "_master"; 58 // キャッシュを読み込み 59 @include_once(MASTER_DATA_DIR . $name . ".php"); 60 61 // キャッシュがあれば, キャッシュの値を返す. 62 if (!empty($$valiable)) { 63 return $$valiable; 64 } 65 // マスタデータを取得 66 $masterData = $this->getDbMasterData($name, $columns); 67 // キャッシュ生成 68 $this->createCache($name, $masterData); 69 return $masterData; 37 70 } 38 71 … … 40 73 * マスタデータをDBに追加する. 41 74 * 42 * 引数 $ valueをマスタデータとしてDBに追加し,75 * 引数 $masterData をマスタデータとしてDBに追加し, 43 76 * キャッシュを生成する. 44 77 * 既存のキャッシュが存在する場合は上書きする. 45 * $value は key => value 形式の配列である必要がある. 46 * 47 * @param string $name マスタデータ名 48 * @param array $value マスタデータ 78 * $masterData は key => value 形式の配列である必要がある. 79 * 80 * @param string $name マスタデータ名 81 * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 82 * を表すカラム名を格納した配列 83 * @param array $masterData マスタデータ 84 * @param bool $autoCommit トランザクションを自動的に commit する場合 true 49 85 * @return integer マスタデータの登録数 50 86 */ 51 function registMasterData($name, $value) { 52 // TODO 87 function registMasterData($name, $columns, $masterData, $autoCommit = true) { 88 $this->objQuery = new SC_Query(); 89 if ($autoCommit) { 90 $this->objQuery->begin(); 91 } 92 $i = 0; 93 foreach ($masterData as $key => $val) { 94 $sqlVal = array($columns[0] => $key, 95 $columns[1] => $val, 96 $columns[2] => $i); 97 $this->objQuery->insert($name, $sqlVal); 98 $i++; 99 } 100 if ($autoCommit) { 101 $this->objQuery->commit(); 102 } 103 104 // キャッシュを消去 105 $this->clearCache($name); 106 // 新規にデータを取得してキャッシュ生成 107 $newData = $this->getMasterData($name, $columns); 108 return $i; 53 109 } 54 110 … … 56 112 * マスタデータを更新する. 57 113 * 58 * 引数 $ valueの値でマスタデータを更新し,114 * 引数 $masterData の値でマスタデータを更新し, 59 115 * キャッシュを更新する. 60 * $value は key => value 形式の配列である必要がある. 61 * 62 * @param string $name マスタデータ名 63 * @param array $value マスタデータ 116 * $masterData は key => value 形式の配列である必要がある. 117 * 118 * @param string $name マスタデータ名 119 * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 120 * を表すカラム名を格納した配列 121 * @param array $masterData マスタデータ 122 * @param bool $autoCommit トランザクションを自動的に commit する場合 true 64 123 * @return integer マスタデータの更新数 65 124 */ 66 function updateMasterData($name, $value) { 67 // TODO 125 function updateMasterData($name, $columns, $masterData, $autoCommit = true) { 126 $this->objQuery = new SC_Query(); 127 if ($autoCommit) { 128 $this->objQuery->begin(); 129 } 130 // マスタデータを削除 131 $this->deleteMasterData($name, false); 132 // マスタデータを追加 133 $this->registMasterData($name, $columns, $masterData, false); 134 if ($autoCommit) { 135 $this->objQuery->commit(); 136 } 137 138 // キャッシュを消去 139 $this->clearCache($name); 140 // 新規にデータを取得してキャッシュ生成 141 $newData = $this->getMasterData($name, $columns); 142 return count($newData); 68 143 } 69 144 … … 75 150 * 76 151 * @param string $name マスタデータ名 152 * @param bool $autoCommit トランザクションを自動的に commit する場合 true 77 153 * @return integer マスタデータの削除数 78 154 */ 79 function deleteMasterData($name) { 80 // TODO 155 function deleteMasterData($name, $autoCommit = true) { 156 $this->objQuery = new SC_Query(); 157 return $this->objQuery->delete($name); 81 158 } 82 159 … … 85 162 * 86 163 * @param string $name マスタデータ名 87 * @return void164 * @return bool 消去した場合 true 88 165 */ 89 166 function clearCache($name) { 90 // TODO167 unlink(MASTER_DATA_DIR . $name . ".php"); 91 168 } 92 169 … … 98 175 * 99 176 * @param string $name マスタデータ名 100 * @return void 101 */ 102 function createCache($name) { 103 // TODO 177 * @param array $masterData マスタデータ 178 * @return bool キャッシュの生成に成功した場合 true 179 */ 180 function createCache($name, $masterData) { 181 182 // 配列の定義を文字列にする 183 $data = "<?php\n" 184 . "\$_" . $name . "_master = array(\n"; 185 $i = count($masterData); 186 foreach ($masterData as $key => $val) { 187 $data .= "'" . $key . "' => '" . $val . "'"; 188 if ($i > 1) { 189 $data .= ",\n"; 190 } 191 $i--; 192 } 193 $data .= ");\n" 194 . "?>\n"; 195 196 // ファイルを書き出しモードで開く 197 $path = MASTER_DATA_DIR . $name . ".php"; 198 $handle = fopen($path, "w"); 199 if (!$handle) { 200 return false; 201 } 202 // ファイルの内容を書き出す. 203 if (fwrite($handle, $data) === false) { 204 return false; 205 } 206 return true; 104 207 } 105 208 … … 112 215 * キャッシュの有無に関係なく, DBからマスタデータを検索し, 取得する. 113 216 * 114 * @param string $name マスタデータ名 217 * 返り値は, key => value 形式の配列である. 218 * 219 * @param string $name マスタデータ名 220 * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 221 * を表すカラム名を格納した配列 115 222 * @return array マスタデータ 116 223 */ 117 function getDbMasterData($name) { 118 // TODO 224 function getDbMasterData($name, $columns) { 225 $this->objQuery = new SC_Query(); 226 $this->objQuery->setorder($columns[2]); 227 $results = $this->objQuery->select($columns[0] . ", " . $columns[1], $name); 228 229 // 結果を key => value 形式に格納 230 $masterData = array(); 231 foreach ($results as $result) { 232 233 $masterData[$result[$columns[0]]] = $result[$columns[1]]; 234 } 235 return $masterData; 119 236 } 120 237 } -
branches/feature-module-update/test/TestSuite.php
r15116 r15135 10 10 require_once("../html/require.php"); 11 11 require_once("class/page/LC_Page_Test.php"); 12 require_once("class/db/SC_DB_DBFactory_Test.php"); 13 require_once("class/db/SC_DB_MasterData_Test.php"); 12 14 require_once("PHPUnit.php"); 13 15 14 $suite = new PHPUnit_TestSuite("LC_Page_Test"); 15 $result = PHPUnit::run($suite); 16 $suites = array(); 17 $suites[0] = new PHPUnit_TestSuite("LC_Page_Test"); 18 $suites[1] = new PHPUnit_TestSuite("SC_DB_DBFactory_Test"); 19 $suites[2] = new PHPUnit_TestSuite("SC_DB_MasterData_Test"); 16 20 17 print $result->toString(); 21 foreach ($suites as $suite) { 22 $result = PHPUnit::run($suite); 23 print $result->toString(); 24 } 18 25 ?> -
branches/feature-module-update/test/class/db/SC_DB_MasterData_Test.php
r15134 r15135 22 22 // {{{ functions 23 23 24 /** 25 * SC_DB_MasterData::getMasterData() のテストケース 26 */ 24 27 function testGetMasterData() { 25 28 29 $columns = array("pref_id", "pref_name", "rank"); 26 30 $masterData = new SC_DB_MasterData_Ex(); 27 $actual = $masterData->getMasterData("mtb_pref" );31 $actual = $masterData->getMasterData("mtb_pref", $columns); 28 32 29 33 $objQuery = new SC_Query(); 30 $expected = $objQuery->select("*", $name); 34 $objQuery->setorder($columns[2]); 35 $results = $objQuery->select($columns[0] . ", " . $columns[1], "mtb_pref"); 31 36 37 $expected = array(); 38 foreach ($results as $result) { 39 40 $expected[$result[$columns[0]]] = $result[$columns[1]]; 41 } 32 42 $this->assertEquals($expected, $actual); 33 43 }
Note: See TracChangeset
for help on using the changeset viewer.