Module: Incline::Extensions::ConnectionAdapter
- Defined in:
- lib/incline/extensions/connection_adapter.rb
Overview
Adds some extra functionality to database connections.
Instance Method Summary collapse
-
#exec_sp(stmt) ⇒ Object
Executes a stored procedure.
-
#object_exists?(object_name) ⇒ Boolean
Searches the database to determine if an object with the specified name exists.
Instance Method Details
#exec_sp(stmt) ⇒ Object
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
.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# 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) ⇒ Boolean
Searches the database to determine if an object with the specified name exists.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# 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 |