diff --git a/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb b/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb new file mode 100644 index 0000000..ecdb334 --- /dev/null +++ b/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb @@ -0,0 +1,62 @@ +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) #:nodoc: + tables = [] + execute("SHOW FULL TABLES WHERE TABLE_TYPE='BASE TABLE'").each{|row| tables << row[0]} + tables + 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 diff --git a/lib/rails_sql_views/loader.rb b/lib/rails_sql_views/loader.rb index 7c85018..2db2821 100644 --- a/lib/rails_sql_views/loader.rb +++ b/lib/rails_sql_views/loader.rb @@ -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|