private void DisposeConnection() { try { lock (_disposeLock) { using (WriteLock.Write()) { if (_connection != null) { using (_connection) { _connection.Close(); } _connection = null; } CloseConnection(); } } } catch (Exception ex) { _logger.LogError(ex, "Error disposing database", ex); } }
protected void RunDefaultInitialization(ManagedConnection db) { var queries = new List <string> { "PRAGMA journal_mode=WAL", "PRAGMA page_size=4096", "PRAGMA synchronous=Normal" }; if (EnableTempStoreMemory) { queries.AddRange(new List <string> { "pragma default_temp_store = memory", "pragma temp_store = memory" }); } else { queries.AddRange(new List <string> { "pragma temp_store = file" }); } db.ExecuteAll(string.Join(";", queries.ToArray())); _logger.LogInformation("PRAGMA synchronous={sync}", db.Query("PRAGMA synchronous").SelectScalarString().First()); }
protected bool TableExists(ManagedConnection connection, string name) { return(connection.RunInTransaction(db => { return TableExists(db, name); }, ReadTransactionMode)); }
/// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool dispose) { if (dispose) { try { lock (_disposeLock) { using (WriteLock.Write()) { if (_connection != null) { using (_connection) { } _connection = null; } CloseConnection(); } } } catch (Exception ex) { Logger.ErrorException("Error disposing database", ex); } } }
public static void Attach(ManagedConnection db, string path, string alias) { var commandText = $"attach @path as {alias};"; using (var statement = db.PrepareStatement(commandText)) { statement.TryBind("@path", path); statement.MoveNext(); } }
protected ManagedConnection CreateConnection(bool isReadOnly = false) { if (_connection != null) { return(_connection); } lock (WriteLock) { if (!_versionLogged) { _versionLogged = true; Logger.Info("Sqlite version: " + SQLite3.Version); Logger.Info("Sqlite compiler options: " + string.Join(",", SQLite3.CompilerOptions.ToArray())); } ConnectionFlags connectionFlags; if (isReadOnly) { //Logger.Info("Opening read connection"); //connectionFlags = ConnectionFlags.ReadOnly; connectionFlags = ConnectionFlags.Create; connectionFlags |= ConnectionFlags.ReadWrite; } else { //Logger.Info("Opening write connection"); connectionFlags = ConnectionFlags.Create; connectionFlags |= ConnectionFlags.ReadWrite; } if (EnableSingleConnection) { connectionFlags |= ConnectionFlags.PrivateCache; } else { connectionFlags |= ConnectionFlags.SharedCached; } connectionFlags |= ConnectionFlags.NoMutex; var db = SQLite3.Open(DbFilePath, connectionFlags, null); try { if (string.IsNullOrWhiteSpace(_defaultWal)) { _defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First(); Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal); } var queries = new List <string> { //"PRAGMA cache size=-10000" //"PRAGMA read_uncommitted = true", "PRAGMA synchronous=Normal" }; if (CacheSize.HasValue) { queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture)); } if (EnableTempStoreMemory) { queries.Add("PRAGMA temp_store = memory"); } else { queries.Add("PRAGMA temp_store = file"); } //foreach (var query in queries) //{ // db.Execute(query); //} db.ExecuteAll(string.Join(";", queries.ToArray())); } catch { using (db) { } throw; } _connection = new ManagedConnection(db, false); return(_connection); } }
public IStatement PrepareStatementSafe(ManagedConnection connection, string sql) { return(connection.PrepareStatement(sql)); }
protected ManagedConnection CreateConnection(bool isReadOnly = false) { if (_connection != null) { return(_connection); } lock (WriteLock) { if (!_versionLogged) { _versionLogged = true; _logger.LogInformation("SQLite version: {Version}", SQLite3.Version); _logger.LogInformation("SQLite compiler options: {Options}", string.Join(",", SQLite3.CompilerOptions)); } ConnectionFlags connectionFlags; if (isReadOnly) { // TODO: set connection flags correctly // connectionFlags = ConnectionFlags.ReadOnly _logger.LogDebug("Opening read connection to database"); connectionFlags = ConnectionFlags.Create; connectionFlags |= ConnectionFlags.ReadWrite; } else { _logger.LogDebug("Opening write connection to database."); connectionFlags = ConnectionFlags.Create; connectionFlags |= ConnectionFlags.ReadWrite; } if (EnableSingleConnection) { connectionFlags |= ConnectionFlags.PrivateCache; } else { connectionFlags |= ConnectionFlags.SharedCached; } connectionFlags |= ConnectionFlags.NoMutex; var db = SQLite3.Open(DbFilePath, connectionFlags, null); try { if (string.IsNullOrWhiteSpace(_defaultWal)) { _defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First(); _logger.LogInformation("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal); } var queries = new List <string> { // "PRAGMA cache size=-10000" // "PRAGMA read_uncommitted = true", "PRAGMA synchronous=Normal" }; if (CacheSize.HasValue) { queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture)); } if (EnableTempStoreMemory) { queries.Add("PRAGMA temp_store = memory"); } else { queries.Add("PRAGMA temp_store = file"); } db.ExecuteAll(string.Join(";", queries.ToArray())); } catch { db.Dispose(); throw; } _dbConnection = db; _connection = new ManagedConnection(db); return(_connection); } }