Sha256: eac528d68a49268b0cd385b59b2c21f07904ecfe6219670ff79153b0c68b7f54

Contents?: true

Size: 960 Bytes

Versions: 1

Compression:

Stored size: 960 Bytes

Contents

class Upsert
  class Buffer
    # @private
    class SQLite3_Database < Buffer
      def ready
        return if rows.empty?
        row = rows.shift
        connection = parent.connection
        bind_setter_values = row.setter.values.map(&:bind_value)
        quoted_setter_names = row.setter.values.map(&:quoted_name)
        quoted_selector_names = row.selector.values.map(&:quoted_name)

        insert_or_ignore_sql = %{INSERT OR IGNORE INTO #{parent.quoted_table_name} (#{quoted_setter_names.join(',')}) VALUES (#{Array.new(bind_setter_values.length, '?').join(',')})}
        connection.execute insert_or_ignore_sql, bind_setter_values

        update_sql = %{UPDATE #{parent.quoted_table_name} SET #{quoted_setter_names.map { |qk| "#{qk}=?" }.join(',')} WHERE #{quoted_selector_names.map { |qk| "#{qk}=?" }.join(' AND ')}}
        connection.execute update_sql, (bind_setter_values + row.selector.values.map(&:bind_value))
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upsert-0.5.0 lib/upsert/buffer/sqlite3_database.rb