public IEnumerable <KeyValuePair <string, string> > Execute()
        {
            log.Info(string.Format("Indexed scan operation for '{0}', filter: '{1}' {2} '{3}'.", tableName, filter.Column,
                                   OperatorConverter.ToComboString(filter.Operator).ToString(), filter.Value));

            switch (filter.Operator)
            {
            case Operator.Equal:
                var keys = index.Get(filter.Value);

                foreach (var key in keys)
                {
                    yield return(new KeyValuePair <string, string>(key, repository.Get(databaseFile, table.Name, key)));
                }
                break;

            case Operator.NotEqual:
                foreach (var row in GetNotEqual())
                {
                    yield return(row);
                }
                break;

            case Operator.Less:
                foreach (var row in GetLess())
                {
                    yield return(row);
                }
                break;

            case Operator.LessOrEqual:
                foreach (var row in GetLessOrEqual())
                {
                    yield return(row);
                }
                break;

            case Operator.Greater:
                foreach (var row in GetGreater())
                {
                    yield return(row);
                }
                break;

            case Operator.GreaterOrEqual:
                foreach (var row in GetGreaterOrEqual())
                {
                    yield return(row);
                }
                break;
            }
        }