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.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +84 -0
  3. data/.rubocop_todo.yml +17 -135
  4. data/.travis.yml +21 -0
  5. data/Gemfile +10 -7
  6. data/Gemfile.lock +39 -44
  7. data/README.md +61 -3
  8. data/VERSION +1 -1
  9. data/baza.gemspec +146 -98
  10. data/config/best_project_practice_rubocop.yml +8 -0
  11. data/config/best_project_practice_rubocop_todo.yml +6 -0
  12. data/lib/baza.rb +8 -12
  13. data/lib/baza/base_sql_driver.rb +198 -52
  14. data/lib/baza/cloner.rb +1 -0
  15. data/lib/baza/column.rb +26 -0
  16. data/lib/baza/database.rb +19 -3
  17. data/lib/baza/db.rb +69 -271
  18. data/lib/baza/driver.rb +1 -6
  19. data/lib/baza/{drivers → driver}/active_record.rb +65 -21
  20. data/lib/baza/{drivers → driver}/active_record/columns.rb +0 -0
  21. data/lib/baza/driver/active_record/commands.rb +10 -0
  22. data/lib/baza/driver/active_record/databases.rb +10 -0
  23. data/lib/baza/{drivers → driver}/active_record/indexes.rb +0 -0
  24. data/lib/baza/{drivers → driver}/active_record/result.rb +3 -1
  25. data/lib/baza/{drivers → driver}/active_record/tables.rb +0 -0
  26. data/lib/baza/driver/active_record/users.rb +12 -0
  27. data/lib/baza/{drivers → driver}/mysql.rb +9 -26
  28. data/lib/baza/{drivers → driver}/mysql/column.rb +14 -35
  29. data/lib/baza/{drivers → driver}/mysql/columns.rb +9 -12
  30. data/lib/baza/driver/mysql/commands.rb +39 -0
  31. data/lib/baza/driver/mysql/database.rb +64 -0
  32. data/lib/baza/driver/mysql/databases.rb +63 -0
  33. data/lib/baza/{drivers → driver}/mysql/index.rb +0 -0
  34. data/lib/baza/{drivers → driver}/mysql/indexes.rb +0 -0
  35. data/lib/baza/{drivers → driver}/mysql/result.rb +15 -7
  36. data/lib/baza/{drivers → driver}/mysql/sqlspecs.rb +0 -0
  37. data/lib/baza/{drivers → driver}/mysql/table.rb +27 -43
  38. data/lib/baza/{drivers → driver}/mysql/tables.rb +5 -34
  39. data/lib/baza/{drivers → driver}/mysql/unbuffered_result.rb +8 -2
  40. data/lib/baza/driver/mysql/user.rb +22 -0
  41. data/lib/baza/driver/mysql/users.rb +39 -0
  42. data/lib/baza/{drivers → driver}/mysql2.rb +19 -49
  43. data/lib/baza/{drivers → driver}/mysql2/column.rb +0 -0
  44. data/lib/baza/{drivers → driver}/mysql2/columns.rb +0 -0
  45. data/lib/baza/driver/mysql2/commands.rb +2 -0
  46. data/lib/baza/{drivers → driver}/mysql2/database.rb +0 -0
  47. data/lib/baza/{drivers → driver}/mysql2/databases.rb +0 -0
  48. data/lib/baza/{drivers → driver}/mysql2/index.rb +0 -0
  49. data/lib/baza/{drivers → driver}/mysql2/indexes.rb +0 -0
  50. data/lib/baza/{drivers → driver}/mysql2/result.rb +3 -1
  51. data/lib/baza/{drivers → driver}/mysql2/table.rb +0 -0
  52. data/lib/baza/{drivers → driver}/mysql2/tables.rb +0 -0
  53. data/lib/baza/driver/mysql2/user.rb +2 -0
  54. data/lib/baza/driver/mysql2/users.rb +2 -0
  55. data/lib/baza/{drivers → driver}/mysql_java.rb +60 -38
  56. data/lib/baza/{drivers → driver}/mysql_java/column.rb +0 -0
  57. data/lib/baza/{drivers → driver}/mysql_java/columns.rb +0 -0
  58. data/lib/baza/driver/mysql_java/commands.rb +2 -0
  59. data/lib/baza/driver/mysql_java/database.rb +2 -0
  60. data/lib/baza/driver/mysql_java/databases.rb +2 -0
  61. data/lib/baza/{drivers → driver}/mysql_java/index.rb +0 -0
  62. data/lib/baza/{drivers → driver}/mysql_java/indexes.rb +0 -0
  63. data/lib/baza/{drivers → driver}/mysql_java/table.rb +0 -0
  64. data/lib/baza/{drivers → driver}/mysql_java/tables.rb +0 -0
  65. data/lib/baza/driver/mysql_java/user.rb +2 -0
  66. data/lib/baza/driver/mysql_java/users.rb +2 -0
  67. data/lib/baza/driver/pg.rb +80 -0
  68. data/lib/baza/driver/pg/column.rb +125 -0
  69. data/lib/baza/driver/pg/columns.rb +37 -0
  70. data/lib/baza/driver/pg/commands.rb +35 -0
  71. data/lib/baza/driver/pg/create_index_sql_creator.rb +51 -0
  72. data/lib/baza/driver/pg/database.rb +89 -0
  73. data/lib/baza/driver/pg/databases.rb +79 -0
  74. data/lib/baza/driver/pg/index.rb +35 -0
  75. data/lib/baza/driver/pg/indexes.rb +5 -0
  76. data/lib/baza/driver/pg/result.rb +139 -0
  77. data/lib/baza/driver/pg/table.rb +184 -0
  78. data/lib/baza/driver/pg/tables.rb +45 -0
  79. data/lib/baza/{drivers → driver}/sqlite3.rb +6 -24
  80. data/lib/baza/{drivers → driver}/sqlite3/column.rb +22 -24
  81. data/lib/baza/{drivers → driver}/sqlite3/columns.rb +6 -6
  82. data/lib/baza/driver/sqlite3/commands.rb +28 -0
  83. data/lib/baza/{drivers → driver}/sqlite3/database.rb +0 -0
  84. data/lib/baza/{drivers → driver}/sqlite3/databases.rb +0 -1
  85. data/lib/baza/{drivers → driver}/sqlite3/index.rb +0 -0
  86. data/lib/baza/{drivers → driver}/sqlite3/indexes.rb +0 -0
  87. data/lib/baza/{drivers → driver}/sqlite3/result.rb +14 -6
  88. data/lib/baza/{drivers → driver}/sqlite3/sqlspecs.rb +0 -0
  89. data/lib/baza/{drivers → driver}/sqlite3/table.rb +25 -16
  90. data/lib/baza/{drivers → driver}/sqlite3/tables.rb +5 -6
  91. data/lib/baza/{drivers → driver}/sqlite3/unbuffered_result.rb +8 -2
  92. data/lib/baza/{drivers → driver}/sqlite3_java.rb +13 -23
  93. data/lib/baza/{drivers → driver}/sqlite3_java/column.rb +0 -0
  94. data/lib/baza/{drivers → driver}/sqlite3_java/columns.rb +0 -0
  95. data/lib/baza/driver/sqlite3_java/commands.rb +2 -0
  96. data/lib/baza/{drivers → driver}/sqlite3_java/database.rb +0 -0
  97. data/lib/baza/{drivers → driver}/sqlite3_java/index.rb +0 -0
  98. data/lib/baza/{drivers → driver}/sqlite3_java/indexes.rb +0 -0
  99. data/lib/baza/{drivers → driver}/sqlite3_java/table.rb +0 -0
  100. data/lib/baza/{drivers → driver}/sqlite3_java/tables.rb +0 -0
  101. data/lib/baza/{drivers → driver}/sqlite3_java/unbuffered_result.rb +14 -9
  102. data/lib/baza/{drivers → driver}/sqlite3_rhodes.rb +6 -24
  103. data/lib/baza/errors.rb +2 -0
  104. data/lib/baza/idquery.rb +15 -8
  105. data/lib/baza/index.rb +7 -0
  106. data/lib/baza/jdbc_driver.rb +4 -16
  107. data/lib/baza/jdbc_result.rb +20 -12
  108. data/lib/baza/mysql_base_driver.rb +7 -7
  109. data/lib/baza/query_buffer.rb +20 -19
  110. data/lib/baza/row.rb +16 -16
  111. data/lib/baza/sql_queries.rb +3 -0
  112. data/lib/baza/sql_queries/generic_insert.rb +81 -0
  113. data/lib/baza/sql_queries/generic_update.rb +31 -0
  114. data/lib/baza/sql_queries/mysql_upsert.rb +52 -0
  115. data/lib/baza/sql_queries/mysql_upsert_duplicate_key.rb +57 -0
  116. data/lib/baza/sql_queries/non_atomic_upsert.rb +25 -0
  117. data/lib/baza/sql_queries/postgres_upsert_duplicate_key.rb +118 -0
  118. data/lib/baza/sql_queries/select.rb +170 -0
  119. data/lib/baza/sql_queries/sqlite_upsert_duplicate_key.rb +99 -0
  120. data/lib/baza/table.rb +35 -8
  121. data/spec/active_record/models/user.rb +3 -0
  122. data/spec/{cloner_spec.rb → baza/cloner_spec.rb} +0 -0
  123. data/spec/drivers/active_record_mysql2_spec.rb +5 -3
  124. data/spec/drivers/active_record_mysql_spec.rb +2 -1
  125. data/spec/drivers/active_record_pg_spec.rb +20 -0
  126. data/spec/drivers/active_record_sqlite3_spec.rb +2 -1
  127. data/spec/drivers/mysql2_spec.rb +1 -1
  128. data/spec/drivers/mysql_spec.rb +10 -10
  129. data/spec/drivers/pg_spec.rb +18 -0
  130. data/spec/drivers/sqlite3_spec.rb +7 -8
  131. data/spec/info_active_record_example.rb +1 -1
  132. data/spec/{info_active_record_mysql2.rb → info_active_record_mysql2_example.rb} +3 -2
  133. data/spec/info_active_record_mysql2_travis.rb +35 -0
  134. data/spec/{info_active_record_mysql.rb → info_active_record_mysql_example.rb} +5 -4
  135. data/spec/info_active_record_mysql_travis.rb +36 -0
  136. data/spec/info_active_record_pg_example.rb +36 -0
  137. data/spec/info_active_record_pg_travis.rb +34 -0
  138. data/spec/info_active_record_sqlite3.rb +1 -1
  139. data/spec/info_mysql2_example.rb +1 -3
  140. data/spec/{info_mysql2_shippable.rb → info_mysql2_travis.rb} +2 -4
  141. data/spec/info_mysql_example.rb +1 -3
  142. data/spec/{info_mysql_shippable.rb → info_mysql_travis.rb} +2 -4
  143. data/spec/info_pg_example.rb +22 -0
  144. data/spec/info_pg_travis.rb +20 -0
  145. data/spec/info_sqlite3.rb +1 -3
  146. data/spec/spec_helper.rb +1 -1
  147. data/spec/support/driver_active_record_collection.rb +62 -0
  148. data/spec/support/driver_collection.rb +136 -121
  149. data/spec/support/driver_columns_collection.rb +19 -10
  150. data/spec/support/driver_databases_collection.rb +23 -1
  151. data/spec/support/driver_indexes_collection.rb +2 -2
  152. data/spec/support/driver_tables_collection.rb +24 -4
  153. data/spec/support/driver_users_collection.rb +53 -0
  154. metadata +185 -104
  155. data/lib/baza/drivers/mysql/database.rb +0 -28
  156. data/lib/baza/drivers/mysql/databases.rb +0 -35
  157. data/lib/baza/drivers/mysql_java/database.rb +0 -2
  158. data/lib/baza/drivers/mysql_java/databases.rb +0 -2
  159. data/lib/baza/model.rb +0 -875
  160. data/lib/baza/model_custom.rb +0 -155
  161. data/lib/baza/model_handler.rb +0 -910
  162. data/lib/baza/model_handler_sqlhelper.rb +0 -484
  163. data/lib/baza/revision.rb +0 -383
  164. data/shippable.yml +0 -17
  165. data/spec/info_active_record_mysql2_shippable.rb +0 -34
  166. data/spec/info_active_record_mysql_shippable.rb +0 -34
  167. data/spec/model_handler_spec.rb +0 -431
@@ -50,8 +50,14 @@ class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
50
50
 
51
51
  # Loops over every single result yielding it.
52
52
  def each
53
- while row = fetch
54
- yield row
53
+ loop do
54
+ row = fetch
55
+
56
+ if row
57
+ yield row
58
+ else
59
+ break
60
+ end
55
61
  end
56
62
  end
57
63
 
@@ -0,0 +1,22 @@
1
+ class Baza::Driver::Mysql::User
2
+ attr_reader :name
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ @data = args.fetch(:data)
7
+ @db = args.fetch(:db)
8
+ end
9
+
10
+ def name
11
+ @data.fetch(:User)
12
+ end
13
+
14
+ def host
15
+ @data.fetch(:Host)
16
+ end
17
+
18
+ def drop
19
+ @db.query("DROP USER '#{@db.esc(name)}'@'#{@db.esc(host)}'")
20
+ true
21
+ end
22
+ end
@@ -0,0 +1,39 @@
1
+ require_relative "user"
2
+
3
+ class Baza::Driver::Mysql::Users
4
+ def initialize(args)
5
+ @args = args
6
+ @db = @args.fetch(:db)
7
+ end
8
+
9
+ def list
10
+ result = []
11
+ @db.query("SELECT * FROM mysql.user") do |user_data|
12
+ user = Baza::Driver::Mysql::User.new(
13
+ db: @db,
14
+ data: user_data
15
+ )
16
+
17
+ if block_given?
18
+ yield user
19
+ else
20
+ result << user
21
+ end
22
+ end
23
+
24
+ result unless block_given?
25
+ end
26
+
27
+ def find_by_name(name)
28
+ list do |user|
29
+ return user if user.name == name.to_s
30
+ end
31
+
32
+ raise Baza::Errors::UserNotFound, "Could not find a user by that name: #{name}"
33
+ end
34
+
35
+ def create(data)
36
+ @db.query("CREATE USER '#{@db.esc(data.fetch(:name))}'@'#{@db.esc(data.fetch(:host))}' IDENTIFIED BY '#{data.fetch(:password)}'")
37
+ find_by_name(data.fetch(:name))
38
+ end
39
+ end
@@ -1,19 +1,7 @@
1
1
  Baza.load_driver("mysql")
2
2
 
3
3
  class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
4
- path = "#{File.dirname(__FILE__)}/mysql2"
5
-
6
- autoload :Database, "#{path}/database"
7
- autoload :Databases, "#{path}/databases"
8
- autoload :Table, "#{path}/table"
9
- autoload :Tables, "#{path}/tables"
10
- autoload :Column, "#{path}/column"
11
- autoload :Columns, "#{path}/columns"
12
- autoload :Index, "#{path}/index"
13
- autoload :Indexes, "#{path}/indexes"
14
- autoload :Result, "#{path}/result"
15
- autoload :UnbufferedResult, "#{path}/unbuffered_result"
16
- autoload :Sqlspecs, "#{path}/sqlspecs"
4
+ AutoAutoloader.autoload_sub_classes(self, __FILE__)
17
5
 
18
6
  attr_reader :conn, :conns
19
7
 
@@ -35,10 +23,10 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
35
23
  nil
36
24
  end
37
25
 
38
- def initialize(baza)
26
+ def initialize(db)
39
27
  super
40
28
 
41
- @opts = @baza.opts
29
+ @opts = @db.opts
42
30
 
43
31
  require "monitor"
44
32
  @mutex = Monitor.new
@@ -49,8 +37,8 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
49
37
  @encoding = "utf8"
50
38
  end
51
39
 
52
- if @baza.opts.key?(:port)
53
- @port = @baza.opts[:port].to_i
40
+ if @db.opts.key?(:port)
41
+ @port = @db.opts[:port].to_i
54
42
  else
55
43
  @port = 3306
56
44
  end
@@ -66,11 +54,13 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
66
54
  # Respawns the connection to the MySQL-database.
67
55
  def reconnect
68
56
  @mutex.synchronize do
57
+ require "mysql2" unless ::Object.const_defined?("Mysql2")
58
+
69
59
  args = {
70
- host: @baza.opts[:host],
71
- username: @baza.opts[:user],
72
- password: @baza.opts[:pass],
73
- database: @baza.opts[:db],
60
+ host: @db.opts[:host],
61
+ username: @db.opts[:user],
62
+ password: @db.opts[:pass],
63
+ database: @db.opts[:db],
74
64
  port: @port,
75
65
  symbolize_keys: true,
76
66
  cache_rows: false
@@ -78,35 +68,20 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
78
68
 
79
69
  # Symbolize keys should also be given here, else table-data wont be symbolized for some reason - knj.
80
70
  @query_args = {symbolize_keys: true}
81
- @query_args[:cast] = false unless @baza.opts[:type_translation]
82
- @query_args.merge!(@baza.opts[:query_args]) if @baza.opts[:query_args]
71
+ @query_args[:cast] = false unless @db.opts[:type_translation]
72
+ @query_args.merge!(@db.opts[:query_args]) if @db.opts[:query_args]
83
73
 
84
74
  pos_args = [:as, :async, :cast_booleans, :database_timezone, :application_timezone, :cache_rows, :connect_flags, :cast]
85
75
  pos_args.each do |key|
86
- args[key] = @baza.opts[key] if @baza.opts.key?(key)
76
+ args[key] = @db.opts[key] if @db.opts.key?(key)
87
77
  end
88
78
 
89
79
  args[:as] = :array
90
80
 
91
- tries = 0
92
- begin
93
- tries += 1
94
- if @baza.opts[:conn]
95
- @conn = @baza.opts[:conn]
96
- else
97
- require "mysql2"
98
- @conn = Mysql2::Client.new(args)
99
- end
100
- rescue => e
101
- if tries <= 3
102
- if e.message == "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)"
103
- sleep 1
104
- tries += 1
105
- retry
106
- end
107
- end
108
-
109
- raise e
81
+ if @db.opts[:conn]
82
+ @conn = @db.opts[:conn]
83
+ else
84
+ @conn = ::Mysql2::Client.new(args)
110
85
  end
111
86
 
112
87
  query("SET NAMES '#{esc(@encoding)}'") if @encoding
@@ -152,11 +127,6 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
152
127
  @conn.escape(string.to_s)
153
128
  end
154
129
 
155
- # Returns the last inserted ID for the connection.
156
- def last_id
157
- @mutex.synchronize { return @conn.last_id.to_i }
158
- end
159
-
160
130
  # Closes the connection threadsafe.
161
131
  def close
162
132
  @mutex.synchronize { @conn.close }
@@ -165,7 +135,7 @@ class Baza::Driver::Mysql2 < Baza::MysqlBaseDriver
165
135
  # Destroyes the connection.
166
136
  def destroy
167
137
  @conn = nil
168
- @baza = nil
138
+ @db = nil
169
139
  @mutex = nil
170
140
  @encoding = nil
171
141
  @query_args = nil
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::Mysql2::Commands < Baza::Driver::Mysql::Commands
2
+ end
@@ -3,7 +3,7 @@ class Baza::Driver::Mysql2::Result < Baza::ResultBase
3
3
  # Constructor. This should not be called manually.
4
4
  def initialize(driver, result)
5
5
  @result = result
6
- @type_translation = driver.baza.opts[:type_translation]
6
+ @type_translation = driver.db.opts[:type_translation]
7
7
  end
8
8
 
9
9
  # Returns a single result.
@@ -15,6 +15,8 @@ class Baza::Driver::Mysql2::Result < Baza::ResultBase
15
15
 
16
16
  # Loops over every single result yielding it.
17
17
  def each
18
+ return unless @result
19
+
18
20
  @result.each(as: :hash, symbolize_keys: true) do |row|
19
21
  next unless row # This sometimes happens when streaming results...
20
22
  row = Hash[row.map { |k, v| [k, v.to_s] }] if @type_translation == :string
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::Mysql2::User < Baza::Driver::Mysql::User
2
+ end
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::Mysql2::Users < Baza::Driver::Mysql::Users
2
+ end
@@ -1,19 +1,7 @@
1
1
  Baza.load_driver("mysql")
2
2
 
3
3
  class Baza::Driver::MysqlJava < Baza::JdbcDriver
4
- path = "#{File.dirname(__FILE__)}/mysql_java"
5
-
6
- autoload :Database, "#{path}/database"
7
- autoload :Databases, "#{path}/databases"
8
- autoload :Table, "#{path}/table"
9
- autoload :Tables, "#{path}/tables"
10
- autoload :Column, "#{path}/column"
11
- autoload :Columns, "#{path}/columns"
12
- autoload :Index, "#{path}/index"
13
- autoload :Indexes, "#{path}/indexes"
14
- autoload :Result, "#{path}/result"
15
- autoload :UnbufferedResult, "#{path}/unbuffered_result"
16
- autoload :Sqlspecs, "#{path}/sqlspecs"
4
+ AutoAutoloader.autoload_sub_classes(self, __FILE__)
17
5
 
18
6
  attr_reader :conn, :conns
19
7
 
@@ -32,19 +20,36 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
32
20
  nil
33
21
  end
34
22
 
35
- def initialize(baza)
36
- super
23
+ def self.args
24
+ [{
25
+ label: "Host",
26
+ name: "host"
27
+ }, {
28
+ label: "Port",
29
+ name: "port"
30
+ }, {
31
+ label: "Username",
32
+ name: "user"
33
+ }, {
34
+ label: "Password",
35
+ name: "pass"
36
+ }, {
37
+ label: "Database",
38
+ name: "db"
39
+ }, {
40
+ label: "Encoding",
41
+ name: "encoding"
42
+ }]
43
+ end
37
44
 
38
- @opts = @baza.opts
45
+ def initialize(db)
46
+ super
39
47
 
40
- if @opts[:encoding]
41
- @encoding = @opts[:encoding]
42
- else
43
- @encoding = "utf8"
44
- end
48
+ @opts = @db.opts
49
+ @encoding = @opts[:encoding] || "utf8"
45
50
 
46
- if @baza.opts.key?(:port)
47
- @port = @baza.opts[:port].to_i
51
+ if @db.opts.key?(:port)
52
+ @port = @db.opts[:port].to_i
48
53
  else
49
54
  @port = 3306
50
55
  end
@@ -56,12 +61,12 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
56
61
  # Respawns the connection to the MySQL-database.
57
62
  def reconnect
58
63
  @mutex.synchronize do
59
- if @baza.opts[:conn]
64
+ if @db.opts[:conn]
60
65
  @jdbc_loaded = true
61
- @conn = @baza.opts[:conn]
66
+ @conn = @db.opts.fetch(:conn)
62
67
  else
63
68
  com.mysql.jdbc.Driver
64
- @conn = java.sql::DriverManager.getConnection("jdbc:mysql://#{@baza.opts[:host]}:#{@port}/#{@baza.opts[:db]}?user=#{@baza.opts[:user]}&password=#{@baza.opts[:pass]}&populateInsertRowWithDefaultValues=true&zeroDateTimeBehavior=round&characterEncoding=#{@encoding}&holdResultsOpenOverStatementClose=true")
69
+ @conn = java.sql::DriverManager.getConnection(jdbc_connect_command)
65
70
  end
66
71
 
67
72
  query_no_result_set("SET SQL_MODE = ''")
@@ -69,13 +74,6 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
69
74
  end
70
75
  end
71
76
 
72
- # Returns the last inserted ID for the connection.
73
- def last_id
74
- data = query("SELECT LAST_INSERT_ID() AS id").fetch
75
- return data[:id].to_i if data[:id]
76
- raise "Could not figure out last inserted ID."
77
- end
78
-
79
77
  # Closes the connection threadsafe.
80
78
  def close
81
79
  @mutex.synchronize { @conn.close }
@@ -84,7 +82,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
84
82
  # Destroyes the connection.
85
83
  def destroy
86
84
  @conn = nil
87
- @baza = nil
85
+ @db = nil
88
86
  @mutex = nil
89
87
  @encoding = nil
90
88
  @query_args = nil
@@ -92,7 +90,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
92
90
  end
93
91
 
94
92
  # Inserts multiple rows in a table. Can return the inserted IDs if asked to in arguments.
95
- def insert_multi(tablename, arr_hashes, args = nil)
93
+ def insert_multi(tablename, arr_hashes, args = {})
96
94
  sql = "INSERT INTO `#{tablename}` ("
97
95
 
98
96
  first = true
@@ -129,7 +127,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
129
127
  sql << ","
130
128
  end
131
129
 
132
- sql << @baza.sqlval(val)
130
+ sql << @db.sqlval(val)
133
131
  end
134
132
  else
135
133
  hash.each do |_key, val|
@@ -139,7 +137,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
139
137
  sql << ","
140
138
  end
141
139
 
142
- sql << @baza.sqlval(val)
140
+ sql << @db.sqlval(val)
143
141
  end
144
142
  end
145
143
  end
@@ -172,11 +170,35 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
172
170
  query_no_result_set("START TRANSACTION")
173
171
 
174
172
  begin
175
- yield @baza
173
+ yield @db
176
174
  query_no_result_set("COMMIT")
177
175
  rescue
178
176
  query_no_result_set("ROLLBACK")
179
177
  raise
180
178
  end
181
179
  end
180
+
181
+ private
182
+
183
+ def jdbc_connect_command
184
+ conn_options = {
185
+ "populateInsertRowWithDefaultValues" => true,
186
+ "zeroDateTimeBehavior" => "round",
187
+ "holdResultsOpenOverStatementClose" => true
188
+ }
189
+
190
+ conn_options["user"] = @db.opts.fetch(:user) if @db.opts[:user]
191
+ conn_options["password"] = @db.opts.fetch(:pass) if db.opts[:pass]
192
+ conn_options["characterEncoding"] = @encoding if @encoding
193
+
194
+ conn_command = "jdbc:mysql://#{@db.opts.fetch(:host)}:#{@port}/#{@db.opts.fetch(:db)}?"
195
+ first = true
196
+ conn_options.each do |key, value|
197
+ conn_command << "&" unless first
198
+ first = false if first
199
+ conn_command << "#{key}=#{value}"
200
+ end
201
+
202
+ conn_command
203
+ end
182
204
  end
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::MysqlJava::Commands < Baza::Driver::Mysql::Commands
2
+ end
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::MysqlJava::Database < Baza::Driver::Mysql::Database
2
+ end
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::MysqlJava::Databases < Baza::Driver::Mysql::Databases
2
+ end
@@ -0,0 +1,2 @@
1
+ class Baza::Driver::MysqlJava::User < Baza::Drivers::Mysql::User
2
+ end