databaseoracle.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 693 行 · 第 1/2 页

PHP
693
字号
		foreach( $rows as $row ) {			# Delete rows which collide			if ( $uniqueIndexes ) {				$sql = "DELETE FROM $table WHERE ";				$first = true;				foreach ( $uniqueIndexes as $index ) {					if ( $first ) {						$first = false;						$sql .= "(";					} else {						$sql .= ') OR (';					}					if ( is_array( $index ) ) {						$first2 = true;						foreach ( $index as $col ) {							if ( $first2 ) {								$first2 = false;							} else {								$sql .= ' AND ';							}							$sql .= $col.'=' . $this->addQuotes( $row[$col] );						}					} else {						$sql .= $index.'=' . $this->addQuotes( $row[$index] );					}				}				$sql .= ')';				$this->query( $sql, $fname );			}			# Now insert the row			$sql = "INSERT INTO $table (" . $this->makeList( array_keys( $row ), LIST_NAMES ) .') VALUES (' .				$this->makeList( $row, LIST_COMMA ) . ')';			$this->query( $sql, $fname );		}	}	# DELETE where the condition is a join	function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = "Database::deleteJoin" ) {		if ( !$conds ) {			throw new DBUnexpectedError( $this, 'Database::deleteJoin() called with empty $conds' );		}		$delTable = $this->tableName( $delTable );		$joinTable = $this->tableName( $joinTable );		$sql = "DELETE FROM $delTable WHERE $delVar IN (SELECT $joinVar FROM $joinTable ";		if ( $conds != '*' ) {			$sql .= 'WHERE ' . $this->makeList( $conds, LIST_AND );		}		$sql .= ')';		$this->query( $sql, $fname );	}	# Returns the size of a text field, or -1 for "unlimited"	function textFieldSize( $table, $field ) {		$table = $this->tableName( $table );		$sql = "SELECT t.typname as ftype,a.atttypmod as size			FROM pg_class c, pg_attribute a, pg_type t			WHERE relname='$table' AND a.attrelid=c.oid AND				a.atttypid=t.oid and a.attname='$field'";		$res =$this->query($sql);		$row=$this->fetchObject($res);		if ($row->ftype=="varchar") {			$size=$row->size-4;		} else {			$size=$row->size;		}		$this->freeResult( $res );		return $size;	}	function lowPriorityOption() {		return '';	}	function limitResult($sql, $limit, $offset) {		$ret = "SELECT * FROM ($sql) WHERE ROWNUM < " . ((int)$limit + (int)($offset+1));		if (is_numeric($offset))			$ret .= " AND ROWNUM >= " . (int)$offset;		return $ret;	}	function limitResultForUpdate($sql, $limit) {		return $sql;	}	/**	 * Returns an SQL expression for a simple conditional.	 * Uses CASE on PostgreSQL.	 *	 * @param string $cond SQL expression which will result in a boolean value	 * @param string $trueVal SQL expression to return if true	 * @param string $falseVal SQL expression to return if false	 * @return string SQL fragment	 */	function conditional( $cond, $trueVal, $falseVal ) {		return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";	}	# FIXME: actually detecting deadlocks might be nice	function wasDeadlock() {		return false;	}	# Return DB-style timestamp used for MySQL schema	function timestamp($ts = 0) {		return $this->strencode(wfTimestamp(TS_ORACLE, $ts));#		return "TO_TIMESTAMP('" . $this->strencode(wfTimestamp(TS_DB, $ts)) . "', 'RRRR-MM-DD HH24:MI:SS')";	}	/**	 * Return aggregated value function call	 */	function aggregateValue ($valuedata,$valuename='value') {		return $valuedata;	}	function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {		$message = "A database error has occurred\n" .			"Query: $sql\n" .			"Function: $fname\n" .			"Error: $errno $error\n";		throw new DBUnexpectedError($this, $message);	}	/**	 * @return string wikitext of a link to the server software's web site	 */	function getSoftwareLink() {		return "[http://www.oracle.com/ Oracle]";	}	/**	 * @return string Version information from the database	 */	function getServerVersion() {		return oci_server_version($this->mConn);	}	function setSchema($schema=false) {		$schemas=$this->mSchemas;		if ($schema) { array_unshift($schemas,$schema); }		$searchpath=$this->makeList($schemas,LIST_NAMES);		$this->query("SET search_path = $searchpath");	}	function begin() {	}	function immediateCommit( $fname = 'Database::immediateCommit' ) {		oci_commit($this->mConn);		$this->mTrxLevel = 0;	}	function rollback( $fname = 'Database::rollback' ) {		oci_rollback($this->mConn);		$this->mTrxLevel = 0;	}	function getLag() {		return false;	}	function getStatus($which=null) {		$result = array('Threads_running' => 0, 'Threads_connected' => 0);		return $result;	}	/**	 * Returns an optional USE INDEX clause to go after the table, and a	 * string to go at the end of the query	 *	 * @access private	 *	 * @param array $options an associative array of options to be turned into	 *              an SQL query, valid keys are listed in the function.	 * @return array	 */	function makeSelectOptions($options) {		$tailOpts = '';		if (isset( $options['ORDER BY'])) {			$tailOpts .= " ORDER BY {$options['ORDER BY']}";		}		return array('', $tailOpts);	}	function maxListLen() {		return 1000;	}	/**	 * Query whether a given table exists	 */	function tableExists( $table ) {		$table = $this->tableName($table, true);		$res = $this->query( "SELECT COUNT(*) as NUM FROM user_tables WHERE table_name='"			. $table . "'" );		if (!$res)			return false;		$row = $this->fetchObject($res);		$this->freeResult($res);		return $row->num >= 1;	}	/**	 * UPDATE wrapper, takes a condition array and a SET array	 */	function update( $table, $values, $conds, $fname = 'Database::update' ) {		$table = $this->tableName( $table );		$sql = "UPDATE $table SET ";		$first = true;		foreach ($values as $field => $v) {			if ($first)				$first = false;			else				$sql .= ", ";			$sql .= "$field = :n$field ";		}		if ( $conds != '*' ) {			$sql .= " WHERE " . $this->makeList( $conds, LIST_AND );		}		$stmt = $this->parseStatement($sql);		if ($stmt === false) {			$this->reportQueryError( $this->lastError(), $this->lastErrno(), $stmt );			return false;		}		if ($this->debug())			wfDebug("SQL: $sql\n");		$s = '';		foreach ($values as $field => $v) {			oci_bind_by_name($stmt, ":n$field", $values[$field]);			if ($this->debug())				$s .= " [$field] = [$v]\n";		}		if ($this->debug())			wfdebug(" PH: $s\n");		$ret = $this->executeStatement($stmt);		return $ret;	}	/**	 * INSERT wrapper, inserts an array into a table	 *	 * $a may be a single associative array, or an array of these with numeric keys, for	 * multi-row insert.	 *	 * Usually aborts on failure	 * If errors are explicitly ignored, returns success	 */	function insert( $table, $a, $fname = 'Database::insert', $options = array() ) {		# No rows to insert, easy just return now		if ( !count( $a ) ) {			return true;		}		$table = $this->tableName( $table );		if (!is_array($options))			$options = array($options);		$oldIgnore = false;		if (in_array('IGNORE', $options))			$oldIgnore = $this->ignoreErrors( true );		if ( isset( $a[0] ) && is_array( $a[0] ) ) {			$multi = true;			$keys = array_keys( $a[0] );		} else {			$multi = false;			$keys = array_keys( $a );		}		$sql = "INSERT INTO $table (" . implode( ',', $keys ) . ') VALUES (';		$return = '';		$first = true;		foreach ($a as $key => $value) {			if ($first)				$first = false;			else				$sql .= ", ";			if (is_object($value) && $value->isLOB()) {				$sql .= "EMPTY_BLOB()";				$return = "RETURNING $key INTO :bobj";			} else				$sql .= ":$key";		}		$sql .= ") $return";		if ($this->debug()) {			wfDebug("SQL: $sql\n");		}		if (($stmt = $this->parseStatement($sql)) === false) {			$this->reportQueryError($this->lastError(), $this->lastErrno(), $sql, $fname);			$this->ignoreErrors($oldIgnore);			return false;		}		/*		 * If we're inserting multiple rows, parse the statement once and		 * execute it for each set of values.  Otherwise, convert it into an		 * array and pretend.		 */		if (!$multi)			$a = array($a);		foreach ($a as $key => $row) {			$blob = false;			$bdata = false;			$s = '';			foreach ($row as $k => $value) {				if (is_object($value) && $value->isLOB()) {					$blob = oci_new_descriptor($this->mConn, OCI_D_LOB);					$bdata = $value->data();					oci_bind_by_name($stmt, ":bobj", $blob, -1, OCI_B_BLOB);				} else					oci_bind_by_name($stmt, ":$k", $a[$key][$k], -1);				if ($this->debug())					$s .= " [$k] = {$row[$k]}";			}			if ($this->debug())				wfDebug(" PH: $s\n");			if (($s = $this->executeStatement($stmt)) === false) {				$this->reportQueryError($this->lastError(), $this->lastErrno(), $sql, $fname);				$this->ignoreErrors($oldIgnore);				return false;			}			if ($blob) {				$blob->save($bdata);			}		}		$this->ignoreErrors($oldIgnore);		return $this->mLastResult = $s;	}	function ping() {		return true;	}	function encodeBlob($b) {		return new OracleBlob($b);	}}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?