From e7c2afeea20c369784b59d4e572fbc4ca499c666 Mon Sep 17 00:00:00 2001 From: Christian Eichhorn Date: Wed, 17 Nov 2010 16:10:08 +0100 Subject: [PATCH 1/5] added Mysql2 adapter --- .../connection_adapters/mysql2_adapter.rb | 62 +++++++++++++++++++ lib/rails_sql_views/loader.rb | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 lib/rails_sql_views/connection_adapters/mysql2_adapter.rb 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..6a0fac0 --- /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| From 761191d3863ad9f2c32f3d49921e48bc7f1374db Mon Sep 17 00:00:00 2001 From: Christian Eichhorn Date: Wed, 6 Nov 2013 11:58:45 +0100 Subject: [PATCH 2/5] * Support for Rails 3 * automload paths --- lib/rails_sql_views.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rails_sql_views.rb b/lib/rails_sql_views.rb index 7850b3b..477e9ac 100644 --- a/lib/rails_sql_views.rb +++ b/lib/rails_sql_views.rb @@ -22,6 +22,7 @@ #++ $:.unshift(File.dirname(__FILE__)) +ActiveSupport::Dependencies.autoload_paths.unshift File.expand_path("../../lib", __FILE__) require 'active_record' From c5e8253fcdc8fd102a0e8e36d6e3af4279aa8198 Mon Sep 17 00:00:00 2001 From: Christian Eichhorn Date: Tue, 19 Nov 2013 11:07:09 +0100 Subject: [PATCH 3/5] * SchemaDump for Rails3 --- lib/rails_sql_views/schema_dumper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_sql_views/schema_dumper.rb b/lib/rails_sql_views/schema_dumper.rb index 612e67f..d0b0be8 100644 --- a/lib/rails_sql_views/schema_dumper.rb +++ b/lib/rails_sql_views/schema_dumper.rb @@ -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 From f853a60f2aaea8079b102bad6125889084082c50 Mon Sep 17 00:00:00 2001 From: Christian Eichhorn Date: Thu, 10 Apr 2014 15:14:43 +0200 Subject: [PATCH 4/5] * gemspec fixed --- rails_sql_views.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/rails_sql_views.gemspec b/rails_sql_views.gemspec index 31f742d..60d331f 100644 --- a/rails_sql_views.gemspec +++ b/rails_sql_views.gemspec @@ -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", From 785521ab6fd8912af5818ab724cb044d232ce6c5 Mon Sep 17 00:00:00 2001 From: Christian Eichhorn Date: Thu, 10 Apr 2014 16:08:05 +0200 Subject: [PATCH 5/5] * Method base_tables fixed --- .../connection_adapters/mysql2_adapter.rb | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb b/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb index 6a0fac0..cd8a405 100644 --- a/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb +++ b/lib/rails_sql_views/connection_adapters/mysql2_adapter.rb @@ -12,10 +12,24 @@ 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 + 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