Changeset 18790


Ignore:
Timestamp:
2010/08/24 14:58:32 (13 years ago)
Author:
nanasess
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
Message:

#801 の改善に伴い MDB2 の関数に置き替えと, 未使用関数の削除

  • SC_Query
    • get_auto_increment() を削除
    • listSequences() を追加
    • listTables() を追加
    • listTableFields() を追加
    • listTableIndexes() を追加
  • SC_DB_DBFactory
    • getTableExistsSql() を削除
    • getTableIndex() を削除
    • createTableIndex() を削除
    • sfGetColumnList(), findTableNames() に @deprecated コメント追加
  • SC_Helper_DB
    • sfTabaleExists() を削除
    • sfIndexExists() を削除
    • 削除した関数の使用箇所を修正
  • SC_Helper_Session
    • sfTabaleExists() を使用していた箇所の修正
  • html/install/index.php
    • sfTabaleExists() を使用していた箇所の修正
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  
    687687 
    688688    /** 
    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); 
    711728    } 
    712729 
  • branches/version-2_5-dev/data/class/db/SC_DB_DBFactory.php

    r18789 r18790  
    9393 
    9494    /** 
    95      * テーブルの存在チェックを行う SQL 文を返す. 
    96      * 
    97      * @param string $table_name 存在チェックを行うテーブル名 
    98      * @return string テーブルの存在チェックを行う SQL 文 
    99      */ 
    100     function getTableExistsSql($table_name) { return null; } 
    101  
    102     /** 
    10395     * 昨日の売上高・売上件数を算出する SQL を返す. 
    10496     * 
     
    139131 
    140132    /** 
    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 void 
    157      */ 
    158     function createTableIndex($index_name, $table_name, $col_name, $length = 0) {} 
    159  
    160     /** 
    161133     * テーブルのカラム一覧を取得する. 
    162134     * 
     135     * @deprecated SC_Query::listTableFields() を使用してください 
    163136     * @param string $table_name テーブル名 
    164137     * @return array テーブルのカラム一覧の配列 
     
    171144     * 引数に部分一致するテーブル名を配列で返す. 
    172145     * 
     146     * @deprecated SC_Query::listTables() を使用してください 
    173147     * @param string $expression 検索文字列 
    174148     * @return array テーブル名の配列 
  • branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php

    r18789 r18790  
    8383        $arrRet = $objQuery->getAll("SHOW VARIABLES LIKE 'char%'"); 
    8484        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); 
    9785    } 
    9886 
     
    170158 
    171159    /** 
    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 void 
    192      */ 
    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     /** 
    199160     * テーブルのカラム一覧を取得する. 
    200161     * 
     162     * @deprecated SC_Query::listTableFields() を使用してください 
    201163     * @param string $table_name テーブル名 
    202164     * @return array テーブルのカラム一覧の配列 
  • branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php

    r18789 r18790  
    6363    function sfChangeMySQL($sql){ 
    6464        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"; 
    8065    } 
    8166 
     
    152137 
    153138    /** 
    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 void 
    174      */ 
    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     /** 
    181139     * テーブルのカラム一覧を取得する. 
    182140     * 
     141     * @deprecated SC_Query::listTableFields() を使用してください 
    183142     * @param string $table_name テーブル名 
    184143     * @return array テーブルのカラム一覧の配列 
     
    204163     * 引数に部分一致するテーブル名を配列で返す. 
    205164     * 
     165     * @deprecated SC_Query::listTables() を使用してください 
    206166     * @param string $expression 検索文字列 
    207167     * @return array テーブル名の配列 
     
    225185        return $arrColList[0]; 
    226186    } 
    227      
    228      
     187 
    229188    /** 
    230189     * 文字コード情報を取得する 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php

    r18789 r18790  
    6060 
    6161    /** 
    62      * テーブルの存在をチェックする. 
    63      * 
    64      * @param string $table_name チェック対象のテーブル名 
    65      * @param string $dsn データソース名 
    66      * @return テーブルが存在する場合 true 
    67      */ 
    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     /** 
    8962     * カラムの存在チェックと作成を行う. 
    9063     * 
     
    10679        $dsn = $dbFactory->getDSN($dsn); 
    10780 
     81        $objQuery =& SC_Query::getSingletonInstance($dsn); 
     82 
    10883        // テーブルが無ければエラー 
    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 
    11286        // 正常に接続されている場合 
    11387        if(!$objQuery->isError()) { 
     
    11589 
    11690            // カラムリストを取得 
    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; 
    12295            } 
    12396        } 
     
    12699        if($add){ 
    127100            $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 インデックスの生成もする場合 true 
    146      * @return bool インデックスが存在する場合とインデックスの生成に成功した場合 true, 
    147      *               テーブルが存在しない場合 false, 
    148      *               引数 $add == false でインデックスが存在しない場合 false 
    149      */ 
    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()); 
    168101            return true; 
    169102        } 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php

    r18701 r18790  
    6565      */ 
    6666     function sfSessRead($id) { 
    67          if (!$this->objDb->sfTabaleExists("dtb_session")) return ''; 
    6867         $objQuery = new SC_Query(); 
    6968         $arrRet = $objQuery->select("sess_data", "dtb_session", "sess_id = ?", array($id)); 
     
    8483     function sfSessWrite($id, $sess_data) 
    8584     { 
    86          if (!$this->objDb->sfTabaleExists("dtb_session")) return false; 
    8785         $objQuery = new SC_Query(); 
    8886         $count = $objQuery->count("dtb_session", "sess_id = ?", array($id)); 
     
    115113      */ 
    116114     function sfSessDestroy($id) { 
    117          if (!$this->objDb->sfTabaleExists("dtb_session")) return false; 
    118115         $objQuery = new SC_Query(); 
    119116         $objQuery->delete("dtb_session", "sess_id = ?", array($id)); 
     
    130127     function sfSessGc($maxlifetime) { 
    131128         // MAX_LIFETIME以上更新されていないセッションを削除する。 
    132          if (!$this->objDb->sfTabaleExists("dtb_session")) return false; 
    133129         $objQuery = new SC_Query(); 
    134130         $where = "update_date < current_timestamp + '-". MAX_LIFETIME . " secs'"; 
  • branches/version-2_5-dev/html/install/index.php

    r18788 r18790  
    623623    // 店名、管理者メールアドレスを取得する。(再インストール時) 
    624624    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 
    628629            $arrRet = $objQuery->select("shop_name, email01", "dtb_baseinfo"); 
    629630            $shop_name = $arrRet[0]['shop_name']; 
  • branches/version-2_5-dev/test/class/SC_Query_Test.php

    r18773 r18790  
    4848    function tearDown() { 
    4949        $this->objQuery->rollback(); 
     50        // MySQL では CREATE TABLE がロールバックされないので DROP TABLE を行う 
     51        $this->dropTestTable(); 
    5052        $this->objQuery = null; 
    5153    } 
     
    217219 
    218220        $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)); 
    219242    } 
    220243 
     
    229252    } 
    230253 
     254    function dropTestTable() { 
     255        return $this->objQuery->query("DROP TABLE test_table"); 
     256    } 
     257 
    231258    function setTestData($column1, $column2, $column3) { 
    232259        $fields_values = array($column1, $column2, $column3); 
  • branches/version-2_5-dev/test/class/helper/SC_Helper_DB_Test.php

    r18763 r18790  
    3636 
    3737    /** 
    38      * sfTableExists() のテストケース. 
    39      */ 
    40     function testSfTableExists() { 
    41         $objDb = new SC_Helper_DB_Ex(); 
    42         $this->assertEquals(true, $objDb->sfTabaleExists("mtb_zip")); 
    43     } 
    44  
    45     /** 
    4638     * sfColumnExists() のテストケース. 
    4739     */ 
Note: See TracChangeset for help on using the changeset viewer.