baza 0.0.20 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
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