Login   Register  
PHP Classes
elePHPant
Icontem

File: Sql_Compiler/Sql_CompilerSelect.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Tom Schaefer  >  SQL Parse and Compile  >  Sql_Compiler/Sql_CompilerSelect.class.php  >  Download  
File: Sql_Compiler/Sql_CompilerSelect.class.php
Role: Class source
Content type: text/plain
Description: compile select statement
Class: SQL Parse and Compile
Parse and compose SQL queries programatically
Author: By
Last change: update
Date: 2009-02-06 00:43
Size: 4,156 bytes
 

Contents

Class file image Download
<?php


/**
 *
 * Sql_CompilerSelect
 * @package Sql_Compiler
 * @author Thomas Sch�fer
 * @since 30.11.2008 07:49:30
 * @desc compiles sql select statements into string
 */
/**
 *
 * Sql_CompilerSelect
 * @package Sql_Compiler
 * @author Thomas Sch�fer
 * @since 30.11.2008 07:49:30
 * @desc compiles sql select statements into string
 */
class Sql_CompilerSelect implements Sql_InterfaceCompiler 
{

    
/**
     * process select compilation
     * @access private 
     * @param mixed $arg
     * @return string
     */
    
public static function doCompile() 
    {

        
// save the command and set quantifiers
        
$sql Sql_Compiler :: SQL_SELECT Sql_Compiler :: SPACE;
        if (
Sql_Object :: has('tree.Quantifier')) {
            
$sql .= Sql_Object :: get('tree.Quantifier') . Sql_Compiler :: SPACE;
        }

        if (!
Sql_Object :: has("tree.Bridge") and count(Sql_Object :: get("tree.ColumnNames")) < 1) {
            
$sql .= self :: ASTERISK;
        } else {
            
// save the column names and set functions
            
$sql Sql_Compiler::compileColumns($sql);
        }

        
// save the tables
        
$sql .= Sql_Compiler::$breakline Sql_Compiler :: SPACE Sql_Compiler :: SQL_FROM Sql_Compiler :: SPACE;

        for (
$i 0$i count(Sql_Object :: get('tree.TableNames')); $i++) {
            
            if(
Sql_Object :: has('tree.DatabaseNames')) {
                
$sql .= Sql_Object :: get('tree.DatabaseNames.' $i) .".";
                
$sql .= Sql_Object :: get('tree.TableNames.' $i);
            } else {
                
$sql .= Sql_Object :: get('tree.TableNames.' $i);
            }
            if (
Sql_Object :: get('tree.TableAliases.' $i) != '') {
                
$sql .= Sql_Compiler :: ALIAS Sql_Object :: get('tree.TableAliases.' $i);
            }
            if (
Sql_Object :: get('tree.Joins.' $i) != '') {
                
$search_string Sql_Compiler :: compileSearchClause(Sql_Object :: get('tree.Joins.' $i));
                if (
Sql_Compiler :: isError($search_string)) {
                    return 
$search_string;
                }
                
$sql .= Sql_Compiler :: ON $search_string;
            }
            if (
Sql_Object :: has('tree.Join.' $i)) {
                
$sql .= Sql_Compiler::$breakline;
                
$sql .= Sql_Compiler :: SPACE Sql_Object :: get('tree.Join.' $i) . Sql_Compiler :: SPACE;
            }
        }
        
// save the where clause
        
if (Sql_Object :: has('tree.Where')) {
            
$search_string Sql_Compiler :: compileSearchClause(Sql_Object :: get('tree.Where'));
            if (
Sql_Compiler::isError($search_string)) {
                return 
$search_string;
            }
            
$sql .= Sql_Compiler::$breakline;
            
$sql .= Sql_Compiler :: SPACE Sql_Compiler :: SQL_WHERE Sql_Compiler :: SPACE $search_string;
        }

        
// save the group by clause
        
if (Sql_Object :: has('tree.GroupBy')) {
            
$sql .= Sql_Compiler::$breakline;
            
$sql .= Sql_Compiler :: SPACE Sql_Compiler :: SQL_GROUPBY Sql_Compiler :: SPACE implode(Sql_Compiler :: COMMA Sql_Compiler :: SPACESql_Object :: get('tree.GroupBy'));
        }

        
// save the having clause
        
if (Sql_Object :: has('tree.Having')) {
            
$search_string Sql_Compiler :: compileSearchClause(Sql_Object :: get('tree.Having'));
            if (
Sql_Compiler::isError($search_string)) {
                return 
$search_string;
            }
            
$sql .= Sql_Compiler::$breakline;
            
$sql .= Sql_Compiler :: SPACE Sql_Compiler :: SQL_HAVING Sql_Compiler :: SPACE $search_string;
        }

        
// save the order by clause
        
if (Sql_Object :: has('tree.SortOrder')) {
            
$sort_order = array ();
            foreach (
Sql_Object :: get('tree.SortOrder') as $key => $value) {
                
$sort_order[] = $key Sql_Compiler :: SPACE $value;
            }
            
$sql .= Sql_Compiler::$breakline;
            
$sql .= Sql_Compiler :: SPACE Sql_Compiler :: SQL_ORDERBY Sql_Compiler :: SPACE implode(Sql_Compiler :: COMMA Sql_Compiler :: SPACE$sort_order);
        }

        
// save the limit clause

        
if (Sql_Object :: has('tree.Limit')) {
            
$sql .= Sql_Compiler::$breakline;
            
$sql .= Sql_Compiler :: SPACE Sql_Compiler :: SQL_LIMIT Sql_Compiler :: SPACE Sql_Object :: get('tree.Limit.Start') . Sql_Compiler :: COMMA Sql_Object :: get('tree.Limit.Length');
        }

        return 
$sql;
    }
    
    public static function 
compile$tree )
    {
        
Sql_Object::set("tree"$tree);
        return 
self::doCompile();
    }

}