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 127 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) begin db.call(name, parameters) rescue => e # clear the statement prepared flag - the statement may be closed by this # time. statement_prepared.make_false raise e end end
create_bind_values_hash()
click to toggle source
# File lib/logstash/plugin_mixins/jdbc/statement_handler.rb, line 121 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 110 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