Пример #1
0
 protected Table(WriteTransaction txn, string tableName, DatabaseOpenFlags flags)
 {
     Database = txn.Transaction.OpenDatabase(tableName, new DatabaseConfiguration {
         Flags = flags
     });
     txn.Commit();
 }
Пример #2
0
 public static void RunTransactionScenario(this LightningEnvironment env,
                                           Action <LightningTransaction, LightningDatabase> scenario,
                                           DatabaseOpenFlags flags = DatabaseOpenFlags.Create, TransactionBeginFlags transactionFlags = TransactionBeginFlags.None)
 {
     using var tx = env.BeginTransaction(transactionFlags);
     using var db = tx.OpenDatabase(configuration: new DatabaseConfiguration { Flags = flags });
     scenario(tx, db);
 }
Пример #3
0
        private DatabaseHandleCacheEntry OpenDatabaseHandle(string name, LightningTransaction tran, DatabaseOpenFlags flags)
        {
            name = FromInternalDatabaseName(name);

            var handle = default(UInt32);
            NativeMethods.Execute(lib => lib.mdb_dbi_open(tran._handle, name, flags, out handle));

            return new DatabaseHandleCacheEntry(handle, flags);
        }               
Пример #4
0
        public static int mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db)
        {
            var statusCode = LmdbMethods.mdb_dbi_open(txn, name, flags, out db);

            if (statusCode == MDB_NOTFOUND)
            {
                throw new LightningException($"Error opening database {name}: {mdb_strerror(statusCode)}", statusCode);
            }
            return(check(statusCode));
        }
        //TODO: Upgrade db flags?
        internal LightningDatabase OpenDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran)
        {
            var internalName = name ?? LightningDatabase.DefaultDatabaseName;
            var db = _openedDatabases.GetOrAdd(internalName, n => 
            {
                var ldb = new LightningDatabase(name, flags, tran);
                _databasesForReuse.Add(ldb._handle);

                return ldb;
            });

            if (db.OpenFlags != flags)
                throw new InvalidOperationException("Database " + internalName + " already opened with different flags");

            return db;
        }
Пример #6
0
        public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran, Encoding encoding)
        {
            if (tran == null)
                throw new ArgumentNullException("tran");

            UInt32 handle = default(UInt32);
            NativeMethods.Execute(lib => lib.mdb_dbi_open(tran._handle, name, flags, out handle));

            _name = name ?? DefaultDatabaseName;

            _handle = handle;
            _shouldDispose = true;
                        
            this.IsOpened = true;
            this.Encoding = encoding;
            this.OpenFlags = flags;
            this.Environment = tran.Environment;
        }
Пример #7
0
        public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran, Encoding encoding)
        {
            if (tran == null)
            {
                throw new ArgumentNullException("tran");
            }

            UInt32 handle = default(UInt32);

            Native.Execute(() => Native.mdb_dbi_open(tran._handle, name, flags, out handle));

            _name = name ?? DefaultDatabaseName;

            _handle        = handle;
            _shouldDispose = true;

            this.IsOpened    = true;
            this.Encoding    = encoding;
            this.OpenFlags   = flags;
            this.Environment = tran.Environment;
        }
Пример #8
0
        public LightningDatabase OpenDatabase(string name, LightningTransaction tran, DatabaseOpenFlags flags, Encoding encoding)
        {
            var internalName = ToInternalDatabaseName(name);

            var cacheEntry = _openedDatabases.AddOrUpdate(
                internalName,
                key =>
                {
                    var entry = OpenDatabaseHandle(name, tran, flags);                    

                    return entry;
                },
                (key, entry) =>
                {
                    if (entry.OpenFlags != flags)
                        entry = OpenDatabaseHandle(name, tran, flags);

                    return entry;
                });

            _databasesForReuse.Add(cacheEntry.Handle);

            return new LightningDatabase(internalName, tran, cacheEntry, encoding);
        }
        /// <summary>
        /// Opens a database in context of this transaction.
        /// </summary>
        /// <param name="name">Database name (optional). If null then the default name is used.</param>
        /// <param name="flags">Database open options (optionsl).</param>
        /// <param name="encoding">Database keys encoding.</param>
        /// <returns>Created database wrapper.</returns>
        public LightningDatabase OpenDatabase(string name = null, DatabaseOpenFlags? flags = null, Encoding encoding = null)
        {
            if (name == null && (!flags.HasValue || flags.Value == LightningConfig.Database.DefaultOpenFlags))
            {                
                if (_defaultDatabase == null || _defaultDatabase.IsReleased)
                    _defaultDatabase = this.Environment.OpenDatabase(name, this, flags, encoding);

                if (_defaultDatabase.Encoding != (encoding ?? LightningConfig.Database.DefaultEncoding))
                    throw new InvalidOperationException("Can not change encoding of already opened database");

                return _defaultDatabase;
            }

            return this.Environment.OpenDatabase(name, this, flags, encoding);
        }
Пример #10
0
 public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran)
     : this(name, flags, tran, Encoding.UTF8)
 {
 }
Пример #11
0
 public static extern int mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db);
 private static extern int mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out UInt32 db);
Пример #13
0
 public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran)
     : this (name, flags, tran, Encoding.UTF8)
 {
 }
        //TODO: Upgrade db flags?
        internal LightningDatabase OpenDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran)
        {
            var internalName = name ?? LightningDatabase.DefaultDatabaseName;
            var db = _openedDatabases.GetOrAdd(internalName, n => 
            {
                var ldb = new LightningDatabase(name, flags, tran);
                _databasesForReuse.Add(ldb._handle);

                return ldb;
            });

            if (db.OpenFlags != flags)
                throw new InvalidOperationException("Database " + internalName + " already opened with different flags");

            return db;
        }
 public LightningDatabase OpenDatabase(string name = null, DatabaseOpenFlags flags = DatabaseOpenFlags.None)
 {
     return this.Environment.OpenDatabase(name, flags, this);
 }
        //TODO: Upgrade db flags?
        internal LightningDatabase OpenDatabase(string name, LightningTransaction tran, DatabaseOpenFlags? flags, Encoding encoding)
        {
            var internalName = name ?? LightningDatabase.DefaultDatabaseName;
            var db = _openedDatabases.GetOrAdd(internalName, n => 
            {
                var ldb = new LightningDatabase(name, tran, flags, encoding);
                _databasesForReuse.Add(ldb._handle);

                return ldb;
            });

            if (db.OpenFlags != flags.GetValueOrDefault())
                throw new InvalidOperationException("Database " + internalName + " already opened with different flags");

            if (db.Encoding != (encoding ?? LightningConfig.Database.DefaultEncoding))
                throw new InvalidOperationException("Can not change encoding of already opened database");

            return db;
        }
Пример #17
0
 public static MDBResultCode mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db)
 {
     return(LmdbMethods.mdb_dbi_open(txn, name, flags, out db));
 }
 public LightningDatabase OpenDatabase(string name = null, DatabaseOpenFlags flags = DatabaseOpenFlags.None)
 {
     return(this.Environment.OpenDatabase(name, flags, this));
 }
Пример #19
0
 private static extern int mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out UInt32 db);
Пример #20
0
 int INativeLibraryFacade.mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db)
 {
     return FallbackLibraryFacade.mdb_dbi_open(txn, name, flags, out db);
 }
Пример #21
0
 public static int mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db)
 {
     var statusCode = LmdbMethods.mdb_dbi_open(txn, name, flags, out db);
     if(statusCode == MDB_NOTFOUND)
         throw new LightningException($"Error opening database {name}: {mdb_strerror(statusCode)}", statusCode);
     return check(statusCode);
 }
 public DatabaseHandleCacheEntry(uint handle, DatabaseOpenFlags flags)
 {
     _handle = handle;
     _flags = flags;
 }
 int INativeLibraryFacade.mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db)
 {
     return(FallbackLibraryFacade.mdb_dbi_open(txn, name, flags, out db));
 }