scenic-oracle_adapter 1.3.5 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: deca022db8759f5e92910b10e1c9174717499054ca3d35f3036cc33ee621163c
4
- data.tar.gz: bc8288c1ca2955e36eaa3005ecd2d46458e1efa7038124c076d2b9dc353aa3cd
3
+ metadata.gz: '05291434dbbe227f36a68f3a95c72abc3b7ef75021682fd8c3eced9079d72da1'
4
+ data.tar.gz: c733e61877f321648aa4deb15240322fff153373946c8e6c7bafacd9151c6c12
5
5
  SHA512:
6
- metadata.gz: 530586109add300de30c1752f84ab28f568aa94cc262209a65881c408e3341b79e5f4ebab753b8610adf2c110645602a58442853dc42a67a47787e5e3081ae66
7
- data.tar.gz: f632cc5e34fe412fca3d3dc5255177109bb5e2f2ca71aad84659e1c7ae1dae5dadc600bef3884423803e58d5c1d521f5ed33790e44ac463030a54d7424dd322b
6
+ metadata.gz: 2475872a9d0ecff9cb58229b11a9d60425498471f2397646cfd27b90a2ae5b6dac06a9817430cbd6183187fb9dbde0689121e5c2bfe36c2e317cb01ffe8cb574
7
+ data.tar.gz: e2fdaa37cfd438776f60a6c43f936cc52ee7710e9c5459fcbb14c7bc4e363190421092ec7a34115c3fcae1ab14d2229228ec12d218b86e1883683dec12bf4d6f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.5.0 - October 8, 2025
4
+
5
+ - Inlcude `no_data` information to materialized view definitions in schema.rb
6
+
7
+ ## v1.4.0 - June 30, 2025
8
+
9
+ - Use scenic 1.9.0
10
+ - Reduce churn in schema.rb by topologically sorting dumped views
11
+ - Raise SideBySideNotSupportedError when Scenic's side_by_side mode is attempted
12
+
3
13
  ## v1.3.5 - Oct 9, 2024
4
14
 
5
15
  - Silence ActiveRecord output while running specs. Clean green dots! (@eeklund, @dlagerro)
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ghcr.io/cdinger/oracle-ruby:3.3
1
+ FROM ghcr.io/cdinger/oracle-ruby:3.4
2
2
 
3
3
  RUN mkdir /app
4
4
  WORKDIR /app
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ gem "activerecord-oracle_enhanced-adapter", ">= 1.5.0"
4
4
 
5
5
  # Specify your gem's dependencies in scenic-oracle_adapter.gemspec
6
6
  gemspec
@@ -1,17 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rails/railtie"
4
- require "active_record/connection_adapters/oracle_enhanced_adapter"
5
4
 
6
5
  module Scenic
7
6
  module Adapters
8
7
  class Oracle
9
8
  class Railtie < Rails::Railtie
10
9
  ActiveSupport.on_load(:active_record) do
11
- if defined?(ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper)
12
- ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper.prepend Scenic::SchemaDumper
13
- else
14
- ActiveRecord::ConnectionAdapters::OracleEnhanced::SchemaDumper.prepend Scenic::SchemaDumper
10
+ if Scenic::Adapters::Oracle.uses_oracle_enhanced_adapter?
11
+ require "active_record/connection_adapters/oracle_enhanced_adapter"
12
+
13
+ if defined?(ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper)
14
+ ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper.prepend Scenic::SchemaDumper
15
+ else
16
+ ActiveRecord::ConnectionAdapters::OracleEnhanced::SchemaDumper.prepend Scenic::SchemaDumper
17
+ end
18
+ end
19
+ if Scenic::Adapters::Oracle.uses_oracle_adapter?
20
+ require "active_record/connection_adapters/oracle_adapter"
21
+
22
+ ActiveRecord::ConnectionAdapters::Oracle::SchemaDumper.prepend Scenic::SchemaDumper
15
23
  end
16
24
  end
17
25
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "scenic/view"
4
+
5
+ module Scenic
6
+ module Adapters
7
+ class Oracle
8
+ class View < Scenic::View
9
+ attr_reader :no_data
10
+
11
+ def initialize(name:, definition:, materialized:, no_data: false)
12
+ super(name: name, definition: definition, materialized: materialized)
13
+ @no_data = no_data
14
+ end
15
+
16
+ def to_schema
17
+ materialized_option = if materialized
18
+ if no_data
19
+ "materialized: { no_data: true } , "
20
+ else
21
+ "materialized: true, "
22
+ end
23
+ else
24
+ ""
25
+ end
26
+
27
+ <<-DEFINITION
28
+ create_view #{UnaffixedName.for(name).inspect}, #{materialized_option}sql_definition: <<-\SQL
29
+ #{escaped_definition.indent(2)}
30
+ SQL
31
+ DEFINITION
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -3,12 +3,15 @@
3
3
  require_relative "oracle/index_reapplication"
4
4
  require_relative "oracle/indexes"
5
5
  require_relative "oracle/refresh_dependencies"
6
+ require_relative "oracle/view"
6
7
  require "active_support/core_ext/string/strip"
7
8
  require "tsortable_hash"
8
9
 
9
10
  module Scenic
10
11
  module Adapters
11
12
  class Oracle
13
+ class SideBySideNotSupportedError < StandardError; end
14
+
12
15
  def initialize(connectable = ActiveRecord::Base)
13
16
  @connectable = connectable
14
17
  end
@@ -38,10 +41,14 @@ module Scenic
38
41
  execute("create materialized view #{quote_table_name(name)} #{'build deferred' if no_data} as #{trimmed_definition(definition)}")
39
42
  end
40
43
 
41
- def update_materialized_view(name, definition, no_data: false)
42
- IndexReapplication.new(connection: connection).on(name) do
43
- drop_materialized_view(name)
44
- create_materialized_view(name, definition, no_data: no_data)
44
+ def update_materialized_view(name, definition, no_data: false, side_by_side: false)
45
+ if side_by_side
46
+ raise SideBySideNotSupportedError.new("Renaming materialized view is not supported in Oracle")
47
+ else
48
+ IndexReapplication.new(connection: connection).on(name) do
49
+ drop_materialized_view(name)
50
+ create_materialized_view(name, definition, no_data: no_data)
51
+ end
45
52
  end
46
53
  end
47
54
 
@@ -67,6 +74,18 @@ module Scenic
67
74
  delegate :connection, to: :@connectable
68
75
  delegate :select_all, :select_value, :execute, :quote_table_name, to: :connection
69
76
 
77
+ def self.file_exists_in_load_path?(filename)
78
+ $LOAD_PATH.any? { |path| File.exist?(File.join(path, filename)) }
79
+ end
80
+
81
+ def self.uses_oracle_enhanced_adapter?
82
+ file_exists_in_load_path?("active_record/connection_adapters/oracle_enhanced_adapter.rb")
83
+ end
84
+
85
+ def self.uses_oracle_adapter?
86
+ file_exists_in_load_path?("active_record/connection_adapters/oracle_adapter.rb")
87
+ end
88
+
70
89
  private
71
90
 
72
91
  def view_dependencies
@@ -120,13 +139,13 @@ module Scenic
120
139
 
121
140
  def all_views
122
141
  select_all("select lower(view_name) name, text definition from user_views").map do |view|
123
- Scenic::View.new(name: view["name"], definition: view["definition"], materialized: false)
142
+ Scenic::Adapters::Oracle::View.new(name: view["name"], definition: view["definition"], materialized: false)
124
143
  end
125
144
  end
126
145
 
127
146
  def all_mviews
128
- select_all("select lower(mview_name) as name, query as definition from user_mviews").map do |view|
129
- Scenic::View.new(name: view["name"], definition: view["definition"], materialized: true)
147
+ select_all("select lower(mview_name) as name, query as definition, build_mode from user_mviews").map do |view|
148
+ Scenic::Adapters::Oracle::View.new(name: view["name"], definition: view["definition"], materialized: true, no_data: view["build_mode"] == "DEFERRED")
130
149
  end
131
150
  end
132
151
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scenic
4
4
  module OracleAdapter
5
- VERSION = "1.3.5"
5
+ VERSION = "1.5.0"
6
6
  end
7
7
  end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_record"
4
+ # Require tsort here before scenic to avoid:
5
+ # uninitialized constant Scenic::Adapters::Postgres::Views::TSortableHash::TSort
6
+ require "tsort"
4
7
  require "scenic"
5
8
  require "scenic/oracle_adapter/version"
6
9
  require "scenic/adapters/oracle"
@@ -22,8 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency "scenic", "= 1.8.0"
26
- spec.add_dependency "activerecord-oracle_enhanced-adapter", ">= 1.5.0"
25
+ spec.add_dependency "scenic", "= 1.9.0"
27
26
 
28
27
  spec.add_development_dependency "bundler", "~> 2.0"
29
28
  spec.add_development_dependency "rake", ">= 12.3.3"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scenic-oracle_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.5
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Dinger
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-10-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: scenic
@@ -16,28 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - '='
18
17
  - !ruby/object:Gem::Version
19
- version: 1.8.0
18
+ version: 1.9.0
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - '='
25
24
  - !ruby/object:Gem::Version
26
- version: 1.8.0
27
- - !ruby/object:Gem::Dependency
28
- name: activerecord-oracle_enhanced-adapter
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.5.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 1.5.0
25
+ version: 1.9.0
41
26
  - !ruby/object:Gem::Dependency
42
27
  name: bundler
43
28
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +93,6 @@ dependencies:
108
93
  - - "~>"
109
94
  - !ruby/object:Gem::Version
110
95
  version: '2.2'
111
- description:
112
96
  email:
113
97
  - chris@houseofding.com
114
98
  executables: []
@@ -136,6 +120,7 @@ files:
136
120
  - lib/scenic/adapters/oracle/indexes.rb
137
121
  - lib/scenic/adapters/oracle/railtie.rb
138
122
  - lib/scenic/adapters/oracle/refresh_dependencies.rb
123
+ - lib/scenic/adapters/oracle/view.rb
139
124
  - lib/scenic/oracle_adapter.rb
140
125
  - lib/scenic/oracle_adapter/version.rb
141
126
  - lib/tsortable_hash.rb
@@ -144,7 +129,6 @@ homepage: https://github.com/cdinger/scenic-oracle_adapter
144
129
  licenses:
145
130
  - MIT
146
131
  metadata: {}
147
- post_install_message:
148
132
  rdoc_options: []
149
133
  require_paths:
150
134
  - lib
@@ -159,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
143
  - !ruby/object:Gem::Version
160
144
  version: '0'
161
145
  requirements: []
162
- rubygems_version: 3.5.17
163
- signing_key:
146
+ rubygems_version: 3.6.9
164
147
  specification_version: 4
165
148
  summary: Oracle adapter for thoughtbot/scenic
166
149
  test_files: []