Module: Sequel::ADO::MSSQL::DatabaseMethods

Extended by:
Database::ResetIdentifierMangling
Includes:
MSSQL::DatabaseMethods
Defined in:
lib/sequel/adapters/ado/mssql.rb

Constant Summary collapse

ROWS_AFFECTED =

Query to use to get the number of rows affected by an update or delete query.

"SELECT @@ROWCOUNT AS AffectedRows"

Constants included from MSSQL::DatabaseMethods

MSSQL::DatabaseMethods::AUTO_INCREMENT, MSSQL::DatabaseMethods::DECIMAL_TYPE_RE, MSSQL::DatabaseMethods::FOREIGN_KEY_ACTION_MAP, MSSQL::DatabaseMethods::MSSQL_DEFAULT_RE, MSSQL::DatabaseMethods::SERVER_VERSION_RE, MSSQL::DatabaseMethods::SERVER_VERSION_SQL, MSSQL::DatabaseMethods::SQL_BEGIN, MSSQL::DatabaseMethods::SQL_COMMIT, MSSQL::DatabaseMethods::SQL_ROLLBACK, MSSQL::DatabaseMethods::SQL_ROLLBACK_TO_SAVEPOINT, MSSQL::DatabaseMethods::SQL_SAVEPOINT

Instance Attribute Summary

Attributes included from MSSQL::DatabaseMethods

#mssql_unicode_strings

Instance Method Summary collapse

Methods included from Database::ResetIdentifierMangling

extended

Methods included from MSSQL::DatabaseMethods

#call_mssql_sproc, #database_type, #foreign_key_list, #global_index_namespace?, #indexes, #server_version, #supports_partial_indexes?, #supports_savepoints?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #tables, #views

Instance Method Details

#execute_dui(sql, opts = OPTS) ⇒ Object

Issue a separate query to get the rows modified. ADO appears to use pass by reference with an integer variable, which is obviously not supported directly in ruby, and I’m not aware of a workaround.



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/sequel/adapters/ado/mssql.rb', line 20

def execute_dui(sql, opts=OPTS)
  return super unless @opts[:provider]
  synchronize(opts[:server]) do |conn|
    begin
      log_connection_yield(sql, conn){conn.Execute(sql)}
      res = log_connection_yield(ROWS_AFFECTED, conn){conn.Execute(ROWS_AFFECTED)}
      res.getRows.transpose.each{|r| return r.shift}
    rescue ::WIN32OLERuntimeError => e
      raise_error(e)
    end
  end
end