Class it_dbi:

/**
 * Select a set of records from table and fetch the first one
 * @param $query Vararg. Arrays of (field => value) pairs or plain string query parts. Default: Select all
 *   Fields will be joined by AND
 *   Fields can contain a compare operator: 'name LIKE' => "j%" or 'amount >' => 100
 *   Fields can start with - to prevent quoting of right side: '-modified' => "CURDATE()"
 * @param $query['SELECT'] expression to be returned, e.g. 'SELECT' => 'DISTINCT foo'. defaults to '*'
 * @param $query['FROM'] table names to use for joins, e.g. 'FROM' => 'tableA LEFT JOIN tableB ON a=b'
 * @param $query['JOIN'] like 'FROM'
 * @param $query['CALC_FOUND_ROWS'] if true, if true member var _found_rows contains number of matching rows before LIMIT
 * @param $query['LIMIT'] max number of rows to return; false for no limit
 * @param $query['NOFETCH'] if true the first row is not prefetched (e.g. when directly using _result)
 * @return Number of matching rows, use iterate() to fetch the next record
 * @see iterate()
 * @see _where()
 */
function select(...$args)
{
    
$query = array();
    foreach (
$args as $arg)
        
$query array_merge($query, (array)$arg);

    
$this->_connect();

    
$result 0;
    
$calc_found_rows false;

    
$what '*';
    if (isset(
$query['SELECT']))
    {
        
$what $query['SELECT'];
        unset(
$query['SELECT']);
    }

    unset(
$this->_found_rows);
    if (isset(
$query['CALC_FOUND_ROWS']) && $query['CALC_FOUND_ROWS'])
    {
        
$calc_found_rows true;
        
$what 'SQL_CALC_FOUND_ROWS '.$what;
    }
    unset(
$query['CALC_FOUND_ROWS']);    # Always unset, so CALC_FOUND_ROWS => false doesn't generate bogus query

    
if (EDC('nocache') && static::$_global_key == 'it_dbi')
        
$what 'SQL_NO_CACHE ' $what;

    
$nofetch $this->_nofetch $query['NOFETCH'];
    unset(
$query['NOFETCH']);

    
$this->clear();
    if (
$this->_result $this->query($sql "SELECT $what " $this->_from($query) . " " $this->_where($query)))
    {
        
$result $this->_p['unbuffered'] ? true $this->_num_rows($this->_result);

        if (
$calc_found_rows)
        {
            
$count $this->_fetch_assoc($this->query('SELECT FOUND_ROWS() AS count'))['count'];
            
$this->_found_rows intval($count);
        }

        if (!
$this->iterate() && ($this->_p['safety'] >= 2))
            
$this->_fatal("select(): query produced no results"$sql);
    }

    
$this->_nofetch = !$nofetch;

    return 
$result;
}