module Incline::Extensions::ConnectionAdapter
Adds some extra functionality to database connections.
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/incline/extensions/connection_adapter.rb, line 36 def exec_sp(stmt) case self.class.name when '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 @SP__RET INTEGER; EXECUTE @SP__RET=[#{match['PROC']}]#{match['ARGS']}; SELECT @SP__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/incline/extensions/connection_adapter.rb, line 10 def object_exists?(object_name) safe_name = "'#{object_name.gsub('\'','\'\'')}'" sql = case self.class.name when 'ActiveRecord::ConnectionAdapters::SQLServerAdapter' # use sysobjects table. "SELECT COUNT(*) AS \"one\" FROM \"sysobjects\" WHERE \"name\"=#{safe_name}" when '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