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.
		
		
		
		
		
			
		
			
				
					
					
						
							209 lines
						
					
					
						
							5.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							209 lines
						
					
					
						
							5.5 KiB
						
					
					
				
								<?php
							 | 
						|
								/*
							 | 
						|
								V4.55 3 Jan 2005  (c) 2000-2005 John Lim. 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.
							 | 
						|
								
							 | 
						|
								  Latest version is available at http://adodb.sourceforge.net
							 | 
						|
								  
							 | 
						|
								  Portable version of oci8 driver, to make it more similar to other database drivers.
							 | 
						|
								  The main differences are
							 | 
						|
								
							 | 
						|
								   1. that the OCI_ASSOC names are in lowercase instead of uppercase.
							 | 
						|
								   2. bind variables are mapped using ? instead of :<bindvar>
							 | 
						|
								
							 | 
						|
								   Should some emulation of RecordCount() be implemented?
							 | 
						|
								  
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								// security - hide paths
							 | 
						|
								if (!defined('ADODB_DIR')) die();
							 | 
						|
								
							 | 
						|
								include_once(ADODB_DIR.'/drivers/adodb-oci8.inc.php');
							 | 
						|
								
							 | 
						|
								class ADODB_oci8po extends ADODB_oci8 {
							 | 
						|
									var $databaseType = 'oci8po';
							 | 
						|
									var $dataProvider = 'oci8';
							 | 
						|
									var $metaColumnsSQL = "select lower(cname),coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net
							 | 
						|
									var $metaTablesSQL = "select lower(table_name),table_type from cat where table_type in ('TABLE','VIEW')";
							 | 
						|
									
							 | 
						|
									function ADODB_oci8po()
							 | 
						|
									{
							 | 
						|
										$this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200;
							 | 
						|
										# oci8po does not support adodb extension: adodb_movenext()
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Param($name)
							 | 
						|
									{
							 | 
						|
										return '?';
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Prepare($sql,$cursor=false)
							 | 
						|
									{
							 | 
						|
										$sqlarr = explode('?',$sql);
							 | 
						|
										$sql = $sqlarr[0];
							 | 
						|
										for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) {
							 | 
						|
											$sql .=  ':'.($i-1) . $sqlarr[$i];
							 | 
						|
										} 
							 | 
						|
										return ADODB_oci8::Prepare($sql,$cursor);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									// emulate handling of parameters ? ?, replacing with :bind0 :bind1
							 | 
						|
									function _query($sql,$inputarr)
							 | 
						|
									{
							 | 
						|
										if (is_array($inputarr)) {
							 | 
						|
											$i = 0;
							 | 
						|
											if (is_array($sql)) {
							 | 
						|
												foreach($inputarr as $v) {
							 | 
						|
													$arr['bind'.$i++] = $v;
							 | 
						|
												} 
							 | 
						|
											} else {
							 | 
						|
												$sqlarr = explode('?',$sql);
							 | 
						|
												$sql = $sqlarr[0];
							 | 
						|
												foreach($inputarr as $k => $v) {
							 | 
						|
													$sql .=  ":$k" . $sqlarr[++$i];
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										return ADODB_oci8::_query($sql,$inputarr);
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/*--------------------------------------------------------------------------------------
							 | 
						|
										 Class Name: Recordset
							 | 
						|
								--------------------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								class ADORecordset_oci8po extends ADORecordset_oci8 {
							 | 
						|
								
							 | 
						|
									var $databaseType = 'oci8po';
							 | 
						|
									
							 | 
						|
									function ADORecordset_oci8po($queryID,$mode=false)
							 | 
						|
									{
							 | 
						|
										$this->ADORecordset_oci8($queryID,$mode);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function Fields($colname)
							 | 
						|
									{
							 | 
						|
										if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname];
							 | 
						|
										
							 | 
						|
										if (!$this->bind) {
							 | 
						|
											$this->bind = array();
							 | 
						|
											for ($i=0; $i < $this->_numOfFields; $i++) {
							 | 
						|
												$o = $this->FetchField($i);
							 | 
						|
												$this->bind[strtoupper($o->name)] = $i;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										 return $this->fields[$this->bind[strtoupper($colname)]];
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									// lowercase field names...
							 | 
						|
									function &_FetchField($fieldOffset = -1)
							 | 
						|
									{
							 | 
						|
										 $fld = new ADOFieldObject;
							 | 
						|
								 		 $fieldOffset += 1;
							 | 
						|
										 $fld->name = strtolower(OCIcolumnname($this->_queryID, $fieldOffset));
							 | 
						|
										 $fld->type = OCIcolumntype($this->_queryID, $fieldOffset);
							 | 
						|
										 $fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset);
							 | 
						|
										 if ($fld->type == 'NUMBER') {
							 | 
						|
										 	//$p = OCIColumnPrecision($this->_queryID, $fieldOffset);
							 | 
						|
											$sc = OCIColumnScale($this->_queryID, $fieldOffset);
							 | 
						|
											if ($sc == 0) $fld->type = 'INT';
							 | 
						|
										 }
							 | 
						|
										 return $fld;
							 | 
						|
									}
							 | 
						|
									/*
							 | 
						|
									function MoveNext()
							 | 
						|
									{
							 | 
						|
										if (@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
							 | 
						|
											$this->_currentRow += 1;
							 | 
						|
											return true;
							 | 
						|
										}
							 | 
						|
										if (!$this->EOF) {
							 | 
						|
											$this->_currentRow += 1;
							 | 
						|
											$this->EOF = true;
							 | 
						|
										}
							 | 
						|
										return false;
							 | 
						|
									}*/
							 | 
						|
								
							 | 
						|
									// 10% speedup to move MoveNext to child class
							 | 
						|
									function MoveNext() 
							 | 
						|
									{
							 | 
						|
										if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
							 | 
						|
										global $ADODB_ANSI_PADDING_OFF;
							 | 
						|
											$this->_currentRow++;
							 | 
						|
											
							 | 
						|
											if ($this->fetchMode & OCI_ASSOC) $this->_updatefields();
							 | 
						|
											if (!empty($ADODB_ANSI_PADDING_OFF)) {
							 | 
						|
												foreach($this->fields as $k => $v) {
							 | 
						|
													if (is_string($v)) $this->fields[$k] = rtrim($v);
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											return true;
							 | 
						|
										}
							 | 
						|
										if (!$this->EOF) {
							 | 
						|
											$this->EOF = true;
							 | 
						|
											$this->_currentRow++;
							 | 
						|
										}
							 | 
						|
										return false;
							 | 
						|
									}	
							 | 
						|
									
							 | 
						|
									/* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */
							 | 
						|
									function &GetArrayLimit($nrows,$offset=-1) 
							 | 
						|
									{
							 | 
						|
										if ($offset <= 0) return $this->GetArray($nrows);
							 | 
						|
										for ($i=1; $i < $offset; $i++) 
							 | 
						|
											if (!@OCIFetch($this->_queryID)) return array();
							 | 
						|
											
							 | 
						|
										if (!@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) return array();
							 | 
						|
										if ($this->fetchMode & OCI_ASSOC) $this->_updatefields();
							 | 
						|
										$results = array();
							 | 
						|
										$cnt = 0;
							 | 
						|
										while (!$this->EOF && $nrows != $cnt) {
							 | 
						|
											$results[$cnt++] = $this->fields;
							 | 
						|
											$this->MoveNext();
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										return $results;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// 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 _fetch() 
							 | 
						|
									{
							 | 
						|
										$ret = @OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode);
							 | 
						|
										if ($ret) {
							 | 
						|
										global $ADODB_ANSI_PADDING_OFF;
							 | 
						|
									
							 | 
						|
												if ($this->fetchMode & OCI_ASSOC) $this->_updatefields();
							 | 
						|
												if (!empty($ADODB_ANSI_PADDING_OFF)) {
							 | 
						|
													foreach($this->fields as $k => $v) {
							 | 
						|
														if (is_string($v)) $this->fields[$k] = rtrim($v);
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
										}
							 | 
						|
										return $ret;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								?>
							 |