<?php
 
 
/**
 
 *
 
 * Sql_CompilerUpdate
 
 * @package Sql_Compiler
 
 * @author Thomas Schäfer
 
 * @since 03.12.2008 07:49:30
 
 * @desc compiles sql update statements into string
 
 */
 
/**
 
 *
 
 * Sql_CompilerUpdate
 
 * @package Sql_Compiler
 
 * @author Thomas Schäfer
 
 * @since 03.12.2008 07:49:30
 
 * @desc compiles sql update statements into string
 
 */
 
class Sql_CompilerUpdate implements Sql_InterfaceCompiler
 
{
 
 
    /**
 
     * compile insert
 
     *     
 
     * @desc build an insert statement string
 
     * @access private
 
     * @param string $type
 
     * @return string
 
     */
 
    public static function doCompile() 
 
    {
 
        $sql     = Sql_Compiler::SQL_UPDATE 
 
                . Sql_Compiler::SPACE;
 
        
 
        if(Sql_Object :: has('tree.Statement')) {
 
            $sql .= implode(Sql_Compiler::SPACE, Sql_Object :: get('tree.Statement')) . Sql_Compiler::SPACE;
 
        }
 
        $sql    .= implode(Sql_Compiler::COMMA . Sql_Compiler::SPACE, Sql_Object :: get('tree.TableNames'));
 
 
        // save the set clause
 
        for ($i = 0; $i < count (Sql_Object :: get('tree.ColumnNames')); $i++) {
 
            $set_columns[]     = Sql_Object :: get('tree.ColumnNames.'.$i)
 
                            . ' = '
 
                            . Sql_Compiler::getWhereValue(Sql_Object :: get('tree.Values.'.$i));
 
        }
 
        // set
 
        $sql     .= Sql_Compiler::SPACE 
 
                . Sql_Compiler::SQL_SET
 
                . Sql_Compiler::SPACE
 
                . implode (Sql_Compiler::COMMA . Sql_Compiler::SPACE, $set_columns);
 
 
        // 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::SPACE
 
                    . Sql_Compiler::SQL_WHERE
 
                    . Sql_Compiler::SPACE
 
                    . $search_string;
 
        } else {
 
            return Sql_Compiler::raiseError("UPDATE without condition.");
 
        }
 
 
        return $sql;
 
    }
 
    
 
    public static function compile( $tree )
 
    {
 
        Sql_Object::set("tree", $tree);
 
        return self::doCompile();
 
    }
 
 
}
 
 
 
 |