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.
		
		
		
		
		
			
		
			
				
					
					
						
							947 lines
						
					
					
						
							25 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							947 lines
						
					
					
						
							25 KiB
						
					
					
				
								<?php
							 | 
						|
								/*********************************************************************************
							 | 
						|
								 * The contents of this file are subject to the SugarCRM Public License Version 1.1.2
							 | 
						|
								 * ("License"); You may not use this file except in compliance with the
							 | 
						|
								 * License. You may obtain a copy of the License at http://www.sugarcrm.com/SPL
							 | 
						|
								 * Software distributed under the License is distributed on an  "AS IS"  basis,
							 | 
						|
								 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
							 | 
						|
								 * the specific language governing rights and limitations under the License.
							 | 
						|
								 * The Original Code is:  SugarCRM Open Source
							 | 
						|
								 * The Initial Developer of the Original Code is SugarCRM, Inc.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.;
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________.
							 | 
						|
								 ********************************************************************************/
							 | 
						|
								
							 | 
						|
								require_once('include/logging.php');
							 | 
						|
								include('adodb/adodb.inc.php');
							 | 
						|
								require_once("adodb/adodb-xmlschema.inc.php");
							 | 
						|
									
							 | 
						|
										require_once('vtiger_logger.php');
							 | 
						|
										global $vtlog;
							 | 
						|
										$vtlog = new vtiger_logger();
							 | 
						|
								
							 | 
						|
								class PearDatabase{
							 | 
						|
									var $database = null;
							 | 
						|
									var $dieOnError = false;
							 | 
						|
									var $dbType = null;
							 | 
						|
									var $dbHostName = null;
							 | 
						|
									var $dbName = null;
							 | 
						|
									var $dbOptions = null;
							 | 
						|
									var $userName=null;
							 | 
						|
									var $userPassword=null;
							 | 
						|
									var $query_time = 0;
							 | 
						|
									var $log = null;
							 | 
						|
									var $lastmysqlrow = -1;
							 | 
						|
									var $enableSQLlog = false;
							 | 
						|
								
							 | 
						|
								
							 | 
						|
									function isMySQL() { return dbType=='mysql'; }
							 | 
						|
								
							 | 
						|
									function isOracle() { return dbType=='oci8'; }
							 | 
						|
								
							 | 
						|
									
							 | 
						|
									function println($msg)
							 | 
						|
									{
							 | 
						|
										require_once('include/logging.php');
							 | 
						|
										$log1 =& LoggerManager::getLogger('VT');
							 | 
						|
										if(is_array($msg))
							 | 
						|
										{
							 | 
						|
											$log1->fatal("PearDatabse ->".print_r($msg,true));
							 | 
						|
										}
							 | 
						|
										else
							 | 
						|
										{
							 | 
						|
											$log1->fatal("PearDatabase ->".$msg);
							 | 
						|
										}
							 | 
						|
										return $msg;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function setDieOnError($value){	
							 | 
						|
										$this->dieOnError = $value;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function setDatabaseType($type){
							 | 
						|
										$this->dbType = $type;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function setUserName($name){
							 | 
						|
										$this->userName = $name;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function setOption($name, $value){
							 | 
						|
										if(isset($this->dbOptions))
							 | 
						|
											$this->dbOptions[$name] = $value;
							 | 
						|
										if(isset($this->database))
							 | 
						|
											$this->database->setOption($name, $value);
							 | 
						|
									}	
							 | 
						|
									
							 | 
						|
									function setUserPassword($pass){
							 | 
						|
										$this->userPassword = $pass;	
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function setDatabaseName($db){
							 | 
						|
										$this->dbName = $db;	
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function setDatabaseHost($host){
							 | 
						|
										$this->dbHostName = $host;	
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function getDataSourceName(){
							 | 
						|
										return 	$this->dbType. "://".$this->userName.":".$this->userPassword."@". $this->dbHostName . "/". $this->dbName;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function startTransaction()
							 | 
						|
									{
							 | 
						|
										$this->println("TRANS Started");
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$this->database->StartTrans();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function completeTransaction()
							 | 
						|
									{		
							 | 
						|
										if($this->database->HasFailedTrans()) 
							 | 
						|
											$this->println("TRANS  Rolled Back");
							 | 
						|
										else
							 | 
						|
											$this->println("TRANS  Commited");
							 | 
						|
										
							 | 
						|
										$this->database->CompleteTrans();
							 | 
						|
										$this->println("TRANS  Completed");
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB converted	
							 | 
						|
									function checkError($msg='', $dieOnError=false){
							 | 
						|
										if($this->dbType == "mysql"){
							 | 
						|
											if (mysql_errno()){
							 | 
						|
											if($this->dieOnError || $dieOnError){
							 | 
						|
								         	 	$this->log->fatal("MySQL error ".mysql_errno().": ".mysql_error());	
							 | 
						|
												die ($msg."MySQL error ".mysql_errno().": ".mysql_error());
							 | 
						|
												
							 | 
						|
											}else{
							 | 
						|
												$this->log->error("MySQL error ".mysql_errno().": ".mysql_error());	
							 | 
						|
											}
							 | 
						|
											return true;
							 | 
						|
											}
							 | 
						|
											return false;
							 | 
						|
										}	
							 | 
						|
											else{
							 | 
						|
												if(!isset($this->database)){
							 | 
						|
													$this->log->error("Database Is Not Connected");
							 | 
						|
													return true;
							 | 
						|
												}
							 | 
						|
												if(DB::isError($this->database)){
							 | 
						|
													
							 | 
						|
													if($this->dieOnError || $dieOnError){
							 | 
						|
														$this->log->fatal($msg.$this->database->getMessage());
							 | 
						|
														 die ($msg.$this->database->getMessage());	
							 | 
						|
													}else{
							 | 
						|
														$this->log->error($msg.$this->database->getMessage());		
							 | 
						|
													}
							 | 
						|
													return true;
							 | 
						|
												}
							 | 
						|
										}return false;
							 | 
						|
										
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
									
							 | 
						|
									function checkError($msg='', $dieOnError=false)
							 | 
						|
									{
							 | 
						|
										/*if($this->database->ErrorNo())
							 | 
						|
										{
							 | 
						|
											if($this->dieOnError || $dieOnError)
							 | 
						|
											{
							 | 
						|
								         	 		$this->println("ADODB error ".$this->database->ErrorNo());	
							 | 
						|
												die ($msg."ADODB error ".$this->database->ErrorNo());
							 | 
						|
												
							 | 
						|
											}else{
							 | 
						|
												$this->log->error("MySQL error ".mysql_errno().": ".mysql_error());
							 | 
						|
											}
							 | 
						|
											return true;
							 | 
						|
										}*/
							 | 
						|
										
							 | 
						|
										if($this->dieOnError || $dieOnError)
							 | 
						|
										{
							 | 
						|
								         		$this->println("ADODB error ".$msg."->[".$this->database->ErrorNo()."]".$this->database->ErrorMsg());	
							 | 
						|
											die ($msg."ADODB error ".$msg."->".$this->database->ErrorMsg());
							 | 
						|
										}
							 | 
						|
										else
							 | 
						|
										{
							 | 
						|
											$this->println("ADODB error ".$msg."->[".$this->database->ErrorNo()."]".$this->database->ErrorMsg());
							 | 
						|
								
							 | 
						|
										}
							 | 
						|
										return false;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function change_key_case($arr)
							 | 
						|
									{
							 | 
						|
										return is_array($arr)?array_change_key_case($arr):$arr;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									var $req_flist;	
							 | 
						|
									
							 | 
						|
									
							 | 
						|
									/**
							 | 
						|
									* @return void
							 | 
						|
									* @desc checks if a connection exists if it does not it closes the connection
							 | 
						|
									 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc..
							 | 
						|
									 * All Rights Reserved..
							 | 
						|
									 * Contributor(s): ______________________________________..
							 | 
						|
									*/
							 | 
						|
									function checkConnection(){
							 | 
						|
								global $vtlog;
							 | 
						|
											if(!isset($this->database))
							 | 
						|
											{
							 | 
						|
												$this->println("TRANS creating new connection");
							 | 
						|
												/*$flist=get_included_files();
							 | 
						|
												foreach($flist as $key=>$value)
							 | 
						|
												{
							 | 
						|
													if(!strstr($value,'\\modules') && !strstr($value,'\\data'))
							 | 
						|
													unset($flist[$key]);
							 | 
						|
													
							 | 
						|
												}
							 | 
						|
												$this->println($flist);*/
							 | 
						|
												$this->connect(false);
							 | 
						|
											}
							 | 
						|
											else
							 | 
						|
											{
							 | 
						|
										//		$this->println("checkconnect using old connection");
							 | 
						|
												 $vtlog->logthis('checkconnect using old connection','info');
							 | 
						|
											}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB converted	
							 | 
						|
									function query($sql, $dieOnError=false, $msg=''){
							 | 
						|
										$this->println("query ".$sql);
							 | 
						|
										$this->log->info('Query:' . $sql);
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$this->query_time = microtime();
							 | 
						|
										if($this->dbType == "mysql"){
							 | 
						|
											$result =& mysql_query($sql);
							 | 
						|
											$this->lastmysqlrow = -1; 	
							 | 
						|
										}else{
							 | 
						|
											$result =& $this->database->query($sql);
							 | 
						|
										}
							 | 
						|
										$this->query_time = microtime() - $this->query_time;
							 | 
						|
										$this->log->info('Query Execution Time:'.$this->query_time);
							 | 
						|
										$this->checkError($msg.' Query Failed:' . $sql . '::', $dieOnError);	
							 | 
						|
										return $result;
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
								
							 | 
						|
									function query($sql, $dieOnError=false, $msg='')
							 | 
						|
									{
							 | 
						|
										global $vtlog;
							 | 
						|
										//$this->println("ADODB query ".$sql);		
							 | 
						|
										$vtlog->logthis('query being executed : '.$sql,'debug');
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$result = & $this->database->Execute($sql);
							 | 
						|
										$this->lastmysqlrow = -1;
							 | 
						|
										if(!$result)$this->checkError($msg.' Query Failed:' . $sql . '::', $dieOnError);
							 | 
						|
										return $result;		
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
									function getEmptyBlob()
							 | 
						|
									{
							 | 
						|
										//if(dbType=="oci8") return 'empty_blob()';
							 | 
						|
										//else return 'null';
							 | 
						|
										return 'null';
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function updateBlob($tablename, $colname, $id, $data)	
							 | 
						|
									{
							 | 
						|
										$this->println("updateBlob t=".$tablename." c=".$colname." id=".$id);
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$result = $this->database->UpdateBlob($tablename, $colname, $data, $id);
							 | 
						|
										$this->println("updateBlob t=".$tablename." c=".$colname." id=".$id." status=".$result);
							 | 
						|
										return $result;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB converted
							 | 
						|
									function limitQuery($sql,$start,$count, $dieOnError=false, $msg=''){
							 | 
						|
										if($this->dbType == "mysql")
							 | 
						|
											 return $this->query("$sql LIMIT $start,$count", $dieOnError, $msg);
							 | 
						|
										$this->log->info('Limit Query:' . $sql. ' Start: ' .$start . ' count: ' . $count);
							 | 
						|
										$this->lastsql = $sql;
							 | 
						|
										
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$this->query_time = microtime();
							 | 
						|
										$result =& $this->database->limitQuery($sql,$start, $count);
							 | 
						|
										$this->query_time = microtime() - $this->query_time;
							 | 
						|
										$this->log->info('Query Execution Time:'.$this->query_time);
							 | 
						|
										$this->checkError($msg.' Query Failed:' . $sql . '::', $dieOnError);	
							 | 
						|
										return $result;
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
									
							 | 
						|
									function limitQuery($sql,$start,$count, $dieOnError=false, $msg='')
							 | 
						|
									{
							 | 
						|
										global $vtlog;
							 | 
						|
										//$this->println("ADODB limitQuery sql=".$sql." st=".$start." co=".$count);
							 | 
						|
										$vtlog->logthis(' limitQuery sql = '.$sql .' st = '.$start .' co = '.$count,'debug');
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$result =& $this->database->SelectLimit($sql,$count,$start);
							 | 
						|
										if(!$result) $this->checkError($msg.' Limit Query Failed:' . $sql . '::', $dieOnError);
							 | 
						|
										return $result;		
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									/* ADODB converted
							 | 
						|
									function getOne($sql, $dieOnError=false, $msg=''){
							 | 
						|
										$this->log->info('Get One:' . $sql);
							 | 
						|
										$this->checkConnection();
							 | 
						|
										if($this->dbType == "mysql"){
							 | 
						|
											$queryresult =& $this->query($sql, $dieOnError, $msg);
							 | 
						|
											$result =& mysql_result($queryresult,0);
							 | 
						|
										}else{
							 | 
						|
											$result =& $this->database->getOne($sql);
							 | 
						|
										}
							 | 
						|
										$this->checkError($msg.' Get One Failed:' . $sql . '::', $dieOnError);	
							 | 
						|
										return $result;
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
								
							 | 
						|
									function getOne($sql, $dieOnError=false, $msg='')
							 | 
						|
									{
							 | 
						|
										$this->println("ADODB getOne sql=".$sql);
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$result =& $this->database->GetOne($sql);
							 | 
						|
										if(!$result) $this->checkError($msg.' Get one Query Failed:' . $sql . '::', $dieOnError);
							 | 
						|
										return $result;		
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB converted
							 | 
						|
									function getFieldsArray(&$result)
							 | 
						|
									{
							 | 
						|
										$field_array = array();
							 | 
						|
								
							 | 
						|
										if(! isset($result) || empty($result))
							 | 
						|
										{
							 | 
						|
											return 0;
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if($this->dbType == "mysql")
							 | 
						|
										{
							 | 
						|
											$i = 0;
							 | 
						|
											while ($i < mysql_num_fields($result)) 
							 | 
						|
											{
							 | 
						|
								   				$meta = mysql_fetch_field($result, $i);
							 | 
						|
								
							 | 
						|
								   				if (!$meta) 
							 | 
						|
												{
							 | 
						|
													return 0;
							 | 
						|
								   				}
							 | 
						|
													
							 | 
						|
												array_push($field_array,$meta->name);
							 | 
						|
								
							 | 
						|
								   				$i++;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										else
							 | 
						|
										{
							 | 
						|
											$arr = tableInfo($result);
							 | 
						|
											foreach ($arr as $index=>$subarr)
							 | 
						|
											{
							 | 
						|
												array_push($field_array,$subarr['name']);	
							 | 
						|
											}
							 | 
						|
									
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										return $field_array;
							 | 
						|
											
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
								
							 | 
						|
									function getFieldsArray(&$result)
							 | 
						|
									{
							 | 
						|
										//$this->println("ADODB getFieldsArray");
							 | 
						|
										$field_array = array();
							 | 
						|
										if(! isset($result) || empty($result))
							 | 
						|
										{
							 | 
						|
											return 0;
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										$i = 0;
							 | 
						|
										$n = $result->FieldCount();
							 | 
						|
										while ($i < $n) 
							 | 
						|
										{
							 | 
						|
											$meta = $result->FetchField($i);
							 | 
						|
											if (!$meta) 
							 | 
						|
											{
							 | 
						|
												return 0;
							 | 
						|
											}
							 | 
						|
											array_push($field_array,$meta->name);
							 | 
						|
											$i++;
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										//$this->println($field_array);
							 | 
						|
										return $field_array;			
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									/* ADODB Converted
							 | 
						|
									function getRowCount(&$result){
							 | 
						|
										if(isset($result) && !empty($result))
							 | 
						|
											if($this->dbType == "mysql"){
							 | 
						|
												return mysql_numrows($result);
							 | 
						|
											}else{
							 | 
						|
												 return $result->numRows();
							 | 
						|
											}
							 | 
						|
										return 0;
							 | 
						|
											
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
									
							 | 
						|
									function getRowCount(&$result){
							 | 
						|
										global $vtlog;
							 | 
						|
										//$this->println("ADODB getRowCount");
							 | 
						|
										if(isset($result) && !empty($result))
							 | 
						|
											$rows= $result->RecordCount();			
							 | 
						|
										//$this->println("ADODB getRowCount rows=".$rows);	
							 | 
						|
										$vtlog->logthis('getRowCount rows= '.$rows,'debug');
							 | 
						|
										return $rows;			
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB newly added. replacement for mysql_num_rows */
							 | 
						|
								
							 | 
						|
									function num_rows(&$result)
							 | 
						|
									{
							 | 
						|
										return $this->getRowCount($result);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB newly added. replacement form mysql_num_fields */
							 | 
						|
								
							 | 
						|
									function num_fields(&$result)
							 | 
						|
									{
							 | 
						|
										return $result->FieldCount();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB newly added. replacement for mysql_fetch_array() */
							 | 
						|
								
							 | 
						|
									function fetch_array(&$result)
							 | 
						|
									{
							 | 
						|
										if($result->EOF)
							 | 
						|
										{
							 | 
						|
											//$this->println("ADODB fetch_array return null");
							 | 
						|
											return NULL;
							 | 
						|
										}		
							 | 
						|
										return $this->change_key_case($result->FetchRow());
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* ADODB newly added. replacement for mysql_result() */
							 | 
						|
								
							 | 
						|
									function query_result(&$result, $row, $col=0)
							 | 
						|
									{		
							 | 
						|
										//$this->println("ADODB query_result r=".$row." c=".$col);
							 | 
						|
										$result->Move($row);
							 | 
						|
										$rowdata = $this->change_key_case($result->FetchRow());
							 | 
						|
										//$this->println($rowdata);
							 | 
						|
										$coldata = $rowdata[$col];
							 | 
						|
										//$this->println("ADODB query_result ". $coldata);
							 | 
						|
										return $coldata;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
								
							 | 
						|
									/* ADODB Converted	
							 | 
						|
									function getAffectedRowCount(&$result){
							 | 
						|
											if($this->dbType == "mysql"){
							 | 
						|
												return mysql_affected_rows();
							 | 
						|
											}
							 | 
						|
											else {
							 | 
						|
												return $result->affectedRows();
							 | 
						|
											}
							 | 
						|
										return 0;
							 | 
						|
											
							 | 
						|
									}*/
							 | 
						|
								
							 | 
						|
									function getAffectedRowCount(&$result){
							 | 
						|
										global $vtlog;
							 | 
						|
								//		$this->println("ADODB getAffectedRowCount");
							 | 
						|
									$vtlog->logthis('getAffectedRowCount','debug');
							 | 
						|
										$rows =$this->database->Affected_Rows(); 
							 | 
						|
									//	$this->println("ADODB getAffectedRowCount rows=".rows);
							 | 
						|
									$vtlog->logthis('getAffectedRowCount rows = '.$rows,'debug');
							 | 
						|
										return $rows;
							 | 
						|
									}
							 | 
						|
											
							 | 
						|
										
							 | 
						|
								
							 | 
						|
									/* ADODB converted
							 | 
						|
									function requireSingleResult($sql, $dieOnError=false,$msg='', $encode=true){
							 | 
						|
											$result = $this->query($sql, $dieOnError, $msg);
							 | 
						|
										
							 | 
						|
											if($this->getRowCount($result ) == 1)
							 | 
						|
												return to_html($result, $encode);
							 | 
						|
											$this->log->error('Rows Returned:'. $this->getRowCount($result) .' More than 1 row returned for '. $sql);
							 | 
						|
											return '';
							 | 
						|
									}*/
							 | 
						|
								
							 | 
						|
									function requireSingleResult($sql, $dieOnError=false,$msg='', $encode=true){
							 | 
						|
											$result = $this->query($sql, $dieOnError, $msg);
							 | 
						|
										
							 | 
						|
											/*$row = $this->change_key_case($result->GetRowAssoc(false));
							 | 
						|
											$this->println("rsr ");
							 | 
						|
											$this->println($row);*/
							 | 
						|
											if($this->getRowCount($result ) == 1)				
							 | 
						|
												//return to_html($result, $encode); // srini - just think $result compatability
							 | 
						|
												return $result;
							 | 
						|
											$this->log->error('Rows Returned:'. $this->getRowCount($result) .' More than 1 row returned for '. $sql);
							 | 
						|
											return '';
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
								
							 | 
						|
									/* ADODB converted	
							 | 
						|
									function fetchByAssoc(&$result, $rowNum = -1, $encode=true){
							 | 
						|
										if(isset($result) && $rowNum < 0){
							 | 
						|
											if($this->dbType == "mysql"){
							 | 
						|
												$row = mysql_fetch_assoc($result);
							 | 
						|
												
							 | 
						|
												if($encode&& is_array($row))return array_map('to_html', $row);	
							 | 
						|
												return $row;
							 | 
						|
											}
							 | 
						|
											$row = $result->fetchRow(DB_FETCHMODE_ASSOC);	
							 | 
						|
										}
							 | 
						|
										if($this->dbType == "mysql"){
							 | 
						|
												if($this->getRowCount($result) > $rowNum){
							 | 
						|
								
							 | 
						|
													mysql_data_seek($result, $rowNum);	
							 | 
						|
												}
							 | 
						|
												$this->lastmysqlrow = $rowNum;
							 | 
						|
											
							 | 
						|
												$row = mysql_fetch_assoc($result);
							 | 
						|
												
							 | 
						|
												if($encode&& is_array($row))return array_map('to_html', $row);	
							 | 
						|
												return $row;
							 | 
						|
												
							 | 
						|
										}
							 | 
						|
										$row = $result->fetchRow(DB_FETCHMODE_ASSOC, $rowNum);
							 | 
						|
										if($encode)return array_map('to_html', $row);	
							 | 
						|
										return $row;
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
								
							 | 
						|
									function fetchByAssoc(&$result, $rowNum = -1, $encode=true){
							 | 
						|
										//$this->println("ADODB fetchByAssoc ".$rowNum." fetch mode=".$adb->database->$ADODB_FETCH_MODE);
							 | 
						|
										if($result->EOF)
							 | 
						|
										{
							 | 
						|
											$this->println("ADODB fetchByAssoc return null");
							 | 
						|
											return NULL;
							 | 
						|
										}
							 | 
						|
										if(isset($result) && $rowNum < 0)
							 | 
						|
										{			
							 | 
						|
											$row = $this->change_key_case($result->GetRowAssoc(false));			
							 | 
						|
											$result->MoveNext();			
							 | 
						|
											//print_r($row);
							 | 
						|
											//$this->println("ADODB fetchByAssoc r< 0 isarray r=".is_array($row)." r1=".is_array($row[1]));			
							 | 
						|
											//$this->println($row);
							 | 
						|
											if($encode&& is_array($row))
							 | 
						|
												return array_map('to_html', $row);
							 | 
						|
											//$this->println("ADODB fetchByAssoc r< 0 not array r1=".$row[1]);			
							 | 
						|
											return $row;			
							 | 
						|
										}
							 | 
						|
									
							 | 
						|
										//$this->println("ADODB fetchByAssoc after if ".$rowNum);	
							 | 
						|
										
							 | 
						|
										if($this->getRowCount($result) > $rowNum)
							 | 
						|
										{
							 | 
						|
											$result->Move($rowNum);				
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										$this->lastmysqlrow = $rowNum; //srini - think about this
							 | 
						|
										$row = $this->change_key_case($result->GetRowAssoc(false));		
							 | 
						|
										$result->MoveNext();
							 | 
						|
										//print_r($row);		
							 | 
						|
										$this->println($row);
							 | 
						|
												
							 | 
						|
										if($encode&& is_array($row))return array_map('to_html', $row);	
							 | 
						|
										return $row;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									/* ADODB converted
							 | 
						|
									function getNextRow(&$result, $encode=true){
							 | 
						|
										if(isset($result)){
							 | 
						|
											$row = $result->fetchRow();
							 | 
						|
											if($encode&& is_array($row))return array_map('to_html', $row);	
							 | 
						|
												return $row;
							 | 
						|
											
							 | 
						|
										}
							 | 
						|
										return null;
							 | 
						|
									}
							 | 
						|
									*/
							 | 
						|
									
							 | 
						|
									function getNextRow(&$result, $encode=true){
							 | 
						|
										global $vtlog;
							 | 
						|
								
							 | 
						|
										//$this->println("ADODB getNextRow");
							 | 
						|
										$vtlog->logthis('getNextRow','info');
							 | 
						|
										if(isset($result)){
							 | 
						|
											$row = $this->change_key_case($result->FetchRow());
							 | 
						|
											if($row && $encode&& is_array($row))return array_map('to_html', $row);	
							 | 
						|
												return $row;
							 | 
						|
											
							 | 
						|
										}
							 | 
						|
										return null;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function fetch_row(&$result, $encode=true)
							 | 
						|
									{
							 | 
						|
										return $this->getNextRow($result);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function field_name(&$result, $col)
							 | 
						|
									{
							 | 
						|
										return $result->FetchField($col);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function getQueryTime(){
							 | 
						|
										return $this->query_time;	
							 | 
						|
									}
							 | 
						|
									/*function execute($stmt, $data, $dieOnError=false, $msg=''){
							 | 
						|
										$this->log->info('Executing:'.$stmt);
							 | 
						|
										$this->checkConnection();
							 | 
						|
										$this->query_time = microtime();
							 | 
						|
										$prepared	= $this->database->prepare($stmt);
							 | 
						|
										$result = execute($stmt, $data);
							 | 
						|
										$this->query_time = microtime() - $this->query_time;
							 | 
						|
										//$this->log->info('Query Execution Time:'.$this->query_time);
							 | 
						|
										$this->checkError('Execute Failed:' . $stmt. '::', $dieOnError);
							 | 
						|
										return $result;	
							 | 
						|
									}*/
							 | 
						|
										
							 | 
						|
									
							 | 
						|
									/* adodb converted
							 | 
						|
									function connect($dieOnError = false){
							 | 
						|
										$this->println("connect");
							 | 
						|
										global $dbconfigoption;
							 | 
						|
										if($this->dbType == "mysql" && $dbconfigoption['persistent'] == true){
							 | 
						|
											$this->database =@mysql_pconnect($this->dbHostName,$this->userName,$this->userPassword);
							 | 
						|
											@mysql_select_db($this->dbName) or die( "Unable to select database");				
							 | 
						|
											if(!$this->database){
							 | 
						|
												$this->connection = mysql_connect($this->dbHostName,$this->userName,$this->userPassword) or die("Could not connect to server ".$this->dbHostName." as ".$this->userName.".".mysql_error());
							 | 
						|
												if($this->connection == false && $dbconfigoption['persistent'] == true){
							 | 
						|
													$_SESSION['administrator_error'] = "<B>Severe Performance Degradation: Persistent Database Connections not working.  Please set \$dbconfigoption['persistent'] to false in your config.php file</B>";  			
							 | 
						|
												}	
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										else $this->database = DB::connect($this->getDataSourceName(), $this->dbOptions);
							 | 
						|
										if($this->checkError('Could Not Connect:', $dieOnError))
							 | 
						|
											$this->log->info("connected to db");
							 | 
						|
											
							 | 
						|
									}*/
							 | 
						|
									
							 | 
						|
									function connect($dieOnError = false)
							 | 
						|
									{
							 | 
						|
										//$this->println("ADODB connect");
							 | 
						|
										global $dbconfigoption,$dbconfig;
							 | 
						|
										//$this->println("ADODB type=".$this->dbType." host=".$this->dbHostName." dbname=".$this->dbName." user=".$this->userName." password=".$this->userPassword);
							 | 
						|
								
							 | 
						|
										/*$driver='mysql';
							 | 
						|
										$server='srinivasan';
							 | 
						|
										$user='root';
							 | 
						|
										$password='';
							 | 
						|
										$database='vtigercrm3_2';
							 | 
						|
								
							 | 
						|
										$this->database = ADONewConnection($driver);
							 | 
						|
								
							 | 
						|
										#$this->database->debug = true;
							 | 
						|
										$this->println("ADODB status=".$this->database->PConnect($server, $user, $password, $database));*/
							 | 
						|
								
							 | 
						|
										/*$this->dbHostName="srinivasan:1521";
							 | 
						|
										$this->userName="vt4";
							 | 
						|
										$this->userPassword="vt4";
							 | 
						|
										$this->dbName="srini";
							 | 
						|
										$this->dbType="oci8";*/
							 | 
						|
										
							 | 
						|
										if(!isset($this->dbType))
							 | 
						|
										{
							 | 
						|
											$this->println("ADODB Connect : DBType not specified");
							 | 
						|
											return;
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										$this->database = ADONewConnection($this->dbType);
							 | 
						|
										//$this->database->debug = true;
							 | 
						|
										
							 | 
						|
										$this->database->PConnect($this->dbHostName, $this->userName, $this->userPassword, $this->dbName);
							 | 
						|
										$this->database->LogSQL($this->enableSQLlog);
							 | 
						|
										//$this->database->SetFetchMode(ADODB_FETCH_ASSOC); 
							 | 
						|
										//$this->println("ADODB type=".$this->dbType." host=".$this->dbHostName." dbname=".$this->dbName." user=".$this->userName." password=".$this->userPassword);		
							 | 
						|
								
							 | 
						|
									}
							 | 
						|
								/*
							 | 
						|
									function PearDatabase(){			
							 | 
						|
											//$this->println("PearDatabase");
							 | 
						|
											global $currentModule;
							 | 
						|
											$this->log =& LoggerManager::getLogger('PearDatabase_'. $currentModule);
							 | 
						|
											$this->resetSettings();
							 | 
						|
											
							 | 
						|
											
							 | 
						|
									}
							 | 
						|
									function resetSettings(){
							 | 
						|
										global $dbconfig, $dbconfigoption;
							 | 
						|
										$this->disconnect();
							 | 
						|
										$this->setDatabaseType($dbconfig['db_type']);
							 | 
						|
										$this->setUserName($dbconfig['db_user_name']);
							 | 
						|
										$this->setUserPassword($dbconfig['db_password']);
							 | 
						|
										$this->setDatabaseHost( $dbconfig['db_host_name']);
							 | 
						|
										$this->setDatabaseName($dbconfig['db_name']);
							 | 
						|
										$this->dbOptions = $dbconfigoption;
							 | 
						|
										$this->enableSQLlog = ($dbconfig['log_sql'] == true);
							 | 
						|
										//$this->println("resetSettings log=".$this->enableSQLlog);
							 | 
						|
										//$this->println($dbconfig);
							 | 
						|
										/*if($this->dbType != "mysql"){
							 | 
						|
											require_once( 'DB.php' );	
							 | 
						|
										}*/
							 | 
						|
											
							 | 
						|
										
							 | 
						|
								
							 | 
						|
									function PearDatabase($dbtype='',$host='',$dbname='',$username='',$passwd=''){			
							 | 
						|
								        //$this->println("PearDatabase");
							 | 
						|
											global $currentModule;
							 | 
						|
											$this->log =& LoggerManager::getLogger('PearDatabase_'. $currentModule);
							 | 
						|
											$this->resetSettings($dbtype,$host,$dbname,$username,$passwd);
							 | 
						|
											
							 | 
						|
											
							 | 
						|
									}
							 | 
						|
								    
							 | 
						|
								   
							 | 
						|
								    function resetSettings($dbtype,$host,$dbname,$username,$passwd)
							 | 
						|
								    {
							 | 
						|
								       
							 | 
						|
										global $dbconfig, $dbconfigoption;
							 | 
						|
										
							 | 
						|
								        if($host == '')
							 | 
						|
								        {
							 | 
						|
								            $this->disconnect();
							 | 
						|
								            $this->setDatabaseType($dbconfig['db_type']);
							 | 
						|
								            $this->setUserName($dbconfig['db_user_name']);
							 | 
						|
								            $this->setUserPassword($dbconfig['db_password']);
							 | 
						|
								            $this->setDatabaseHost( $dbconfig['db_host_name']);
							 | 
						|
								            $this->setDatabaseName($dbconfig['db_name']);
							 | 
						|
								            $this->dbOptions = $dbconfigoption;
							 | 
						|
									    if($dbconfig['log_sql'])
							 | 
						|
								            $this->enableSQLlog = ($dbconfig['log_sql'] == true);
							 | 
						|
								            //$this->println("resetSettings log=".$this->enableSQLlog);
							 | 
						|
								            //$this->println($dbconfig);
							 | 
						|
								            /*if($this->dbType != "mysql"){
							 | 
						|
											require_once( 'DB.php' );	
							 | 
						|
										}*/
							 | 
						|
								        }
							 | 
						|
								        else
							 | 
						|
								        {
							 | 
						|
								            
							 | 
						|
								            $this->disconnect();
							 | 
						|
								            $this->setDatabaseType($dbtype);
							 | 
						|
								            $this->setDatabaseName($dbname);
							 | 
						|
								            $this->setUserName($username);
							 | 
						|
								            $this->setUserPassword($passwd);
							 | 
						|
								            $this->setDatabaseHost( $host);
							 | 
						|
								            
							 | 
						|
								        }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/* ADODB converted	
							 | 
						|
								function quote($string){
							 | 
						|
									global $dbconfig;
							 | 
						|
									if($dbconfig['db_type'] == 'mysql'){
							 | 
						|
										$string = mysql_escape_string($string);
							 | 
						|
									}else {$string = quoteSmart($string);}
							 | 
						|
									}else {$string = $this->database->qstr($string,get_magic_quotes_gpc());}
							 | 
						|
									//$string = strtr($string, array('_' => '\_', '%'=>'\%'));
							 | 
						|
									return $string;
							 | 
						|
								}*/
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								function quote($string){
							 | 
						|
									return ADOConnection::qstr($string,get_magic_quotes_gpc());	
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/* ADODB converted
							 | 
						|
								function disconnect() {
							 | 
						|
										$this->println("disconnect");
							 | 
						|
										if(isset($this->database)){
							 | 
						|
											if($this->dbType == "mysql"){
							 | 
						|
												mysql_close($this->database);
							 | 
						|
											}else{
							 | 
						|
												$this->database->disconnect();
							 | 
						|
											}
							 | 
						|
											unset($this->database);
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
								}
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								function disconnect() {
							 | 
						|
										//$this->println("ADODB disconnect");
							 | 
						|
								
							 | 
						|
										// srini -- do something
							 | 
						|
										
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function setDebug($value)
							 | 
						|
								{
							 | 
						|
									$this->database->debug = $value;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								// ADODB newly added methods
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								function createTables($schemaFile, $dbHostName=false, $userName=false, $userPassword=false, $dbName=false, $dbType=false)
							 | 
						|
								{
							 | 
						|
									$this->println("ADODB createTables ".$schemaFile);
							 | 
						|
									if($dbHostName!=false) $this->dbHostName=$dbHostName;
							 | 
						|
									if($userName!=false) $this->userName=$userPassword;
							 | 
						|
									if($userPassword!=false) $this->userPassword=$userPassword;
							 | 
						|
									if($dbName!=false) $this->dbName=$dbName;
							 | 
						|
									if($dbType!=false) $this->dbType=$dbType;		
							 | 
						|
								
							 | 
						|
									//$db = ADONewConnection($this->dbType);
							 | 
						|
									$this->checkConnection();
							 | 
						|
									$db = $this->database;
							 | 
						|
									//$db->debug = true;
							 | 
						|
									
							 | 
						|
								
							 | 
						|
									//$this->println("ADODB createTables connect status=".$db->Connect($this->dbHostName, $this->userName, $this->userPassword, $this->dbName));
							 | 
						|
									$schema = new adoSchema( $db );
							 | 
						|
									$sql = $schema->ParseSchema( $schemaFile );
							 | 
						|
								
							 | 
						|
									$this->println("--------------Starting the table creation------------------");
							 | 
						|
									//$this->println($sql);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
									$result = $schema->ExecuteSchema( $sql, true );
							 | 
						|
									if($result)
							 | 
						|
									print $db->errorMsg();
							 | 
						|
									// needs to return in a decent way
							 | 
						|
									$this->println("ADODB createTables ".$schemaFile." status=".$result);
							 | 
						|
									return $result;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function createTable($tablename, $flds)
							 | 
						|
								{
							 | 
						|
									$this->println("ADODB createTable table=".$tablename." flds=".$flds);
							 | 
						|
									$this->checkConnection();
							 | 
						|
									//$dict = NewDataDictionary(ADONewConnection($this->dbType));
							 | 
						|
									$dict = NewDataDictionary($this->database);
							 | 
						|
									$sqlarray = $dict->CreateTableSQL($tablename, $flds);
							 | 
						|
									$result = $dict->ExecuteSQLArray($sqlarray);
							 | 
						|
									$this->println("ADODB createTable table=".$tablename." flds=".$flds." status=".$result);
							 | 
						|
									return $result;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function alterTable($tablename, $flds, $oper)
							 | 
						|
								{
							 | 
						|
									$this->println("ADODB alterTableTable table=".$tablename." flds=".$flds." oper=".$oper);
							 | 
						|
									//$dict = NewDataDictionary(ADONewConnection($this->dbType));
							 | 
						|
									$this->checkConnection();
							 | 
						|
									$dict = NewDataDictionary(&$this->database);
							 | 
						|
									//$sqlarray = new Array(); 
							 | 
						|
									
							 | 
						|
									if($oper == 'Add_Column')
							 | 
						|
									{
							 | 
						|
										$sqlarray = $dict->AddColumnSQL($tablename, $flds);
							 | 
						|
									}
							 | 
						|
									else if($oper == 'Delete_Column')
							 | 
						|
									{
							 | 
						|
										$sqlarray = $dict->DropColumnSQL($tablename, $flds);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									$this->println("sqlarray");
							 | 
						|
									$this->println($sqlarray);
							 | 
						|
								
							 | 
						|
									$result = $dict->ExecuteSQLArray($sqlarray);
							 | 
						|
								
							 | 
						|
									$this->println("ADODB alterTableTable table=".$tablename." flds=".$flds." oper=".$oper." status=".$result);
							 | 
						|
									return $result;
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function getColumnNames($tablename)
							 | 
						|
								{
							 | 
						|
									$this->println("ADODB getColumnNames table=".$tablename);	
							 | 
						|
									$this->checkConnection();
							 | 
						|
									$adoflds = $this->database->MetaColumns($tablename);
							 | 
						|
									//$colNames = new Array();
							 | 
						|
									$i=0;
							 | 
						|
									foreach($adoflds as $fld)
							 | 
						|
									{
							 | 
						|
										$colNames[$i] = $fld->name;
							 | 
						|
										$i++;
							 | 
						|
									}
							 | 
						|
									return $colNames;	
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function formatString($tablename,$fldname, $str)
							 | 
						|
								{
							 | 
						|
									//$this->println("ADODB formatString table=".$tablename." fldname=".$fldname." str=".$str);
							 | 
						|
									$this->checkConnection();
							 | 
						|
									$adoflds = $this->database->MetaColumns($tablename);
							 | 
						|
									
							 | 
						|
									foreach ( $adoflds as $fld )
							 | 
						|
									{
							 | 
						|
										//$this->println("ADODB formatString adofld =".$fld->name);
							 | 
						|
										if(strcasecmp($fld->name,$fldname)==0)
							 | 
						|
										{
							 | 
						|
											//$this->println("ADODB formatString fldname=".$fldname." fldtype =".$fld->type);
							 | 
						|
									
							 | 
						|
											$fldtype =strtoupper($fld->type); 	
							 | 
						|
											if(strcmp($fldtype,'CHAR')==0 || strcmp($fldtype,'VARCHAR') == 0 || strcmp($fldtype,'VARCHAR2') == 0 || strcmp($fldtype,'LONGTEXT')==0 || strcmp($fldtype,'TEXT')==0)
							 | 
						|
											{
							 | 
						|
												return $this->database->Quote($str);
							 | 
						|
												//$this->println("ADODB return else normal");
							 | 
						|
												
							 | 
						|
											}
							 | 
						|
											else if(strcmp($fldtype,'DATE') ==0 || strcmp($fldtype,'TIMESTAMP')==0)
							 | 
						|
											{
							 | 
						|
												return $this->formatDate($str);
							 | 
						|
											}
							 | 
						|
											else
							 | 
						|
											{				
							 | 
						|
												return $str;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									$this->println("format String Illegal field name ".$fldname);
							 | 
						|
									return $str;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function formatDate($datetime)
							 | 
						|
								{
							 | 
						|
									$this->checkConnection();
							 | 
						|
									//$db = ADONewConnection($this->dbType);
							 | 
						|
									$db = &$this->database;
							 | 
						|
									$date = $db->DBTimeStamp($datetime);
							 | 
						|
									//if($db->dbType=='mysql') return $this->quote($date);
							 | 
						|
									return $date;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function getDBDateString($datecolname)
							 | 
						|
								{
							 | 
						|
									$this->checkConnection();
							 | 
						|
									$db = &$this->database;
							 | 
						|
									$datestr = $db->SQLDate("Y-m-d, H:i:s" ,$datecolname);
							 | 
						|
									return $datestr;	
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function getUniqueID($seqname)
							 | 
						|
								{
							 | 
						|
									$this->checkConnection();
							 | 
						|
									return $this->database->GenID($seqname."_seq",1);
							 | 
						|
								}
							 | 
						|
								function get_tables()
							 | 
						|
								{
							 | 
						|
								    $this->checkConnection();
							 | 
						|
								    $result = & $this->database->MetaTables('TABLES');
							 | 
						|
								    $this->println($result);
							 | 
						|
								    return $result;		
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
									
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								$adb = new PearDatabase();
							 | 
						|
								$adb->connect();
							 | 
						|
								
							 | 
						|
								//$adb->database->setFetchMode(ADODB_FETCH_NUM);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								?>
							 | 
						|
								
							 |