module BarkestCore::ConnectionAdapterExtensions
Adds some helper methods to connection adapters.
Public Instance Methods
exec_sp(stmt)
click to toggle source
Executes a stored procedure.
For MS SQL Server, this will return the return value from the procedure. For other providers, this is the same as execute
.
# File lib/barkest_core/extensions/active_record_extensions.rb, line 37 def exec_sp(stmt) klass = self.class.name if klass == 'ActiveRecord::ConnectionAdapters::SQLServerAdapter' rex = /^exec(?:ute)?\s+[\["]?(?<PROC>[a-z][a-z0-9_]*)[\]"]?(?<ARGS>\s.*)?$/i match = rex.match(stmt) if match exec_query("DECLARE @RET INTEGER; EXECUTE @RET=[#{match['PROC']}]#{match['ARGS']}; SELECT @RET AS [RET]").first['RET'] else execute stmt end else execute stmt end end
object_exists?(object_name)
click to toggle source
Searches the database to determine if an object with the specified name exists.
# File lib/barkest_core/extensions/active_record_extensions.rb, line 11 def object_exists?(object_name) safe_name = "'#{object_name.gsub('\'','\'\'')}'" klass = self.class.name sql = if klass == 'ActiveRecord::ConnectionAdapters::SQLServerAdapter' # use sysobjects table. "SELECT COUNT(*) AS \"one\" FROM \"sysobjects\" WHERE \"name\"=#{safe_name}" elsif klass == 'ActiveRecord::ConnectionAdapters::SQLite3Adapter' # use sqlite_master table. "SELECT COUNT(*) AS \"one\" FROM \"sqlite_master\" WHERE (\"type\"='table' OR \"type\"='view') AND (\"name\"=#{safe_name})" else # query the information_schema TABLES and ROUTINES views. "SELECT SUM(Z.\"one\") AS \"one\" FROM (SELECT COUNT(*) AS \"one\" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=#{safe_name} UNION SELECT COUNT(*) AS \"one\" FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME=#{safe_name}) AS Z" end result = exec_query(sql).first result && result['one'] >= 1 end