Skip to content

Commit

Permalink
Use native affected rows and scope identity.
Browse files Browse the repository at this point in the history
  • Loading branch information
metaskills committed Oct 17, 2010
1 parent c902bc4 commit 8380c4b
Showing 1 changed file with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ def select_rows(sql, name = nil)
end

def execute(sql, name = nil, skip_logging = false)
if table_name = query_requires_identity_insert?(sql)
with_identity_insert_enabled(table_name) { do_execute(sql,name) }
if id_insert_table_name = query_requires_identity_insert?(sql)
with_identity_insert_enabled(id_insert_table_name) { do_execute(sql,name) }
else
do_execute(sql,name)
end
Expand Down Expand Up @@ -187,12 +187,24 @@ def select(sql, name = nil)
end

def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
super || select_value("SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident")
@insert_sql = true
case @connection_options[:mode]
when :dblib
execute(sql, name) || id_value
else
super || select_value("SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident")
end
end

def update_sql(sql, name = nil)
execute(sql, name)
select_value('SELECT @@ROWCOUNT AS AffectedRows')
@update_sql = true
case @connection_options[:mode]
when :dblib
execute(sql, name)
else
execute(sql, name)
select_value('SELECT @@ROWCOUNT AS AffectedRows')
end
end

# === SQLServer Specific ======================================== #
Expand All @@ -213,12 +225,15 @@ def do_execute(sql, name = nil)
def raw_connection_do(sql)
case @connection_options[:mode]
when :dblib
@connection.execute(sql).do
@insert_sql ? @connection.execute(sql).insert : @connection.execute(sql).do
when :odbc
@connection.do(sql)
else :adonet
@connection.create_command.tap{ |cmd| cmd.command_text = sql }.execute_non_query
end
ensure
@insert_sql = false
@update_sql = false
end

# === SQLServer Specific (Selecting) ============================ #
Expand Down

0 comments on commit 8380c4b

Please sign in to comment.