Modules

abstract Database_Query_Builder
extends Kohana_Database_Query_Builder
extends Database_Query
extends Kohana_Database_Query

Database query builder. See Query Builder for usage and examples.

package
Kohana/Database
category
Query
author
Kohana Team
copyright
© 2008-2009 Kohana Team
license
http://kohanaphp.com/license

Class declared in MODPATH/database/classes/database/query/builder.php on line 3.

Properties

protected $_as_object

protected $_force_execute

protected $_lifetime

protected $_object_params

protected $_parameters

protected $_sql

protected $_type

Methods

abstract public reset( ) (defined in Kohana_Database_Query_Builder)

Reset the current builder status.

Return Values

  • $this

Source Code

abstract public function reset();

public __construct( integer $type , string $sql ) (defined in Kohana_Database_Query)

Creates a new SQL query of the specified type.

Parameters

  • integer $type required - Query type: Database::SELECT, Database::INSERT, etc
  • string $sql required - Query string

Return Values

  • void

Source Code

public function __construct($type, $sql)
{
    $this->_type = $type;
    $this->_sql = $sql;
}

final public __toString( ) (defined in Kohana_Database_Query)

Return the SQL query string.

Return Values

  • string

Source Code

final public function __toString()
{
    try
    {
        // Return the SQL string
        return $this->compile(Database::instance());
    }
    catch (Exception $e)
    {
        return Kohana_Exception::text($e);
    }
}

public as_assoc( ) (defined in Kohana_Database_Query)

Returns results as associative arrays

Return Values

  • $this

Source Code

public function as_assoc()
{
    $this->_as_object = FALSE;
 
    $this->_object_params = array();
 
    return $this;
}

public as_object( [ string $class = bool TRUE , array $params = NULL ] ) (defined in Kohana_Database_Query)

Returns results as objects

Parameters

  • string $class = bool TRUE - Classname or TRUE for stdClass
  • array $params = NULL - $params

Return Values

  • $this

Source Code

public function as_object($class = TRUE, array $params = NULL)
{
    $this->_as_object = $class;
 
    if ($params)
    {
        // Add object parameters
        $this->_object_params = $params;
    }
 
    return $this;
}

public bind( string $param , mixed & $var ) (defined in Kohana_Database_Query)

Bind a variable to a parameter in the query.

Parameters

  • string $param required - Parameter key to replace
  • byref mixed $var required - Variable to use

Return Values

  • $this

Source Code

public function bind($param, & $var)
{
    // Bind a value to a variable
    $this->_parameters[$param] =& $var;
 
    return $this;
}

public cached( [ integer $lifetime = NULL , boolean $force = bool FALSE ] ) (defined in Kohana_Database_Query)

Enables the query to be cached for a specified amount of time.

Parameters

  • integer $lifetime = NULL - Number of seconds to cache, 0 deletes it from the cache
  • boolean $force = bool FALSE - Whether or not to execute the query during a cache hit

Tags

Return Values

  • $this

Source Code

public function cached($lifetime = NULL, $force = FALSE)
{
    if ($lifetime === NULL)
    {
        // Use the global setting
        $lifetime = Kohana::$cache_life;
    }
 
    $this->_force_execute = $force;
    $this->_lifetime = $lifetime;
 
    return $this;
}

public compile( object $db ) (defined in Kohana_Database_Query)

Compile the SQL query and return it. Replaces any parameters with their given values.

Parameters

  • object $db required - Database instance

Return Values

  • string

Source Code

public function compile(Database $db)
{
    // Import the SQL locally
    $sql = $this->_sql;
 
    if ( ! empty($this->_parameters))
    {
        // Quote all of the values
        $values = array_map(array($db, 'quote'), $this->_parameters);
 
        // Replace the values in the SQL
        $sql = strtr($sql, $values);
    }
 
    return $sql;
}

public execute( [ mixed $db = NULL , string $as_object = NULL , array $object_params = NULL ] ) (defined in Kohana_Database_Query)

Execute the current query on the given database.

Parameters

  • mixed $db = NULL - Database instance or name of instance
  • string $as_object = NULL - Result object classname, TRUE for stdClass or FALSE for array
  • array $object_params = NULL - Result object constructor arguments

Return Values

  • object - Database_Result for SELECT queries
  • mixed - The insert id for INSERT queries
  • integer - Number of affected rows for all other queries

Source Code

public function execute($db = NULL, $as_object = NULL, $object_params = NULL)
{
    if ( ! is_object($db))
    {
        // Get the database instance
        $db = Database::instance($db);
    }
 
    if ($as_object === NULL)
    {
        $as_object = $this->_as_object;
    }
 
    if ($object_params === NULL)
    {
        $object_params = $this->_object_params;
    }
 
    // Compile the SQL query
    $sql = $this->compile($db);
 
    if ($this->_lifetime !== NULL AND $this->_type === Database::SELECT)
    {
        // Set the cache key based on the database instance name and SQL
        $cache_key = 'Database::query("'.$db.'", "'.$sql.'")';
 
        // Read the cache first to delete a possible hit with lifetime <= 0
        if (($result = Kohana::cache($cache_key, NULL, $this->_lifetime)) !== NULL
            AND ! $this->_force_execute)
        {
            // Return a cached result
            return new Database_Result_Cached($result, $sql, $as_object, $object_params);
        }
    }
 
    // Execute the query
    $result = $db->query($this->_type, $sql, $as_object, $object_params);
 
    if (isset($cache_key) AND $this->_lifetime > 0)
    {
        // Cache the result array
        Kohana::cache($cache_key, $result->as_array(), $this->_lifetime);
    }
 
    return $result;
}

public param( string $param , mixed $value ) (defined in Kohana_Database_Query)

Set the value of a parameter in the query.

Parameters

  • string $param required - Parameter key to replace
  • mixed $value required - Value to use

Return Values

  • $this

Source Code

public function param($param, $value)
{
    // Add or overload a new parameter
    $this->_parameters[$param] = $value;
 
    return $this;
}

public parameters( array $params ) (defined in Kohana_Database_Query)

Add multiple parameters to the query.

Parameters

  • array $params required - List of parameters

Return Values

  • $this

Source Code

public function parameters(array $params)
{
    // Merge the new parameters in
    $this->_parameters = $params + $this->_parameters;
 
    return $this;
}

public type( ) (defined in Kohana_Database_Query)

Get the type of the query.

Return Values

  • integer

Source Code

public function type()
{
    return $this->_type;
}

protected _compile_conditions( object $db , array $conditions ) (defined in Kohana_Database_Query_Builder)

Compiles an array of conditions into an SQL partial. Used for WHERE and HAVING.

Parameters

  • object $db required - Database instance
  • array $conditions required - Condition statements

Return Values

  • string

Source Code

protected function _compile_conditions(Database $db, array $conditions)
{
    $last_condition = NULL;
 
    $sql = '';
    foreach ($conditions as $group)
    {
        // Process groups of conditions
        foreach ($group as $logic => $condition)
        {
            if ($condition === '(')
            {
                if ( ! empty($sql) AND $last_condition !== '(')
                {
                    // Include logic operator
                    $sql .= ' '.$logic.' ';
                }
 
                $sql .= '(';
            }
            elseif ($condition === ')')
            {
                $sql .= ')';
            }
            else
            {
                if ( ! empty($sql) AND $last_condition !== '(')
                {
                    // Add the logic operator
                    $sql .= ' '.$logic.' ';
                }
 
                // Split the condition
                list($column, $op, $value) = $condition;
 
                if ($value === NULL)
                {
                    if ($op === '=')
                    {
                        // Convert "val = NULL" to "val IS NULL"
                        $op = 'IS';
                    }
                    elseif ($op === '!=')
                    {
                        // Convert "val != NULL" to "valu IS NOT NULL"
                        $op = 'IS NOT';
                    }
                }
 
                // Database operators are always uppercase
                $op = strtoupper($op);
 
                if ($op === 'BETWEEN' AND is_array($value))
                {
                    // BETWEEN always has exactly two arguments
                    list($min, $max) = $value;
 
                    if ((is_string($min) AND array_key_exists($min, $this->_parameters)) === FALSE)
                    {
                        // Quote the value, it is not a parameter
                        $min = $db->quote($min);
                    }
 
                    if ((is_string($max) AND array_key_exists($max, $this->_parameters)) === FALSE)
                    {
                        // Quote the value, it is not a parameter
                        $max = $db->quote($max);
                    }
 
                    // Quote the min and max value
                    $value = $min.' AND '.$max;
                }
                elseif ((is_string($value) AND array_key_exists($value, $this->_parameters)) === FALSE)
                {
                    // Quote the value, it is not a parameter
                    $value = $db->quote($value);
                }
 
                if ($column)
                {
                    if (is_array($column))
                    {
                        // Use the column name
                        $column = $db->quote_identifier(reset($column));
                    }
                    else
                    {
                        // Apply proper quoting to the column
                        $column = $db->quote_column($column);
                    }
                }
 
                // Append the statement to the query
                $sql .= trim($column.' '.$op.' '.$value);
            }
 
            $last_condition = $condition;
        }
    }
 
    return $sql;
}

protected _compile_group_by( object $db , array $columns ) (defined in Kohana_Database_Query_Builder)

Compiles an array of GROUP BY columns into an SQL partial.

Parameters

  • object $db required - Database instance
  • array $columns required - $columns

Return Values

  • string

Source Code

protected function _compile_group_by(Database $db, array $columns)
{
    $group = array();
 
    foreach ($columns as $column)
    {
        if (is_array($column))
        {
            // Use the column alias
            $column = $db->quote_identifier(end($column));
        }
        else
        {
            // Apply proper quoting to the column
            $column = $db->quote_column($column);
        }
 
        $group[] = $column;
    }
 
    return 'GROUP BY '.implode(', ', $group);
}

protected _compile_join( object $db , array $joins ) (defined in Kohana_Database_Query_Builder)

Compiles an array of JOIN statements into an SQL partial.

Parameters

  • object $db required - Database instance
  • array $joins required - Join statements

Return Values

  • string

Source Code

protected function _compile_join(Database $db, array $joins)
{
    $statements = array();
 
    foreach ($joins as $join)
    {
        // Compile each of the join statements
        $statements[] = $join->compile($db);
    }
 
    return implode(' ', $statements);
}

protected _compile_order_by( object $db , array $columns ) (defined in Kohana_Database_Query_Builder)

Compiles an array of ORDER BY statements into an SQL partial.

Parameters

  • object $db required - Database instance
  • array $columns required - Sorting columns

Return Values

  • string

Source Code

protected function _compile_order_by(Database $db, array $columns)
{
    $sort = array();
    foreach ($columns as $group)
    {
        list ($column, $direction) = $group;
 
        if (is_array($column))
        {
            // Use the column alias
            $column = $db->quote_identifier(end($column));
        }
        else
        {
            // Apply proper quoting to the column
            $column = $db->quote_column($column);
        }
 
        if ($direction)
        {
            // Make the direction uppercase
            $direction = ' '.strtoupper($direction);
        }
 
        $sort[] = $column.$direction;
    }
 
    return 'ORDER BY '.implode(', ', $sort);
}

protected _compile_set( object $db , array $values ) (defined in Kohana_Database_Query_Builder)

Compiles an array of set values into an SQL partial. Used for UPDATE.

Parameters

  • object $db required - Database instance
  • array $values required - Updated values

Return Values

  • string

Source Code

protected function _compile_set(Database $db, array $values)
{
    $set = array();
    foreach ($values as $group)
    {
        // Split the set
        list ($column, $value) = $group;
 
        // Quote the column name
        $column = $db->quote_column($column);
 
        if ((is_string($value) AND array_key_exists($value, $this->_parameters)) === FALSE)
        {
            // Quote the value, it is not a parameter
            $value = $db->quote($value);
        }
 
        $set[$column] = $column.' = '.$value;
    }
 
    return implode(', ', $set);
}