Changeset 15238


Ignore:
Timestamp:
2007/08/08 16:12:34 (15 years ago)
Author:
nanasess
Message:

DBインスタンスを生成する関数を SC_Helper_DB クラスへ移動

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/util/SC_Utils.php

    r15224 r15238  
    2020class SC_Utils { 
    2121 
    22     /* データベースのバージョン所得 */ 
    23     function sfGetDBVersion($dsn = "") { 
    24         if($dsn == "") { 
    25             if(defined('DEFAULT_DSN')) { 
    26                 $dsn = DEFAULT_DSN; 
    27             } else { 
    28                 return; 
    29             } 
    30         } 
    31  
    32         $objQuery = new SC_Query($dsn, true, true); 
    33         list($db_type) = split(":", $dsn); 
    34         if($db_type == 'mysql') { 
    35             $val = $objQuery->getOne("select version()"); 
    36             $version = "MySQL " . $val; 
    37         } 
    38         if($db_type == 'pgsql') { 
    39             $val = $objQuery->getOne("select version()"); 
    40             $arrLine = split(" " , $val); 
    41             $version = $arrLine[0] . " " . $arrLine[1]; 
    42         } 
    43         return $version; 
    44     } 
    45  
    46     /* テーブルの存在チェック */ 
    47     function sfTabaleExists($table_name, $dsn = "") { 
    48         if($dsn == "") { 
    49             if(defined('DEFAULT_DSN')) { 
    50                 $dsn = DEFAULT_DSN; 
    51             } else { 
    52                 return; 
    53             } 
    54         } 
    55  
    56         $objQuery = new SC_Query($dsn, true, true); 
    57         // 正常に接続されている場合 
    58         if(!$objQuery->isError()) { 
    59             list($db_type) = split(":", $dsn); 
    60             // postgresqlとmysqlとで処理を分ける 
    61             if ($db_type == "pgsql") { 
    62                 $sql = "SELECT 
    63                             relname 
    64                         FROM 
    65                             pg_class 
    66                         WHERE 
    67                             (relkind = 'r' OR relkind = 'v') AND 
    68                             relname = ? 
    69                         GROUP BY 
    70                             relname"; 
    71                 $arrRet = $objQuery->getAll($sql, array($table_name)); 
    72                 if(count($arrRet) > 0) { 
    73                     return true; 
    74                 } 
    75             }else if ($db_type == "mysql") { 
    76                 $sql = "SHOW TABLE STATUS LIKE ?"; 
    77                 $arrRet = $objQuery->getAll($sql, array($table_name)); 
    78                 if(count($arrRet) > 0) { 
    79                     return true; 
    80                 } 
    81             } 
    82         } 
    83         return false; 
    84     } 
    85  
    86     // カラムの存在チェックと作成 
    87     function sfColumnExists($table_name, $col_name, $col_type = "", $dsn = "", $add = false) { 
    88         if($dsn == "") { 
    89             if(defined('DEFAULT_DSN')) { 
    90                 $dsn = DEFAULT_DSN; 
    91             } else { 
    92                 return; 
    93             } 
    94         } 
    95  
    96         // テーブルが無ければエラー 
    97         if(!sfTabaleExists($table_name, $dsn)) return false; 
    98  
    99         $objQuery = new SC_Query($dsn, true, true); 
    100         // 正常に接続されている場合 
    101         if(!$objQuery->isError()) { 
    102             list($db_type) = split(":", $dsn); 
    103  
    104             // カラムリストを取得 
    105             $arrRet = sfGetColumnList($table_name, $objQuery, $db_type); 
    106             if(count($arrRet) > 0) { 
    107                 if(in_array($col_name, $arrRet)){ 
    108                     return true; 
    109                 } 
    110             } 
    111         } 
    112  
    113         // カラムを追加する 
    114         if($add){ 
    115             $objQuery->query("ALTER TABLE $table_name ADD $col_name $col_type "); 
    116             return true; 
    117         } 
    118  
    119         return false; 
    120     } 
    121  
    122     // インデックスの存在チェックと作成 
    123     function sfIndexExists($table_name, $col_name, $index_name, $length = "", $dsn = "", $add = false) { 
    124         if($dsn == "") { 
    125             if(defined('DEFAULT_DSN')) { 
    126                 $dsn = DEFAULT_DSN; 
    127             } else { 
    128                 return; 
    129             } 
    130         } 
    131  
    132         // テーブルが無ければエラー 
    133         if(!sfTabaleExists($table_name, $dsn)) return false; 
    134  
    135         $objQuery = new SC_Query($dsn, true, true); 
    136         // 正常に接続されている場合 
    137         if(!$objQuery->isError()) { 
    138             list($db_type) = split(":", $dsn); 
    139             switch($db_type) { 
    140             case 'pgsql': 
    141                 // インデックスの存在確認 
    142                 $arrRet = $objQuery->getAll("SELECT relname FROM pg_class WHERE relname = ?", array($index_name)); 
    143                 break; 
    144             case 'mysql': 
    145                 // インデックスの存在確認 
    146                 $arrRet = $objQuery->getAll("SHOW INDEX FROM ? WHERE Key_name = ?", array($table_name, $index_name)); 
    147                 break; 
    148             default: 
    149                 return false; 
    150             } 
    151             // すでにインデックスが存在する場合 
    152             if(count($arrRet) > 0) { 
    153                 return true; 
    154             } 
    155         } 
    156  
    157         // インデックスを作成する 
    158         if($add){ 
    159             switch($db_type) { 
    160             case 'pgsql': 
    161                 $objQuery->query("CREATE INDEX ? ON ? (?)", array($index_name, $table_name, $col_name)); 
    162                 break; 
    163             case 'mysql': 
    164                 $objQuery->query("CREATE INDEX ? ON ? (?(?))", array($index_name, $table_name, $col_name, $length)); 
    165                 break; 
    166             default: 
    167                 return false; 
    168             } 
    169             return true; 
    170         } 
    171         return false; 
    172     } 
    173  
    174     // データの存在チェック 
    175     function sfDataExists($table_name, $where, $arrval, $dsn = "", $sql = "", $add = false) { 
    176         if($dsn == "") { 
    177             if(defined('DEFAULT_DSN')) { 
    178                 $dsn = DEFAULT_DSN; 
    179             } else { 
    180                 return; 
    181             } 
    182         } 
    183         $objQuery = new SC_Query($dsn, true, true); 
    184         $count = $objQuery->count($table_name, $where, $arrval); 
    185  
    186         if($count > 0) { 
    187             $ret = true; 
    188         } else { 
    189             $ret = false; 
    190         } 
    191         // データを追加する 
    192         if(!$ret && $add) { 
    193             $objQuery->exec($sql); 
    194         } 
    195  
    196         return $ret; 
    197     } 
    198  
    199     /* 
     22    /** 
    20023     * サイト管理情報から値を取得する。 
    20124     * データが存在する場合、必ず1以上の数値が設定されている。 
     
    23457 
    23558        return $control_flg; 
    236     } 
    237  
    238     // テーブルのカラム一覧を取得する 
    239     function sfGetColumnList($table_name, $objQuery = "", $db_type = DB_TYPE){ 
    240         if($objQuery == "") $objQuery = new SC_Query(); 
    241         $arrRet = array(); 
    242  
    243         // postgresqlとmysqlとで処理を分ける 
    244         if ($db_type == "pgsql") { 
    245             $sql = "SELECT a.attname FROM pg_class c, pg_attribute a WHERE c.relname=? AND c.oid=a.attrelid AND a.attnum > 0 AND not a.attname like '........pg.dropped.%........' ORDER BY a.attnum"; 
    246             $arrColList = $objQuery->getAll($sql, array($table_name)); 
    247             $arrColList = sfswaparray($arrColList); 
    248             $arrRet = $arrColList["attname"]; 
    249         }else if ($db_type == "mysql") { 
    250             $sql = "SHOW COLUMNS FROM $table_name"; 
    251             $arrColList = $objQuery->getAll($sql); 
    252             $arrColList = sfswaparray($arrColList); 
    253             $arrRet = $arrColList["Field"]; 
    254         } 
    255         return $arrRet; 
    25659    } 
    25760 
     
    25422345    } 
    25432346 
    2544     //MySQL用のSQL文に変更する 
    2545     function sfChangeMySQL($sql){ 
    2546         // 改行、タブを1スペースに変換 
    2547         $sql = preg_replace("/[\r\n\t]/"," ",$sql); 
    2548  
    2549         $sql = sfChangeView($sql);      // view表をインラインビューに変換する 
    2550         $sql = sfChangeILIKE($sql);     // ILIKE検索をLIKE検索に変換する 
    2551         $sql = sfChangeRANDOM($sql);    // RANDOM()をRAND()に変換する 
    2552  
    2553         return $sql; 
    2554     } 
    2555  
    2556     // SQLの中にviewが存在しているかチェックを行う。 
    2557     function sfInArray($sql){ 
    2558         global $arrView; 
    2559  
    2560         foreach($arrView as $key => $val){ 
    2561             if (strcasecmp($sql, $val) == 0){ 
    2562                 $changesql = eregi_replace("($key)", "$val", $sql); 
    2563                 sfInArray($changesql); 
    2564             } 
    2565         } 
    2566         return false; 
    2567     } 
    2568  
    25692347    // SQLシングルクォート対応 
    25702348    function sfQuoteSmart($in){ 
     
    25792357            return "'" . str_replace("'", "''", $in) . "'"; 
    25802358        } 
    2581     } 
    2582  
    2583     // view表をインラインビューに変換する 
    2584     function sfChangeView($sql){ 
    2585         global $arrView; 
    2586         global $arrViewWhere; 
    2587  
    2588         $arrViewTmp = $arrView; 
    2589  
    2590         // viewのwhereを変換 
    2591         foreach($arrViewTmp as $key => $val){ 
    2592             $arrViewTmp[$key] = strtr($arrViewTmp[$key], $arrViewWhere); 
    2593         } 
    2594  
    2595         // viewを変換 
    2596         $changesql = strtr($sql, $arrViewTmp); 
    2597  
    2598         return $changesql; 
    2599     } 
    2600  
    2601     // ILIKE検索をLIKE検索に変換する 
    2602     function sfChangeILIKE($sql){ 
    2603         $changesql = eregi_replace("(ILIKE )", "LIKE BINARY ", $sql); 
    2604         return $changesql; 
    2605     } 
    2606  
    2607     // RANDOM()をRAND()に変換する 
    2608     function sfChangeRANDOM($sql){ 
    2609         $changesql = eregi_replace("( RANDOM)", " RAND", $sql); 
    2610         return $changesql; 
    2611     } 
    2612  
    2613     // viewのwhereを置換する 
    2614     function sfViewWhere($target, $where = "", $arrval = array(), $option = ""){ 
    2615         global $arrViewWhere; 
    2616         $arrWhere = split("[?]", $where); 
    2617         $where_tmp = " WHERE " . $arrWhere[0]; 
    2618         for($i = 1; $i < count($arrWhere); $i++){ 
    2619             $where_tmp .= sfQuoteSmart($arrval[$i - 1]) . $arrWhere[$i]; 
    2620         } 
    2621         $arrViewWhere[$target] = $where_tmp . " " . $option; 
    26222359    } 
    26232360 
Note: See TracChangeset for help on using the changeset viewer.