private string HintToSql(IHint hint, SQLiteCommand command)
{
if (hint is TimestampRange)
{
var range = (TimestampRange)hint;
var sb = new StringBuilder();
if (range.From.HasValue)
{
sb.Append(" timestamp >= @TimestampFrom ");
command.Parameters.AddWithValue("@TimestampFrom", range.From.Value);
}
if (range.From.HasValue && range.To.HasValue) sb.Append("AND");
if (range.To.HasValue)
{
sb.Append(" timestamp < @TimestampTo ");
command.Parameters.AddWithValue("@TimestampTo", range.To.Value);
}
return sb.ToString();
}
if (hint is PersistenceIdRange)
{
var range = (PersistenceIdRange)hint;
var sb = new StringBuilder(" persistence_id IN (");
var i = 0;
foreach (var persistenceId in range.PersistenceIds)
{
var paramName = "@Pid" + (i++);
sb.Append(paramName).Append(',');
command.Parameters.AddWithValue(paramName, persistenceId);
}
return range.PersistenceIds.Count == 0
? string.Empty
: sb.Remove(sb.Length - 1, 1).Append(')').ToString();
}
else if (hint is WithManifest)
{
var manifest = (WithManifest)hint;
command.Parameters.AddWithValue("@Manifest", manifest.Manifest);
return " manifest = @Manifest";
}
else throw new NotSupportedException(string.Format("Sqlite journal doesn't support query with hint [{0}]", hint.GetType()));
}