Sha256: 694bb2fb9d8a85aa6249f8ae8bc3bf89fd67c1a396eb5a8192ae99774c8c6876

Contents?: true

Size: 1.83 KB

Versions: 3

Compression:

Stored size: 1.83 KB

Contents

class Baza::Driver::Pg::Tables < Baza::Tables
  attr_reader :db

  def initialize(args)
    @args = args
    @db = @args.fetch(:db)
  end

  def [](table_name)
    table = list(name: table_name).first
    raise Baza::Errors::TableNotFound unless table
    table
  end

  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

  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
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
baza-0.0.38 lib/baza/driver/pg/tables.rb
baza-0.0.37 lib/baza/driver/pg/tables.rb
baza-0.0.36 lib/baza/driver/pg/tables.rb