public void CreateIndex(string name, Dictionary <string, bool> indexKeys, int density = 100, bool primary = false,
                         bool unique = false)
 {
     CheckState();
     _indexesValid = false;
     EsentIndex.Create(this, name, indexKeys, density, primary, unique);
 }
        internal static EsentIndex Create(EsentTable table, string name, Dictionary <string, bool> indexKeys, int density,
                                          bool primary, bool unique)
        {
            var index = new EsentIndex
            {
                Table     = table,
                Name      = name,
                IndexKeys = indexKeys,
                Primary   = primary,
                Unique    = unique
            };
            var count = indexKeys.Count;

            if (count < 1)
            {
                throw new InvalidOperationException("Index needs at least one column!");
            }
            var key = string.Empty;

            for (var i = 0; i < count; i++)
            {
                var c = indexKeys.Keys.ToList()[i];
                key += indexKeys[c] ? '+' : '-';
                key += $"{c}\0";
            }
            key += '\0';
            var option =
                (primary ? CreateIndexGrbit.IndexPrimary : CreateIndexGrbit.None) |
                (unique ? CreateIndexGrbit.IndexUnique : CreateIndexGrbit.None);

            Api.JetCreateIndex(table.Database.Session.JetId, table.JetId, name, option, key, key.Length, density);
            return(index);
        }
 public void DropIndex(string name)
 {
     CheckState();
     _indexesValid = false;
     EsentIndex.Drop(this, name);
 }
 public void SetCurrentIndex(string name)
 {
     CheckState();
     EsentIndex.SetCurrent(this, name);
 }