PostgresSQLBuilder.inc 6.75 KB
<?php
/**
 * PostgresSQLBuilder
 * 条件文の生成。where xxxx の、xxxxの部分を返す。
 * $Id: PostgresSQLBuilder.inc,v 1.1 2015/10/08 11:18:57 wanggb Exp $
 * @author iimuro
 * @access public
 * @package jp.aimslib2.database.postgres
 */

class PostgresSQLBuilder extends AbstractSQLBuilder{
	/**
	 * AND,OR等Where文の中身を生成する。
	 */
	public static function createOptionCondition($param){
		
		$option = "";
		while (list($key, $val) = each($param)) {
			
			if ($option != "") {
				$option .= " AND ";
			}
			
			$mmflg = "";
			$modkey = "";
			if(strlen($key) > 4){
				$mmflg = strtoupper(substr($key, strlen($key) - 4));
				$modkey = substr($key, 0, strlen($key) - 4);
			}
			if($mmflg == "_ALT"){
				if (get_magic_quotes_gpc() == 1) {
					$option .= $modkey . "::text like '" . StringUtil::escapePostgresLike5C($val) . "'";
				} else {
					$option .= $modkey . "::text like '" . StringUtil::setMagicQuotes(StringUtil::escapePostgresLike5C($val)) . "'";
				}
			} else if($mmflg == "_MAX"){
				if (get_magic_quotes_gpc() == 1) {
					$option .= $modkey . "<='" . $val . "'";
				} else {
					$option .= $modkey . "<='" . StringUtil::setMagicQuotes($val) . "'";
				}
				//$option .= $modkey . "<='" . $val . "'";
			} else if ($mmflg == "_MIN"){
				if (get_magic_quotes_gpc() == 1) {
					$option .= $modkey . ">='" . $val . "'";
				} else {
					$option .= $modkey . ">='" . StringUtil::setMagicQuotes($val) . "'";
				}
				//$option .= $modkey . ">='" . $val . "'";
			} else if($mmflg == "_LTN"){
				if (get_magic_quotes_gpc() == 1) {
					$option .= $modkey . "<'" . $val . "'";
				} else {
					$option .= $modkey . "<'" . StringUtil::setMagicQuotes($val) . "'";
				}
				//$option .= $modkey . "<='" . $val . "'";
			} else if ($mmflg == "_GTN"){
				if (get_magic_quotes_gpc() == 1) {
					$option .= $modkey . ">'" . $val . "'";
				} else {
					$option .= $modkey . ">'" . StringUtil::setMagicQuotes($val) . "'";
				}
				//$option .= $modkey . ">='" . $val . "'";
			} else if ($mmflg == "_NOT"){
				if(is_array($val)){
					if (count($val) > 0) {
						//$option .= $key . " not in ('";
						//$option .= implode("','", $val);
						//$option .= "')";
						if (get_magic_quotes_gpc() == 1) {
							$option .= $modkey . " not in ('";
							$option .= implode("','", $val);
							$option .= "')";
						} else {
							$tmp_list = array();
							foreach ($val as $tmp) {
								$tmp = StringUtil::setMagicQuotes($tmp);
								array_push($tmp_list, $tmp);
							}

							$option .= $modkey . " not in ('";
							$option .= implode("','", $tmp_list);
							$option .= "')";
						}
					} else {
						$option .= $modkey . " is not null";
					}
					
				} else if (is_int($val)) {
					//$option .= $modkey . "!='" . $val . "'";
					if (get_magic_quotes_gpc() == 1) {
						$option .= $modkey . "<>'" . $val . "'";
					} else {
						$option .= $modkey . "<>'" . StringUtil::setMagicQuotes($val) . "'";
					}
				} else if (is_bool($val)) {
					if ($val) {
						$option .= $modkey . "<>'true'";
					} else {
						$option .= $modkey . "<>'false'";
					}
				} else if(($val == "null")||($val == "")){
					$option .= $modkey . " is not null";
				} else {
					//$option .= $modkey . "!='" . $val . "'";
					//$option .= "(" . $modkey . "!='" . $val . "' OR " . $modkey . " is null)";
					if (get_magic_quotes_gpc() == 1) {
						$option .= "(" . $modkey . "<>'" . $val . "' OR " . $modkey . " is null)";
					} else {
						$option .= "(" . $modkey . "<>'" . StringUtil::setMagicQuotes($val) . "' OR " . $modkey . " is null)";
						//$option .= $modkey . "<>'" . StringUtil::setMagicQuotes($val) . "'";
					}
				}
			}else{
				if (is_array($val)) {
					if (count($val) > 0) {
						//$option .= $key . " in ('";
						//$option .= implode("','", $val);
						//$option .= "')";
						if (get_magic_quotes_gpc() == 1) {
							$option .= $key . " in ('";
							$option .= implode("','", $val);
							$option .= "')";
						} else {
							
							$tmp_list = array();
							foreach ($val as $tmp) {
								$tmp = StringUtil::setMagicQuotes($tmp);
								array_push($tmp_list, $tmp);
							}
							
							$option .= $key . " in ('";
							$option .= implode("','", $tmp_list);
							$option .= "')";
						}
					} else {
						$option .= $key . " is null";
					}
				} else if (is_int($val)) {
					$option .= $key . "='" . $val . "'";
				} else if (is_bool($val)) {
					if ($val) {
						$option .= $key . "='true'";
					} else {
						$option .= $key . "='false'";
					}
				} else if ((is_null($val))||($val == "")) {
					$option .= $key . " is null";
				} else {
					//$option .= $key . "='" . $val . "'";
					if (get_magic_quotes_gpc() == 1) {
						$option .= $key . "='" . $val . "'";
					} else {
						$option .= $key . "='" . StringUtil::setMagicQuotes($val) . "'";
					}
				}
			}
			
		}
		
		return $option;
	}


	/**
	 * created 10/27/2002 by Yu.
	 * 条件文の生成。set xxxx の、xxxxの部分を返す。
	 */
	// copyed 10/25/2002 by NAGASAWA Teruo
	public static function createSetValueOption($param){
		
		$option = "";
		while(list($key, $val) = each($param)){
			
			if($option != ""){
				$option .= ", ";
			}
			
			if (is_bool($val)) {
				if ($val) {
					$option .= $key . "='true'";
				} else {
					$option .= $key . "='false'";
				}
			} else if (is_null($val)) {
				$option .= $key . "=null";
			} else {
				if (get_magic_quotes_gpc() == 1) {
					$option .= $key . "='" . $val . "'";
				} else {
					$option .= $key . "='" . StringUtil::setMagicQuotes($val) . "'";
				}
			}
			
		}
		
		return $option;
	}


	/**
	 * created 10/27/2002 by Yu.
	 * 条件文の生成。(xxx) values (xxx)の部分を返す。
	 */
	public static function createInsertValueOption($param){
		
		$str = "";
		
		$cols = "";
		$vals = "";
		while(list($key, $val) = each($param)){
			
			if($cols != ""){
				$cols .= ", ";
			}
			if($vals != ""){
				$vals .= ", ";
			}
			
			$cols .= $key;
			if (is_bool($val)) {
				if ($val) {
					$vals .= "'true'";
				} else {
					$vals .= "'false'";
				}
			} else if (is_null($val)) {
				$vals .= "null";
			} else {
				if (get_magic_quotes_gpc() == 1) {
					$vals .= "'" . $val . "'";
				} else {
					$vals .= "'" . StringUtil::setMagicQuotes($val) . "'";
				}
			}
			
			
		}
		
		$str = "(" . $cols . ") VALUES (" . $vals . ")";
		
		
		return $str;
	}
	
	/**
	 * 対象となるレコードの先頭とレコード数を指定する文章を生成します。
	 * 不要なパラメータはnullを指定します。
	 */
	public static function createSubQuery($offset, $limit) {
		$subquery = "";
		if (($offset != null)&&(is_numeric($offset)) ){
			$subquery .= " OFFSET " . $offset;
		}
		if (($limit != null)&&(is_numeric($limit)) ){
			$subquery .= " LIMIT " . $limit;
		}
		
		return $subquery;
	}
	
}

?>