diff options
Diffstat (limited to 'kohana/libraries/drivers/Database')
| -rw-r--r-- | kohana/libraries/drivers/Database/Mssql.php | 7 | ||||
| -rw-r--r-- | kohana/libraries/drivers/Database/Mysql.php | 11 | ||||
| -rw-r--r-- | kohana/libraries/drivers/Database/Mysqli.php | 7 | ||||
| -rw-r--r-- | kohana/libraries/drivers/Database/Pgsql.php | 108 | 
4 files changed, 64 insertions, 69 deletions
| diff --git a/kohana/libraries/drivers/Database/Mssql.php b/kohana/libraries/drivers/Database/Mssql.php index 401770a2..3e89faba 100644 --- a/kohana/libraries/drivers/Database/Mssql.php +++ b/kohana/libraries/drivers/Database/Mssql.php @@ -74,7 +74,7 @@ class Database_Mssql_Driver extends Database_Driver  			*/  			// Clear password after successful connect -			$this->config['connection']['pass'] = NULL; +			$this->db_config['connection']['pass'] = NULL;  			return $this->link;  		} @@ -94,6 +94,11 @@ class Database_Mssql_Driver extends Database_Driver  				// Set the cached object  				self::$query_cache[$hash] = new Mssql_Result(mssql_query($sql, $this->link), $this->link, $this->db_config['object'], $sql);  			} +			else +			{ +				// Rewind cached result +				self::$query_cache[$hash]->rewind(); +			}  			// Return the cached query  			return self::$query_cache[$hash]; diff --git a/kohana/libraries/drivers/Database/Mysql.php b/kohana/libraries/drivers/Database/Mysql.php index f54b6d81..04d7ed65 100644 --- a/kohana/libraries/drivers/Database/Mysql.php +++ b/kohana/libraries/drivers/Database/Mysql.php @@ -74,7 +74,7 @@ class Database_Mysql_Driver extends Database_Driver {  			}  			// Clear password after successful connect -			$this->config['connection']['pass'] = NULL; +			$this->db_config['connection']['pass'] = NULL;  			return $this->link;  		} @@ -94,6 +94,11 @@ class Database_Mysql_Driver extends Database_Driver {  				// Set the cached object  				self::$query_cache[$hash] = new Mysql_Result(mysql_query($sql, $this->link), $this->link, $this->db_config['object'], $sql);  			} +			else +			{ +				// Rewind cached result +				self::$query_cache[$hash]->rewind(); +			}  			// Return the cached query  			return self::$query_cache[$hash]; @@ -170,14 +175,14 @@ class Database_Mysql_Driver extends Database_Driver {  		return $column;  	} -	public function regex($field, $match = '', $type = 'AND ', $num_regexs) +	public function regex($field, $match, $type, $num_regexs)  	{  		$prefix = ($num_regexs == 0) ? '' : $type;  		return $prefix.' '.$this->escape_column($field).' REGEXP \''.$this->escape_str($match).'\'';  	} -	public function notregex($field, $match = '', $type = 'AND ', $num_regexs) +	public function notregex($field, $match, $type, $num_regexs)  	{  		$prefix = $num_regexs == 0 ? '' : $type; diff --git a/kohana/libraries/drivers/Database/Mysqli.php b/kohana/libraries/drivers/Database/Mysqli.php index 795c576b..3d6bbfbf 100644 --- a/kohana/libraries/drivers/Database/Mysqli.php +++ b/kohana/libraries/drivers/Database/Mysqli.php @@ -57,7 +57,7 @@ class Database_Mysqli_Driver extends Database_Mysql_Driver {  			}  			// Clear password after successful connect -			$this->config['connection']['pass'] = NULL; +			$this->db_config['connection']['pass'] = NULL;  			return $this->link;  		} @@ -77,6 +77,11 @@ class Database_Mysqli_Driver extends Database_Mysql_Driver {  				// Set the cached object  				self::$query_cache[$hash] = new Kohana_Mysqli_Result($this->link, $this->db_config['object'], $sql);  			} +			else +			{ +				// Rewind cached result +				self::$query_cache[$hash]->rewind(); +			}  			// Return the cached query  			return self::$query_cache[$hash]; diff --git a/kohana/libraries/drivers/Database/Pgsql.php b/kohana/libraries/drivers/Database/Pgsql.php index ff0a5ed5..9758de3c 100644 --- a/kohana/libraries/drivers/Database/Pgsql.php +++ b/kohana/libraries/drivers/Database/Pgsql.php @@ -53,7 +53,7 @@ class Database_Pgsql_Driver extends Database_Driver {  			}  			// Clear password after successful connect -			$this->config['connection']['pass'] = NULL; +			$this->db_config['connection']['pass'] = NULL;  			return $this->link;  		} @@ -73,6 +73,11 @@ class Database_Pgsql_Driver extends Database_Driver {  				// Set the cached object  				self::$query_cache[$hash] = new Pgsql_Result(pg_query($this->link, $sql), $this->link, $this->db_config['object'], $sql);  			} +			else +			{ +				// Rewind cached result +				self::$query_cache[$hash]->rewind(); +			}  			return self::$query_cache[$hash];  		} @@ -137,14 +142,14 @@ class Database_Pgsql_Driver extends Database_Driver {  		return $column;  	} -	public function regex($field, $match = '', $type = 'AND ', $num_regexs) +	public function regex($field, $match, $type, $num_regexs)  	{  		$prefix = ($num_regexs == 0) ? '' : $type;  		return $prefix.' '.$this->escape_column($field).' REGEXP \''.$this->escape_str($match).'\'';  	} -	public function notregex($field, $match = '', $type = 'AND ', $num_regexs) +	public function notregex($field, $match, $type, $num_regexs)  	{  		$prefix = $num_regexs == 0 ? '' : $type; @@ -244,84 +249,57 @@ class Database_Pgsql_Driver extends Database_Driver {  		return pg_last_error($this->link);  	} -	public function list_fields($table, $query = FALSE) +	public function list_fields($table)  	{  		static $tables; -		if (is_object($query)) +		if (empty($tables[$table]))  		{ -			if (empty($tables[$table])) +			foreach ($this->field_data($table) as $row)  			{ -				$tables[$table] = array(); +				// Make an associative array +				$tables[$table][$row->column_name] = $this->sql_type($row->data_type); -				foreach ($query as $row) +				if (!strncmp($row->column_default, 'nextval(', 8))  				{ -					$tables[$table][] = $row->Field; +					$tables[$table][$row->column_name]['sequenced'] = TRUE;  				} -			} - -			return $tables[$table]; -		} - -		// WOW...REALLY?!? -		// Taken from http://www.postgresql.org/docs/7.4/interactive/catalogs.html -		$query = $this->query('SELECT -  -- Field -  pg_attribute.attname AS "Field", -  -- Type -  CASE pg_type.typname -    WHEN \'int2\' THEN \'smallint\' -    WHEN \'int4\' THEN \'int\' -    WHEN \'int8\' THEN \'bigint\' -    WHEN \'varchar\' THEN \'varchar(\' || pg_attribute.atttypmod-4 || \')\' -    ELSE pg_type.typname -  END AS "Type", -  -- Null -  CASE WHEN pg_attribute.attnotnull THEN \'NO\' -    ELSE \'YES\' -  END AS "Null", -  -- Default -  CASE pg_type.typname -    WHEN \'varchar\' THEN substring(pg_attrdef.adsrc from \'^(.*).*$\') -    ELSE pg_attrdef.adsrc -  END AS "Default" -FROM pg_class -  INNER JOIN pg_attribute -    ON (pg_class.oid=pg_attribute.attrelid) -  INNER JOIN pg_type -    ON (pg_attribute.atttypid=pg_type.oid) -  LEFT JOIN pg_attrdef -    ON (pg_class.oid=pg_attrdef.adrelid AND pg_attribute.attnum=pg_attrdef.adnum) -WHERE pg_class.relname=\''.$this->escape_str($table).'\' AND pg_attribute.attnum>=1 AND NOT pg_attribute.attisdropped -ORDER BY pg_attribute.attnum'); - -				// Load the result as objects -				$query->result(TRUE); -				$fields = array(); -				foreach ($query as $row) +				if ($row->is_nullable === 'YES')  				{ -					$fields[$row->Field] = $row->Type; +					$tables[$table][$row->column_name]['null'] = TRUE;  				} +			} +		} -				return $fields; +		if (!isset($tables[$table])) +			throw new Kohana_Database_Exception('database.table_not_found', $table); + +		return $tables[$table];  	}  	public function field_data($table)  	{ -		// TODO: This whole function needs to be debugged. -		$query  = pg_query('SELECT * FROM '.$this->escape_table($table).' LIMIT 1', $this->link); -		$fields = pg_num_fields($query); -		$table  = array(); +		$columns = array(); + +		// http://www.postgresql.org/docs/8.3/static/infoschema-columns.html +		$result = pg_query($this->link, ' +			SELECT column_name, column_default, is_nullable, data_type, udt_name, +				character_maximum_length, numeric_precision, numeric_precision_radix, numeric_scale +			FROM information_schema.columns +			WHERE table_name = \''. $this->escape_str($table) .'\' +			ORDER BY ordinal_position +		'); -		for ($i=0; $i < $fields; $i++) +		if ($result)  		{ -			$table[$i]['type']  = pg_field_type($query, $i); -			$table[$i]['name']  = pg_field_name($query, $i); -			$table[$i]['len']   = pg_field_prtlen($query, $i); +			while ($row = pg_fetch_object($result)) +			{ +				$columns[] = $row; +			}  		} -		return $table; +		return $columns;  	}  } // End Database_Pgsql_Driver Class @@ -463,7 +441,7 @@ class Pgsql_Result extends Database_Result {  			// tables that have no serial column.  			$ER = error_reporting(0); -			$result = pg_query($query); +			$result = pg_query($this->link, $query);  			$insert_id = pg_fetch_array($result, NULL, PGSQL_ASSOC);  			$this->insert_id = $insert_id['insert_id']; @@ -486,9 +464,11 @@ class Pgsql_Result extends Database_Result {  	public function list_fields()  	{  		$field_names = array(); -		while ($field = pg_field_name($this->result)) + +		$fields = pg_num_fields($this->result); +		for ($i = 0; $i < $fields; ++$i)  		{ -			$field_names[] = $field->name; +			$field_names[] = pg_field_name($this->result, $i);  		}  		return $field_names; | 
