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); | |
|  | |
| 
 | |
| ?>
 | |
| 
 |