class Baza::Driver::Pg::Tables

Attributes

db[R]

Public Class Methods

new(args) click to toggle source
# File lib/baza/driver/pg/tables.rb, line 4
def initialize(args)
  @args = args
  @db = @args.fetch(:db)
end

Public Instance Methods

[](table_name) click to toggle source
# File lib/baza/driver/pg/tables.rb, line 9
def [](table_name)
  table = list(name: table_name).first
  raise Baza::Errors::TableNotFound unless table
  table
end
create(table_name, data, args = nil) click to toggle source
# File lib/baza/driver/pg/tables.rb, line 42
def create(table_name, data, args = nil)
  table_name = table_name.to_s
  raise "Invalid table name: #{table_name}" if table_name.strip.empty?
  raise "No columns was given for '#{table_name}'." if !data[:columns] || data[:columns].empty?

  create_table_sql = "CREATE"
  create_table_sql << " TEMPORARY" if data[:temp]
  create_table_sql << " TABLE #{db.quote_table(table_name)} ("

  first = true
  data.fetch(:columns).each do |col_data|
    create_table_sql << ", " unless first
    first = false if first
    col_data.delete(:after) if col_data[:after]
    create_table_sql << db.columns.data_sql(col_data)
  end

  create_table_sql << ")"

  sqls = [create_table_sql]

  if data[:indexes] && !data[:indexes].empty?
    sqls += db.indexes.create_index(data.fetch(:indexes), table_name: table_name, return_sql: true)
  end

  if !args || !args[:return_sql]
    db.transaction do
      sqls.each do |sql|
        db.query(sql)
      end
    end
  else
    sqls
  end
end
list(args = {}) { |table| ... } click to toggle source
# File lib/baza/driver/pg/tables.rb, line 15
def list(args = {})
  tables_list = [] unless block_given?

  where_args = {
    table_catalog: @db.opts[:db],
    table_schema: "public"
  }
  where_args[:table_name] = args.fetch(:name) if args[:name]

  @db.select([:information_schema, :tables], where_args, orderby: :table_name) do |table_data|
    table = Baza::Driver::Pg::Table.new(
      driver: @db.driver,
      data: table_data
    )

    next if table.native?

    if tables_list
      tables_list << table
    else
      yield table
    end
  end

  tables_list
end