class LogStash::PluginMixins::Jdbc::PreparedStatementHandler

Attributes

bind_values_array[R]
name[R]
prepared[R]
statement_prepared[R]

Public Instance Methods

perform_query(db, sql_last_value, jdbc_paging_enabled, jdbc_page_size) { |row| ... } click to toggle source

Performs the query, ignoring our pagination settings, yielding once per row of data @param db [Sequel::Database] @param sql_last_value [Integet|DateTime|Time] @yieldparam row [Hash{Symbol=>Object}]

# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 77
def perform_query(db, sql_last_value, jdbc_paging_enabled, jdbc_page_size)
  query = build_query(db, sql_last_value)
  query.each do |row|
    yield row
  end
end

Private Instance Methods

bind_value_sql_last_value(sql_last_value) click to toggle source
# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 120
def bind_value_sql_last_value(sql_last_value)
  parameters.keys.each do |key|
    value = parameters[key]
    if value == ":sql_last_value"
      parameters[key] = sql_last_value
    end
  end
end
build_query(db, sql_last_value) click to toggle source
# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 86
def build_query(db, sql_last_value)
  @parameters = create_bind_values_hash
  if statement_prepared.false?
    prepended = parameters.keys.map{|v| v.to_s.prepend("$").to_sym}
    @prepared = db[statement, *prepended].prepare(:select, name)
    statement_prepared.make_true
  end
  # under the scheduler the Sequel database instance is recreated each time
  # so the previous prepared statements are lost, add back
  if db.prepared_statement(name).nil?
    db.set_prepared_statement(name, prepared)
  end
  bind_value_sql_last_value(sql_last_value)
  statement_logger.log_statement_parameters(statement, parameters, nil)
  db.call(name, parameters)
end
create_bind_values_hash() click to toggle source
# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 114
def create_bind_values_hash
  hash = {}
  bind_values_array.each_with_index {|v,i| hash[:"p#{i}"] = v}
  hash
end
post_init(plugin) click to toggle source
# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 103
def post_init(plugin)
  # don't log statement count when using prepared statements for now...
  # needs enhancement to allow user to supply a bindable count prepared statement in settings.
  @statement_logger.disable_count

  @name = plugin.prepared_statement_name.to_sym
  @bind_values_array = plugin.prepared_statement_bind_values
  @parameters = plugin.parameters
  @statement_prepared = Concurrent::AtomicBoolean.new(false)
end