avmtrf1-tools 0.24.0 → 0.25.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 +4 -4
- data/lib/avmtrf1/git/issue_on_repository.rb +1 -1
- data/lib/avmtrf1/issues/factory.rb +1 -1
- data/lib/avmtrf1/oracle.rb +1 -1
- data/lib/avmtrf1/oracle/connection.rb +1 -1
- data/lib/avmtrf1/oracle/connection/base.rb +18 -3
- data/lib/avmtrf1/oracle/object.rb +25 -0
- data/lib/avmtrf1/oracle/object/base.rb +39 -0
- data/lib/avmtrf1/oracle/object/table.rb +15 -0
- data/lib/avmtrf1/oracle/object/user.rb +15 -0
- data/lib/avmtrf1/oracle/object/view.rb +15 -0
- data/lib/avmtrf1/oracle/objects.rb +53 -0
- data/lib/avmtrf1/oracle/objects/relation.rb +23 -0
- data/lib/avmtrf1/oracle/objects/sql_builder.rb +64 -0
- data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +67 -0
- data/lib/avmtrf1/tools/version.rb +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9001516b0fcc9bba4885ce017e6b7685350f5dccdad07a0acd9e0b0ca168119e
|
4
|
+
data.tar.gz: cd859f74feef86df8eae9a06d14f04e5859978358b810fa7c7ae143065beaed8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15abe704a6fb9d054cb529c7a55033ac8c1203498517d87ddda7b083773046a959a67e680bb81d6a426d77447d4be74be89fc2646d4e6be618ca7fb717e6a709
|
7
|
+
data.tar.gz: 9ddf1149f6da8efb1748a36b4d0d11654b0dad6d2d53939c2544a5d9fffaa71e8ba9b1841be151b1571c47a033acf5440ce08bf758f73f6b6e0c7f103f8f198f
|
data/lib/avmtrf1/oracle.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'avmtrf1/oracle/objects'
|
3
4
|
require 'avmtrf1/oracle/oci8'
|
4
5
|
|
5
6
|
module Avmtrf1
|
@@ -8,14 +9,24 @@ module Avmtrf1
|
|
8
9
|
class Base
|
9
10
|
DEFAULT_PORT = 1521
|
10
11
|
|
12
|
+
delegate :exec, to: :connection
|
13
|
+
|
11
14
|
def initialize(connection_string)
|
12
15
|
@connection = OCI8.new(connection_string)
|
13
16
|
end
|
14
17
|
|
18
|
+
def first_row(sql)
|
19
|
+
connection.exec(sql) { |row| return row }
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def first_row_hash(sql)
|
24
|
+
connection.exec(sql).fetch_hash { |row| return row }
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
15
28
|
def unique_value(sql)
|
16
|
-
|
17
|
-
return row.first
|
18
|
-
end
|
29
|
+
first_row(sql).if_present(&:first)
|
19
30
|
end
|
20
31
|
|
21
32
|
def query(sql, &block)
|
@@ -26,6 +37,10 @@ module Avmtrf1
|
|
26
37
|
end
|
27
38
|
end
|
28
39
|
|
40
|
+
def objects
|
41
|
+
@objects ||= ::Avmtrf1::Oracle::Objects.new(self)
|
42
|
+
end
|
43
|
+
|
29
44
|
private
|
30
45
|
|
31
46
|
attr_reader :connection
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Object
|
8
|
+
require_sub __FILE__
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def factory_get(connection, attributes)
|
12
|
+
return nil if attributes.blank?
|
13
|
+
|
14
|
+
type_class(attributes.fetch(:type)).new(connection, attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def type_class(type)
|
18
|
+
const_get(type.to_s.humanize.camelize)
|
19
|
+
rescue NameError
|
20
|
+
::Avmtrf1::Oracle::Object::Base
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'eac_ruby_utils/listable'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Oracle
|
8
|
+
class Object
|
9
|
+
class Base
|
10
|
+
include ::EacRubyUtils::Listable
|
11
|
+
|
12
|
+
lists.add_string :attributes, :id, :name, :owner, :type
|
13
|
+
common_constructor :connection, :attributes
|
14
|
+
|
15
|
+
lists.attributes.values.each do |attribute| # rubocop:disable Style/HashEachMethods
|
16
|
+
define_method(attribute) do
|
17
|
+
attributes.fetch(attribute.to_sym)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def drop
|
22
|
+
connection.exec(drop_ddl)
|
23
|
+
end
|
24
|
+
|
25
|
+
def fullname
|
26
|
+
(owner.present? ? "#{owner}." : '') + name
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
"#{type}/#{fullname}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def drop_ddl
|
34
|
+
"drop #{type} #{fullname}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/oracle/object/base'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Object
|
8
|
+
class Table < ::Avmtrf1::Oracle::Object::Base
|
9
|
+
def drop_ddl
|
10
|
+
"#{super} cascade constraints"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/oracle/object/base'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Object
|
8
|
+
class User < ::Avmtrf1::Oracle::Object::Base
|
9
|
+
def objects(search_attributes = {})
|
10
|
+
connection.objects.list(search_attributes.merge(owner: name))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/oracle/object/base'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Object
|
8
|
+
class View < ::Avmtrf1::Oracle::Object::Base
|
9
|
+
def drop_ddl
|
10
|
+
"#{super} cascade constraints"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Objects
|
8
|
+
require_sub __FILE__
|
9
|
+
|
10
|
+
COLUMNS_TO_ATTRIBUTES = {
|
11
|
+
object_id: :id,
|
12
|
+
object_name: :name,
|
13
|
+
object_type: :type,
|
14
|
+
owner: :owner
|
15
|
+
}.freeze
|
16
|
+
TABLE_NAME = 'all_objects'
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def row_to_object(connection, row)
|
20
|
+
::Avmtrf1::Oracle::Object.factory_get(
|
21
|
+
connection,
|
22
|
+
row_to_attributes(row)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def row_to_attributes(row)
|
27
|
+
return nil if row.blank?
|
28
|
+
|
29
|
+
COLUMNS_TO_ATTRIBUTES.map do |column, attribute|
|
30
|
+
[attribute, row.fetch(column.to_s.upcase)]
|
31
|
+
end.to_h
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
common_constructor :connection
|
36
|
+
|
37
|
+
def list(options = {})
|
38
|
+
::Avmtrf1::Oracle::Objects::Relation.new(connection, sql(options))
|
39
|
+
end
|
40
|
+
|
41
|
+
def first(options = {})
|
42
|
+
self.class.row_to_object(
|
43
|
+
connection,
|
44
|
+
connection.first_row_hash(sql(options))
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def sql(options)
|
49
|
+
::Avmtrf1::Oracle::Objects::SqlBuilder.new(options).sql
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Objects
|
8
|
+
class Relation
|
9
|
+
common_constructor :connection, :sql
|
10
|
+
|
11
|
+
def each
|
12
|
+
connection.query(sql).fetch_hash do |row|
|
13
|
+
yield(::Avmtrf1::Oracle::Objects.row_to_object(connection, row))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def count
|
18
|
+
connection.unique_value("select * from (#{sql})").to_i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Oracle
|
7
|
+
class Objects
|
8
|
+
class SqlBuilder
|
9
|
+
COLUMNS = {
|
10
|
+
type: :type_name, name: :name, owner: :owner_name, table: :table_name
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
enable_simple_cache
|
14
|
+
common_constructor :options
|
15
|
+
|
16
|
+
def sql
|
17
|
+
"SELECT * FROM (\n" +
|
18
|
+
[all_objects_sql, all_users_sql].map { |sub_sql| "\t(#{with_where_sql(sub_sql)})\n" }
|
19
|
+
.join("\tUNION ALL\n") +
|
20
|
+
") order by object_type, owner, object_name\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
def all_objects_sql
|
24
|
+
"SELECT #{COLUMNS_TO_ATTRIBUTES.keys.join(', ')} FROM #{TABLE_NAME}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def all_users_sql
|
28
|
+
'SELECT user_id as object_id, username as object_name, \'USER\' as object_type' \
|
29
|
+
', null as owner FROM all_users'
|
30
|
+
end
|
31
|
+
|
32
|
+
def with_where_sql(sql)
|
33
|
+
r = "select * from (#{sql}) WHERE 1=1"
|
34
|
+
COLUMNS_TO_ATTRIBUTES.each_value do |search_key|
|
35
|
+
search_option_condition(search_key).if_present do |v|
|
36
|
+
r += " and (#{v})"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
r
|
40
|
+
end
|
41
|
+
|
42
|
+
def column_by_search_key(search_key)
|
43
|
+
COLUMNS_TO_ATTRIBUTES.key(search_key) || raise("Search key not found: #{search_key}")
|
44
|
+
end
|
45
|
+
|
46
|
+
def search_option_condition(search_key)
|
47
|
+
values = search_option(search_key)
|
48
|
+
return nil unless values.any?
|
49
|
+
|
50
|
+
column = column_by_search_key(search_key)
|
51
|
+
values.map { |v| "(LOWER(#{column}) LIKE LOWER('#{v}'))" }.join(' or ')
|
52
|
+
end
|
53
|
+
|
54
|
+
def search_option(search_key)
|
55
|
+
[search_key.to_s, search_key.to_sym].each do |k|
|
56
|
+
v = options[k]
|
57
|
+
return Array(v) if v.present?
|
58
|
+
end
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/default_runner'
|
4
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
5
|
+
require 'eac_ruby_utils/console/speaker'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Tools
|
9
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
class Oracle < ::EacRubyUtils::Console::DocoptRunner
|
11
|
+
class UserClear < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
include ::EacCli::DefaultRunner
|
13
|
+
|
14
|
+
SELECTED_TYPES = %w[FUNCTION PACKAGE PROCEDURE SEQUENCE TABLE VIEW].freeze
|
15
|
+
|
16
|
+
runner_definition do
|
17
|
+
desc 'Remove todos os objetos (Tabelas, views, etc) de um usuário Oracle.'
|
18
|
+
bool_opt '-y', '--yes', 'Remove sem perguntar.'
|
19
|
+
bool_opt '-d', '--drop', 'Remove os objetos.'
|
20
|
+
pos_arg 'owner-name'
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
objects_banner
|
25
|
+
drop_objects
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def objects_banner
|
31
|
+
infov 'Owner', owner
|
32
|
+
infov 'Objects'
|
33
|
+
count = 0
|
34
|
+
objects.each do |object|
|
35
|
+
infov " * #{object.type}", object.fullname
|
36
|
+
count += 1
|
37
|
+
end
|
38
|
+
infov 'Total', count
|
39
|
+
end
|
40
|
+
|
41
|
+
def drop_objects
|
42
|
+
return unless options.fetch('--drop')
|
43
|
+
return unless confirm?
|
44
|
+
|
45
|
+
infom 'Removendo objetos...'
|
46
|
+
objects.each do |object|
|
47
|
+
infom "Removendo \"#{object}\"..."
|
48
|
+
object.drop
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def confirm?
|
53
|
+
options.fetch('--yes') || request_input('Confirma a remoção?', bool: true)
|
54
|
+
end
|
55
|
+
|
56
|
+
def owner_uncached
|
57
|
+
context(:connection).objects.first(name: options.fetch('<owner-name>'), type: :user)
|
58
|
+
end
|
59
|
+
|
60
|
+
def objects_uncached
|
61
|
+
owner.objects(type: SELECTED_TYPES)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avmtrf1-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo H. Bogoni
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aranha-parsers
|
@@ -290,6 +290,14 @@ files:
|
|
290
290
|
- lib/avmtrf1/oracle/connection.rb
|
291
291
|
- lib/avmtrf1/oracle/connection/base.rb
|
292
292
|
- lib/avmtrf1/oracle/connection/string_builder.rb
|
293
|
+
- lib/avmtrf1/oracle/object.rb
|
294
|
+
- lib/avmtrf1/oracle/object/base.rb
|
295
|
+
- lib/avmtrf1/oracle/object/table.rb
|
296
|
+
- lib/avmtrf1/oracle/object/user.rb
|
297
|
+
- lib/avmtrf1/oracle/object/view.rb
|
298
|
+
- lib/avmtrf1/oracle/objects.rb
|
299
|
+
- lib/avmtrf1/oracle/objects/relation.rb
|
300
|
+
- lib/avmtrf1/oracle/objects/sql_builder.rb
|
293
301
|
- lib/avmtrf1/oracle/oci8.rb
|
294
302
|
- lib/avmtrf1/patches.rb
|
295
303
|
- lib/avmtrf1/patches/avm/git/issue/complete.rb
|
@@ -330,6 +338,7 @@ files:
|
|
330
338
|
- lib/avmtrf1/tools/runner/oracle.rb
|
331
339
|
- lib/avmtrf1/tools/runner/oracle/query.rb
|
332
340
|
- lib/avmtrf1/tools/runner/oracle/source_get.rb
|
341
|
+
- lib/avmtrf1/tools/runner/oracle/user_clear.rb
|
333
342
|
- lib/avmtrf1/tools/runner/php.rb
|
334
343
|
- lib/avmtrf1/tools/runner/php/docker.rb
|
335
344
|
- lib/avmtrf1/tools/runner/red.rb
|