protected bool TableExists(IDatabaseConnection db, string name) { db.BeginTransaction(ReadTransactionMode); try { var retval = false; using (var statement = PrepareStatement(db, "select DISTINCT tbl_name from sqlite_master".AsSpan())) { foreach (var row in statement.ExecuteQuery()) { if (string.Equals(name, row.GetString(0), StringComparison.OrdinalIgnoreCase)) { retval = true; break; } } } db.CommitTransaction(); return(retval); } catch (Exception) { db.RollbackTransaction(); throw; } }
/// <summary>Called to run the command. Can throw on error.</summary> /// <param name="cancelToken">Is cancellation pending?</param> public void Run(CancellationTokenSource cancelToken) { if (dataToWrite.Rows.Count > 0) { if (!tables.TryGetValue(dataToWrite.TableName, out var table)) { table = new DatabaseTableDetails(connection, dataToWrite.TableName); tables.Add(dataToWrite.TableName, table); } var query = new InsertQuery(dataToWrite); // Make sure the table has the correct columns. table.EnsureTableExistsAndHasRequiredColumns(dataToWrite); // Get a list of column names. var columnNames = dataToWrite.Columns.Cast <DataColumn>().Select(col => col.ColumnName); try { connection.BeginTransaction(); // Write all rows. foreach (DataRow row in dataToWrite.Rows) { query.ExecuteQuery(connection, columnNames, row.ItemArray); } } finally { connection.EndTransaction(); query.Close(connection); } } }
/// <summary> /// Begins the transaction on the appropriate databasource. /// </summary> protected override void BeginDataSource() { _transactionsExecutingToDataSource = new Dictionary <string, ITransactional>(); _dbConnection = _databaseConnection.GetConnection(); _dbConnection.Open(); _dbTransaction = _databaseConnection.BeginTransaction(_dbConnection); }
/// <summary>Alter an existing table ensuring all columns exist.</summary> /// <param name="table">The table definition to write to the database.</param> private void AlterTable(DataTable table) { bool haveBegunTransaction = false; foreach (DataColumn column in table.Columns) { if (!columnNamesInDb.Contains(column.ColumnName)) { if (!haveBegunTransaction) { haveBegunTransaction = true; connection.BeginTransaction(); } // Column is missing from database file - write it. connection.AddColumn(Name, column.ColumnName, connection.GetDBDataTypeName(column.DataType)); columnNamesInDb.Add(column.ColumnName); } } // End the transaction that we started above. if (haveBegunTransaction) { connection.EndTransaction(); } }
private void InitializeDatabase(IDatabaseConnection connection) { using (var transaction = connection.BeginTransaction()) { foreach (var batch in ReadSqlFileIntoBatches("SqlServerIntegrationTests\\CreateTestDatabase.sql")) { if (batch.Trim() != "") { transaction.ExecuteAdHocQuery(batch, new CommandOptions { CommandTimeout = 30 }); } } transaction.Commit(); } }
public static void RunQueries(this IDatabaseConnection db, string[] queries) { db.BeginTransaction(TransactionMode.Deferred); try { db.ExecuteAll(string.Join(";", queries)); db.CommitTransaction(); } catch (Exception) { db.RollbackTransaction(); throw; } }
/// <summary>Called to run the command. Can throw on error.</summary> /// <param name="cancelToken">Is cancellation pending?</param> public void Run(CancellationTokenSource cancelToken) { if (dataToWrite.Rows.Count > 0) { if (!tables.TryGetValue(dataToWrite.TableName, out var table)) { table = new DatabaseTableDetails(connection, dataToWrite.TableName); tables.Add(dataToWrite.TableName, table); } var query = new InsertQuery(dataToWrite); // Make sure the table has the correct columns. table.EnsureTableExistsAndHasRequiredColumns(dataToWrite); // Get a list of column names. var columnNames = dataToWrite.Columns.Cast <DataColumn>().Select(col => col.ColumnName); try { connection.BeginTransaction(); if (deleteExistingRows) { // fixme - this assumes that "Current" checkpoint ID is always 1. // This should always be correct afaik, but it would be better to // verify this at runtime. bool tableHasCheckpointID = connection.GetColumns(dataToWrite.TableName).Any(c => c.Item1 == "CheckpointID"); connection.ExecuteNonQuery($"DELETE FROM [{dataToWrite.TableName}] {(tableHasCheckpointID ? "WHERE CheckpointID = 1" : "")}"); } // Write all rows. foreach (DataRow row in dataToWrite.Rows) { query.ExecuteQuery(connection, columnNames, row.ItemArray); } } finally { connection.EndTransaction(); query.Close(connection); } } }
protected bool TableExists(IDatabaseConnection db, string name) { db.BeginTransaction(ReadTransactionMode); try { var retval = TableExistsInTransaction(db, name); db.CommitTransaction(); return(retval); } catch (Exception) { db.RollbackTransaction(); throw; } }
private void InitializeDatabase(IDatabaseConnection connection) { using (var transaction = connection.BeginTransaction()) { foreach (var batch in ReadSqlFileIntoBatches("PostgreSqlIntegrationTests\\CreateTestDatabase.sql")) { if (batch.Trim() != "") { transaction.ExecuteAdHocQuery(batch, new CommandOptions { CommandTimeout = 30 }); } } transaction.Commit(); } }
public TransactionContext WithTransaction() { transactionContext = new TransactionContext(this, connection.BeginTransaction()); return(transactionContext); }