Sha256: 510479d15bdf59a79f5382746566bea46214e725c49f64c8f39cf3f9fa62b4de

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require "sql_lexer"
require "json"

module Skylight
  module Normalizers
    class SQL < Normalizer
      register "sql.active_record"

      def normalize(trace, name, payload)
        case payload[:name]
        when "SCHEMA", "CACHE"
          return :skip
        else
          name  = "db.sql.query"
          title = payload[:name] || "SQL"
        end

        if payload[:binds].empty?
          extracted_title, payload[:sql], binds, error = extract_binds(payload)
        else
          extracted_title, _, _, error = extract_binds(payload)
          binds = payload[:binds].map { |col, val| val.inspect }
        end

        title = extracted_title if extracted_title


        if payload[:sql]
          annotations = {
            sql:   payload[:sql],
            binds: binds,
          }
        else
          annotations = {
            skylight_error: error
          }
        end

        [ name, title, payload[:sql], annotations ]
      end

    private
      def extract_binds(payload)
        title, sql, binds = SqlLexer::Lexer.bindify(payload[:sql])
        [ title, sql, binds, nil ]
      rescue
        [ nil, nil, nil, ["sql_parse", payload[:sql]] ]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
skylight-0.2.0.beta.3 lib/skylight/normalizers/sql.rb
skylight-0.2.0.beta.2 lib/skylight/normalizers/sql.rb
skylight-0.2.0.beta.1 lib/skylight/normalizers/sql.rb