avmtrf1-tools 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|