<?php /** * AbstractDatabaseManagerJP * 番組のクラスはこれをオーバーライドして利用します。一般DB用。 * 日本語テーブル、フィールドを利用しているデータベース用 * $Id: AbstractDatabaseManagerJP.inc,v 1.1 2015/10/08 11:18:56 wanggb Exp $ * @author iimuro * @access public * @package jp.aimslib2.database */ class AbstractDatabaseManagerJP extends AbstractDatabaseManager{ public function init($db_name, $user, $pass, $host, $port, $dbtype = "PostgreSQL"){ $this->dbtype = $dbtype; if ($dbtype == "PostgreSQL") { // 接続情報をアダプターに設定。以降、接続要求はこれらの値を利用。 $this->adaptor = new PostgresDatabaseAdaptorJP(); $this->adaptor->init($host, $port, $db_name, $user, $pass); // SQL文はPostgres用 $this->builder = new PostgresSQLBuilderJP(); // 型、関数もPostgres用→executeQueryを使うときの文章生成に利用。 $this->util = new PostgresUtil(); } else { ErrorLogger::doOutput("Unsupported Databse Type!"); } } /** * @abstract */ public static function getConnection(){ return null; } /** * SQL文を実行します。 */ public function executeQuery($sql){ return $this->adaptor->db_exec($sql); } /** * */ public static function db_copy_from($table, $data, $delimiter = "\t"){ return $this->adaptor->db_copy_from($table, $data, $delimiter); } /** * */ public static function doSelect($table, $w_param, $orderkey = null, $direction = "ASC", $offset = null, $limit = null){ $option = ""; if($w_param != null){ $option = " WHERE " . $this->builder->createOptionCondition($w_param); } $order = ""; if($orderkey != null){ $order .= " ORDER BY \"" . $orderkey . "\" " . $direction; } $subquery = $this->builder->createSubQuery($offset, $limit); $sql = "SELECT * FROM \"" . $table . "\"" . $option . $order . $subquery . ";"; $rowset = $this->executeQuery($sql); return $rowset; } /** * */ public static function doInsert($table, $v_param){ $sql1 = "INSERT INTO \"" . $table . "\" "; $sql1 .= $this->builder->createInsertValueOption($v_param); $this->executeQuery($sql1); } /** * */ public static function doUpdate($table, $w_param, $v_param){ $set_param = $this->builder->createSetValueOption($v_param); if(count($w_param) > 0){ $where_option = $this->builder->createOptionCondition($w_param); $sql = "UPDATE \"" . $table . "\" SET $set_param WHERE $where_option"; }else{ $sql = "UPDATE \"" . $table . "\" SET $set_param"; } $this->executeQuery($sql); } /** * 明示的にトランザクションを管理したいときに利用します。 * トランザクション開始。 */ public static function doBegin(){ $sql = "BEGIN"; $this->executeQuery($sql); } /** * 明示的にトランザクションを管理したいときに利用します。 * トランザクション終了。 */ public static function doEnd(){ $sql = "COMMIT"; $this->executeQuery($sql); } /** * 明示的にトランザクションを管理したいときに利用します。 * トランザクション破棄して終了。 */ public static function doRollback(){ $sql = "ROLLBACK"; $this->executeQuery($sql); } /** * resultset を一括挿入 */ public static function db_copy_resultset($table, $column_name, $resultset, $delimiter = "\t"){ $data = array(); foreach($resultset as $row){ $line = ""; for($i=0; $i < count($column_name); $i++) { if(isset($row[$column_name[$i]])){ $line .= $row[$column_name[$i]]; }else{ $line .= "\N"; } if($i < count($column_name) - 1){ $line .= $delimiter; } } $line .= "\n"; array_push($data, $line); } array_push($data, "\\.\n"); return $this->db_copy_from($table, $data, $delimiter); } /** * ラージオブジェクトを保存します。OIDが指定されない場合は新規に作成します。 * この処理を行う前にはかならずトランザク ションブロックの中に括る必要があります。 * @access public * @param string $data ラージオブジェクトバイナリデータ * @param int $oid ラージオブジェクトOID * @return int ラージオブジェクトOID。失敗時はnull。 */ public static function writeLargeObject($data, $oid = null) { return $this->adaptor->writeLargeObject($data, $oid); } /** * ラージオブジェクトを読み出します。 * この処理を行う前にはかならずトランザク ションブロックの中に括る必要があります。 * @access public * @param int $oid ラージオブジェクトOID * @return int ラージオブジェクトバイナリデータ。失敗時はnull。 */ public static function readLargeObject($oid) { return $this->adaptor->readLargeObject($oid); } /** * データベースのデータの変換や定型文の生成などのUtilクラスを取得します。 */ public static function getUtility() { return $this->util; } } ?>