private IExpression MatchExpression()
{
Match(MySqlToken.PuncLeftParen);
var colList = ExpressionList(new List<IExpression>());
MatchIdentifier("AGAINST");
Match(MySqlToken.PuncLeftParen);
var pattern = Expression();
var modifier = MatchModifier.Default;
switch (lexer.Token())
{
case MySqlToken.KwWith:
{
lexer.NextToken();
Match(MySqlToken.Identifier);
Match(MySqlToken.Identifier);
modifier = MatchModifier.WithQueryExpansion;
break;
}
case MySqlToken.KwIn:
{
switch (lexer.NextToken())
{
case MySqlToken.KwNatural:
{
lexer.NextToken();
MatchIdentifier("LANGUAGE");
MatchIdentifier("MODE");
if (lexer.Token() == MySqlToken.KwWith)
{
lexer.NextToken();
lexer.NextToken();
lexer.NextToken();
modifier = MatchModifier.InNaturalLanguageModeWithQueryExpansion;
}
else
{
modifier = MatchModifier.InNaturalLanguageMode;
}
break;
}
default:
{
MatchIdentifier("BOOLEAN");
MatchIdentifier("MODE");
modifier = MatchModifier.InBooleanMode;
break;
}
}
break;
}
}
Match(MySqlToken.PuncRightParen);
return new MatchExpr(colList, pattern, modifier).SetCacheEvalRst(cacheEvalRst);
}