protected Table(WriteTransaction txn, string tableName, DatabaseOpenFlags flags) { Database = txn.Transaction.OpenDatabase(tableName, new DatabaseConfiguration { Flags = flags }); txn.Commit(); }
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); }
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); }
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; }
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; }
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; }
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); }
public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran) : this(name, flags, tran, Encoding.UTF8) { }
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);
public LightningDatabase(string name, DatabaseOpenFlags flags, LightningTransaction tran) : this (name, flags, tran, Encoding.UTF8) { }
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; }
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)); }
int INativeLibraryFacade.mdb_dbi_open(IntPtr txn, string name, DatabaseOpenFlags flags, out uint db) { return FallbackLibraryFacade.mdb_dbi_open(txn, name, flags, out db); }
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)); }