Ignore:
Timestamp:
2010/08/25 16:38:50 (16 years ago)
Author:
nanasess
bzr:base-revision:
[email protected]
bzr:committer:
Kentaro Ohkouchi <[email protected]>
bzr:file-ids:

data/class/helper/SC_Helper_CSV.php 15535@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_CSV.php
data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php 16251@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fsystem%2FLC_Page_Admin_System_Bkup.php
html/install/index.php 16809@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Findex.php
html/install/sql/create_table_mysql.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fcreate_table_mysql.sql
html/install/sql/create_table_pgsql.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fcreate_table_pgsql.sql
html/install/sql/drop_table.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Fdrop_table.sql
html/install/sql/insert_data.sql 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fhtml%2Finstall%2Fsql%2Finsert_data.sql
bzr:mapping-version:
v4
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
[email protected]
bzr:revno:
2274
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:text-parents:

data/class/helper/SC_Helper_CSV.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18781
data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php [email protected]
html/install/sql/create_table_mysql.sql [email protected]
html/install/sql/create_table_pgsql.sql [email protected]
html/install/sql/drop_table.sql [email protected]
html/install/sql/insert_data.sql [email protected]
bzr:timestamp:
2010-08-25 16:38:46.040999889 +0900
bzr:user-agent:
bzr2.1.2+bzr-svn1.0.2
svn:original-date:
2010-08-25T07:38:46.041000Z
Message:

DB_TYPE で条件分岐している箇所の抽象化(#801)

  • SC_Helper_CSV
    • convert を mb_convert_kana_option へ変更
    • PEAR::DB の定数を MDB2 の定数へ修正
  • LC_Page_Admin_System_Bkup
    • DB_TYPE を使用している箇所を抽象化
    • シーケンス値バックアップファイルのフォーマット変更
  • html/install/index.php
    • 管理ユーザーの追加ができなくなっていたのを修正
  • html/install/sql/create_table_mysql.sql, html/install/sql/create_table_pgsql.sql
    • dtb_csv.convert を dtb_csv.mb_convert_kana_option へ変更
    • dtb_bkup を追加
  • html/install/sql/drop_table.sql
    • dtb_bkup を追加
  • html/install/sql/insert_data.sql
    • NOT NULL のフィールドが空文字にならないよう修正
Location:
branches/version-2_5-dev/data/class
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php

    r18781 r18791  
    7878                create_date, 
    7979                update_date, 
    80                 "convert" 
     80                mb_convert_kana_option 
    8181            FROM 
    8282                dtb_csv 
     
    262262        $objQuery->setOption($option); 
    263263 
    264         $list_data = $objQuery->select($cols, $from, $where, $arrval, DB_FETCHMODE_ORDERED); 
     264        $list_data = $objQuery->select($cols, $from, $where, $arrval, MDB2_FETCHMODE_ORDERED); 
    265265 
    266266        $csv = ''; 
  • branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php

    r18788 r18791  
    6969        SC_Utils_Ex::sfIsSuccess($objSess); 
    7070 
    71         // バックアップテーブルがなければ作成する 
    72         $this->lfCreateBkupTable(); 
    73  
    7471        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
    7572 
     
    207204        // 実行時間を制限しない 
    208205        set_time_limit(0); 
    209          
     206 
    210207        $objQuery = new SC_Query(); 
    211208        $csv_data = ""; 
     
    218215 
    219216        // 全テーブル取得 
    220         $arrTableList = $this->lfGetTableList(); 
     217        $arrTableList = $objQuery->listTables(); 
    221218 
    222219        // 各テーブル情報を取得する 
     
    224221 
    225222            if (!($val == "dtb_bkup" || $val == "mtb_zip")) { 
    226  
    227                 // 自動採番型の構成を取得する 
    228                 if ( 
    229                 $csv_autoinc .= $this->lfGetAutoIncrement($val); 
    230223 
    231224                // 全データを取得 
     
    252245                    $csv_data .= $val . "\r\n"; 
    253246                    $csv_data .= $arrKyes . "\r\n"; 
    254                     $csv_data .= $data; 
    255                     $csv_data .= "\r\n"; 
     247                    $csv_data .= $data . "\r\n"; 
    256248                } 
    257249 
     
    260252            } 
    261253        } 
     254 
     255        // 自動採番型の構成を取得する 
     256        $csv_autoinc = $this->lfGetAutoIncrement(); 
    262257 
    263258        $csv_file = $bkup_dir . "bkup_data.csv"; 
     
    358353    } 
    359354 
    360     // 全テーブルリストを取得する 
    361     function lfGetTableList(){ 
     355    /** 
     356     * シーケンス一覧をCSV出力形式に変換する. 
     357     * 
     358     * シーケンス名,シーケンス値 の形式に出力する. 
     359     * 
     360     * @return string シーケンス一覧の文字列 
     361     */ 
     362    function lfGetAutoIncrement() { 
    362363        $objQuery = new SC_Query(); 
    363  
    364         if(DB_TYPE == "pgsql"){ 
    365             $sql = "SELECT tablename FROM pg_tables WHERE tableowner = ? ORDER BY tablename ; "; 
    366             $arrRet = $objQuery->getAll($sql, array(DB_USER)); 
    367             $arrRet = SC_Utils_Ex::sfSwapArray($arrRet); 
    368             $arrRet = $arrRet['tablename']; 
    369         }else if(DB_TYPE == "mysql"){ 
    370             $sql = "SHOW TABLES;"; 
    371             $arrRet = $objQuery->getAll($sql); 
    372             $arrRet = SC_Utils_Ex::sfSwapArray($arrRet); 
    373  
    374             // キーを取得 
    375             $arrKey = array_keys($arrRet); 
    376  
    377             $arrRet = $arrRet[$arrKey[0]]; 
    378         } 
    379         return $arrRet; 
    380     } 
    381  
    382     // 自動採番型をCSV出力形式に変換する 
    383     // FIXME MDB2 のシーケンス関数を使用した実装へ要改修 
    384     function lfGetAutoIncrement($table_name){ 
    385         $arrColList = $this->lfGetColumnList($table_name); 
    386         $ret = ""; 
    387  
    388         if(DB_TYPE == "pgsql"){ 
    389             $match = 'nextval(\''; 
    390         }else if(DB_TYPE == "mysql"){ 
    391             $match = "auto_incr"; 
    392         } 
    393  
    394         foreach($arrColList['col_def'] as $key => $val){ 
    395  
    396             if (substr($val,0,9) == $match) { 
    397                 $col = $arrColList['col_name'][$key]; 
    398                 $autoVal = $this->lfGetAutoIncrementVal($table_name, $col); 
    399                 $ret .= "$table_name,$col,$autoVal\n"; 
    400             } 
    401         } 
    402  
    403         return $ret; 
    404     } 
    405  
    406     // テーブル構成を取得する 
    407     Function LfgetColumnlist($table_name){ 
    408         $objQuery = new SC_Query(); 
    409  
    410         if(DB_TYPE == "pgsql"){ 
    411             $sql = "SELECT 
    412                     a.attname, t.typname, a.attnotnull, d.adsrc as defval, a.atttypmod, a.attnum as fldnum, e.description 
    413                 FROM 
    414                     pg_class c, 
    415                     pg_type t, 
    416                     pg_attribute a left join pg_attrdef d on (a.attrelid=d.adrelid and a.attnum=d.adnum) 
    417                                    left join pg_description e on (a.attrelid=e.objoid and a.attnum=e.objsubid) 
    418                 WHERE (c.relname=?) AND (c.oid=a.attrelid) AND (a.atttypid=t.oid) AND a.attnum > 0 
    419                 ORDER BY fldnum"; 
    420             $arrColList = $objQuery->getAll($sql, array($table_name)); 
    421             $arrColList = SC_Utils_Ex::sfSwapArray($arrColList); 
    422  
    423             $arrRet['col_def'] = $arrColList['defval']; 
    424             $arrRet['col_name'] = $arrColList['attname']; 
    425         }else if(DB_TYPE == "mysql"){ 
    426             $sql = "SHOW COLUMNS FROM $table_name"; 
    427             $arrColList = $objQuery->getAll($sql); 
    428             $arrColList = SC_Utils_Ex::sfSwapArray($arrColList); 
    429  
    430             $arrRet['col_def'] = $arrColList['Extra']; 
    431             $arrRet['col_name'] = $arrColList['Field']; 
    432         } 
    433         return $arrRet; 
    434     } 
    435  
    436     // 自動採番型の値を取得する 
    437     function lfGetAutoIncrementVal($table_name , $colname = ""){ 
    438         $objQuery = new SC_Query(); 
    439         $ret = ""; 
    440  
    441         if(DB_TYPE == "pgsql"){ 
    442             $ret = $objQuery->nextval($table_name, $colname) - 1; 
    443         }else if(DB_TYPE == "mysql"){ 
    444             $sql = "SHOW TABLE STATUS LIKE ?"; 
    445             $arrData = $objQuery->getAll($sql, array($table_name)); 
    446             $ret = $arrData[0]['Auto_increment']; 
     364        $arrSequences = $objQuery->listSequences(); 
     365        $result = ""; 
     366 
     367        foreach($arrSequences as $val){ 
     368            $seq = $objQuery->currVal($val); 
     369 
     370            $ret .= $val . ","; 
     371            $ret .= is_null($seq) ? "0" : $seq; 
     372            $ret .= "\r\n"; 
    447373        } 
    448374        return $ret; 
     
    473399        // 実行時間を制限しない 
    474400        set_time_limit(0); 
    475          
     401 
    476402        $objQuery = new SC_Query("", false); 
    477403        $csv_data = ""; 
     
    546472 
    547473    // CSVファイルからインサート実行 
    548     function lfExeInsertSQL($objQuery, $csv){ 
     474    function lfExeInsertSQL(&$objQuery, $csv){ 
    549475 
    550476        $sql = ""; 
     
    604530 
    605531            // エラーがあれば終了 
    606             if ($err->message != ""){ 
     532            if (PEAR::isError($err)){ 
    607533                SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false)); 
    608534                return false; 
     
    625551 
    626552    // 自動採番をセット 
    627     function lfSetAutoInc($objQuery, $csv){ 
     553    function lfSetAutoInc(&$objQuery, $csv){ 
    628554        // csvファイルからデータの取得 
    629555        $arrCsvData = file($csv); 
    630556 
    631         foreach($arrCsvData as $key => $val){ 
     557        foreach($arrCsvData as $val){ 
    632558            $arrData = split(",", trim($val)); 
    633559 
    634             if ($arrData[2] == 0)   $arrData[2] = 1; 
    635             $objQuery->setval($arrData[0] . "_" . $arrData[1], $arrData[2]); 
     560             $objQuery->setval($arrData[0], $arrData[1]); 
    636561        } 
    637562    } 
    638563 
    639564    // DBを全てクリアする 
    640     function lfDeleteAll($objQuery){ 
     565    function lfDeleteAll(&$objQuery){ 
    641566        $ret = true; 
    642567 
    643         $arrTableList = $this->lfGetTableList(); 
    644  
    645         foreach($arrTableList as $key => $val){ 
     568        $arrTableList = $objQuery->listTables(); 
     569 
     570        foreach($arrTableList as $val){ 
    646571            // バックアップテーブルは削除しない 
    647572            if ($val != "dtb_bkup") { 
    648                 $trun_sql = "DELETE FROM $val;"; 
     573                $trun_sql = "DELETE FROM $val"; 
    649574                $ret = $objQuery->query($trun_sql); 
    650  
    651                 if (!$ret) return $ret; 
    652             } 
    653         } 
    654  
    655         return $ret; 
    656     } 
    657  
    658     // バックアップテーブルを作成する 
    659     function lfCreateBkupTable(){ 
    660         $objQuery = new SC_Query(); 
    661  
    662         // テーブルの存在チェック 
    663         $arrTableList = $this->lfGetTableList(); 
    664  
    665         if(!in_array("dtb_bkup", $arrTableList)){ 
    666             // 存在していなければ作成 
    667             // MySQL でプライマリキーを設定するため bkup_name は varchar(50) とした。 
    668             $cre_sql = " 
    669             create table dtb_bkup 
    670             ( 
    671                 bkup_name   varchar(50), 
    672                 bkup_memo   text, 
    673                 create_date timestamp, 
    674                 PRIMARY KEY (bkup_name) 
    675             ); 
    676         "; 
    677  
    678             $objQuery->query($cre_sql); 
    679         } 
     575                if (PEAR::isError($ret)) return false; 
     576            } 
     577        } 
     578 
     579        return true; 
    680580    } 
    681581} 
Note: See TracChangeset for help on using the changeset viewer.