<?php
/**
*
* Sql_ParserUpdate
* @package Sql
* @subpackage Sql_Parser
* @author Thomas Schäfer
* @since 30.11.2008 07:49:30
* @desc parses a sql update into object
*/
/**
*
* Sql_ParserUpdate
* @package Sql
* @subpackage Sql_Parser
* @author Thomas Schäfer
* @since 30.11.2008 07:49:30
* @desc parses a sql update into object
*/
class Sql_ParserUpdate implements Sql_InterfaceParser {
public static function doParse(){
Sql_Parser::getTok();
if (Sql_Object::token() == 'ident') {
$tree = array('Command' => 'update');
if(Sql_Object::token() == "ident" and Sql_Object::lexer()->tokText=="IGNORE") {
$tree["Statement"][] = Sql_Object::lexer()->tokText;
Sql_Parser::getTok();
}
$tree['TableNames'][] = Sql_Object::lexer()->tokText;
} else {
return self::raiseError('Expected table name');
}
Sql_Parser::getTok();
if (Sql_Object::token() != 'set') {
return self::raiseError('Expected "set"');
}
while (true)
{
Sql_Parser::getTok();
if (Sql_Object::token() != 'ident') {
return Sql_Parser::raiseError('Expected a column name');
}
$tree['ColumnNames'][] = Sql_Object::lexer()->tokText;
Sql_Parser::getTok();
if (Sql_Object::token() != '=') {
return Sql_Parser::raiseError('Expected =');
}
Sql_Parser::getTok();
if (!Sql_Parser::isVal(Sql_Object::token())) {
return Sql_Parser::raiseError('Expected a value');
}
$tree['Values'][] = array('Value'=>Sql_Object::lexer()->tokText,
'Type'=>Sql_Object::token());
Sql_Parser::getTok();
if (Sql_Object::token() == 'where') {
$clause = Sql_Parser::parseSearchClause();
if (Sql_Parser::isError($clause)) {
return $clause;
}
$tree['Where'] = $clause;
break;
}
elseif (Sql_Object::token() != ',')
{
return Sql_Parser::raiseError('Expected "where" or ","');
}
}
return $tree;
}
public static function parse() {
return self::doParse();
}
}
|