rails_sql_views 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +10 -2
- data/Rakefile +2 -1
- data/lib/rails_sql_views.rb +7 -2
- data/lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb +38 -0
- data/lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb +20 -0
- data/lib/rails_sql_views/connection_adapters/oci_adapter.rb +32 -0
- data/lib/rails_sql_views/connection_adapters/oracle_adapter.rb +32 -0
- data/lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb +36 -0
- data/lib/rails_sql_views/version.rb +2 -2
- metadata +21 -9
data/CHANGELOG
CHANGED
@@ -2,5 +2,13 @@
|
|
2
2
|
* Initial release
|
3
3
|
|
4
4
|
0.5.0 - Released Dec 29, 2006
|
5
|
-
* Added support for PostgreSQL
|
6
|
-
* Fixed the schema dumper
|
5
|
+
* Added support for PostgreSQL (Michael Schuerig)
|
6
|
+
* Fixed the schema dumper
|
7
|
+
|
8
|
+
0.5.1 - Released Jan 10, 2006
|
9
|
+
* Patch by Clifford T. Matthews to use String.dump to dump out the view select statement
|
10
|
+
|
11
|
+
0.6.0 -
|
12
|
+
* Added support for SQL Server (Seth Ladd)-
|
13
|
+
* Added support for using views to map non-friendly database field names to AR-friendly names (Nathan Vack)
|
14
|
+
* Added support for Oracle (Alistair Davidson)
|
data/Rakefile
CHANGED
@@ -53,7 +53,8 @@ spec = Gem::Specification.new do |s|
|
|
53
53
|
Library which adds SQL Views to Rails.
|
54
54
|
EOF
|
55
55
|
|
56
|
-
s.add_dependency('activerecord',
|
56
|
+
s.add_dependency('activerecord', '>= 1.14.4')
|
57
|
+
s.add_dependency('rake', '>= 0.7.1')
|
57
58
|
|
58
59
|
s.rdoc_options << '--exclude' << '.'
|
59
60
|
s.has_rdoc = false
|
data/lib/rails_sql_views.rb
CHANGED
@@ -24,13 +24,17 @@
|
|
24
24
|
$:.unshift(File.dirname(__FILE__)) unless
|
25
25
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
26
26
|
|
27
|
+
require 'rubygems'
|
28
|
+
unless Kernel.respond_to?(:gem)
|
29
|
+
Kernel.send :alias_method, :gem, :require_gem
|
30
|
+
end
|
31
|
+
|
27
32
|
unless defined?(ActiveRecord)
|
28
33
|
begin
|
29
34
|
$:.unshift(File.dirname(__FILE__) + "/../../activerecord/lib")
|
30
35
|
require 'active_record'
|
31
36
|
rescue LoadError
|
32
|
-
|
33
|
-
require_gem 'activerecord'
|
37
|
+
gem 'activerecord'
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
@@ -40,6 +44,7 @@ require 'rails_sql_views/connection_adapters/abstract/schema_definitions'
|
|
40
44
|
require 'rails_sql_views/connection_adapters/abstract/schema_statements'
|
41
45
|
require 'rails_sql_views/connection_adapters/mysql_adapter'
|
42
46
|
require 'rails_sql_views/connection_adapters/postgresql_adapter'
|
47
|
+
require 'rails_sql_views/connection_adapters/sqlserver_adapter'
|
43
48
|
require 'rails_sql_views/schema_dumper'
|
44
49
|
|
45
50
|
class ActiveRecord::ConnectionAdapters::AbstractAdapter
|
@@ -25,5 +25,43 @@ module RailsSqlViews
|
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
28
|
+
|
29
|
+
class MappingDefinition
|
30
|
+
|
31
|
+
# Generates a hash of the form :old_column => :new_column
|
32
|
+
# Initially, it'll map column names to themselves.
|
33
|
+
# use map_column to modify the list.
|
34
|
+
def initialize(columns)
|
35
|
+
@columns = columns
|
36
|
+
@map = Hash.new()
|
37
|
+
columns.each do |c|
|
38
|
+
@map[c] = c
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create a mapping from an old column name to a new one.
|
44
|
+
# If the new name is nil, specify that the old column shouldn't
|
45
|
+
# appear in this new view.
|
46
|
+
def map_column(old_name, new_name)
|
47
|
+
unless @map.include?(old_name)
|
48
|
+
raise ActiveRecord::ActiveRecordError, "column #{old_name} not found, can't be mapped"
|
49
|
+
end
|
50
|
+
if new_name.nil?
|
51
|
+
@map.delete old_name
|
52
|
+
@columns.delete old_name
|
53
|
+
else
|
54
|
+
@map[old_name] = new_name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def select_cols
|
59
|
+
@columns
|
60
|
+
end
|
61
|
+
|
62
|
+
def view_cols
|
63
|
+
@columns.map { |c| @map[c] }
|
64
|
+
end
|
65
|
+
end
|
28
66
|
end
|
29
67
|
end
|
@@ -24,6 +24,26 @@ module RailsSqlViews
|
|
24
24
|
execute create_sql
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
# Also creates a view, with the specific purpose of remapping column names
|
29
|
+
# to make non-ActiveRecord tables friendly with the naming
|
30
|
+
# conventions, while maintaining legacy app compatibility.
|
31
|
+
def create_mapping_view(old_name, new_name, options = {})
|
32
|
+
return unless supports_views?
|
33
|
+
|
34
|
+
col_names = columns(old_name).collect { |col| col.name.to_sym }
|
35
|
+
mapper = MappingDefinition.new(col_names)
|
36
|
+
|
37
|
+
yield mapper
|
38
|
+
|
39
|
+
if options[:force]
|
40
|
+
drop_view(new_name) rescue nil
|
41
|
+
end
|
42
|
+
|
43
|
+
view_sql = "CREATE VIEW #{new_name} (#{mapper.view_cols.join(', ')}) "
|
44
|
+
view_sql << "AS SELECT #{mapper.select_cols.join(', ')} FROM #{old_name}"
|
45
|
+
execute view_sql
|
46
|
+
end
|
27
47
|
|
28
48
|
# Drop a view.
|
29
49
|
# The +options+ hash can include the following keys:
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
class OciAdapter
|
4
|
+
# Returns true as this adapter supports views.
|
5
|
+
def supports_views?
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
def tables(name = nil) #:nodoc:
|
10
|
+
tables = []
|
11
|
+
execute("SELECT TABLE_NAME FROM USER_TABLES", name).each { |row| tables << row[0] }
|
12
|
+
tables
|
13
|
+
end
|
14
|
+
|
15
|
+
def views(name = nil) #:nodoc:
|
16
|
+
views = []
|
17
|
+
execute("SELECT VIEW_NAME FROM USER_VIEWS", name).each { |row| views << row[0] }
|
18
|
+
views
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the view select statement for the specified table.
|
22
|
+
def view_select_statement(view, name=nil)
|
23
|
+
row = execute("SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME = '#{view}'", name).each do |row|
|
24
|
+
return row[0]
|
25
|
+
end
|
26
|
+
raise "No view called #{view} found"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
class OracleAdapter
|
4
|
+
# Returns true as this adapter supports views.
|
5
|
+
def supports_views?
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
def tables(name = nil) #:nodoc:
|
10
|
+
tables = []
|
11
|
+
execute("SELECT TABLE_NAME FROM USER_TABLES", name).each { |row| tables << row[0] }
|
12
|
+
tables
|
13
|
+
end
|
14
|
+
|
15
|
+
def views(name = nil) #:nodoc:
|
16
|
+
views = []
|
17
|
+
execute("SELECT VIEW_NAME FROM USER_VIEWS", name).each { |row| views << row[0] }
|
18
|
+
views
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the view select statement for the specified table.
|
22
|
+
def view_select_statement(view, name=nil)
|
23
|
+
row = execute("SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME = '#{view}'", name).each do |row|
|
24
|
+
return row[0]
|
25
|
+
end
|
26
|
+
raise "No view called #{view} found"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
class SQLServerAdapter
|
4
|
+
# Returns true as this adapter supports views.
|
5
|
+
def supports_views?
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns all the view names from the currently connected schema.
|
10
|
+
def views(name = nil)
|
11
|
+
select_values("SELECT table_name FROM information_schema.views", name)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Get the view select statement for the specified view.
|
15
|
+
def view_select_statement(view, name=nil)
|
16
|
+
q =<<-ENDSQL
|
17
|
+
SELECT view_definition FROM information_schema.views
|
18
|
+
WHERE table_name = '#{view}'
|
19
|
+
ENDSQL
|
20
|
+
|
21
|
+
view_def = select_value(q, name)
|
22
|
+
|
23
|
+
if view_def
|
24
|
+
return convert_statement(view_def)
|
25
|
+
else
|
26
|
+
raise "No view called #{view} found"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def convert_statement(s)
|
32
|
+
s.sub(/^CREATE.* AS (select .*)/, '\1').gsub(/\n/, '')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: rails_sql_views
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.6.0
|
7
|
+
date: 2007-05-09 00:00:00 -04:00
|
8
8
|
summary: Adds SQL Views to Rails.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,18 +33,21 @@ files:
|
|
33
33
|
- README
|
34
34
|
- Rakefile
|
35
35
|
- lib/core_ext
|
36
|
-
- lib/rails_sql_views
|
37
|
-
- lib/rails_sql_views.rb
|
38
36
|
- lib/core_ext/module.rb
|
37
|
+
- lib/rails_sql_views
|
39
38
|
- lib/rails_sql_views/connection_adapters
|
40
|
-
- lib/rails_sql_views/schema_dumper.rb
|
41
|
-
- lib/rails_sql_views/version.rb
|
42
39
|
- lib/rails_sql_views/connection_adapters/abstract
|
40
|
+
- lib/rails_sql_views/connection_adapters/abstract/schema_definitions.rb
|
41
|
+
- lib/rails_sql_views/connection_adapters/abstract/schema_statements.rb
|
43
42
|
- lib/rails_sql_views/connection_adapters/abstract_adapter.rb
|
44
43
|
- lib/rails_sql_views/connection_adapters/mysql_adapter.rb
|
44
|
+
- lib/rails_sql_views/connection_adapters/oci_adapter.rb
|
45
|
+
- lib/rails_sql_views/connection_adapters/oracle_adapter.rb
|
45
46
|
- lib/rails_sql_views/connection_adapters/postgresql_adapter.rb
|
46
|
-
- lib/rails_sql_views/connection_adapters/
|
47
|
-
- lib/rails_sql_views/
|
47
|
+
- lib/rails_sql_views/connection_adapters/sqlserver_adapter.rb
|
48
|
+
- lib/rails_sql_views/schema_dumper.rb
|
49
|
+
- lib/rails_sql_views/version.rb
|
50
|
+
- lib/rails_sql_views.rb
|
48
51
|
test_files: []
|
49
52
|
|
50
53
|
rdoc_options:
|
@@ -68,3 +71,12 @@ dependencies:
|
|
68
71
|
- !ruby/object:Gem::Version
|
69
72
|
version: 1.14.4
|
70
73
|
version:
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: rake
|
76
|
+
version_requirement:
|
77
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.7.1
|
82
|
+
version:
|