using System.Data; using System.Data.SQLite; namespace TheAgileWorkshop.SQLiteWithSchemaSupport { public class SQLiteWithSchemaCommand : IDbCommand { private readonly SQLiteCommand command; private readonly SQLiteWithSchemaParameterCollection parameters; private SQLiteWithSchemaConnection connection; private SQLiteWithSchemaTransaction transaction; public SQLiteWithSchemaCommand() : this(new SQLiteWithSchemaConnection()) { } public SQLiteWithSchemaCommand(SQLiteWithSchemaConnection connection) { this.connection = connection; command = connection.InnerConnection.CreateCommand(); parameters = new SQLiteWithSchemaParameterCollection(command.Parameters); } public void Dispose() { command.Dispose(); } public void Prepare() { command.Prepare(); } public void Cancel() { command.Cancel(); } public IDbDataParameter CreateParameter() { return new SQLiteWithSchemaParameter(this); } public int ExecuteNonQuery() { return command.ExecuteNonQuery(); } public IDataReader ExecuteReader() { return command.ExecuteReader(); } public IDataReader ExecuteReader(CommandBehavior behavior) { return command.ExecuteReader(behavior); } public object ExecuteScalar() { return command.ExecuteScalar(); } public IDbConnection Connection { get { return connection; } set { connection = (SQLiteWithSchemaConnection)value; command.Connection = connection.InnerConnection; } } public IDbTransaction Transaction { get { return transaction; } set { if (value == null) return; transaction = (SQLiteWithSchemaTransaction)value; Connection = transaction.Connection; command.Transaction = transaction.InnerTransaction; } } public string CommandText { get { return command.CommandText; } set { command.CommandText = new CommandTextParser().ParseCommandText(value); } } public int CommandTimeout { get { return command.CommandTimeout; } set { command.CommandTimeout = value; } } public CommandType CommandType { get { return command.CommandType; } set { command.CommandType = value; } } public IDataParameterCollection Parameters { get { return parameters; } } public UpdateRowSource UpdatedRowSource { get { return command.UpdatedRowSource; } set { command.UpdatedRowSource = value; } } internal SQLiteCommand InnerCommand { get { return command; } } } }