class N1Finder::N1Query

N+1 queries representation

Attributes

line[R]

@!attribute [r] query

Query with masked ids

@!attribute [r] line

Line where queries were executed in application

@!attribute [r] original_queries

All similar (N+1) original queries strings
original_queries[R]

@!attribute [r] query

Query with masked ids

@!attribute [r] line

Line where queries were executed in application

@!attribute [r] original_queries

All similar (N+1) original queries strings
query[R]

@!attribute [r] query

Query with masked ids

@!attribute [r] line

Line where queries were executed in application

@!attribute [r] original_queries

All similar (N+1) original queries strings

Public Class Methods

generate_by(queries) click to toggle source

Generates N1Finder::N1Query from array of N1Finder::Query

@param [Array<N1Finder::Query>] queries

@return [Array<N1Finder::N1Query>] queries that have N+1 vulnerability

# File lib/n_1_finder/n_1_query.rb, line 27
def self.generate_by(queries)
  grouped_queries = queries.group_by(&:footprint)

  n1_grouped_queries = grouped_queries.select do |_, similar_queries|
    similar_queries.count > 1
  end

  n1_grouped_queries.map do |_, similar_queries|
    new(similar_queries)
  end
end
new(queries) click to toggle source

A new instance of N1Finder::N1Query query initialized by similar queries

@param [Array<N1Finder::Query>] queries

# File lib/n_1_finder/n_1_query.rb, line 16
def initialize(queries)
  @query = queries.first.footprint[:query]
  @line = queries.first.footprint[:line]
  @original_queries = queries.map(&:query)
end