scenic-oracle_adapter 1.2.2 → 1.3.1
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/.github/workflows/ci.yml +0 -5
- data/Dockerfile +1 -13
- data/README.md +5 -5
- data/docker-compose.yml +1 -5
- data/lib/scenic/adapters/oracle.rb +34 -2
- data/lib/scenic/oracle_adapter/version.rb +1 -1
- data/lib/tsortable_hash.rb +10 -0
- data/scenic-oracle_adapter.gemspec +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d9bb94f1cec86d7abe41786c15d0bac531eef9b082099f8d4d498f0dee898a8
|
4
|
+
data.tar.gz: 3e2131ed37270bb8f39f8e7bdb67d82561461f266a59fa9387824282620f31d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a44e897ba0001c0e8f293c13648bf6062ac06d3980211515058ef80e1a4651a583434560d00420fcb4021d6953216ba0cda670378c0787bb4d6a259c46846b3a
|
7
|
+
data.tar.gz: 31c7ed943ce55a201b589da0c08cfa04cb6a27ee05dce313a7d5f229949973c997e4ee88e17f58ef936509ca9edca97b23754d722472db6361bb589b44ee98d7
|
data/.github/workflows/ci.yml
CHANGED
@@ -12,10 +12,5 @@ jobs:
|
|
12
12
|
|
13
13
|
steps:
|
14
14
|
- uses: actions/checkout@v2
|
15
|
-
- name: Login to Docker Hub
|
16
|
-
uses: docker/login-action@v1
|
17
|
-
with:
|
18
|
-
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
19
|
-
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
20
15
|
- name: Run tests
|
21
16
|
run: docker-compose run gem rspec
|
data/Dockerfile
CHANGED
@@ -1,16 +1,4 @@
|
|
1
|
-
FROM
|
2
|
-
|
3
|
-
RUN curl -sLO 'https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-basic-linux.x64-19.6.0.0.0dbru.zip' && \
|
4
|
-
curl -sLO 'https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-sdk-linux.x64-19.6.0.0.0dbru.zip' && \
|
5
|
-
unzip instantclient-basic-linux.x64-19.6.0.0.0dbru.zip && \
|
6
|
-
unzip instantclient-sdk-linux.x64-19.6.0.0.0dbru.zip && \
|
7
|
-
rm instantclient-basic-linux.x64-19.6.0.0.0dbru.zip && \
|
8
|
-
rm instantclient-sdk-linux.x64-19.6.0.0.0dbru.zip
|
9
|
-
|
10
|
-
RUN apt update && \
|
11
|
-
apt-get install libaio1
|
12
|
-
|
13
|
-
ENV LD_LIBRARY_PATH /instantclient_19_6:$LD_LIBRARY_PATH
|
1
|
+
FROM ghcr.io/cdinger/oracle-ruby:3.3
|
14
2
|
|
15
3
|
RUN mkdir /app
|
16
4
|
WORKDIR /app
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# scenic-oracle_adapter
|
1
|
+
# scenic-oracle_adapter
|
2
2
|
|
3
3
|
An Oracle adapter for the [scenic](https://github.com/scenic-views/scenic) rubygem.
|
4
4
|
|
@@ -26,12 +26,12 @@ end
|
|
26
26
|
|
27
27
|
## Development
|
28
28
|
|
29
|
-
While you can use any Oracle instance for development, it's easiest to use Docker and docker
|
29
|
+
While you can use any Oracle instance for development, it's easiest to use Docker and docker compose.
|
30
30
|
|
31
|
-
Note that the Oracle container takes up to two minutes to start and become available. If you're doing active development you probably want to start the containers in detached mode: `docker-compose up -d`. This starts everything in the background and allows you to use `docker
|
31
|
+
Note that the Oracle container takes up to two minutes to start and become available. If you're doing active development you probably want to start the containers in detached mode: `docker-compose up -d`. This starts everything in the background and allows you to use `docker compose exec` to run commands on the already running containers:
|
32
32
|
|
33
|
-
- Run specs: `docker
|
34
|
-
- Open a console: `docker
|
33
|
+
- Run specs: `docker compose exec gem bin/test`
|
34
|
+
- Open a console: `docker compose exec gem bin/console`
|
35
35
|
|
36
36
|
## Tests
|
37
37
|
|
data/docker-compose.yml
CHANGED
@@ -1,20 +1,16 @@
|
|
1
|
-
version: '3'
|
2
1
|
services:
|
3
2
|
db:
|
4
|
-
image:
|
3
|
+
image: ghcr.io/cdinger/oracle:19.3.0-ee
|
5
4
|
volumes:
|
6
5
|
- db:/opt/oracle/oradata
|
7
6
|
environment:
|
8
7
|
- ORACLE_PWD=thisisonlyusedlocally
|
9
8
|
ports:
|
10
9
|
- "127.0.0.1:1521:1521"
|
11
|
-
- "127.0.0.1:5500:5500"
|
12
10
|
gem:
|
13
11
|
build: .
|
14
12
|
volumes:
|
15
13
|
- .:/app
|
16
|
-
environment:
|
17
|
-
- TERM=dumb
|
18
14
|
stdin_open: true
|
19
15
|
tty: true
|
20
16
|
depends_on:
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative "oracle/index_reapplication"
|
4
4
|
require_relative "oracle/indexes"
|
5
5
|
require_relative "oracle/refresh_dependencies"
|
6
|
+
require "tsortable_hash"
|
6
7
|
|
7
8
|
module Scenic
|
8
9
|
module Adapters
|
@@ -12,7 +13,9 @@ module Scenic
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def views
|
15
|
-
|
16
|
+
all_view_objects.sort_by do |view_object|
|
17
|
+
dependency_order.index(view_object.name)
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
def create_view(name, definition)
|
@@ -58,11 +61,36 @@ module Scenic
|
|
58
61
|
EOSQL
|
59
62
|
end
|
60
63
|
|
64
|
+
def populated?(name)
|
65
|
+
!select_value("select last_refresh_date from user_mviews where mview_name = '#{name.upcase}'").nil?
|
66
|
+
end
|
67
|
+
|
61
68
|
delegate :connection, to: :@connectable
|
62
|
-
delegate :select_all, :execute, :quote_table_name, to: :connection
|
69
|
+
delegate :select_all, :select_value, :execute, :quote_table_name, to: :connection
|
63
70
|
|
64
71
|
private
|
65
72
|
|
73
|
+
def view_dependencies
|
74
|
+
select_all(<<~EOSQL)
|
75
|
+
select lower(uo.object_name) as name, lower(ud.referenced_name) as dependency
|
76
|
+
from user_objects uo
|
77
|
+
left join user_dependencies ud on uo.object_name = ud.name
|
78
|
+
and ud.referenced_type in ('VIEW', 'MATERIALIZED VIEW')
|
79
|
+
where uo.object_type in ('VIEW', 'MATERIALIZED VIEW')
|
80
|
+
EOSQL
|
81
|
+
end
|
82
|
+
|
83
|
+
def dependency_order
|
84
|
+
views_hash = TSortableHash.new
|
85
|
+
|
86
|
+
view_dependencies.each do |view_data|
|
87
|
+
views_hash[view_data["name"]] ||= []
|
88
|
+
views_hash[view_data["name"]] << view_data["dependency"] unless view_data["dependency"].nil?
|
89
|
+
end
|
90
|
+
|
91
|
+
views_hash.tsort
|
92
|
+
end
|
93
|
+
|
66
94
|
def all_views
|
67
95
|
select_all("select lower(view_name) name, text definition from user_views").map do |view|
|
68
96
|
Scenic::View.new(name: view["name"], definition: view["definition"], materialized: false)
|
@@ -75,6 +103,10 @@ module Scenic
|
|
75
103
|
end
|
76
104
|
end
|
77
105
|
|
106
|
+
def all_view_objects
|
107
|
+
all_views + all_mviews
|
108
|
+
end
|
109
|
+
|
78
110
|
def refresh_dependencies_for(name)
|
79
111
|
Scenic::Adapters::Oracle::RefreshDependencies.call(name, self, connection)
|
80
112
|
end
|
@@ -22,7 +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", "
|
25
|
+
spec.add_dependency "scenic", "= 1.8.0"
|
26
26
|
spec.add_dependency "activerecord-oracle_enhanced-adapter", ">= 1.5.0"
|
27
27
|
|
28
28
|
spec.add_development_dependency "bundler", "~> 2.0"
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scenic-oracle_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Dinger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: scenic
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.8.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord-oracle_enhanced-adapter
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/scenic/adapters/oracle/refresh_dependencies.rb
|
138
138
|
- lib/scenic/oracle_adapter.rb
|
139
139
|
- lib/scenic/oracle_adapter/version.rb
|
140
|
+
- lib/tsortable_hash.rb
|
140
141
|
- scenic-oracle_adapter.gemspec
|
141
142
|
homepage: https://github.com/cdinger/scenic-oracle_adapter
|
142
143
|
licenses:
|
@@ -157,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
158
|
- !ruby/object:Gem::Version
|
158
159
|
version: '0'
|
159
160
|
requirements: []
|
160
|
-
rubygems_version: 3.
|
161
|
+
rubygems_version: 3.5.9
|
161
162
|
signing_key:
|
162
163
|
specification_version: 4
|
163
164
|
summary: Oracle adapter for thoughtbot/scenic
|