private IExpression IntervalExpression()
{
IExpression fstExpr;
IList<IExpression> argList = null;
if (lexer.Token() == MySqlToken.PuncLeftParen)
{
if (lexer.NextToken() == MySqlToken.KwSelect)
{
fstExpr = SubQuery();
Match(MySqlToken.PuncRightParen);
}
else
{
fstExpr = Expression();
if (lexer.Token() == MySqlToken.PuncComma)
{
lexer.NextToken();
argList = new List<IExpression>();
argList.Add(fstExpr);
argList = ExpressionList(argList);
}
else
{
Match(MySqlToken.PuncRightParen);
}
}
}
else
{
fstExpr = Expression();
}
if (argList != null)
{
return new Interval(argList).SetCacheEvalRst(cacheEvalRst);
}
return new IntervalPrimary(fstExpr, IntervalPrimaryUnit()).SetCacheEvalRst(cacheEvalRst);
}