Sha256: 06c69ae0c1a7f9cfdce7933987566a4a6de2681b06f708dc4ef7c03c82c7f66a

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

class Upsert
  class Buffer
    class SQLite3_Database < Buffer
      def compose(targets)
        target = targets.first
        parts = []
        parts << %{ INSERT OR IGNORE INTO "#{table_name}" (#{quote_idents(target.columns)}) VALUES (#{quote_values(target.inserts)}) }
        if target.updates.length > 0
          parts << %{ UPDATE "#{table_name}" SET #{quote_pairs(target.updates)} WHERE #{quote_pairs(target.selector)} }
        end
        parts.join(';')
      end

      def execute(sql)
        connection.execute_batch sql
      end

      def max_targets
        1
      end

      def max_length
        INFINITY
      end

      include Quoter
      
      def quote_value(v)
        case v
        when NilClass
          'NULL'
        when String, Symbol
          SINGLE_QUOTE + SQLite3::Database.quote(v.to_s) + SINGLE_QUOTE
        else
          v
        end
      end
      
      def quote_ident(k)
        DOUBLE_QUOTE + SQLite3::Database.quote(k.to_s) + DOUBLE_QUOTE
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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