Index: /branches/feature-module-update/test/class/db/SC_DB_MasterData_Test.php
===================================================================
--- /branches/feature-module-update/test/class/db/SC_DB_MasterData_Test.php	(revision 15532)
+++ /branches/feature-module-update/test/class/db/SC_DB_MasterData_Test.php	(revision 15716)
@@ -15,5 +15,5 @@
  * @package DB
  * @author LOCKON CO.,LTD.
- * @version $Id$
+ * @version $Id:SC_DB_MasterData_Test.php 15532 2007-08-31 14:39:46Z nanasess $
  */
 class SC_DB_MasterData_Test extends PHPUnit_TestCase {
@@ -26,5 +26,4 @@
      */
     function testGetMasterData() {
-
         $columns = array("pref_id", "pref_name", "rank");
         $masterData = new SC_DB_MasterData_Ex();
@@ -58,7 +57,9 @@
         $masterData->updateMasterData("mtb_pref", $columns, $expected, false);
 
-        $actual = $masterData->getMasterData("mtb_pref", $columns);
+        $actual = $masterData->getDBMasterData("mtb_pref", $columns);
 
-        $this->assertEquals($expected, $actual);
+        $this->assertEquals($expected["10"], $actual["10"]);
+        $this->assertEquals($expected["20"], $actual["20"]);
+        $this->assertEquals($expected["30"], $actual["30"]);
 
         $masterData->objQuery->rollback();
@@ -71,5 +72,9 @@
     function testCreateCache() {
         $masterData = new SC_DB_MasterData_Ex();
-        $masterData->createCache("mtb_constants", $masterData->getMasterData("mtb_constants"), true);
+        $datas = $masterData->getDBMasterData("mtb_constants");
+        $commentColumn = array("id", "remarks", "rank");
+        $masterData->clearCache("mtb_constants");
+        $masterData->createCache("mtb_constants", $datas, true,
+                                         array("id", "remarks", "rank"));
         $this->assertEquals(true, defined("ECCUBE_VERSION"));
     }
Index: /branches/feature-module-update/data/class/db/SC_DB_MasterData.php
===================================================================
--- /branches/feature-module-update/data/class/db/SC_DB_MasterData.php	(revision 15532)
+++ /branches/feature-module-update/data/class/db/SC_DB_MasterData.php	(revision 15716)
@@ -24,5 +24,5 @@
  * @package DB
  * @author LOCKON CO.,LTD.
- * @version $Id$
+ * @version $Id:SC_DB_MasterData.php 15532 2007-08-31 14:39:46Z nanasess $
  */
 class SC_DB_MasterData {
@@ -110,9 +110,4 @@
             $this->objQuery->commit();
         }
-
-        // キャッシュを消去
-        $this->clearCache($name);
-        // 新規にデータを取得してキャッシュ生成
-        $newData = $this->getMasterData($name, $columns);
         return $i;
     }
@@ -121,6 +116,5 @@
      * マスタデータを更新する.
      *
-     * 引数 $masterData の値でマスタデータを更新し,
-     * キャッシュを更新する.
+     * 引数 $masterData の値でマスタデータを更新する.
      * $masterData は key => value 形式の配列である必要がある.
      *
@@ -133,18 +127,23 @@
      */
     function updateMasterData($name, $columns, $masterData, $autoCommit = true) {
+
+        $columns = $this->getDefaultColumnName($columns);
+
         $this->objQuery = new SC_Query();
         if ($autoCommit) {
             $this->objQuery->begin();
         }
-        // マスタデータを削除
-        $this->deleteMasterData($name, false);
-
-        // マスタデータを追加
-        $this->registMasterData($name, $columns, $masterData, false);
-
+
+        // 指定のデータを更新
+        $i = 0;
+        foreach ($masterData as $key => $val) {
+            $sqlVal = array($columns[1] => $val);
+            $this->objQuery->update($name, $sqlVal, $columns[0] . " = " .  $key);
+            $i++;
+        }
         if ($autoCommit) {
             $this->objQuery->commit();
         }
-        return count($masterData);
+        return $i;
     }
 
@@ -193,18 +192,32 @@
      * 引数 $name のマスタデータキャッシュを生成する.
      * 既存のキャッシュが存在する場合は上書きする.
+     *
      * 引数 $isDefine が true の場合は, 定数を生成する.
+     * 定数コメントを生成する場合は, $commentColumn を指定する.
      *
      * @param string $name マスタデータ名
      * @param array $masterData マスタデータ
      * @param bool $isDefine 定数を生成する場合 true
+     * @param array $commentColumn [0] => キー, [1] => コメント文字列,
+                                   [2] => 表示順 を表すカラム名を格納した配列
      * @return bool キャッシュの生成に成功した場合 true
      */
-    function createCache($name, $masterData, $isDefine = false) {
+    function createCache($name, $masterData, $isDefine = false,
+                         $commentColumn = array()) {
 
         // マスタデータを文字列にする
         $data = "<?php\n";
+        // 定数を生成する場合
         if ($isDefine) {
-            $data .= $this->getMasterDataAsDefine($masterData,
-                    $this->getDbMasterData("mtb_constants", array("id", "remarks", "rank")));
+
+            // 定数コメントを生成する場合
+            if (!empty($commentColumn)) {
+                $data .= $this->getMasterDataAsDefine($masterData,
+                                 $this->getDbMasterData($name, $commentColumn));
+            } else {
+                $data .= $this->getMasterDataAsDefine($masterData);
+            }
+
+        // 配列を生成する場合
         } else {
             $data .= $this->getMasterDataAsString($name, $masterData);
@@ -225,7 +238,4 @@
     }
 
-    // }}}
-    // {{{ private functions
-
     /**
      * DBからマスタデータを取得する.
@@ -235,5 +245,4 @@
      * 返り値は, key => value 形式の配列である.
      *
-     * @access private
      * @param string $name マスタデータ名
      * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順
@@ -257,4 +266,7 @@
         return $masterData;
     }
+
+    // }}}
+    // {{{ private functions
 
     /**
@@ -310,5 +322,5 @@
         $data = "";
         foreach ($masterData as $key => $val) {
-            if (isset($comments[$key])) {
+            if (!empty($comments[$key])) {
                 $data .= "/** " . $comments[$key] . " */\n";
             }
