sql_view 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/lib/generators/sql_view/view/view_generator.rb +11 -5
- data/lib/sql_view/schema_dumper.rb +19 -11
- data/lib/sql_view/version.rb +1 -1
- data/lib/sql_view.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a7a2e1de23dc9d9523bfc1d6f0dfe65348a085ba81a0c5fc762d6ce64d0236e
|
4
|
+
data.tar.gz: 32f417176adaa3a7f1c65ca7bfb405d63236d0979bafd0fd106562bac018f68f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b32c1f94077eba3876764860bc3bc87fdd3e49386747f668d0682ebd3a87fe0417e48c48618d8f0c46040fcf43d20e0d114f3c955b0abea82591e478f7b91d9
|
7
|
+
data.tar.gz: f4a3534cc2cd8ba5e52156ddedda64a5d9d7016018ff28fca8f107291febdb5456001d8bef82c6f25c70f2ef0c8255d391223db1f1803be1f96f38ace3772505
|
@@ -14,11 +14,13 @@ module SqlView
|
|
14
14
|
class #{class_name}View < SqlView::Model
|
15
15
|
#{top_code}
|
16
16
|
|
17
|
-
schema ->
|
17
|
+
schema -> #{schema_code}
|
18
18
|
|
19
19
|
extend_model_with do
|
20
20
|
# sample how you can extend it, similar to regular AR model
|
21
21
|
#
|
22
|
+
# include SomeConcern
|
23
|
+
#
|
22
24
|
# belongs_to :user
|
23
25
|
# has_many :posts
|
24
26
|
#
|
@@ -28,7 +30,7 @@ class #{class_name}View < SqlView::Model
|
|
28
30
|
end
|
29
31
|
FILE
|
30
32
|
|
31
|
-
create_file "db/migrate/#{self.class.next_migration_number("db/migrate")}_create_#{file_name}
|
33
|
+
create_file "db/migrate/#{self.class.next_migration_number("db/migrate")}_create_#{file_name}_view.rb", <<-FILE
|
32
34
|
class #{migration_class_name} < #{activerecord_migration_class}
|
33
35
|
def up
|
34
36
|
#{class_name}View.sql_view.up
|
@@ -59,11 +61,15 @@ FILE
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def schema_code
|
62
|
-
|
64
|
+
if args[0].present?
|
65
|
+
"{ #{args[0]} }"
|
66
|
+
else
|
67
|
+
" { #{ "\n # ActiveRecord::Relation or SQL\n # for example: User.where(active: true)\n }" }"
|
68
|
+
end
|
63
69
|
end
|
64
70
|
|
65
71
|
def migration_class_name
|
66
|
-
"Create#{class_name.tr('.', '')
|
72
|
+
"Create#{class_name.tr('.', '')}View"
|
67
73
|
end
|
68
74
|
|
69
75
|
def activerecord_migration_class
|
@@ -85,4 +91,4 @@ FILE
|
|
85
91
|
|
86
92
|
end
|
87
93
|
end
|
88
|
-
end
|
94
|
+
end
|
@@ -6,7 +6,16 @@ module SqlView
|
|
6
6
|
# @api private
|
7
7
|
module SchemaDumper
|
8
8
|
class DBView < OpenStruct
|
9
|
+
def to_schema
|
10
|
+
<<-DEFINITION
|
11
|
+
create_sql_view "#{self.viewname}", sql: <<-\SQL
|
12
|
+
CREATE #{materialized_or_not} VIEW "#{self.viewname}" AS
|
13
|
+
#{escaped_definition.indent(2)}
|
14
|
+
SQL\n
|
15
|
+
DEFINITION
|
16
|
+
end
|
9
17
|
|
18
|
+
private
|
10
19
|
def materialized?
|
11
20
|
self.kind == "m"
|
12
21
|
end
|
@@ -15,15 +24,6 @@ module SqlView
|
|
15
24
|
materialized? ? " MATERIALIZED " : nil
|
16
25
|
end
|
17
26
|
|
18
|
-
def to_schema
|
19
|
-
<<-DEFINITION
|
20
|
-
create_sql_view "#{self.viewname}", sql: <<-\SQL
|
21
|
-
CREATE #{materialized_or_not} VIEW "#{self.viewname}" AS
|
22
|
-
#{escaped_definition.indent(2)}
|
23
|
-
SQL
|
24
|
-
DEFINITION
|
25
|
-
end
|
26
|
-
|
27
27
|
def escaped_definition
|
28
28
|
definition.gsub("\\", "\\\\\\")
|
29
29
|
end
|
@@ -40,15 +40,23 @@ module SqlView
|
|
40
40
|
end
|
41
41
|
|
42
42
|
dumpable_views_in_database.each do |viewname|
|
43
|
+
next if already_indexed?(viewname)
|
43
44
|
view = DBView.new(get_view_info(viewname))
|
44
|
-
#puts view.to_schema
|
45
45
|
stream.puts(view.to_schema)
|
46
|
-
|
46
|
+
indexes(viewname, stream)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
+
# make sure view was added one time, because somehow was adding views two times
|
53
|
+
def already_indexed?(viewname)
|
54
|
+
@already_indexed ||= []
|
55
|
+
return true if @already_indexed.include?(viewname)
|
56
|
+
@already_indexed << viewname
|
57
|
+
false
|
58
|
+
end
|
59
|
+
|
52
60
|
def dumpable_views_in_database
|
53
61
|
@dumpable_views_in_database ||= ActiveRecord::Base.connection.views.reject do |viewname|
|
54
62
|
ignored?(viewname)
|
data/lib/sql_view/version.rb
CHANGED
data/lib/sql_view.rb
CHANGED
@@ -64,6 +64,7 @@ module SqlView
|
|
64
64
|
|
65
65
|
def up
|
66
66
|
view_sql = parent.sql_view_options[:sql_or_proc].call
|
67
|
+
raise "Please configure schema for #{parent} (association or SQL) for the view" if view_sql.to_s == ""
|
67
68
|
sql = <<-SQL
|
68
69
|
CREATE #{materialized_or_not} VIEW #{parent.view_name} AS
|
69
70
|
#{view_sql.respond_to?(:to_sql) ? view_sql.to_sql : view_sql };
|
@@ -103,6 +104,13 @@ module SqlView
|
|
103
104
|
if parent.sql_view_options[:extend_model_with].present?
|
104
105
|
klass.class_eval(&parent.sql_view_options[:extend_model_with])
|
105
106
|
end
|
107
|
+
# to use e.associations.count for example
|
108
|
+
# because of the error undefined scan for nil class
|
109
|
+
klass.class_eval %Q{
|
110
|
+
def self.name
|
111
|
+
"#{parent.class}"
|
112
|
+
end
|
113
|
+
}
|
106
114
|
klass
|
107
115
|
end
|
108
116
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sql_view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|