dohmysql 0.2.25 → 0.2.26

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1490c3c56af4f3950d52ae3401ac2c08f4f41c16
4
- data.tar.gz: 29eaa21516dbcc06f66d9a0802761a634bda31d3
3
+ metadata.gz: 6e1e708e04dcc886dfa8bcbf687fd52ae312f1e4
4
+ data.tar.gz: 58820c6a5a7cf295376510ef6d147d85958a2b85
5
5
  SHA512:
6
- metadata.gz: 27c4010a82bc5cfc5b7fcb8e67ab5ade62cf70744df5d8a79c237de58ce194dee279801ce83f61f504144e16992944c7b76c8b434269b942f02bf6fbc37df61e
7
- data.tar.gz: 35ee860c5f4d64a5aa4fe93c4c472ee74c763671f2ab171bb744678b17d326755bad23f3e8ce52595bd7f39d358079d2253c8ee1cee90d727af7dce65192200d
6
+ metadata.gz: 4304cf8a3cd554f1bc100c92342bef2c60941ea5c549f96111a492611a4fc532baf718738d01723d21b55e976c24342c777446d3864848966816bd9d3e6c9831
7
+ data.tar.gz: b3fceedd0b817bb49c885e96a7cb15b88aea4e2c7284381de659d51a0c1b9bbf1d29bb7bab135255592584f5c2df41bc60053b685b022df8ebd0f4eaf9a4014d
@@ -9,6 +9,7 @@ class CacheConnector
9
9
  def initialize(config)
10
10
  @config = config
11
11
  @config[:timeout] ||= 1800
12
+ @handle = nil
12
13
  end
13
14
 
14
15
  def request_handle(database = nil)
@@ -176,7 +176,7 @@ class Handle
176
176
  need_rollback = false
177
177
  end
178
178
  ensure
179
- query("ROLLBACK") if need_rollback
179
+ close if need_rollback
180
180
  end
181
181
  retval
182
182
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dohmysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.25
4
+ version: 0.2.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Makani Mason
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-12 00:00:00.000000000 Z
12
+ date: 2013-06-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dohroot
@@ -31,28 +31,28 @@ dependencies:
31
31
  requirements:
32
32
  - - '>='
33
33
  - !ruby/object:Gem::Version
34
- version: 0.2.11
34
+ version: 0.2.14
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '>='
40
40
  - !ruby/object:Gem::Version
41
- version: 0.2.11
41
+ version: 0.2.14
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: dohlog
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - '>='
47
47
  - !ruby/object:Gem::Version
48
- version: 0.2.1
48
+ version: 0.2.3
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - '>='
54
54
  - !ruby/object:Gem::Version
55
- version: 0.2.1
55
+ version: 0.2.3
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: mysql2
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - '>='
75
75
  - !ruby/object:Gem::Version
76
- version: 0.1.11
76
+ version: 0.1.13
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - '>='
82
82
  - !ruby/object:Gem::Version
83
- version: 0.1.11
83
+ version: 0.1.13
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: dohtest
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -118,7 +118,6 @@ files:
118
118
  - lib/dohmysql/error.rb
119
119
  - lib/dohmysql/file_util.rb
120
120
  - lib/dohmysql/handle.rb
121
- - lib/dohmysql/handle.rb.orig
122
121
  - lib/dohmysql/hash_row.rb
123
122
  - lib/dohmysql/load_sql.rb
124
123
  - lib/dohmysql/logger.rb
@@ -163,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
162
  version: '0'
164
163
  requirements: []
165
164
  rubyforge_project:
166
- rubygems_version: 2.0.2
165
+ rubygems_version: 2.0.3
167
166
  signing_key:
168
167
  specification_version: 4
169
168
  summary: friendly mysql client interface
@@ -1,257 +0,0 @@
1
- require 'mysql2'
2
- require 'dohutil/array_to_hash'
3
- require 'dohmysql/logger'
4
- require 'dohmysql/error'
5
- require 'dohmysql/typed_row_builder'
6
- require 'dohmysql/writable_row'
7
- require 'dohmysql/hash_row'
8
- require 'dohmysql/smart_row'
9
- require 'dohmysql/to_sql'
10
- Mysql2::Client.default_query_options[:cast_booleans] = true
11
-
12
- module DohDb
13
-
14
- class Handle
15
- attr_reader :config, :mysqlh
16
-
17
- def initialize(config)
18
- @config = config
19
- @testing_rollback = false
20
- log_config = @config.dup
21
- @config[:reconnect] = true if !@config.keys.include?(:reconnect)
22
- log_config.delete(:password)
23
- DohDb.logger.call('connection', "creating connection with config: #{log_config}")
24
- @mysqlh = Mysql2::Client.new(@config)
25
- DohDb.logger.call('connection', "new connection created: id #{@mysqlh.thread_id}")
26
- end
27
-
28
- def close
29
- unless closed?
30
- begin
31
- DohDb.logger.call('connection', "closing connection: id #{@mysqlh.thread_id}")
32
- @mysqlh.close
33
- ensure
34
- @mysqlh = nil
35
- end
36
- end
37
- end
38
-
39
- def closed?
40
- @mysqlh.nil?
41
- end
42
-
43
- def query(statement)
44
- generic_query(statement)
45
- retval = @mysqlh.affected_rows
46
- DohDb.logger.call('result', "affected #{retval} rows")
47
- retval
48
- end
49
-
50
- def update(statement)
51
- generic_query(statement)
52
- retval = @mysqlh.affected_rows
53
- DohDb.logger.call('result', "updated #{retval} rows")
54
- retval
55
- end
56
-
57
- def update_row(statement)
58
- retval = update(statement)
59
- raise UnexpectedQueryResult, "updated #{retval} rows; expected 1" unless retval == 1
60
- retval
61
- end
62
-
63
- def update_hash(hash, table, primary_key_value, primary_key_name)
64
- items = hash.keys.collect {|key| key + ' = ' + hash[key].to_sql}
65
- query("UPDATE #{table} SET #{items.join(', ')} WHERE #{primary_key_name} = #{primary_key_value.to_sql}")
66
- end
67
-
68
- def insert(statement)
69
- generic_query(statement)
70
- retval = @mysqlh.last_id
71
- DohDb.logger.call('result', "insert_id was #{retval}")
72
- retval
73
- end
74
-
75
- def insert_hash(hash, table, quote_strings = true)
76
- insert_hash_helper(hash, table, 'INSERT', quote_strings)
77
- end
78
-
79
- def insert_hashes(hashes, table, quote_strings = true)
80
- insert_hashes_helper(hashes, table, 'INSERT', quote_strings)
81
- end
82
-
83
- def insert_ignore_hash(hash, table, quote_strings = true)
84
- insert_hash_helper(hash, table, 'INSERT IGNORE', quote_strings)
85
- end
86
-
87
- def insert_ignore_hashes(hash, table, quote_strings = true)
88
- insert_hashes_helper(hash, table, 'INSERT IGNORE', quote_strings)
89
- end
90
-
91
- def replace_hash(hash, table, quote_strings = true)
92
- insert_hash_helper(hash, table, 'REPLACE', quote_strings)
93
- end
94
-
95
- # The most generic form of select.
96
- # It calls to_s on the statement object to facilitate the use of sql builder objects.
97
- def select(statement, row_builder = nil)
98
- result_set = generic_query(statement)
99
- DohDb.logger.call('result', "selected #{result_set.size} rows")
100
- rows = get_row_builder(row_builder).build_rows(result_set)
101
- rows
102
- end
103
-
104
- # Simple convenience wrapper around the generic select call.
105
- # Throws an exception unless the result set is a single row.
106
- # Returns the row selected.
107
- def select_row(statement, row_builder = nil)
108
- rows = select(statement, row_builder)
109
- raise UnexpectedQueryResult, "selected #{rows.size} rows; expected 1" unless rows.size == 1
110
- rows[0]
111
- end
112
-
113
- # Simple convenience wrapper around the generic select call.
114
- # Throws an exception unless the result set is empty or a single row.
115
- # Returns nil if the result set is empty, or the row selected.
116
- def select_optional_row(statement, row_builder = nil)
117
- rows = select(statement, row_builder)
118
- raise UnexpectedQueryResult, "selected #{rows.size} rows; expected 0 or 1" if rows.size > 1
119
- if rows.empty? then nil else rows[0] end
120
- end
121
-
122
- # Simple convenience wrapper around select_row.
123
- # Returns the first (and typically, the only) field from the selected row.
124
- def select_field(statement, row_builder = nil)
125
- select_row(statement, row_builder).at(0)
126
- end
127
-
128
- # Simple convenience wrapper around select_optional_row.
129
- # Returns the first (and typically, the only) field from the selected row, if any, or nil.
130
- def select_optional_field(statement, row_builder = nil)
131
- row = select_optional_row(statement, row_builder)
132
- row && row.at(0)
133
- end
134
-
135
- # Rows in the result set must have 2 or more fields.
136
- # If there are 2 fields, returns a hash where each key is the first field in the result set, and the value is the second field.
137
- # If there are more than 2 fields, returns a hash where each key is the first field in the result set,
138
- # and the value is the row itself, as a Hash, and without the field used as a key.
139
- def select_transpose(statement, row_builder = nil)
140
- rows = select(statement, row_builder)
141
- return {} if rows.empty?
142
- field_count = rows.first.size
143
- if field_count < 2
144
- raise UnexpectedQueryResult, "must select at least 2 fields in order to transpose"
145
- elsif field_count == 2
146
- Doh.array_to_hash(rows) { |row| [row.at(0), row.at(1)] }
147
- else
148
- key_field = rows.first.keys.first
149
- Doh.array_to_hash(rows) do |row|
150
- value = row.to_h
151
- value.delete(key_field)
152
- [row.at(0), value]
153
- end
154
- end
155
- end
156
-
157
- # Returns an array of arrays, where the individual arrays contain just the values from each database row -- they lack field names.
158
- def select_values(statement, row_builder = nil)
159
- select(statement, row_builder).collect { |row| row.values }
160
- end
161
-
162
- # Returns an array of the first (and typically, the only) field of every row in the result set.
163
- def select_list(statement, row_builder = nil)
164
- select(statement, row_builder).collect { |row| row.at(0) }
165
- end
166
-
167
- def transaction
168
- query("START TRANSACTION")
169
- need_rollback = true
170
- begin
171
- retval = yield(self)
172
- if !@testing_rollback
173
- query("COMMIT")
174
- need_rollback = false
175
- end
176
- ensure
177
- query("ROLLBACK") if need_rollback
178
- end
179
- retval
180
- end
181
-
182
- def test_transaction_rollback
183
- begin
184
- @testing_rollback = true
185
- yield(self)
186
- ensure
187
- @testing_rollback = false
188
- end
189
- end
190
- private
191
- def generic_query(statement)
192
- sqlstr = statement.to_s
193
- DohDb.logger.call('query', sqlstr)
194
- @mysqlh.query(sqlstr)
195
- rescue Exception => excpt
196
- DohDb.logger.call('error', "caught exception #{excpt.message} during query: #{sqlstr}")
197
- close
198
- raise
199
- end
200
-
201
- def get_key_insert_str(keys)
202
- "(`#{keys.join('`,`')}`)"
203
- end
204
-
205
- def insert_hash_helper(hash, table, keyword, quote_strings)
206
- names = []
207
- values = []
208
- hash.each_pair do |key, value|
209
- names.push(key)
210
- values.push(if quote_strings || !value.is_a?(String) then value.to_sql else value end)
211
- end
212
-
213
- insert("#{keyword} INTO #{table} (`#{names.join('`,`')}`) VALUES (#{values.join(',')})")
214
- end
215
-
216
- def insert_hashes_helper(hashes, table, keyword, quote_strings)
217
- <<<<<<< HEAD:lib/dohmysql/handle.rb
218
- return if hashes.empty?
219
-
220
- =======
221
- >>>>>>> implement insert_hashes, mostly not-sharing with insert_hash for speed (3% or so decrease on unit test speeds when I had them shared):lib/doh/mysql/handle.rb
222
- valuestrs = []
223
- keys = hashes[0].keys
224
- keystr = get_key_insert_str(keys)
225
- hashes.each do |hash|
226
- values = []
227
- keys.each do |key|
228
- value = hash[key]
229
- values.push(if quote_strings || !value.is_a?(String) then value.to_sql else value end)
230
- end
231
- valuestrs.push("(#{values.join(',')})")
232
- end
233
-
234
- insert("#{keyword} INTO #{table} #{keystr} VALUES #{valuestrs.join(",")}")
235
- end
236
-
237
-
238
- def get_row_builder(row_builder = nil)
239
- if row_builder.nil?
240
- TypedRowBuilder.new
241
- elsif row_builder == :read
242
- TypedRowBuilder.new(ReadOnlyRow)
243
- elsif row_builder == :hash
244
- TypedRowBuilder.new(HashRow)
245
- elsif row_builder == :write
246
- TypedRowBuilder.new(WritableRow)
247
- elsif row_builder == :smart
248
- TypedRowBuilder.new(SmartRow)
249
- elsif row_builder.respond_to?('build_rows')
250
- row_builder
251
- else
252
- TypedRowBuilder.new(row_builder)
253
- end
254
- end
255
- end
256
-
257
- end