You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							265 lines
						
					
					
						
							6.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							265 lines
						
					
					
						
							6.9 KiB
						
					
					
				| <?php | |
| /* | |
|  V4.55 3 Jan 2005  (c) 2000-2005 John Lim (jlim#natsoft.com.my). All rights reserved. | |
|   Released under both BSD license and Lesser GPL library license.  | |
|   Whenever there is any discrepancy between the two licenses,  | |
|   the BSD license will take precedence. | |
|   Set tabs to 4. | |
|    | |
|   Postgres7 support. | |
|   28 Feb 2001: Currently indicate that we support LIMIT | |
|   01 Dec 2001: dannym added support for default values | |
| */ | |
| 
 | |
| // security - hide paths | |
| if (!defined('ADODB_DIR')) die(); | |
| 
 | |
| include_once(ADODB_DIR."/drivers/adodb-postgres64.inc.php"); | |
| 
 | |
| class ADODB_postgres7 extends ADODB_postgres64 { | |
| 	var $databaseType = 'postgres7';	 | |
| 	var $hasLimit = true;	// set to true for pgsql 6.5+ only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 | |
| 	var $ansiOuter = true; | |
| 	var $charSet = true; //set to true for Postgres 7 and above - PG client supports encodings | |
| 	 | |
| 	function ADODB_postgres7()  | |
| 	{ | |
| 		$this->ADODB_postgres64(); | |
| 		if (ADODB_ASSOC_CASE !== 2) { | |
| 			$this->rsPrefix .= 'assoc_'; | |
| 		} | |
| 	} | |
| 
 | |
| 	 | |
| 	// the following should be compat with postgresql 7.2,  | |
| 	// which makes obsolete the LIMIT limit,offset syntax | |
| 	 function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)  | |
| 	 { | |
| 		 $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; | |
| 		 $limitStr  = ($nrows >= 0)  ? " LIMIT $nrows" : ''; | |
| 		 if ($secs2cache) | |
| 		  	$rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); | |
| 		 else | |
| 		  	$rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr); | |
| 		 | |
| 		return $rs; | |
| 	 } | |
|  	/* | |
|  	function Prepare($sql) | |
| 	{ | |
| 		$info = $this->ServerInfo(); | |
| 		if ($info['version']>=7.3) { | |
| 			return array($sql,false); | |
| 		} | |
| 		return $sql; | |
| 	} | |
|  	*/ | |
| 
 | |
| 	// from  Edward Jaramilla, improved version - works on pg 7.4 | |
| function MetaForeignKeys($table, $owner=false, $upper=false) | |
| { | |
| 	$sql = 'SELECT t.tgargs as args | |
| 	FROM | |
| 	pg_trigger t,pg_class c,pg_proc p | |
| 	WHERE | |
| 	t.tgenabled AND | |
| 	t.tgrelid = c.oid AND | |
| 	t.tgfoid = p.oid AND | |
| 	p.proname = \'RI_FKey_check_ins\' AND | |
| 	c.relname = \''.strtolower($table).'\' | |
| 	ORDER BY | |
| 		t.tgrelid'; | |
| 	 | |
| 	$rs = $this->Execute($sql); | |
| 	 | |
| 	if ($rs && !$rs->EOF) { | |
| 		$arr =& $rs->GetArray(); | |
| 		$a = array(); | |
| 		foreach($arr as $v) | |
| 		{ | |
| 			$data = explode(chr(0), $v['args']); | |
| 			if ($upper) { | |
| 				$a[strtoupper($data[2])][] = strtoupper($data[4].'='.$data[5]); | |
| 			} else { | |
| 			$a[$data[2]][] = $data[4].'='.$data[5]; | |
| 			} | |
| 		} | |
| 		return $a; | |
| 	} | |
| 	return false; | |
| } | |
| 
 | |
| 
 | |
| 
 | |
|     function xMetaForeignKeys($table, $owner=false, $upper=false) | |
| 	{ | |
| 
 | |
|         $sql = ' | |
| SELECT t.tgargs as args | |
|    FROM pg_trigger t, | |
|         pg_class c, | |
|         pg_class c2, | |
|         pg_proc f | |
|    WHERE t.tgenabled | |
|    AND t.tgrelid=c.oid | |
|    AND t.tgconstrrelid=c2.oid | |
|    AND t.tgfoid=f.oid | |
|    AND f.proname ~ \'^RI_FKey_check_ins\' | |
|    AND t.tgargs like \'$1\\\000'.strtolower($table).'%\' | |
|    ORDER BY t.tgrelid'; | |
| 
 | |
|         $rs = $this->Execute($sql); | |
| 		if ($rs && !$rs->EOF) { | |
| 			$arr =& $rs->GetArray(); | |
| 			$a = array(); | |
| 			foreach($arr as $v) { | |
|                 $data = explode(chr(0), $v['args']); | |
|                 if ($upper) { | |
|                     $a[] = array(strtoupper($data[2]) => strtoupper($data[4].'='.$data[5])); | |
|                 } else { | |
|                     $a[] = array($data[2] => $data[4].'='.$data[5]); | |
|                 } | |
|                  | |
| 			} | |
| 			return $a; | |
| 		} | |
| 		else return false; | |
|     } | |
| 	 | |
|  	 // this is a set of functions for managing client encoding - very important if the encodings | |
| 	// of your database and your output target (i.e. HTML) don't match | |
| 	//for instance, you may have UNICODE database and server it on-site as WIN1251 etc. | |
| 	// GetCharSet - get the name of the character set the client is using now | |
| 	// the functions should work with Postgres 7.0 and above, the set of charsets supported | |
| 	// depends on compile flags of postgres distribution - if no charsets were compiled into the server | |
| 	// it will return 'SQL_ANSI' always | |
| 	function GetCharSet() | |
| 	{ | |
| 		//we will use ADO's builtin property charSet | |
| 		$this->charSet = @pg_client_encoding($this->_connectionID); | |
| 		if (!$this->charSet) { | |
| 			return false; | |
| 		} else { | |
| 			return $this->charSet; | |
| 		} | |
| 	} | |
| 	 | |
| 	// SetCharSet - switch the client encoding | |
| 	function SetCharSet($charset_name) | |
| 	{ | |
| 		$this->GetCharSet(); | |
| 		if ($this->charSet !== $charset_name) { | |
| 			$if = pg_set_client_encoding($this->_connectionID, $charset_name); | |
| 			if ($if == "0" & $this->GetCharSet() == $charset_name) { | |
| 				return true; | |
| 			} else return false; | |
| 		} else return true; | |
| 	} | |
| 
 | |
| } | |
| 	 | |
| /*-------------------------------------------------------------------------------------- | |
| 	 Class Name: Recordset | |
| --------------------------------------------------------------------------------------*/ | |
| 
 | |
| class ADORecordSet_postgres7 extends ADORecordSet_postgres64{ | |
| 
 | |
| 	var $databaseType = "postgres7"; | |
| 	 | |
| 	 | |
| 	function ADORecordSet_postgres7($queryID,$mode=false)  | |
| 	{ | |
| 		$this->ADORecordSet_postgres64($queryID,$mode); | |
| 	} | |
| 	 | |
| 	 	// 10% speedup to move MoveNext to child class | |
| 	function MoveNext()  | |
| 	{ | |
| 		if (!$this->EOF) { | |
| 			$this->_currentRow++; | |
| 			if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { | |
| 				$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); | |
| 			 | |
| 				if (is_array($this->fields)) { | |
| 					if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); | |
| 					return true; | |
| 				} | |
| 			} | |
| 			$this->fields = false; | |
| 			$this->EOF = true; | |
| 		} | |
| 		return false; | |
| 	}		 | |
| 
 | |
| } | |
| 
 | |
| class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{ | |
| 
 | |
| 	var $databaseType = "postgres7"; | |
| 	 | |
| 	 | |
| 	function ADORecordSet_assoc_postgres7($queryID,$mode=false)  | |
| 	{ | |
| 		$this->ADORecordSet_postgres64($queryID,$mode); | |
| 	} | |
| 	 | |
| 	function _fetch() | |
| 	{ | |
| 		if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) | |
|         	return false; | |
| 
 | |
| 		$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); | |
| 		 | |
| 		if ($this->fields) { | |
| 			if (isset($this->_blobArr)) $this->_fixblobs(); | |
| 			$this->_updatefields(); | |
| 		} | |
| 			 | |
| 		return (is_array($this->fields)); | |
| 	} | |
| 	 | |
| 		// Create associative array | |
| 	function _updatefields() | |
| 	{ | |
| 		if (ADODB_ASSOC_CASE == 2) return; // native | |
| 	 | |
| 		$arr = array(); | |
| 		$lowercase = (ADODB_ASSOC_CASE == 0); | |
| 		 | |
| 		foreach($this->fields as $k => $v) { | |
| 			if (is_integer($k)) $arr[$k] = $v; | |
| 			else { | |
| 				if ($lowercase) | |
| 					$arr[strtolower($k)] = $v; | |
| 				else | |
| 					$arr[strtoupper($k)] = $v; | |
| 			} | |
| 		} | |
| 		$this->fields = $arr; | |
| 	} | |
| 	 | |
| 	function MoveNext()  | |
| 	{ | |
| 		if (!$this->EOF) { | |
| 			$this->_currentRow++; | |
| 			if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { | |
| 				$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); | |
| 			 | |
| 				if (is_array($this->fields)) { | |
| 					if ($this->fields) { | |
| 						if (isset($this->_blobArr)) $this->_fixblobs(); | |
| 					 | |
| 						$this->_updatefields(); | |
| 					} | |
| 					return true; | |
| 				} | |
| 			} | |
| 			 | |
| 			 | |
| 			$this->fields = false; | |
| 			$this->EOF = true; | |
| 		} | |
| 		return false; | |
| 	} | |
| } | |
| ?>
 |