lib/index_shotgun/analyzer.rb in index_shotgun-0.2.1 vs lib/index_shotgun/analyzer.rb in index_shotgun-0.3.0

- old
+ new

@@ -1,16 +1,32 @@ module IndexShotgun module Analyzer require "index_shotgun/array_start_with" + class Response + attr_accessor :message, :duplicate_index_count, :total_index_count, :total_table_count + + def successful? + duplicate_index_count == 0 + end + + def exit_if_failure! + exit(1) unless successful? + end + end + class << self using IndexShotgun::ArrayStartWith # Search duplicate index - # @return [String] result message + # @return [IndexShotgun::Analyzer::Response] def perform - tables = ActiveRecord::Base.connection.tables + tables = + ActiveSupport::Deprecation.silence do + ActiveRecord::Base.connection.tables + end + tables.reject! { |table| exclude_tables.include?(table.downcase) } duplicate_indexes = tables.each_with_object([]) do |table, array| response = check_indexes(table) array.push(*response) @@ -40,11 +56,17 @@ # Total Indexes #{total_index_count} # Total Tables #{tables.count} EOS - message + response = Response.new + response.duplicate_index_count = duplicate_indexes.count + response.message = message + response.total_index_count = total_index_count + response.total_table_count = tables.count + + response end # check duplicate indexes of table # @param table [String] table name # @return [Array<Hash>] array of index info @@ -73,9 +95,197 @@ # get indexes of table # @param table [String] # @see [ActiveRecord::ConnectionAdapters::TableDefinition#indexes] def table_indexes(table) ActiveRecord::Base.connection.indexes(table) + end + + def exclude_tables + return @exclude_tables if @exclude_tables + + # Rails default tables + 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 + ) + + @exclude_tables = tables.map(&:downcase) + @exclude_tables end end end end