Sha256: c051f50fe894523dd21bfd605367e34e1496ff83a0d00815dfc822330bbc05e9

Contents?: true

Size: 1.61 KB

Versions: 13

Compression:

Stored size: 1.61 KB

Contents

require "json"

module Skylight
  module Normalizers
    module ActiveRecord
      # Normalizer for SQL requests
      class SQL < Normalizer
        register "sql.active_record"
        register "sql.sequel"
        register "sql.data_mapper"

        CAT = "db.sql.query".freeze

        # @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
        # @param name [String] ignored, only present to match API
        # @param payload [Hash]
        # @option payload [String] [:name] The SQL operation
        # @option payload [Hash] [:binds] The bound parameters
        # @return [Array]
        def normalize(trace, name, payload)
          case payload[:name]
          when "SCHEMA".freeze, "CACHE".freeze
            return :skip
          else
            name  = CAT
            title = payload[:name] || "SQL".freeze
          end

          binds = payload[:binds]

          if binds && !binds.empty?
            binds = binds.map { |col, val| val.inspect }
          end

          begin
            extracted_title, sql = extract_binds(payload, binds)
            [ name, extracted_title || title, sql ]
          rescue => e
            # FIXME: Rust errors get written to STDERR and don't come through here
            if config[:log_sql_parse_errors]
              config.logger.warn "failed to extract binds in SQL; sql=#{payload[:sql].inspect}; exception=#{e.inspect}"
            end
            [ name, title, nil ]
          end
        end

        private

        def extract_binds(payload, precalculated)
          Skylight.lex_sql(payload[:sql])
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
skylight-1.7.2 lib/skylight/normalizers/active_record/sql.rb
skylight-1.7.1 lib/skylight/normalizers/active_record/sql.rb
skylight-1.7.0 lib/skylight/normalizers/active_record/sql.rb
skylight-1.6.1 lib/skylight/normalizers/active_record/sql.rb
skylight-1.6.0 lib/skylight/normalizers/active_record/sql.rb
skylight-1.5.1 lib/skylight/normalizers/active_record/sql.rb
skylight-1.5.0 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.4 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.3 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.2 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.1 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.0 lib/skylight/normalizers/active_record/sql.rb
skylight-1.4.0.beta.2 lib/skylight/normalizers/active_record/sql.rb