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

Includes:
MSSQL::DatabaseMethods
Defined in:
lib/sequel/adapters/ado/mssql.rb

Constant Summary

Constants included from MSSQL::DatabaseMethods

MSSQL::DatabaseMethods::FOREIGN_KEY_ACTION_MAP

Instance Attribute Summary

Attributes included from MSSQL::DatabaseMethods

#mssql_unicode_strings

Instance Method Summary collapse

Methods included from MSSQL::DatabaseMethods

#call_mssql_sproc, #database_type, #foreign_key_list, #freeze, #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 not supported directly in ruby, and I'm not aware of a workaround.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sequel/adapters/ado/mssql.rb', line 13

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)}
      rows_affected_sql = "SELECT @@ROWCOUNT AS AffectedRows"
      res = log_connection_yield(rows_affected_sql, conn){conn.Execute(rows_affected_sql)}
      res.getRows.transpose.each{|r| return r.shift}
    rescue ::WIN32OLERuntimeError => e
      raise_error(e)
    end
  end
end