in Arriba/Arriba/Model/Query/QueryIntelliSense.cs [488:541]
private static void AddSuggestionsForValue(IReadOnlyCollection<Table> targetTables, IntelliSenseResult result, TermExpression lastTerm, IntelliSenseGuidance guidance, ref bool spaceIsSafeCompletionCharacter, List<IntelliSenseItem> suggestions)
{
Table singleTable;
ColumnDetails singleColumn;
if (!TryFindSingleMatchingColumn(targetTables, lastTerm, out singleTable, out singleColumn))
{
// If more than one table has the column, we can't recommend anything
result.SyntaxHint = Value;
}
else
{
if (lastTerm.Operator == Operator.Equals || lastTerm.Operator == Operator.NotEquals || lastTerm.Operator == Operator.Matches || lastTerm.Operator == Operator.MatchesExact)
{
AddTopColumnValues(result, lastTerm, guidance, suggestions, singleTable, singleColumn);
}
else if (lastTerm.Operator == Operator.LessThan || lastTerm.Operator == Operator.LessThanOrEqual || lastTerm.Operator == Operator.GreaterThan || lastTerm.Operator == Operator.GreaterThanOrEqual)
{
AddValueDistribution(result, lastTerm, guidance, suggestions, singleTable, singleColumn);
}
Type columnType = singleTable.GetColumnType(singleColumn.Name);
if (columnType == typeof(ByteBlock))
{
result.SyntaxHint = StringValue;
}
else if (columnType == typeof(bool))
{
if (suggestions.Count == 0) AddWhenPrefixes(BooleanValues, guidance.Value, suggestions);
spaceIsSafeCompletionCharacter = true;
}
else if (columnType == typeof(DateTime))
{
result.SyntaxHint = DateTimeValue;
}
else if (columnType == typeof(TimeSpan))
{
result.SyntaxHint = TimeSpanValue;
}
else if (columnType == typeof(float) || columnType == typeof(double))
{
result.SyntaxHint = FloatValue;
}
else if (columnType == typeof(byte) || columnType == typeof(sbyte) || columnType == typeof(short) || columnType == typeof(ushort) || columnType == typeof(int) || columnType == typeof(uint) || columnType == typeof(long) || columnType == typeof(ulong))
{
result.SyntaxHint = IntegerValue;
}
else
{
result.SyntaxHint = String.Format("<{0}>", columnType.Name);
}
}
}