Commit 310dfa6a authored by xfra35's avatar xfra35
Browse files

SQL: add support for Oracle

parent b6ebd602
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ class SQL extends \PDO {
		$engine,
		//! Database name
		$dbname,
		//! User name
		$user,
		//! Transaction flag
		$trans=FALSE,
		//! Number of rows affected by query
@@ -246,7 +248,24 @@ class SQL extends \PDO {
							'c.table_catalog':'c.table_schema').
							'='.$this->quote($this->dbname)):'').
				';',
				'field','type','defval','nullable','YES','pkey','PRIMARY KEY')
				'field','type','defval','nullable','YES','pkey','PRIMARY KEY'),
			'oci'=>array(
				'SELECT c.column_name AS field, '.
					'c.data_type AS type, '.
					'c.data_default AS defval, '.
					'c.nullable AS nullable, '.
					'(SELECT t.constraint_type '.
						'FROM all_cons_columns acc '.
						'LEFT OUTER JOIN all_constraints t '.
						'ON acc.constraint_name=t.constraint_name '.
						'WHERE acc.table_name='.$this->quote(strtoupper($table)).' '.
						'AND acc.owner='.$this->quote(strtoupper($this->user)).' '.
						'AND acc.column_name=c.column_name '.
						'AND constraint_type='.$this->quote('P').') AS pkey '.
				'FROM all_tab_cols c '.
				'WHERE c.table_name='.$this->quote(strtoupper($table)).' '.
				'AND c.owner='.$this->quote(strtoupper($this->user)).' ',
				'FIELD','TYPE','DEFVAL','NULLABLE','Y','PKEY','P')
		);
		foreach ($cmd as $key=>$val)
			if (preg_match('/'.$key.'/',$this->engine)) {
@@ -328,7 +347,7 @@ class SQL extends \PDO {
		elseif (preg_match('/mssql|sqlsrv|odbc/',$this->engine))
			$key="[".$key."]";
		elseif ($this->engine=='oci')
			$key='"'.strtoupper($key).'"';
			$key='"'.$key.'"';
		return $key;
	}

@@ -344,6 +363,7 @@ class SQL extends \PDO {
		$this->uuid=$fw->hash($this->dsn=$dsn);
		if (preg_match('/^.+?(?:dbname|database)=(.+?)(?=;|$)/i',$dsn,$parts))
			$this->dbname=$parts[1];
		$this->user=$user;
		if (!$options)
			$options=array();
		$options+=array(\PDO::ATTR_EMULATE_PREPARES=>FALSE);
+7 −6
Original line number Diff line number Diff line
@@ -212,7 +212,7 @@ class Mapper extends \DB\Cursor {
			$sql.=' LIMIT '.(int)$options['limit'];
		if ($options['offset'])
			$sql.=' OFFSET '.(int)$options['offset'];
		$result=$this->db->exec($sql.';',$args,$ttl);
		$result=$this->db->exec($sql,$args,$ttl);
		$out=array();
		foreach ($result as &$row) {
			foreach ($row as $field=>&$val) {
@@ -260,7 +260,7 @@ class Mapper extends \DB\Cursor {
	*	@param $ttl int
	**/
	function count($filter=NULL,$ttl=0) {
		$sql='SELECT COUNT(*) AS rows FROM '.$this->table;
		$sql='SELECT COUNT(*) AS '.$this->db->quotekey('rows').' FROM '.$this->table;
		$args=array();
		if ($filter) {
			if (is_array($filter)) {
@@ -272,7 +272,7 @@ class Mapper extends \DB\Cursor {
			}
			$sql.=' WHERE '.$filter;
		}
		$result=$this->db->exec($sql.';',$args,$ttl);
		$result=$this->db->exec($sql,$args,$ttl);
		return $result[0]['rows'];
	}

@@ -330,11 +330,12 @@ class Mapper extends \DB\Cursor {
		if ($fields)
			$this->db->exec(
				'INSERT INTO '.$this->table.' ('.$fields.') '.
				'VALUES ('.$values.');',$args
				'VALUES ('.$values.')',$args
			);
		$seq=NULL;
		if ($this->engine=='pgsql')
			$seq=$this->source.'_'.end($pkeys).'_seq';
		if ($this->engine!='oci')
			$this->_id=$this->db->lastinsertid($seq);
		if (!$inc) {
			$ctr=0;
@@ -377,7 +378,7 @@ class Mapper extends \DB\Cursor {
			$sql='UPDATE '.$this->table.' SET '.$pairs;
			if ($filter)
				$sql.=' WHERE '.$filter;
			return $this->db->exec($sql.';',$args);
			return $this->db->exec($sql,$args);
		}
	}