source: branches/feature-module-update/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php @ 15263

Revision 15263, 3.6 KB checked in by nanasess, 17 years ago (diff)

$include_dir を CLASS_PATH に修正
svn properties 修正

  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/plain
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8
9// {{{ requires
10require_once(CLASS_PATH . "db/SC_DB_DBFactory.php");
11
12/**
13 * PostgreSQL 固有の処理をするクラス.
14 *
15 * このクラスを直接インスタンス化しないこと.
16 * 必ず SC_DB_DBFactory クラスを経由してインスタンス化する.
17 * また, SC_DB_DBFactory クラスの関数を必ずオーバーライドしている必要がある.
18 *
19 * @package DB
20 * @author LOCKON CO.,LTD.
21 * @version $Id$
22 */
23class SC_DB_DBFactory_PGSQL extends SC_DB_DBFactory {
24
25    /**
26     * DBのバージョンを取得する.
27     *
28     * @param string $dsn データソース名
29     * @return string データベースのバージョン
30     */
31    function sfGetDBVersion($dsn = "") {
32        $objQuery = new SC_Query($this->getDSN($dsn), true, true);
33        list($db_type) = split(":", $dsn);
34        $val = $objQuery->getOne("select version()");
35        $arrLine = split(" " , $val);
36        return $arrLine[0] . " " . $arrLine[1];
37    }
38
39    /**
40     * MySQL 用の SQL 文に変更する.
41     *
42     * DB_TYPE が PostgreSQL の場合は何もしない
43     *
44     * @access private
45     * @param string $sql SQL 文
46     * @return string MySQL 用に置換した SQL 文
47     */
48    function sfChangeMySQL($sql){
49        return $sql;
50    }
51
52    /**
53     * テーブルの存在チェックを行う SQL 文を返す.
54     *
55     * @return string テーブルの存在チェックを行う SQL 文
56     */
57    function getTableExistsSql() {
58        return "  SELECT relname "
59             . "    FROM pg_class "
60             . "   WHERE (relkind = 'r' OR relkind = 'v') "
61             . "     AND relname = ? "
62             . "GROUP BY relname";
63    }
64
65    /**
66     * インデックスの検索結果を配列で返す.
67     *
68     * @param string $index_name インデックス名
69     * @param string $table_name テーブル名(PostgreSQL では使用しない)
70     * @return array インデックスの検索結果の配列
71     */
72    function getTableIndex($index_name, $table_name = "") {
73        $objQuery = new SC_Query("", true, true);
74        return $objQuery->getAll("SELECT relname FROM pg_class WHERE relname = ?",
75                                 array($index_name));
76    }
77
78    /**
79     * インデックスを作成する.
80     *
81     * @param string $index_name インデックス名
82     * @param string $table_name テーブル名
83     * @param string $col_name カラム名
84     * @param integer $length 作成するインデックスのバイト長
85     * @return void
86     */
87    function createTableIndex($index_name, $table_name, $col_name, $length = 0) {
88        $objQuery = new SC_Query($dsn, true, true);
89        $objQuery->query("CREATE INDEX ? ON ? (?)", array($index_name, $table_name, $col_name));
90    }
91
92    /**
93     * テーブルのカラム一覧を取得する.
94     *
95     * @param string $table_name テーブル名
96     * @return array テーブルのカラム一覧の配列
97     */
98    function sfGetColumnList($table_name) {
99        $objQuery = new SC_Query();
100        $sql = "  SELECT a.attname "
101             . "    FROM pg_class c, pg_attribute a "
102             . "   WHERE c.relname=? "
103             . "     AND c.oid=a.attrelid "
104             . "     AND a.attnum > 0 "
105             . "     AND not a.attname "
106             . "    LIKE '........pg.dropped.%........' "
107             . "ORDER BY a.attnum";
108        $arrColList = $objQuery->getAll($sql, array($table_name));
109        $arrColList = SC_Utils_Ex::sfswaparray($arrColList);
110        return $arrColList["attname"];
111    }
112}
113?>
Note: See TracBrowser for help on using the repository browser.