baza 0.0.20 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
class Baza::Driver::Sqlite3Java::UnbufferedResult < Baza::ResultBase
|
|
2
2
|
def initialize(_driver, result_set)
|
|
3
3
|
@result_set = result_set
|
|
4
|
+
return unless @result_set
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@columns_count = metadata.column_count
|
|
6
|
+
metadata = @result_set.meta_data
|
|
7
|
+
@columns_count = metadata.column_count
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
end
|
|
9
|
+
@columns = []
|
|
10
|
+
1.upto(@columns_count) do |count|
|
|
11
|
+
@columns << metadata.column_name(count).to_sym
|
|
13
12
|
end
|
|
14
13
|
end
|
|
15
14
|
|
|
@@ -26,8 +25,14 @@ class Baza::Driver::Sqlite3Java::UnbufferedResult < Baza::ResultBase
|
|
|
26
25
|
end
|
|
27
26
|
|
|
28
27
|
def each
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
loop do
|
|
29
|
+
data = fetch
|
|
30
|
+
|
|
31
|
+
if data
|
|
32
|
+
yield data
|
|
33
|
+
else
|
|
34
|
+
break
|
|
35
|
+
end
|
|
31
36
|
end
|
|
32
37
|
end
|
|
33
38
|
end
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
# This class handels SQLite3-specific behaviour.
|
|
2
2
|
class Baza::Driver::Sqlite3Rhodes < Baza::BaseSqlDriver
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
autoload :Database, "#{path}/database"
|
|
6
|
-
autoload :Databases, "#{path}/databases"
|
|
7
|
-
autoload :Table, "#{path}/table"
|
|
8
|
-
autoload :Tables, "#{path}/tables"
|
|
9
|
-
autoload :Column, "#{path}/column"
|
|
10
|
-
autoload :Columns, "#{path}/columns"
|
|
11
|
-
autoload :Index, "#{path}/index"
|
|
12
|
-
autoload :Indexes, "#{path}/indexes"
|
|
13
|
-
autoload :Result, "#{path}/result"
|
|
14
|
-
autoload :Sqlspecs, "#{path}/sqlspecs"
|
|
15
|
-
autoload :UnbufferedResult, "#{path}/unbuffered_result"
|
|
3
|
+
AutoAutoloader.autoload_sub_classes(self, __FILE__)
|
|
16
4
|
|
|
17
5
|
attr_reader :mutex_statement_reader
|
|
18
6
|
|
|
@@ -30,14 +18,14 @@ class Baza::Driver::Sqlite3Rhodes < Baza::BaseSqlDriver
|
|
|
30
18
|
end
|
|
31
19
|
|
|
32
20
|
# Constructor. This should not be called manually.
|
|
33
|
-
def initialize(
|
|
21
|
+
def initialize(db)
|
|
34
22
|
super
|
|
35
23
|
|
|
36
|
-
@path = @
|
|
24
|
+
@path = @db.opts[:path] if @db.opts[:path]
|
|
37
25
|
@mutex_statement_reader = Mutex.new
|
|
38
26
|
|
|
39
|
-
if @
|
|
40
|
-
@conn = @
|
|
27
|
+
if @db.opts[:conn]
|
|
28
|
+
@conn = @db.opts[:conn]
|
|
41
29
|
else
|
|
42
30
|
raise "No path was given." unless @path
|
|
43
31
|
@conn = ::SQLite3::Database.new(@path, @path)
|
|
@@ -60,12 +48,6 @@ class Baza::Driver::Sqlite3Rhodes < Baza::BaseSqlDriver
|
|
|
60
48
|
string.to_s.gsub(/'/, "''")
|
|
61
49
|
end
|
|
62
50
|
|
|
63
|
-
# Returns the last inserted ID.
|
|
64
|
-
def last_id
|
|
65
|
-
return @conn.last_insert_row_id if @conn.respond_to?(:last_insert_row_id)
|
|
66
|
-
query("SELECT last_insert_rowid() AS id").fetch[:id].to_i
|
|
67
|
-
end
|
|
68
|
-
|
|
69
51
|
# Closes the connection to the database.
|
|
70
52
|
def close
|
|
71
53
|
@mutex_statement_reader.synchronize do
|
|
@@ -75,6 +57,6 @@ class Baza::Driver::Sqlite3Rhodes < Baza::BaseSqlDriver
|
|
|
75
57
|
|
|
76
58
|
# Starts a transaction, yields the database and commits.
|
|
77
59
|
def transaction
|
|
78
|
-
@conn.transaction { yield @
|
|
60
|
+
@conn.transaction { yield @db }
|
|
79
61
|
end
|
|
80
62
|
end
|
data/lib/baza/errors.rb
CHANGED
|
@@ -2,7 +2,9 @@ class Baza::Errors
|
|
|
2
2
|
class DatabaseNotFound < RuntimeError; end
|
|
3
3
|
class ColumnNotFound < RuntimeError; end
|
|
4
4
|
class IndexNotFound < RuntimeError; end
|
|
5
|
+
class UserNotFound < RuntimeError; end
|
|
5
6
|
class NotImplemented < RuntimeError; end
|
|
6
7
|
class Retry < RuntimeError; end
|
|
7
8
|
class TableNotFound < RuntimeError; end
|
|
9
|
+
class RowNotFound < RuntimeError; end
|
|
8
10
|
end
|
data/lib/baza/idquery.rb
CHANGED
|
@@ -12,11 +12,12 @@ class Baza::Idquery
|
|
|
12
12
|
# end
|
|
13
13
|
def initialize(args, &block)
|
|
14
14
|
@args = args
|
|
15
|
+
@db = args.fetch(:db)
|
|
15
16
|
@ids = []
|
|
16
17
|
@debug = @args[:debug]
|
|
17
18
|
|
|
18
19
|
if @args[:query]
|
|
19
|
-
@
|
|
20
|
+
@db.q(@args.fetch(:query)) do |data|
|
|
20
21
|
@args[:col] = data.keys.first unless @args[:col]
|
|
21
22
|
|
|
22
23
|
if data.is_a?(Array)
|
|
@@ -69,8 +70,14 @@ class Baza::Idquery
|
|
|
69
70
|
# print "Name: #{data[:name]}\n"
|
|
70
71
|
# end
|
|
71
72
|
def each
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
loop do
|
|
74
|
+
data = fetch
|
|
75
|
+
|
|
76
|
+
if data
|
|
77
|
+
yield data
|
|
78
|
+
else
|
|
79
|
+
break
|
|
80
|
+
end
|
|
74
81
|
end
|
|
75
82
|
end
|
|
76
83
|
|
|
@@ -78,8 +85,8 @@ private
|
|
|
78
85
|
|
|
79
86
|
# Spawns a new database-result to read from.
|
|
80
87
|
def new_res
|
|
81
|
-
table_esc = "
|
|
82
|
-
col_esc = "
|
|
88
|
+
table_esc = "#{@db.sep_table}#{@db.escape_table(@args[:table])}#{@db.sep_table}"
|
|
89
|
+
col_esc = "#{@db.sep_col}#{@db.escape_column(@args[:col])}#{@db.sep_col}"
|
|
83
90
|
ids = @ids.shift(@args[:size])
|
|
84
91
|
|
|
85
92
|
if ids.empty?
|
|
@@ -87,11 +94,11 @@ private
|
|
|
87
94
|
return nil
|
|
88
95
|
end
|
|
89
96
|
|
|
90
|
-
ids_sql = ids.map { |id| "
|
|
97
|
+
ids_sql = ids.map { |id| "#{@db.sep_val}#{@db.esc(id)}#{@db.sep_val}" }.join(",")
|
|
91
98
|
query_str = "SELECT * FROM #{table_esc} WHERE #{table_esc}.#{col_esc} IN (#{ids_sql})"
|
|
92
|
-
|
|
99
|
+
puts "Query: #{query_str}" if @debug
|
|
93
100
|
|
|
94
|
-
@
|
|
101
|
+
@db.q(query_str)
|
|
95
102
|
end
|
|
96
103
|
|
|
97
104
|
# Removes all variables on the object. This is done when no more results are available.
|
data/lib/baza/index.rb
CHANGED
data/lib/baza/jdbc_driver.rb
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
class Baza::JdbcDriver < Baza::BaseSqlDriver
|
|
2
|
-
path = "#{File.dirname(__FILE__)}/mysql_java"
|
|
3
|
-
|
|
4
|
-
autoload :Table, "#{path}/table"
|
|
5
|
-
autoload :Tables, "#{path}/tables"
|
|
6
|
-
autoload :Column, "#{path}/column"
|
|
7
|
-
autoload :Columns, "#{path}/columns"
|
|
8
|
-
autoload :Index, "#{path}/index"
|
|
9
|
-
autoload :Indexes, "#{path}/indexes"
|
|
10
|
-
autoload :Result, "#{path}/result"
|
|
11
|
-
autoload :UnbufferedResult, "#{path}/unbuffered_result"
|
|
12
|
-
autoload :Sqlspecs, "#{path}/sqlspecs"
|
|
13
|
-
|
|
14
2
|
attr_reader :conn, :conns
|
|
15
3
|
|
|
16
|
-
def initialize(
|
|
4
|
+
def initialize(db)
|
|
17
5
|
@java_rs_data = {}
|
|
18
6
|
@mutex = ::Mutex.new
|
|
19
7
|
super
|
|
@@ -41,7 +29,7 @@ class Baza::JdbcDriver < Baza::BaseSqlDriver
|
|
|
41
29
|
query_with_statement(str, false) do
|
|
42
30
|
stmt = @conn.create_statement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY)
|
|
43
31
|
|
|
44
|
-
if @
|
|
32
|
+
if @db.opts[:type] == :sqlite3_java
|
|
45
33
|
stmt.fetch_size = 1
|
|
46
34
|
else
|
|
47
35
|
stmt.fetch_size = java.lang.Integer::MIN_VALUE
|
|
@@ -61,10 +49,10 @@ private
|
|
|
61
49
|
def query_with_statement(sql, preload_results)
|
|
62
50
|
@mutex.synchronize do
|
|
63
51
|
begin
|
|
64
|
-
if sql
|
|
52
|
+
if sql =~ /^\s*(delete|update|create|drop|insert\s+into|alter|truncate)\s+/i
|
|
65
53
|
return query_no_result_set(sql)
|
|
66
54
|
else
|
|
67
|
-
stmt = yield
|
|
55
|
+
stmt = yield
|
|
68
56
|
|
|
69
57
|
result_set = stmt.execute_query(sql)
|
|
70
58
|
result = Baza::JdbcResult.new(self, stmt, result_set, preload_results)
|
data/lib/baza/jdbc_result.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# This class controls the result for the Java-MySQL-driver.
|
|
2
2
|
class Baza::JdbcResult < Baza::ResultBase
|
|
3
|
-
INT_TYPES = {-6 => true, -5 => true, 4 => true, 5 => true}
|
|
4
|
-
FLOAT_TYPES = {2 => true, 3 => true, 7 => true, 8 => true}
|
|
5
|
-
TIME_TYPES = {93 => true}
|
|
6
|
-
DATE_TYPES = {91 => true}
|
|
7
|
-
STRING_TYPES = {-1 => true, 1 => true, 12 => true}
|
|
8
|
-
NIL_TYPES = {0 => true}
|
|
3
|
+
INT_TYPES = {-6 => true, -5 => true, 4 => true, 5 => true}.freeze
|
|
4
|
+
FLOAT_TYPES = {2 => true, 3 => true, 7 => true, 8 => true}.freeze
|
|
5
|
+
TIME_TYPES = {93 => true}.freeze
|
|
6
|
+
DATE_TYPES = {91 => true}.freeze
|
|
7
|
+
STRING_TYPES = {-1 => true, 1 => true, 12 => true}.freeze
|
|
8
|
+
NIL_TYPES = {0 => true}.freeze
|
|
9
9
|
|
|
10
10
|
# Constructor. This should not be called manually.
|
|
11
11
|
def initialize(driver, stmt, result_set, preload_results)
|
|
12
12
|
@result_set = result_set
|
|
13
13
|
@stmt = stmt
|
|
14
|
-
@type_translation = driver.
|
|
14
|
+
@type_translation = driver.db.opts[:type_translation]
|
|
15
15
|
@rows = []
|
|
16
16
|
@index = -1
|
|
17
17
|
read_results if preload_results
|
|
@@ -20,15 +20,21 @@ class Baza::JdbcResult < Baza::ResultBase
|
|
|
20
20
|
def fetch
|
|
21
21
|
if @read_results
|
|
22
22
|
return false if @rows.empty?
|
|
23
|
-
|
|
23
|
+
@rows.shift
|
|
24
24
|
else
|
|
25
|
-
|
|
25
|
+
read_row
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def each
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
loop do
|
|
31
|
+
data = fetch
|
|
32
|
+
|
|
33
|
+
if data
|
|
34
|
+
yield data
|
|
35
|
+
else
|
|
36
|
+
break
|
|
37
|
+
end
|
|
32
38
|
end
|
|
33
39
|
end
|
|
34
40
|
|
|
@@ -61,7 +67,9 @@ private
|
|
|
61
67
|
@read_results = true
|
|
62
68
|
|
|
63
69
|
loop do
|
|
64
|
-
|
|
70
|
+
row = read_row
|
|
71
|
+
|
|
72
|
+
if row
|
|
65
73
|
@rows << row
|
|
66
74
|
else
|
|
67
75
|
break
|
|
@@ -22,7 +22,7 @@ class Baza::MysqlBaseDriver < Baza::BaseSqlDriver
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# Inserts multiple rows in a table. Can return the inserted IDs if asked to in arguments.
|
|
25
|
-
def insert_multi(tablename, arr_hashes, args =
|
|
25
|
+
def insert_multi(tablename, arr_hashes, args = {})
|
|
26
26
|
sql = "INSERT INTO `#{tablename}` ("
|
|
27
27
|
|
|
28
28
|
first = true
|
|
@@ -59,7 +59,7 @@ class Baza::MysqlBaseDriver < Baza::BaseSqlDriver
|
|
|
59
59
|
sql << ","
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
sql << @
|
|
62
|
+
sql << @db.sqlval(val)
|
|
63
63
|
end
|
|
64
64
|
else
|
|
65
65
|
hash.each do |_key, val|
|
|
@@ -69,7 +69,7 @@ class Baza::MysqlBaseDriver < Baza::BaseSqlDriver
|
|
|
69
69
|
sql << ","
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
sql << @
|
|
72
|
+
sql << @db.sqlval(val)
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
end
|
|
@@ -99,13 +99,13 @@ class Baza::MysqlBaseDriver < Baza::BaseSqlDriver
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def transaction
|
|
102
|
-
@
|
|
102
|
+
@db.q("START TRANSACTION")
|
|
103
103
|
|
|
104
104
|
begin
|
|
105
|
-
yield @
|
|
106
|
-
@
|
|
105
|
+
yield @db
|
|
106
|
+
@db.q("COMMIT")
|
|
107
107
|
rescue
|
|
108
|
-
@
|
|
108
|
+
@db.q("ROLLBACK")
|
|
109
109
|
raise
|
|
110
110
|
end
|
|
111
111
|
end
|
data/lib/baza/query_buffer.rb
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
class Baza::QueryBuffer
|
|
3
3
|
attr_reader :thread_async
|
|
4
4
|
|
|
5
|
-
INITIALIZE_ARGS_ALLOWED = [:db, :debug, :flush_async]
|
|
5
|
+
INITIALIZE_ARGS_ALLOWED = [:db, :debug, :flush_async].freeze
|
|
6
6
|
# Constructor. Takes arguments to be used and a block.
|
|
7
7
|
def initialize(args)
|
|
8
8
|
@args = args
|
|
9
|
+
@db = args.fetch(:db)
|
|
9
10
|
@queries = []
|
|
10
11
|
@inserts = {}
|
|
11
12
|
@queries_count = 0
|
|
@@ -14,19 +15,12 @@ class Baza::QueryBuffer
|
|
|
14
15
|
|
|
15
16
|
STDOUT.puts "Query buffer started." if @debug
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
return unless block_given?
|
|
19
|
+
|
|
20
|
+
if @args[:flush_async]
|
|
21
|
+
@db.clone_conn do |db_flush_async|
|
|
22
|
+
@db_flush_async = db_flush_async
|
|
21
23
|
|
|
22
|
-
begin
|
|
23
|
-
yield(self)
|
|
24
|
-
ensure
|
|
25
|
-
flush
|
|
26
|
-
thread_async_join
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
else
|
|
30
24
|
begin
|
|
31
25
|
yield(self)
|
|
32
26
|
ensure
|
|
@@ -34,6 +28,13 @@ class Baza::QueryBuffer
|
|
|
34
28
|
thread_async_join
|
|
35
29
|
end
|
|
36
30
|
end
|
|
31
|
+
else
|
|
32
|
+
begin
|
|
33
|
+
yield(self)
|
|
34
|
+
ensure
|
|
35
|
+
flush
|
|
36
|
+
thread_async_join
|
|
37
|
+
end
|
|
37
38
|
end
|
|
38
39
|
end
|
|
39
40
|
|
|
@@ -54,7 +55,7 @@ class Baza::QueryBuffer
|
|
|
54
55
|
# buffer.delete(:users, {:id => 5})
|
|
55
56
|
def delete(table, where)
|
|
56
57
|
STDOUT.puts "Delete called on table #{table} with arguments: '#{where}'." if @debug
|
|
57
|
-
query(@
|
|
58
|
+
query(@db.delete(table, where, return_sql: true))
|
|
58
59
|
nil
|
|
59
60
|
end
|
|
60
61
|
|
|
@@ -63,7 +64,7 @@ class Baza::QueryBuffer
|
|
|
63
64
|
# buffer.update(:users, {:name => "Kasper"}, {:id => 5})
|
|
64
65
|
def update(table, update, terms)
|
|
65
66
|
STDOUT.puts "Update called on table #{table}." if @debug
|
|
66
|
-
query(@
|
|
67
|
+
query(@db.update(table, update, terms, return_sql: true))
|
|
67
68
|
nil
|
|
68
69
|
end
|
|
69
70
|
|
|
@@ -71,7 +72,7 @@ class Baza::QueryBuffer
|
|
|
71
72
|
#===Example
|
|
72
73
|
# buffer.upsert(:users, {:id => 5}, {:name => "Kasper"})
|
|
73
74
|
def upsert(table, data, terms)
|
|
74
|
-
@
|
|
75
|
+
@db.upsert(table, data, terms, buffer: self)
|
|
75
76
|
nil
|
|
76
77
|
end
|
|
77
78
|
|
|
@@ -79,7 +80,7 @@ class Baza::QueryBuffer
|
|
|
79
80
|
#===Examples
|
|
80
81
|
# buffer.insert(:users, {:name => "John Doe"})
|
|
81
82
|
def insert(table, data)
|
|
82
|
-
query(@
|
|
83
|
+
query(@db.insert(table, data, return_sql: true))
|
|
83
84
|
nil
|
|
84
85
|
end
|
|
85
86
|
|
|
@@ -109,7 +110,7 @@ private
|
|
|
109
110
|
end
|
|
110
111
|
|
|
111
112
|
def thread_async_join
|
|
112
|
-
if thread = @thread_async
|
|
113
|
+
if (thread = @thread_async)
|
|
113
114
|
thread.join
|
|
114
115
|
end
|
|
115
116
|
end
|
|
@@ -117,7 +118,7 @@ private
|
|
|
117
118
|
# Flushes the queries for real.
|
|
118
119
|
def flush_real(db = nil)
|
|
119
120
|
return nil if @queries_count <= 0
|
|
120
|
-
db = @
|
|
121
|
+
db = @db if db == nil
|
|
121
122
|
|
|
122
123
|
@lock.synchronize do
|
|
123
124
|
unless @queries.empty?
|