baza 0.0.20 → 0.0.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +84 -0
- data/.rubocop_todo.yml +17 -135
- data/.travis.yml +21 -0
- data/Gemfile +10 -7
- data/Gemfile.lock +39 -44
- data/README.md +61 -3
- data/VERSION +1 -1
- data/baza.gemspec +146 -98
- data/config/best_project_practice_rubocop.yml +8 -0
- data/config/best_project_practice_rubocop_todo.yml +6 -0
- data/lib/baza.rb +8 -12
- data/lib/baza/base_sql_driver.rb +198 -52
- data/lib/baza/cloner.rb +1 -0
- data/lib/baza/column.rb +26 -0
- data/lib/baza/database.rb +19 -3
- data/lib/baza/db.rb +69 -271
- data/lib/baza/driver.rb +1 -6
- data/lib/baza/{drivers → driver}/active_record.rb +65 -21
- data/lib/baza/{drivers → driver}/active_record/columns.rb +0 -0
- data/lib/baza/driver/active_record/commands.rb +10 -0
- data/lib/baza/driver/active_record/databases.rb +10 -0
- data/lib/baza/{drivers → driver}/active_record/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/active_record/result.rb +3 -1
- data/lib/baza/{drivers → driver}/active_record/tables.rb +0 -0
- data/lib/baza/driver/active_record/users.rb +12 -0
- data/lib/baza/{drivers → driver}/mysql.rb +9 -26
- data/lib/baza/{drivers → driver}/mysql/column.rb +14 -35
- data/lib/baza/{drivers → driver}/mysql/columns.rb +9 -12
- data/lib/baza/driver/mysql/commands.rb +39 -0
- data/lib/baza/driver/mysql/database.rb +64 -0
- data/lib/baza/driver/mysql/databases.rb +63 -0
- data/lib/baza/{drivers → driver}/mysql/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/result.rb +15 -7
- data/lib/baza/{drivers → driver}/mysql/sqlspecs.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/table.rb +27 -43
- data/lib/baza/{drivers → driver}/mysql/tables.rb +5 -34
- data/lib/baza/{drivers → driver}/mysql/unbuffered_result.rb +8 -2
- data/lib/baza/driver/mysql/user.rb +22 -0
- data/lib/baza/driver/mysql/users.rb +39 -0
- data/lib/baza/{drivers → driver}/mysql2.rb +19 -49
- data/lib/baza/{drivers → driver}/mysql2/column.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/columns.rb +0 -0
- data/lib/baza/driver/mysql2/commands.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql2/database.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/databases.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/result.rb +3 -1
- data/lib/baza/{drivers → driver}/mysql2/table.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/tables.rb +0 -0
- data/lib/baza/driver/mysql2/user.rb +2 -0
- data/lib/baza/driver/mysql2/users.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql_java.rb +60 -38
- data/lib/baza/{drivers → driver}/mysql_java/column.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/columns.rb +0 -0
- data/lib/baza/driver/mysql_java/commands.rb +2 -0
- data/lib/baza/driver/mysql_java/database.rb +2 -0
- data/lib/baza/driver/mysql_java/databases.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql_java/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/table.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/tables.rb +0 -0
- data/lib/baza/driver/mysql_java/user.rb +2 -0
- data/lib/baza/driver/mysql_java/users.rb +2 -0
- data/lib/baza/driver/pg.rb +80 -0
- data/lib/baza/driver/pg/column.rb +125 -0
- data/lib/baza/driver/pg/columns.rb +37 -0
- data/lib/baza/driver/pg/commands.rb +35 -0
- data/lib/baza/driver/pg/create_index_sql_creator.rb +51 -0
- data/lib/baza/driver/pg/database.rb +89 -0
- data/lib/baza/driver/pg/databases.rb +79 -0
- data/lib/baza/driver/pg/index.rb +35 -0
- data/lib/baza/driver/pg/indexes.rb +5 -0
- data/lib/baza/driver/pg/result.rb +139 -0
- data/lib/baza/driver/pg/table.rb +184 -0
- data/lib/baza/driver/pg/tables.rb +45 -0
- data/lib/baza/{drivers → driver}/sqlite3.rb +6 -24
- data/lib/baza/{drivers → driver}/sqlite3/column.rb +22 -24
- data/lib/baza/{drivers → driver}/sqlite3/columns.rb +6 -6
- data/lib/baza/driver/sqlite3/commands.rb +28 -0
- data/lib/baza/{drivers → driver}/sqlite3/database.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/databases.rb +0 -1
- data/lib/baza/{drivers → driver}/sqlite3/index.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/result.rb +14 -6
- data/lib/baza/{drivers → driver}/sqlite3/sqlspecs.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/table.rb +25 -16
- data/lib/baza/{drivers → driver}/sqlite3/tables.rb +5 -6
- data/lib/baza/{drivers → driver}/sqlite3/unbuffered_result.rb +8 -2
- data/lib/baza/{drivers → driver}/sqlite3_java.rb +13 -23
- data/lib/baza/{drivers → driver}/sqlite3_java/column.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/columns.rb +0 -0
- data/lib/baza/driver/sqlite3_java/commands.rb +2 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/database.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/index.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/table.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/tables.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/unbuffered_result.rb +14 -9
- data/lib/baza/{drivers → driver}/sqlite3_rhodes.rb +6 -24
- data/lib/baza/errors.rb +2 -0
- data/lib/baza/idquery.rb +15 -8
- data/lib/baza/index.rb +7 -0
- data/lib/baza/jdbc_driver.rb +4 -16
- data/lib/baza/jdbc_result.rb +20 -12
- data/lib/baza/mysql_base_driver.rb +7 -7
- data/lib/baza/query_buffer.rb +20 -19
- data/lib/baza/row.rb +16 -16
- data/lib/baza/sql_queries.rb +3 -0
- data/lib/baza/sql_queries/generic_insert.rb +81 -0
- data/lib/baza/sql_queries/generic_update.rb +31 -0
- data/lib/baza/sql_queries/mysql_upsert.rb +52 -0
- data/lib/baza/sql_queries/mysql_upsert_duplicate_key.rb +57 -0
- data/lib/baza/sql_queries/non_atomic_upsert.rb +25 -0
- data/lib/baza/sql_queries/postgres_upsert_duplicate_key.rb +118 -0
- data/lib/baza/sql_queries/select.rb +170 -0
- data/lib/baza/sql_queries/sqlite_upsert_duplicate_key.rb +99 -0
- data/lib/baza/table.rb +35 -8
- data/spec/active_record/models/user.rb +3 -0
- data/spec/{cloner_spec.rb → baza/cloner_spec.rb} +0 -0
- data/spec/drivers/active_record_mysql2_spec.rb +5 -3
- data/spec/drivers/active_record_mysql_spec.rb +2 -1
- data/spec/drivers/active_record_pg_spec.rb +20 -0
- data/spec/drivers/active_record_sqlite3_spec.rb +2 -1
- data/spec/drivers/mysql2_spec.rb +1 -1
- data/spec/drivers/mysql_spec.rb +10 -10
- data/spec/drivers/pg_spec.rb +18 -0
- data/spec/drivers/sqlite3_spec.rb +7 -8
- data/spec/info_active_record_example.rb +1 -1
- data/spec/{info_active_record_mysql2.rb → info_active_record_mysql2_example.rb} +3 -2
- data/spec/info_active_record_mysql2_travis.rb +35 -0
- data/spec/{info_active_record_mysql.rb → info_active_record_mysql_example.rb} +5 -4
- data/spec/info_active_record_mysql_travis.rb +36 -0
- data/spec/info_active_record_pg_example.rb +36 -0
- data/spec/info_active_record_pg_travis.rb +34 -0
- data/spec/info_active_record_sqlite3.rb +1 -1
- data/spec/info_mysql2_example.rb +1 -3
- data/spec/{info_mysql2_shippable.rb → info_mysql2_travis.rb} +2 -4
- data/spec/info_mysql_example.rb +1 -3
- data/spec/{info_mysql_shippable.rb → info_mysql_travis.rb} +2 -4
- data/spec/info_pg_example.rb +22 -0
- data/spec/info_pg_travis.rb +20 -0
- data/spec/info_sqlite3.rb +1 -3
- data/spec/spec_helper.rb +1 -1
- data/spec/support/driver_active_record_collection.rb +62 -0
- data/spec/support/driver_collection.rb +136 -121
- data/spec/support/driver_columns_collection.rb +19 -10
- data/spec/support/driver_databases_collection.rb +23 -1
- data/spec/support/driver_indexes_collection.rb +2 -2
- data/spec/support/driver_tables_collection.rb +24 -4
- data/spec/support/driver_users_collection.rb +53 -0
- metadata +185 -104
- data/lib/baza/drivers/mysql/database.rb +0 -28
- data/lib/baza/drivers/mysql/databases.rb +0 -35
- data/lib/baza/drivers/mysql_java/database.rb +0 -2
- data/lib/baza/drivers/mysql_java/databases.rb +0 -2
- data/lib/baza/model.rb +0 -875
- data/lib/baza/model_custom.rb +0 -155
- data/lib/baza/model_handler.rb +0 -910
- data/lib/baza/model_handler_sqlhelper.rb +0 -484
- data/lib/baza/revision.rb +0 -383
- data/shippable.yml +0 -17
- data/spec/info_active_record_mysql2_shippable.rb +0 -34
- data/spec/info_active_record_mysql_shippable.rb +0 -34
- data/spec/model_handler_spec.rb +0 -431
@@ -0,0 +1,39 @@
|
|
1
|
+
class Baza::Driver::Mysql::Commands
|
2
|
+
def initialize(args)
|
3
|
+
@db = args.fetch(:db)
|
4
|
+
end
|
5
|
+
|
6
|
+
def upsert_duplicate_key(table_name, updates, terms, args = {})
|
7
|
+
Baza::SqlQueries::MysqlUpsertDuplicateKey.new(
|
8
|
+
db: @db,
|
9
|
+
table_name: table_name,
|
10
|
+
updates: updates,
|
11
|
+
terms: terms,
|
12
|
+
buffer: args[:buffer],
|
13
|
+
return_id: args[:return_id]
|
14
|
+
).execute
|
15
|
+
end
|
16
|
+
|
17
|
+
def upsert(table_name, updates, terms, args = {})
|
18
|
+
if args[:buffer]
|
19
|
+
Baza::SqlQueries::NonAtomicUpsert.new(
|
20
|
+
db: @db,
|
21
|
+
table_name: table_name,
|
22
|
+
buffer: args[:buffer],
|
23
|
+
terms: terms,
|
24
|
+
updates: updates
|
25
|
+
).execute
|
26
|
+
else
|
27
|
+
Baza::SqlQueries::MysqlUpsert.new(
|
28
|
+
db: @db,
|
29
|
+
table_name: table_name,
|
30
|
+
updates: updates,
|
31
|
+
terms: terms
|
32
|
+
).execute
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def last_id
|
37
|
+
@db.query("SELECT LAST_INSERT_ID() AS `id`").fetch.fetch(:id).to_i
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Baza::Driver::Mysql::Database < Baza::Database
|
2
|
+
def save!
|
3
|
+
rename(name) unless name.to_s == name_was
|
4
|
+
self
|
5
|
+
end
|
6
|
+
|
7
|
+
def drop
|
8
|
+
sql = "DROP DATABASE `#{@db.escape_database(name)}`"
|
9
|
+
@db.query(sql)
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
CREATE_ALLOWED_KEYS = [:columns, :indexes, :temp, :return_sql].freeze
|
14
|
+
# Creates a new table by the given name and data.
|
15
|
+
def create_table(name, data, args = nil)
|
16
|
+
raise "No columns was given for '#{name}'." if !data[:columns] || data[:columns].empty?
|
17
|
+
|
18
|
+
sql = "CREATE"
|
19
|
+
sql << " TEMPORARY" if data[:temp]
|
20
|
+
sql << " TABLE #{db.sep_table}#{@db.escape_table(name)}#{db.sep_table} ("
|
21
|
+
|
22
|
+
first = true
|
23
|
+
data[:columns].each do |col_data|
|
24
|
+
sql << ", " unless first
|
25
|
+
first = false if first
|
26
|
+
col_data.delete(:after) if col_data[:after]
|
27
|
+
sql << @db.columns.data_sql(col_data)
|
28
|
+
end
|
29
|
+
|
30
|
+
if data[:indexes] && !data[:indexes].empty?
|
31
|
+
sql << ", "
|
32
|
+
sql << Baza::Driver::Mysql::Table.create_indexes(
|
33
|
+
data[:indexes],
|
34
|
+
db: @db,
|
35
|
+
return_sql: true,
|
36
|
+
create: false,
|
37
|
+
on_table: false,
|
38
|
+
table_name: name
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
sql << ")"
|
43
|
+
|
44
|
+
return [sql] if args && args[:return_sql]
|
45
|
+
|
46
|
+
use { @db.query(sql) }
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def rename(new_name)
|
52
|
+
new_name = new_name.to_s
|
53
|
+
@db.databases.create(name: new_name)
|
54
|
+
|
55
|
+
tables.each do |table|
|
56
|
+
@db.query("ALTER TABLE `#{@db.escape_database(name_was)}`.`#{@db.escape_table(table.name)}` RENAME `#{@db.escape_database(name)}`.`#{@db.escape_table(table.name)}`")
|
57
|
+
end
|
58
|
+
|
59
|
+
@db.query("DROP DATABASE `#{@db.escape_database(name_was)}`")
|
60
|
+
|
61
|
+
@name = new_name
|
62
|
+
@name_was = new_name
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Baza::Driver::Mysql::Databases
|
2
|
+
def initialize(args)
|
3
|
+
@db = args.fetch(:db)
|
4
|
+
end
|
5
|
+
|
6
|
+
def create(args)
|
7
|
+
sql = "CREATE DATABASE"
|
8
|
+
sql << " IF NOT EXISTS" if args[:if_not_exists]
|
9
|
+
sql << " #{@db.sep_database}#{@db.escape_table(args.fetch(:name))}#{@db.sep_database}"
|
10
|
+
|
11
|
+
@db.query(sql)
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](name)
|
16
|
+
name = name.to_s
|
17
|
+
list.each do |database|
|
18
|
+
return database if database.name == name
|
19
|
+
end
|
20
|
+
|
21
|
+
raise Baza::Errors::DatabaseNotFound
|
22
|
+
end
|
23
|
+
|
24
|
+
def list
|
25
|
+
ArrayEnumerator.new do |yielder|
|
26
|
+
@db.query("SHOW DATABASES") do |data|
|
27
|
+
yielder << Baza::Driver::Mysql::Database.new(
|
28
|
+
name: data.fetch(:Database),
|
29
|
+
driver: self,
|
30
|
+
db: @db
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def with_database(name)
|
37
|
+
if @db.opts[:db].to_s == name.to_s
|
38
|
+
yield if block_given?
|
39
|
+
return self
|
40
|
+
end
|
41
|
+
|
42
|
+
previous_db_name = @db.current_database_name
|
43
|
+
@db.query("USE #{@db.sep_database}#{@db.escape_database(name)}#{@db.sep_database}")
|
44
|
+
|
45
|
+
if block_given?
|
46
|
+
begin
|
47
|
+
yield
|
48
|
+
ensure
|
49
|
+
@db.query("USE #{@db.sep_database}#{@db.escape_database(previous_db_name)}#{@db.sep_database}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def current_database_name
|
57
|
+
@db.query("SELECT DATABASE()").fetch.values.first
|
58
|
+
end
|
59
|
+
|
60
|
+
def current_database
|
61
|
+
@db.databases[current_database_name]
|
62
|
+
end
|
63
|
+
end
|
File without changes
|
File without changes
|
@@ -5,25 +5,25 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
5
5
|
::Mysql::Field::TYPE_TINY => true,
|
6
6
|
::Mysql::Field::TYPE_LONG => true,
|
7
7
|
::Mysql::Field::TYPE_YEAR => true
|
8
|
-
}
|
8
|
+
}.freeze
|
9
9
|
FLOAT_TYPES = {
|
10
10
|
::Mysql::Field::TYPE_DECIMAL => true,
|
11
11
|
::Mysql::Field::TYPE_FLOAT => true,
|
12
12
|
::Mysql::Field::TYPE_DOUBLE => true
|
13
|
-
}
|
13
|
+
}.freeze
|
14
14
|
TIME_TYPES = {
|
15
15
|
::Mysql::Field::TYPE_DATETIME => true
|
16
|
-
}
|
16
|
+
}.freeze
|
17
17
|
DATE_TYPES = {
|
18
18
|
::Mysql::Field::TYPE_DATE => true
|
19
|
-
}
|
19
|
+
}.freeze
|
20
20
|
|
21
21
|
# Constructor. This should not be called manually.
|
22
22
|
def initialize(driver, result)
|
23
23
|
@driver = driver
|
24
24
|
@result = result
|
25
25
|
@mutex = Mutex.new
|
26
|
-
@type_translation = driver.
|
26
|
+
@type_translation = driver.db.opts[:type_translation]
|
27
27
|
|
28
28
|
return unless @result
|
29
29
|
|
@@ -49,6 +49,8 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
49
49
|
fetched.collect!.with_index do |value, count|
|
50
50
|
translate_value_to_type(value, @types[count])
|
51
51
|
end
|
52
|
+
elsif @type_translation == :string
|
53
|
+
fetched.collect!(&:to_s)
|
52
54
|
end
|
53
55
|
|
54
56
|
Hash[*@keys.zip(fetched).flatten]
|
@@ -56,8 +58,14 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
56
58
|
|
57
59
|
# Loops over every result yielding it.
|
58
60
|
def each
|
59
|
-
|
60
|
-
|
61
|
+
loop do
|
62
|
+
data = fetch
|
63
|
+
|
64
|
+
if data
|
65
|
+
yield data
|
66
|
+
else
|
67
|
+
break
|
68
|
+
end
|
61
69
|
end
|
62
70
|
end
|
63
71
|
|
File without changes
|
@@ -6,25 +6,33 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
6
6
|
@data = args.fetch(:data)
|
7
7
|
@list = Wref::Map.new
|
8
8
|
@indexes_list = Wref::Map.new
|
9
|
-
@name = @data.fetch(:
|
9
|
+
@name = @data.fetch(:TABLE_NAME)
|
10
10
|
@tables = args.fetch(:tables)
|
11
11
|
end
|
12
12
|
|
13
13
|
def reload
|
14
|
-
data = @db.
|
14
|
+
data = @db.single([:information_schema, :tables], "TABLE_SCHEMA" => database_name, "TABLE_NAME" => name)
|
15
15
|
raise Baza::Errors::TableNotFound unless data
|
16
16
|
@data = data
|
17
17
|
self
|
18
18
|
end
|
19
19
|
|
20
|
+
def database_name
|
21
|
+
@data.fetch(:TABLE_SCHEMA)
|
22
|
+
end
|
23
|
+
|
20
24
|
# Used to validate in Wref::Map.
|
21
25
|
def __object_unique_id__
|
22
26
|
name
|
23
27
|
end
|
24
28
|
|
25
29
|
def drop
|
26
|
-
raise "Cant drop native table: '#{name}'
|
27
|
-
|
30
|
+
raise "Cant drop native table: '#{name}'" if native?
|
31
|
+
|
32
|
+
@db.with_database(database_name) do
|
33
|
+
@db.query("DROP TABLE `#{@db.escape_table(name)}`")
|
34
|
+
end
|
35
|
+
|
28
36
|
@tables.__send__(:remove_from_list, self)
|
29
37
|
nil
|
30
38
|
end
|
@@ -41,16 +49,11 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
41
49
|
self
|
42
50
|
end
|
43
51
|
|
44
|
-
def rows_count
|
45
|
-
@db.query("SELECT COUNT(*) AS count FROM `#{@db.escape_table(name)}`").fetch.fetch(:count).to_i
|
46
|
-
end
|
47
|
-
|
48
52
|
def column(name)
|
49
53
|
name = name.to_s
|
50
54
|
|
51
|
-
|
52
|
-
|
53
|
-
end
|
55
|
+
col = @list.get(name)
|
56
|
+
return col if col
|
54
57
|
|
55
58
|
columns(name: name) do |col_i|
|
56
59
|
return col_i if col_i.name == name
|
@@ -60,7 +63,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
60
63
|
end
|
61
64
|
|
62
65
|
def columns(args = nil)
|
63
|
-
@db.
|
66
|
+
@db.columns
|
64
67
|
ret = []
|
65
68
|
sql = "SHOW FULL COLUMNS FROM `#{@db.escape_table(name)}`"
|
66
69
|
sql << " WHERE `Field` = '#{@db.esc(args.fetch(:name))}'" if args && args.key?(:name)
|
@@ -131,9 +134,8 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
131
134
|
def index(name)
|
132
135
|
name = name.to_s
|
133
136
|
|
134
|
-
|
135
|
-
|
136
|
-
end
|
137
|
+
index = @indexes_list.get(name)
|
138
|
+
return index if index
|
137
139
|
|
138
140
|
indexes(name: name) do |index_i|
|
139
141
|
return index_i if index_i.name == name
|
@@ -142,15 +144,6 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
142
144
|
raise Baza::Errors::IndexNotFound, "Index not found: #{name}."
|
143
145
|
end
|
144
146
|
|
145
|
-
def create_columns(col_arr)
|
146
|
-
@db.transaction do
|
147
|
-
col_arr.each do |col_data|
|
148
|
-
sql = "ALTER TABLE `#{name}` ADD COLUMN #{@db.cols.data_sql(col_data)};"
|
149
|
-
@db.query(sql)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
147
|
def create_indexes(index_arr, args = {})
|
155
148
|
Baza::Driver::Mysql::Table.create_indexes(index_arr, args.merge(table_name: name, db: @db))
|
156
149
|
end
|
@@ -184,10 +177,10 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
184
177
|
end
|
185
178
|
|
186
179
|
sql << " UNIQUE" if index_data[:unique]
|
187
|
-
sql << " INDEX
|
180
|
+
sql << " INDEX #{db.sep_index}#{db.escape_index(index_data.fetch(:name))}#{db.sep_index}"
|
188
181
|
|
189
182
|
if args[:on_table] || !args.key?(:on_table)
|
190
|
-
sql << " ON
|
183
|
+
sql << " ON #{db.sep_table}#{db.escape_table(args.fetch(:table_name))}#{db.sep_table}"
|
191
184
|
end
|
192
185
|
|
193
186
|
sql << " ("
|
@@ -197,7 +190,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
197
190
|
sql << ", " unless first
|
198
191
|
first = false if first
|
199
192
|
|
200
|
-
sql << "
|
193
|
+
sql << "#{db.sep_col}#{db.escape_column(col_name)}#{db.sep_col}"
|
201
194
|
end
|
202
195
|
|
203
196
|
sql << ")"
|
@@ -228,11 +221,6 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
228
221
|
end
|
229
222
|
end
|
230
223
|
|
231
|
-
def truncate
|
232
|
-
@db.query("TRUNCATE `#{@db.escape_table(name)}`")
|
233
|
-
self
|
234
|
-
end
|
235
|
-
|
236
224
|
def data
|
237
225
|
ret = {
|
238
226
|
name: name,
|
@@ -251,14 +239,10 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
251
239
|
ret
|
252
240
|
end
|
253
241
|
|
254
|
-
def insert(data)
|
255
|
-
@db.insert(name, data)
|
256
|
-
end
|
257
|
-
|
258
242
|
def clone(newname, args = {})
|
259
243
|
raise "Invalid name." if newname.to_s.strip.empty?
|
260
244
|
|
261
|
-
sql = "CREATE TABLE
|
245
|
+
sql = "CREATE TABLE #{@db.sep_table}#{@db.escape_table(newname)}#{@db.sep_table} ("
|
262
246
|
first = true
|
263
247
|
pkey_found = false
|
264
248
|
pkeys = []
|
@@ -281,7 +265,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
281
265
|
|
282
266
|
col_data[:storage] = args[:all_cols_storage] if args[:all_cols_storage]
|
283
267
|
|
284
|
-
sql << @db.
|
268
|
+
sql << @db.columns.data_sql(col_data)
|
285
269
|
end
|
286
270
|
|
287
271
|
unless pkeys.empty?
|
@@ -291,7 +275,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
291
275
|
pkeys.each do |pkey|
|
292
276
|
sql << ", " unless first
|
293
277
|
first = false if first
|
294
|
-
sql << "
|
278
|
+
sql << "#{@db.sep_col}#{@db.escape_column(pkey)}#{@db.sep_col}"
|
295
279
|
end
|
296
280
|
|
297
281
|
sql << ")"
|
@@ -307,7 +291,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
307
291
|
|
308
292
|
|
309
293
|
# Insert data of previous data in a single query.
|
310
|
-
@db.query("INSERT INTO
|
294
|
+
@db.query("INSERT INTO #{@db.sep_table}#{@db.escape_table(newname)}#{@db.sep_table} SELECT * FROM #{@db.sep_table}#{@db.escape_table(name)}#{@db.sep_table}")
|
311
295
|
|
312
296
|
|
313
297
|
# Create indexes.
|
@@ -326,14 +310,14 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
326
310
|
|
327
311
|
# Returns the current engine of the table.
|
328
312
|
def engine
|
329
|
-
@data
|
313
|
+
@data.fetch(:ENGINE)
|
330
314
|
end
|
331
315
|
|
332
316
|
# Changes the engine for a table.
|
333
317
|
def engine=(newengine)
|
334
|
-
raise "Invalid engine: '#{newengine}'." unless newengine.to_s
|
318
|
+
raise "Invalid engine: '#{newengine}'." unless newengine.to_s =~ /^[A-z]+$/
|
335
319
|
@db.query("ALTER TABLE `#{@db.escape_table(name)}` ENGINE = #{newengine}") if engine.to_s != newengine.to_s
|
336
|
-
@data[:
|
320
|
+
@data[:ENGINE] = newengine
|
337
321
|
end
|
338
322
|
|
339
323
|
private
|
@@ -7,7 +7,7 @@ class Baza::Driver::Mysql::Tables
|
|
7
7
|
# Constructor. This should not be called manually.
|
8
8
|
def initialize(args)
|
9
9
|
@args = args
|
10
|
-
@db = @args
|
10
|
+
@db = @args.fetch(:db)
|
11
11
|
@list_mutex = Monitor.new
|
12
12
|
@list = Wref::Map.new
|
13
13
|
@list_should_be_reloaded = true
|
@@ -22,9 +22,8 @@ class Baza::Driver::Mysql::Tables
|
|
22
22
|
def [](table_name)
|
23
23
|
table_name = table_name.to_s
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
end
|
25
|
+
table = @list[table_name]
|
26
|
+
return table if table
|
28
27
|
|
29
28
|
list(name: table_name) do |table_i|
|
30
29
|
return table_i if table_i.name == table_name
|
@@ -54,7 +53,7 @@ class Baza::Driver::Mysql::Tables
|
|
54
53
|
unless obj
|
55
54
|
obj = Baza::Driver::Mysql::Table.new(
|
56
55
|
db: @db,
|
57
|
-
data:
|
56
|
+
data: d_tables,
|
58
57
|
tables: self
|
59
58
|
)
|
60
59
|
@list[name] = obj
|
@@ -75,36 +74,8 @@ class Baza::Driver::Mysql::Tables
|
|
75
74
|
end
|
76
75
|
end
|
77
76
|
|
78
|
-
CREATE_ALLOWED_KEYS = [:columns, :indexes, :temp, :return_sql]
|
79
|
-
# Creates a new table by the given name and data.
|
80
77
|
def create(name, data, args = nil)
|
81
|
-
|
82
|
-
|
83
|
-
sql = "CREATE"
|
84
|
-
sql << " TEMPORARY" if data[:temp]
|
85
|
-
sql << " TABLE `#{name}` ("
|
86
|
-
|
87
|
-
first = true
|
88
|
-
data[:columns].each do |col_data|
|
89
|
-
sql << ", " unless first
|
90
|
-
first = false if first
|
91
|
-
col_data.delete(:after) if col_data[:after]
|
92
|
-
sql << @db.cols.data_sql(col_data)
|
93
|
-
end
|
94
|
-
|
95
|
-
if data[:indexes] && !data[:indexes].empty?
|
96
|
-
sql << ", "
|
97
|
-
sql << Baza::Driver::Mysql::Table.create_indexes(data[:indexes], db: @db,
|
98
|
-
return_sql: true,
|
99
|
-
create: false,
|
100
|
-
on_table: false,
|
101
|
-
table_name: name)
|
102
|
-
end
|
103
|
-
|
104
|
-
sql << ")"
|
105
|
-
|
106
|
-
return [sql] if args && args[:return_sql]
|
107
|
-
@db.query(sql)
|
78
|
+
@db.current_database.create_table(name, data, args)
|
108
79
|
end
|
109
80
|
|
110
81
|
private
|