Module: Sequel::ColdColDatabase

Defined in:
lib/sequel/extensions/cold_col.rb

Defined Under Namespace

Classes: SchemaRegistry

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(db) ⇒ Object

Sets up the cold column tracking when the extension is loaded



146
147
148
149
# File 'lib/sequel/extensions/cold_col.rb', line 146

def self.extended(db)
  db.extend_datasets(ColdColDataset)
  db.instance_variable_set(:@cold_col_registry, SchemaRegistry.new(db))
end

Instance Method Details

#add_table_schema(name, info) ⇒ Object

Manually add schema information for a table



169
170
171
# File 'lib/sequel/extensions/cold_col.rb', line 169

def add_table_schema(name, info)
  cold_col_registry.add_schema(name, info)
end

#cold_col_registrySchemaRegistry

Access the schema registry for this database instance.

Returns:



154
155
156
# File 'lib/sequel/extensions/cold_col.rb', line 154

def cold_col_registry
  @cold_col_registry
end

#columns_from_generator(generator) ⇒ Object



209
210
211
# File 'lib/sequel/extensions/cold_col.rb', line 209

def columns_from_generator(generator)
  generator.columns.map { |c| [c[:name], c] }
end

#columns_from_sql(sql) ⇒ Object



205
206
207
# File 'lib/sequel/extensions/cold_col.rb', line 205

def columns_from_sql(sql)
  sql.columns
end

#create_table_as(name, sql, options = {}) ⇒ Object



173
174
175
176
177
# File 'lib/sequel/extensions/cold_col.rb', line 173

def create_table_as(name, sql, options = {})
  super.tap do |_|
    record_table(name, columns_from_sql(sql))
  end
end

#create_table_from_generator(name, generator, options) ⇒ Object



179
180
181
182
183
# File 'lib/sequel/extensions/cold_col.rb', line 179

def create_table_from_generator(name, generator, options)
  super.tap do |_|
    record_table(name, columns_from_generator(generator))
  end
end

#create_table_sql(name, generator, options) ⇒ Object



185
186
187
188
189
# File 'lib/sequel/extensions/cold_col.rb', line 185

def create_table_sql(name, generator, options)
  super.tap do |_|
    record_table(name, columns_from_generator(generator))
  end
end

#create_view_sql(name, source, options) ⇒ Object



191
192
193
194
195
# File 'lib/sequel/extensions/cold_col.rb', line 191

def create_view_sql(name, source, options)
  super.tap do |_|
    record_view(name, columns_from_sql(source)) unless options[:dont_record]
  end
end

#load_schema(path) ⇒ Object

Load table schema information from a YAML file



159
160
161
162
163
164
165
166
# File 'lib/sequel/extensions/cold_col.rb', line 159

def load_schema(path)
  schema_data = Psych.load_file(path) || {}
  schemas = schema_data.to_h do |table, info|
    columns = (info[:columns] || {}).map { |column_name, col_info| [column_name.to_sym, col_info] }
    [table.to_s, columns]
  end
  cold_col_registry.merge_schemas(schemas)
end

#record_table(name, columns) ⇒ Object



197
198
199
# File 'lib/sequel/extensions/cold_col.rb', line 197

def record_table(name, columns)
  cold_col_registry.add_created_table(literal(name), columns)
end

#record_view(name, columns) ⇒ Object



201
202
203
# File 'lib/sequel/extensions/cold_col.rb', line 201

def record_view(name, columns)
  cold_col_registry.add_created_view(literal(name), columns)
end