Class: Baza::Driver::Mysql::Tables

Inherits:
Object
  • Object
show all
Defined in:
lib/baza/drivers/mysql/tables.rb

Overview

This class handels various MySQL-table-specific behaviour.

Constant Summary collapse

CREATE_ALLOWED_KEYS =
[:columns, :indexes, :temp, :return_sql]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Tables

Constructor. This should not be called manually.



8
9
10
11
12
13
14
# File 'lib/baza/drivers/mysql/tables.rb', line 8

def initialize(args)
  @args = args
  @db = @args[:db]
  @list_mutex = Monitor.new
  @list = Wref::Map.new
  @list_should_be_reloaded = true
end

Instance Attribute Details

#dbObject (readonly)

Returns the value of attribute db.



5
6
7
# File 'lib/baza/drivers/mysql/tables.rb', line 5

def db
  @db
end

#list(args = {}) ⇒ Object (readonly)

Yields the tables of the current database.



42
43
44
# File 'lib/baza/drivers/mysql/tables.rb', line 42

def list
  @list
end

Instance Method Details

#[](table_name) ⇒ Object

Returns a table by the given table-name.

Raises:

  • (Errno::ENOENT)


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/baza/drivers/mysql/tables.rb', line 22

def [](table_name)
  table_name = table_name.to_sym

  if table = @list[table_name]
    return table
  end

  tables = []
  list(name: table_name) do |table_obj|
    return table_obj if table_obj.name == table_name
  end

  list do |table_obj|
    tables << table_obj.name
  end

  raise Errno::ENOENT, "Table was not found: '#{table_name}' (#{table_name.class.name}) (tables: #{tables})."
end

#cleanObject

Cleans the wref-map.



17
18
19
# File 'lib/baza/drivers/mysql/tables.rb', line 17

def clean
  @list.clean
end

#create(name, data, args = nil) ⇒ Object

Creates a new table by the given name and data.



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/baza/drivers/mysql/tables.rb', line 80

def create(name, data, args = nil)
  raise "No columns was given for '#{name}'." if !data[:columns] || data[:columns].empty?

  sql = "CREATE"
  sql << " TEMPORARY" if data[:temp]
  sql << " TABLE `#{name}` ("

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

  if data[:indexes] && !data[:indexes].empty?
    sql << ", "
    sql << Baza::Driver::Mysql::Table.create_indexes(data[:indexes], {
      db: @db,
      return_sql: true,
      create: false,
      on_table: false,
      table_name: name
    })
  end

  sql << ")"

  return [sql] if args && args[:return_sql]
  @db.query(sql)
end