Class: Terrestrial::Adapters::SequelPostgresAdapter

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
AbstractAdapter
Defined in:
lib/terrestrial/adapters/sequel_postgres_adapter.rb

Defined Under Namespace

Classes: Dataset

Instance Method Summary collapse

Constructor Details

#initialize(database) ⇒ SequelPostgresAdapter

Returns a new instance of SequelPostgresAdapter.



31
32
33
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 31

def initialize(database)
  @database = database
end

Instance Method Details

#[](table_name) ⇒ Object



43
44
45
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 43

def [](table_name)
  Dataset.new(database[table_name])
end

#changes_sql(record) ⇒ Object



59
60
61
62
63
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 59

def changes_sql(record)
  generate_upsert_sql(record)
rescue Object => e
  raise UpsertError.new(record.namespace, record.to_h, e)
end

#conflict_fields(table_name) ⇒ Object



65
66
67
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 65

def conflict_fields(table_name)
  primary_key(table_name)
end

#delete(record) ⇒ Object



55
56
57
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 55

def delete(record)
  database[record.namespace].where(record.identity).delete
end

#primary_key(table_name) ⇒ Object



69
70
71
72
73
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 69

def primary_key(table_name)
  [database.primary_key(table_name)]
    .compact
    .map(&:to_sym)
end

#relation_fields(relation_name) ⇒ Object



85
86
87
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 85

def relation_fields(relation_name)
  database[relation_name].columns
end

#relationsObject



81
82
83
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 81

def relations
  database.tables - [:schema_migrations]
end

#schema(relation_name) ⇒ Object



89
90
91
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 89

def schema(relation_name)
  database.schema(relation_name)
end

#unique_indexes(table_name) ⇒ Object



75
76
77
78
79
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 75

def unique_indexes(table_name)
  database.indexes(table_name).map { |_name, data|
    data.fetch(:columns)
  }
end

#upsert(record) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/terrestrial/adapters/sequel_postgres_adapter.rb', line 47

def upsert(record)
  row = perform_upsert_returning_row(record)
  record.on_upsert(row)
  nil
rescue Object => e
  raise UpsertError.new(record.namespace, record.to_h, e)
end