class Oplogjam::Schema

Constants

COLUMNS

Attributes

db[R]

Public Class Methods

new(db) click to toggle source
# File lib/oplogjam/schema.rb, line 7
def initialize(db)
  @db = db
end

Public Instance Methods

add_indexes(name) click to toggle source
# File lib/oplogjam/schema.rb, line 37
def add_indexes(name)
  db.alter_table(name) do
    add_index %i[id deleted_at], unique: true, if_not_exists: true
    add_index :id, unique: true, where: { deleted_at: nil }, if_not_exists: true
  end
end
create_table(name) click to toggle source
# File lib/oplogjam/schema.rb, line 26
def create_table(name)
  db.create_table?(name) do
    uuid :uuid, default: Sequel.function(:uuid_generate_v1), primary_key: true
    jsonb :id, null: false
    jsonb :document, null: false
    timestamp :created_at, null: false
    timestamp :updated_at, null: false
    timestamp :deleted_at
  end
end
import(collection, name, batch_size = 100) click to toggle source
# File lib/oplogjam/schema.rb, line 11
def import(collection, name, batch_size = 100)
  collection.find.snapshot(true).each_slice(batch_size) do |documents|
    values = documents.map { |document|
      [
        Sequel.object_to_json(document.fetch(ID)),
        Sequel.pg_jsonb(document),
        Time.now.utc,
        Time.now.utc
      ]
    }

    db[name].import(COLUMNS, values)
  end
end