lib/index_shotgun/analyzer.rb in index_shotgun-0.3.0 vs lib/index_shotgun/analyzer.rb in index_shotgun-1.0.0
- old
+ new
@@ -1,7 +1,7 @@
module IndexShotgun
- module Analyzer
+ module Analyzer # rubocop:disable Metrics/ModuleLength
require "index_shotgun/array_start_with"
class Response
attr_accessor :message, :duplicate_index_count, :total_index_count, :total_table_count
@@ -22,43 +22,43 @@
def perform
tables =
ActiveSupport::Deprecation.silence do
ActiveRecord::Base.connection.tables
end
- tables.reject! { |table| exclude_tables.include?(table.downcase) }
+ tables.reject! {|table| exclude_tables.include?(table.downcase) }
duplicate_indexes =
tables.each_with_object([]) do |table, array|
response = check_indexes(table)
array.push(*response)
end
message =
- duplicate_indexes.each_with_object("") do |info, message|
- message << <<-EOS.strip_heredoc
+ duplicate_indexes.each_with_object("") do |info, str|
+ str << <<~MSG
# =============================
# #{info[:index].table}
# =============================
# #{info[:result]}
# To remove this duplicate index, execute:
ALTER TABLE `#{info[:index].table}` DROP INDEX `#{info[:index].name}`;
- EOS
+ MSG
end
- total_index_count = tables.map { |table| table_indexes(table).count }.sum
- message << <<-EOS.strip_heredoc
+ total_index_count = tables.map {|table| table_indexes(table).count }.sum
+ message << <<~MSG
# ########################################################################
# Summary of indexes
# ########################################################################
# Total Duplicate Indexes #{duplicate_indexes.count}
# Total Indexes #{total_index_count}
# Total Tables #{tables.count}
- EOS
+ MSG
response = Response.new
response.duplicate_index_count = duplicate_indexes.count
response.message = message
response.total_index_count = total_index_count
@@ -97,192 +97,194 @@
# @see [ActiveRecord::ConnectionAdapters::TableDefinition#indexes]
def table_indexes(table)
ActiveRecord::Base.connection.indexes(table)
end
+ ORACLE_SYSTEM_TABLES = %w[
+ AQ$DEF$_AQCALL
+ AQ$DEF$_AQERROR
+ AQ$_DEF$_AQCALL_F
+ AQ$_DEF$_AQERROR_F
+ AQ$_INTERNET_AGENTS
+ AQ$_INTERNET_AGENT_PRIVS
+ AQ$_QUEUES
+ AQ$_QUEUE_TABLES
+ AQ$_SCHEDULES
+ CATALOG
+ COL
+ DEF$_AQCALL
+ DEF$_AQERROR
+ DEF$_CALLDEST
+ DEF$_DEFAULTDEST
+ DEF$_DESTINATION
+ DEF$_ERROR
+ DEF$_LOB
+ DEF$_ORIGIN
+ DEF$_PROPAGATOR
+ DEF$_PUSHED_TRANSACTIONS
+ HELP
+ LOGMNRC_DBNAME_UID_MAP
+ LOGMNRC_GSBA
+ LOGMNRC_GSII
+ LOGMNRC_GTCS
+ LOGMNRC_GTLO
+ LOGMNRP_CTAS_PART_MAP
+ LOGMNRT_MDDL$
+ LOGMNR_AGE_SPILL$
+ LOGMNR_ATTRCOL$
+ LOGMNR_ATTRIBUTE$
+ LOGMNR_CCOL$
+ LOGMNR_CDEF$
+ LOGMNR_COL$
+ LOGMNR_COLTYPE$
+ LOGMNR_DICTIONARY$
+ LOGMNR_DICTSTATE$
+ LOGMNR_ENC$
+ LOGMNR_ERROR$
+ LOGMNR_FILTER$
+ LOGMNR_GLOBAL$
+ LOGMNR_GT_TAB_INCLUDE$
+ LOGMNR_GT_USER_INCLUDE$
+ LOGMNR_GT_XID_INCLUDE$
+ LOGMNR_ICOL$
+ LOGMNR_IND$
+ LOGMNR_INDCOMPART$
+ LOGMNR_INDPART$
+ LOGMNR_INDSUBPART$
+ LOGMNR_INTEGRATED_SPILL$
+ LOGMNR_KOPM$
+ LOGMNR_LOB$
+ LOGMNR_LOBFRAG$
+ LOGMNR_LOG$
+ LOGMNR_LOGMNR_BUILDLOG
+ LOGMNR_NTAB$
+ LOGMNR_OBJ$
+ LOGMNR_OPQTYPE$
+ LOGMNR_PARAMETER$
+ LOGMNR_PARTOBJ$
+ LOGMNR_PROCESSED_LOG$
+ LOGMNR_PROPS$
+ LOGMNR_REFCON$
+ LOGMNR_RESTART_CKPT$
+ LOGMNR_RESTART_CKPT_TXINFO$
+ LOGMNR_SEED$
+ LOGMNR_SESSION$
+ LOGMNR_SESSION_ACTIONS$
+ LOGMNR_SESSION_EVOLVE$
+ LOGMNR_SPILL$
+ LOGMNR_SUBCOLTYPE$
+ LOGMNR_TAB$
+ LOGMNR_TABCOMPART$
+ LOGMNR_TABPART$
+ LOGMNR_TABSUBPART$
+ LOGMNR_TS$
+ LOGMNR_TYPE$
+ LOGMNR_UID$
+ LOGMNR_USER$
+ LOGSTDBY$APPLY_MILESTONE
+ LOGSTDBY$APPLY_PROGRESS
+ LOGSTDBY$EDS_TABLES
+ LOGSTDBY$EVENTS
+ LOGSTDBY$FLASHBACK_SCN
+ LOGSTDBY$HISTORY
+ LOGSTDBY$PARAMETERS
+ LOGSTDBY$PLSQL
+ LOGSTDBY$SCN
+ LOGSTDBY$SKIP
+ LOGSTDBY$SKIP_SUPPORT
+ LOGSTDBY$SKIP_TRANSACTION
+ MVIEW$_ADV_AJG
+ MVIEW$_ADV_BASETABLE
+ MVIEW$_ADV_CLIQUE
+ MVIEW$_ADV_ELIGIBLE
+ MVIEW$_ADV_EXCEPTIONS
+ MVIEW$_ADV_FILTER
+ MVIEW$_ADV_FILTERINSTANCE
+ MVIEW$_ADV_FJG
+ MVIEW$_ADV_GC
+ MVIEW$_ADV_INFO
+ MVIEW$_ADV_JOURNAL
+ MVIEW$_ADV_LEVEL
+ MVIEW$_ADV_LOG
+ MVIEW$_ADV_OUTPUT
+ MVIEW$_ADV_PARAMETERS
+ MVIEW$_ADV_PLAN
+ MVIEW$_ADV_PRETTY
+ MVIEW$_ADV_ROLLUP
+ MVIEW$_ADV_SQLDEPEND
+ MVIEW$_ADV_TEMP
+ MVIEW$_ADV_WORKLOAD
+ MVIEW_EVALUATIONS
+ MVIEW_EXCEPTIONS
+ MVIEW_FILTER
+ MVIEW_FILTERINSTANCE
+ MVIEW_LOG
+ MVIEW_RECOMMENDATIONS
+ MVIEW_WORKLOAD
+ OL$
+ OL$HINTS
+ OL$NODES
+ PRODUCT_PRIVS
+ PRODUCT_USER_PROFILE
+ PUBLICSYN
+ REPCAT$_AUDIT_ATTRIBUTE
+ REPCAT$_AUDIT_COLUMN
+ REPCAT$_COLUMN_GROUP
+ REPCAT$_CONFLICT
+ REPCAT$_DDL
+ REPCAT$_EXCEPTIONS
+ REPCAT$_EXTENSION
+ REPCAT$_FLAVORS
+ REPCAT$_FLAVOR_OBJECTS
+ REPCAT$_GENERATED
+ REPCAT$_GROUPED_COLUMN
+ REPCAT$_INSTANTIATION_DDL
+ REPCAT$_KEY_COLUMNS
+ REPCAT$_OBJECT_PARMS
+ REPCAT$_OBJECT_TYPES
+ REPCAT$_PARAMETER_COLUMN
+ REPCAT$_PRIORITY
+ REPCAT$_PRIORITY_GROUP
+ REPCAT$_REFRESH_TEMPLATES
+ REPCAT$_REPCAT
+ REPCAT$_REPCATLOG
+ REPCAT$_REPCOLUMN
+ REPCAT$_REPGROUP_PRIVS
+ REPCAT$_REPOBJECT
+ REPCAT$_REPPROP
+ REPCAT$_REPSCHEMA
+ REPCAT$_RESOLUTION
+ REPCAT$_RESOLUTION_METHOD
+ REPCAT$_RESOLUTION_STATISTICS
+ REPCAT$_RESOL_STATS_CONTROL
+ REPCAT$_RUNTIME_PARMS
+ REPCAT$_SITES_NEW
+ REPCAT$_SITE_OBJECTS
+ REPCAT$_SNAPGROUP
+ REPCAT$_TEMPLATE_OBJECTS
+ REPCAT$_TEMPLATE_PARMS
+ REPCAT$_TEMPLATE_REFGROUPS
+ REPCAT$_TEMPLATE_SITES
+ REPCAT$_TEMPLATE_STATUS
+ REPCAT$_TEMPLATE_TARGETS
+ REPCAT$_TEMPLATE_TYPES
+ REPCAT$_USER_AUTHORIZATIONS
+ REPCAT$_USER_PARM_VALUES
+ SQLPLUS_PRODUCT_PROFILE
+ SYSCATALOG
+ SYSFILES
+ TAB
+ TABQUOTAS
+ ].freeze
+
def exclude_tables
return @exclude_tables if @exclude_tables
# Rails default tables
- tables = %w(ar_internal_metadata schema_migrations)
+ tables = %w[ar_internal_metadata schema_migrations]
# Oracle system tables
- tables += %w(
- AQ$DEF$_AQCALL
- AQ$DEF$_AQERROR
- AQ$_DEF$_AQCALL_F
- AQ$_DEF$_AQERROR_F
- AQ$_INTERNET_AGENTS
- AQ$_INTERNET_AGENT_PRIVS
- AQ$_QUEUES
- AQ$_QUEUE_TABLES
- AQ$_SCHEDULES
- CATALOG
- COL
- DEF$_AQCALL
- DEF$_AQERROR
- DEF$_CALLDEST
- DEF$_DEFAULTDEST
- DEF$_DESTINATION
- DEF$_ERROR
- DEF$_LOB
- DEF$_ORIGIN
- DEF$_PROPAGATOR
- DEF$_PUSHED_TRANSACTIONS
- HELP
- LOGMNRC_DBNAME_UID_MAP
- LOGMNRC_GSBA
- LOGMNRC_GSII
- LOGMNRC_GTCS
- LOGMNRC_GTLO
- LOGMNRP_CTAS_PART_MAP
- LOGMNRT_MDDL$
- LOGMNR_AGE_SPILL$
- LOGMNR_ATTRCOL$
- LOGMNR_ATTRIBUTE$
- LOGMNR_CCOL$
- LOGMNR_CDEF$
- LOGMNR_COL$
- LOGMNR_COLTYPE$
- LOGMNR_DICTIONARY$
- LOGMNR_DICTSTATE$
- LOGMNR_ENC$
- LOGMNR_ERROR$
- LOGMNR_FILTER$
- LOGMNR_GLOBAL$
- LOGMNR_GT_TAB_INCLUDE$
- LOGMNR_GT_USER_INCLUDE$
- LOGMNR_GT_XID_INCLUDE$
- LOGMNR_ICOL$
- LOGMNR_IND$
- LOGMNR_INDCOMPART$
- LOGMNR_INDPART$
- LOGMNR_INDSUBPART$
- LOGMNR_INTEGRATED_SPILL$
- LOGMNR_KOPM$
- LOGMNR_LOB$
- LOGMNR_LOBFRAG$
- LOGMNR_LOG$
- LOGMNR_LOGMNR_BUILDLOG
- LOGMNR_NTAB$
- LOGMNR_OBJ$
- LOGMNR_OPQTYPE$
- LOGMNR_PARAMETER$
- LOGMNR_PARTOBJ$
- LOGMNR_PROCESSED_LOG$
- LOGMNR_PROPS$
- LOGMNR_REFCON$
- LOGMNR_RESTART_CKPT$
- LOGMNR_RESTART_CKPT_TXINFO$
- LOGMNR_SEED$
- LOGMNR_SESSION$
- LOGMNR_SESSION_ACTIONS$
- LOGMNR_SESSION_EVOLVE$
- LOGMNR_SPILL$
- LOGMNR_SUBCOLTYPE$
- LOGMNR_TAB$
- LOGMNR_TABCOMPART$
- LOGMNR_TABPART$
- LOGMNR_TABSUBPART$
- LOGMNR_TS$
- LOGMNR_TYPE$
- LOGMNR_UID$
- LOGMNR_USER$
- LOGSTDBY$APPLY_MILESTONE
- LOGSTDBY$APPLY_PROGRESS
- LOGSTDBY$EDS_TABLES
- LOGSTDBY$EVENTS
- LOGSTDBY$FLASHBACK_SCN
- LOGSTDBY$HISTORY
- LOGSTDBY$PARAMETERS
- LOGSTDBY$PLSQL
- LOGSTDBY$SCN
- LOGSTDBY$SKIP
- LOGSTDBY$SKIP_SUPPORT
- LOGSTDBY$SKIP_TRANSACTION
- MVIEW$_ADV_AJG
- MVIEW$_ADV_BASETABLE
- MVIEW$_ADV_CLIQUE
- MVIEW$_ADV_ELIGIBLE
- MVIEW$_ADV_EXCEPTIONS
- MVIEW$_ADV_FILTER
- MVIEW$_ADV_FILTERINSTANCE
- MVIEW$_ADV_FJG
- MVIEW$_ADV_GC
- MVIEW$_ADV_INFO
- MVIEW$_ADV_JOURNAL
- MVIEW$_ADV_LEVEL
- MVIEW$_ADV_LOG
- MVIEW$_ADV_OUTPUT
- MVIEW$_ADV_PARAMETERS
- MVIEW$_ADV_PLAN
- MVIEW$_ADV_PRETTY
- MVIEW$_ADV_ROLLUP
- MVIEW$_ADV_SQLDEPEND
- MVIEW$_ADV_TEMP
- MVIEW$_ADV_WORKLOAD
- MVIEW_EVALUATIONS
- MVIEW_EXCEPTIONS
- MVIEW_FILTER
- MVIEW_FILTERINSTANCE
- MVIEW_LOG
- MVIEW_RECOMMENDATIONS
- MVIEW_WORKLOAD
- OL$
- OL$HINTS
- OL$NODES
- PRODUCT_PRIVS
- PRODUCT_USER_PROFILE
- PUBLICSYN
- REPCAT$_AUDIT_ATTRIBUTE
- REPCAT$_AUDIT_COLUMN
- REPCAT$_COLUMN_GROUP
- REPCAT$_CONFLICT
- REPCAT$_DDL
- REPCAT$_EXCEPTIONS
- REPCAT$_EXTENSION
- REPCAT$_FLAVORS
- REPCAT$_FLAVOR_OBJECTS
- REPCAT$_GENERATED
- REPCAT$_GROUPED_COLUMN
- REPCAT$_INSTANTIATION_DDL
- REPCAT$_KEY_COLUMNS
- REPCAT$_OBJECT_PARMS
- REPCAT$_OBJECT_TYPES
- REPCAT$_PARAMETER_COLUMN
- REPCAT$_PRIORITY
- REPCAT$_PRIORITY_GROUP
- REPCAT$_REFRESH_TEMPLATES
- REPCAT$_REPCAT
- REPCAT$_REPCATLOG
- REPCAT$_REPCOLUMN
- REPCAT$_REPGROUP_PRIVS
- REPCAT$_REPOBJECT
- REPCAT$_REPPROP
- REPCAT$_REPSCHEMA
- REPCAT$_RESOLUTION
- REPCAT$_RESOLUTION_METHOD
- REPCAT$_RESOLUTION_STATISTICS
- REPCAT$_RESOL_STATS_CONTROL
- REPCAT$_RUNTIME_PARMS
- REPCAT$_SITES_NEW
- REPCAT$_SITE_OBJECTS
- REPCAT$_SNAPGROUP
- REPCAT$_TEMPLATE_OBJECTS
- REPCAT$_TEMPLATE_PARMS
- REPCAT$_TEMPLATE_REFGROUPS
- REPCAT$_TEMPLATE_SITES
- REPCAT$_TEMPLATE_STATUS
- REPCAT$_TEMPLATE_TARGETS
- REPCAT$_TEMPLATE_TYPES
- REPCAT$_USER_AUTHORIZATIONS
- REPCAT$_USER_PARM_VALUES
- SQLPLUS_PRODUCT_PROFILE
- SYSCATALOG
- SYSFILES
- TAB
- TABQUOTAS
- )
+ tables += ORACLE_SYSTEM_TABLES
@exclude_tables = tables.map(&:downcase)
@exclude_tables
end
end