private Unit IntervalPrimaryUnit()
{
switch (lexer.Token())
{
case MySqlToken.KwSecondMicrosecond:
{
lexer.NextToken();
return Unit.SecondMicrosecond;
}
case MySqlToken.KwMinuteMicrosecond:
{
lexer.NextToken();
return Unit.MinuteMicrosecond;
}
case MySqlToken.KwMinuteSecond:
{
lexer.NextToken();
return Unit.MinuteSecond;
}
case MySqlToken.KwHourMicrosecond:
{
lexer.NextToken();
return Unit.HourMicrosecond;
}
case MySqlToken.KwHourSecond:
{
lexer.NextToken();
return Unit.HourSecond;
}
case MySqlToken.KwHourMinute:
{
lexer.NextToken();
return Unit.HourMinute;
}
case MySqlToken.KwDayMicrosecond:
{
lexer.NextToken();
return Unit.DayMicrosecond;
}
case MySqlToken.KwDaySecond:
{
lexer.NextToken();
return Unit.DaySecond;
}
case MySqlToken.KwDayMinute:
{
lexer.NextToken();
return Unit.DayMinute;
}
case MySqlToken.KwDayHour:
{
lexer.NextToken();
return Unit.DayHour;
}
case MySqlToken.KwYearMonth:
{
lexer.NextToken();
return Unit.YearMonth;
}
case MySqlToken.Identifier:
{
var unitText = lexer.GetStringValueUppercase();
var unit = IntervalPrimary.GetIntervalUnit(unitText);
if (unit != Unit.None)
{
lexer.NextToken();
return unit;
}
goto default;
}
default:
{
throw Err("literal INTERVAL should end with an UNIT");
}
}
}