Skip to content
This repository has been archived by the owner on May 21, 2024. It is now read-only.

added Mysql2 adapter #8

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/rails_sql_views.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#++

$:.unshift(File.dirname(__FILE__))
ActiveSupport::Dependencies.autoload_paths.unshift File.expand_path("../../lib", __FILE__)

require 'active_record'

Expand Down
76 changes: 76 additions & 0 deletions lib/rails_sql_views/connection_adapters/mysql2_adapter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
module RailsSqlViews
module ConnectionAdapters
module Mysql2Adapter
def self.included(base)
if base.private_method_defined?(:supports_views?)
base.send(:public, :supports_views?)
end
end

# Returns true as this adapter supports views.
def supports_views?
true
end

def base_tables(name = nil, database = nil, like = nil) #:nodoc:
sql = "SHOW FULL TABLES "
sql << "IN #{quote_table_name(database)} " if database

if database && like
sql << "WHERE TABLE_TYPE='BASE TABLE' "
c = "TABLES_IN_#{database.upcase}"
sql << "AND #{quote_table_name(c)} LIKE #{quote(like)}"
elsif like
sql << "LIKE #{quote(like)}"
else
sql << "WHERE TABLE_TYPE='BASE TABLE' "
end

execute_and_free(sql, 'SCHEMA') do |result|
result = result.select {|field| field.last == 'BASE TABLE' } unless database
result.collect { |field| field.first }
end
end
alias nonview_tables base_tables

def views(name = nil) #:nodoc:
views = []
execute("SHOW FULL TABLES WHERE TABLE_TYPE='VIEW'").each{|row| views << row[0]}
views
end

def tables_with_views_included(name = nil)
nonview_tables(name) + views(name)
end

def structure_dump
structure = ""
base_tables.each do |table|
structure += select_one("SHOW CREATE TABLE #{quote_table_name(table)}")["Create Table"] + ";\n\n"
end

views.each do |view|
structure += select_one("SHOW CREATE VIEW #{quote_table_name(view)}")["Create View"] + ";\n\n"
end

return structure
end

# Get the view select statement for the specified table.
def view_select_statement(view, name=nil)
begin
row = execute("SHOW CREATE VIEW #{view}", name).each do |row|
return convert_statement(row[1]) if row[0] == view
end
rescue ActiveRecord::StatementInvalid => e
raise "No view called #{view} found"
end
end

private
def convert_statement(s)
s.gsub!(/.* AS (select .*)/, '\1')
end
end
end
end
2 changes: 1 addition & 1 deletion lib/rails_sql_views/loader.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

module RailsSqlViews
module Loader
SUPPORTED_ADAPTERS = %w( Mysql PostgreSQL SQLServer SQLite OracleEnhanced )
SUPPORTED_ADAPTERS = %w( Mysql Mysql2 PostgreSQL SQLServer SQLite OracleEnhanced )

def self.load_extensions
SUPPORTED_ADAPTERS.each do |db|
Expand Down
2 changes: 1 addition & 1 deletion lib/rails_sql_views/schema_dumper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def trailer_with_views(stream)
def dump_with_views(stream)
dump_without_views(stream)
begin
if @connection.supports_views?
if @connection.send(:supports_views?)
views(stream)
end
rescue => e
Expand Down
1 change: 1 addition & 0 deletions rails_sql_views.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Gem::Specification.new do |s|
"lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb",
"lib/rails_sql_views/connection_adapters/abstract_adapter.rb",
"lib/rails_sql_views/connection_adapters/mysql_adapter.rb",
"lib/rails_sql_views/connection_adapters/mysql2_adapter.rb",
"lib/rails_sql_views/connection_adapters/oci_adapter.rb",
"lib/rails_sql_views/connection_adapters/oracle_adapter.rb",
"lib/rails_sql_views/connection_adapters/oracleenhanced_adapter.rb",
Expand Down