Class: Mxrb::Oql::SqlServerPlanAnalyzer
- Inherits:
-
Object
- Object
- Mxrb::Oql::SqlServerPlanAnalyzer
- Defined in:
- lib/mxrb/oql/sql_server_plan_analyzer.rb
Overview
Parses SQL Server SHOWPLAN XML without executing or rewriting the query. Missing-index entries are optimizer hypotheses, not DDL instructions.
Constant Summary collapse
- LARGE_ROWS =
rubocop:disable Metrics/ClassLength
1_000- HIGH_NESTED_ROWS =
10_000- MISESTIMATE_RATIO =
10.0
Instance Method Summary collapse
-
#analyze(xml) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
Instance Method Details
#analyze(xml) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/mxrb/oql/sql_server_plan_analyzer.rb', line 15 def analyze(xml) document = REXML::Document.new(xml.to_s) root = document.root raise ArgumentError, 'invalid SQL Server SHOWPLAN XML' unless root&.name == 'ShowPlanXML' findings = [*operator_findings(root), *missing_index_findings(root)].freeze statement = elements(root, 'StmtSimple').first runtime = elements(root, 'QueryTimeStats').first PlanReport.new( :sql_server, !runtime.nil?, nil, attribute_number(runtime, 'ElapsedTime'), attribute_number(statement, 'StatementSubTreeCost'), findings, xml.to_s.freeze ) rescue REXML::ParseException => e raise ArgumentError, "invalid SQL Server SHOWPLAN XML: #{e.}" end |