public function resolveSqlToken(SqlToken $token) { switch ($token) { case SqlToken::T_DEFAULT(): return $this->getCurrentColumnSchema()->getDefaultValue(); case SqlToken::T_FALSE(): return 0; case SqlToken::T_TRUE(): return 1; case SqlToken::T_NULL(): return null; case SqlToken::T_CURRENT_TIMESTAMP(): return date("Y-m-d H:i:s", time()); case SqlToken::T_CURRENT_DATE(): return date("Y-m-d", time()); case SqlToken::T_CURRENT_TIME(): return time(); case SqlToken::T_CURRENT_USER(): // There is simply no user management, so what to do here? return "NoUserManagementImplemented"; default: throw new ErrorException("Unknown or unimplemented SqlToken '{$token->getName()}' to resolve to scalar value!"); } }
public function parsePlainValue(SQLTokenIterator $tokens, ValueJob $valueJob) { switch (true) { case $tokens->seekTokenNum(T_NUM_STRING): $valueJob->addChainValue((double) $tokens->getCurrentTokenString()); break; case $tokens->seekTokenNum(T_CONSTANT_ENCAPSED_STRING): $string = $tokens->getCurrentTokenString(); if (($string[0] === '"' || $string[0] === "'") && $string[0] === $string[strlen($string) - 1]) { // remove quotes if needed $string = substr($string, 1, strlen($string) - 2); } $valueJob->addChainValue($string); break; case $tokens->seekTokenNum(T_VARIABLE): $variableString = $tokens->getCurrentTokenString(); $variable = Variable::factory($variableString); if ($variableString === '?') { $variable->setIndex($tokens->countTokenOccourences(T_VARIABLE, 0, $tokens->getIndex() - 1)); } $valueJob->addChainValue($variable); break; case $this->parenthesisParser->canParseTokens($tokens): $valueJob->addChainValue($this->parenthesisParser->convertSqlToJob($tokens)); break; case $this->functionParser->canParseTokens($tokens): $valueJob->addChainValue($this->functionParser->convertSqlToJob($tokens)); break; case $this->columnParser->canParseTokens($tokens): $valueJob->addChainValue($this->columnParser->convertSqlToJob($tokens)); break; case $this->caseParser->canParseTokens($tokens): $valueJob->addChainValue($this->caseParser->convertSqlToJob($tokens)); break; case $tokens->seekTokenNum(SqlToken::T_DEFAULT()): case $tokens->seekTokenNum(SqlToken::T_NULL()): case $tokens->seekTokenNum(SqlToken::T_FALSE()): case $tokens->seekTokenNum(SqlToken::T_TRUE()): case $tokens->seekTokenNum(SqlToken::T_CURRENT_TIMESTAMP()): case $tokens->seekTokenNum(SqlToken::T_CURRENT_DATE()): case $tokens->seekTokenNum(SqlToken::T_CURRENT_TIME()): case $tokens->seekTokenNum(SqlToken::T_CURRENT_USER()): $valueJob->addChainValue($tokens->getCurrentTokenNumber()); break; default: return false; } return true; }