// created on 1/8/2002 at 23:02 // // Npgsql.NpgsqlDataAdapter.cs // // Author: // Francisco Jr. (fxjrlists@yahoo.com.br) // // Copyright (C) 2002 The Npgsql Development Team // npgsql-general@gborg.postgresql.org // http://gborg.postgresql.org/project/npgsql/projdisplay.php // // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA using System; using System.Data; using System.Data.Common; using System.Resources; namespace Npgsql { /// /// Represents the method that handles the RowUpdated events. /// /// The source of the event. /// A NpgsqlRowUpdatedEventArgs that contains the event data. public delegate void RowUpdatedEventHandler(Object sender, NpgsqlRowUpdatedEventArgs e); /// /// Represents the method that handles the RowUpdating events. /// /// The source of the event. /// A NpgsqlRowUpdatingEventArgs that contains the event data. public delegate void RowUpdatingEventHandler(Object sender, NpgsqlRowUpdatingEventArgs e); public sealed class NpgsqlDataAdapter : DbDataAdapter, IDbDataAdapter { private NpgsqlCommand _selectCommand; private NpgsqlCommand _updateCommand; private NpgsqlCommand _deleteCommand; private NpgsqlCommand _insertCommand; private NpgsqlCommandBuilder cmd_builder; // Log support private static readonly String CLASSNAME = "NpgsqlDataAdapter"; public event RowUpdatedEventHandler RowUpdated; public event RowUpdatingEventHandler RowUpdating; public NpgsqlDataAdapter() {} public NpgsqlDataAdapter(NpgsqlCommand selectCommand) { NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, CLASSNAME); _selectCommand = selectCommand; cmd_builder = new NpgsqlCommandBuilder(this); } public NpgsqlDataAdapter(String selectCommandText, NpgsqlConnection selectConnection) : this(new NpgsqlCommand(selectCommandText, selectConnection)) {} public NpgsqlDataAdapter(String selectCommandText, String selectConnectionString) : this(selectCommandText, new NpgsqlConnection(selectConnectionString)) {} protected override RowUpdatedEventArgs CreateRowUpdatedEvent( DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping ) { NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "CreateRowUpdatedEvent"); return new NpgsqlRowUpdatedEventArgs(dataRow, command, statementType, tableMapping); } protected override RowUpdatingEventArgs CreateRowUpdatingEvent( DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping ) { NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "CreateRowUpdatingEvent"); return new NpgsqlRowUpdatingEventArgs(dataRow, command, statementType, tableMapping); } protected override void OnRowUpdated( RowUpdatedEventArgs value ) { NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "OnRowUpdated"); //base.OnRowUpdated(value); if ((RowUpdated != null) && (value is NpgsqlRowUpdatedEventArgs)) RowUpdated(this, (NpgsqlRowUpdatedEventArgs) value); } protected override void OnRowUpdating( RowUpdatingEventArgs value ) { NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "OnRowUpdating"); if ((RowUpdating != null) && (value is NpgsqlRowUpdatingEventArgs)) RowUpdating(this, (NpgsqlRowUpdatingEventArgs) value); /*switch (value.StatementType) { case StatementType.Insert: value.Command = cmd_builder.GetInsertCommand(value.Row); break; case StatementType.Update: value.Command = cmd_builder.GetUpdateCommand(value.Row); break; case StatementType.Delete: value.Command = cmd_builder.GetDeleteCommand(value.Row); break; } DataColumnMappingCollection columnMappings = value.TableMapping.ColumnMappings; foreach (IDataParameter parameter in value.Command.Parameters) { string dsColumnName = parameter.SourceColumn; if (columnMappings.Contains(parameter.SourceColumn)) { DataColumnMapping mapping = columnMappings[parameter.SourceColumn]; if (mapping != null) { dsColumnName = mapping.DataSetColumn; } } DataRowVersion rowVersion = DataRowVersion.Default; if (value.StatementType == StatementType.Update) rowVersion = parameter.SourceVersion; if (value.StatementType == StatementType.Delete) rowVersion = DataRowVersion.Original; parameter.Value = value.Row [dsColumnName, rowVersion]; } value.Row.AcceptChanges ();*/ } ITableMappingCollection IDataAdapter.TableMappings { get { return TableMappings; } } IDbCommand IDbDataAdapter.DeleteCommand { get { NpgsqlEventLog.LogPropertyGet(LogLevel.Debug, CLASSNAME, "IDbDataAdapter.DeleteCommand"); return (NpgsqlCommand) DeleteCommand; } set { DeleteCommand = (NpgsqlCommand) value; } } public NpgsqlCommand DeleteCommand { get { return _deleteCommand; } set { _deleteCommand = value; } } IDbCommand IDbDataAdapter.SelectCommand { get { return (NpgsqlCommand) SelectCommand; } set { SelectCommand = (NpgsqlCommand) value; } } public NpgsqlCommand SelectCommand { get { return _selectCommand; } set { _selectCommand = value; } } IDbCommand IDbDataAdapter.UpdateCommand { get { NpgsqlEventLog.LogPropertyGet(LogLevel.Debug, CLASSNAME, "IDbDataAdapter.UpdateCommand"); return (NpgsqlCommand) UpdateCommand; } set { UpdateCommand = (NpgsqlCommand) value; } } public NpgsqlCommand UpdateCommand { get { return _updateCommand; } set { _updateCommand = value; } } IDbCommand IDbDataAdapter.InsertCommand { get { return (NpgsqlCommand) InsertCommand; } set { InsertCommand = (NpgsqlCommand) value; } } public NpgsqlCommand InsertCommand { get { NpgsqlEventLog.LogPropertyGet(LogLevel.Debug, CLASSNAME, "InsertCommand"); return _insertCommand; } set { _insertCommand = value; } } } } public class NpgsqlRowUpdatingEventArgs : RowUpdatingEventArgs { public NpgsqlRowUpdatingEventArgs ( DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping ) : base(dataRow, command, statementType, tableMapping) { } } public class NpgsqlRowUpdatedEventArgs : RowUpdatedEventArgs { public NpgsqlRowUpdatedEventArgs ( DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping ) : base(dataRow, command, statementType, tableMapping) { } }