objectstore 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64c41b9f098d2e1c425a0f70ccf24bddb403c2aa
4
- data.tar.gz: 9e2dcb690ebec07ae7e37a6ab410ad621fdfece2
3
+ metadata.gz: 8a7d9b4af24d561be98bb2fd2121d5b309934790
4
+ data.tar.gz: 20b360b5e44dc1af76cf038f57c0f5a59d3da9cd
5
5
  SHA512:
6
- metadata.gz: 7a2f22153fe71f80632853a099609bc49ef1ac34a2e3beb259c09db85866e88f340748eb54d90704debe1125e783888fd2b8e50c40eef3f5130b0cc6e24f6d67
7
- data.tar.gz: 75c3ffb8e3659fe5637fdd49539a57ce733f57f57fbcbc47d54a3e99eb4ca88b859aa19033f045234bd5592521ef2693db38965f2042a1479bbd0437b8f6ef1b
6
+ metadata.gz: 69c2b445d15f6a9daab7e409c2bf55e0c035c9a36a7b85829a44e882c7a3fba40498c78e7b3b3cf046975de7d5ff37c280c607afbf22cee65cc97403cf0070f6
7
+ data.tar.gz: 9696ac2ed74a1439715b4aac51583aa3393cd8c8b037823d0513141c1cfd188b4b5a435895cc6578ad84bb416dfac4dbab2d1d4506bf6592c82cfc44c0b96418
@@ -13,6 +13,9 @@ module Atech
13
13
  ## Raised if the data is larger than the maximum file size
14
14
  class FileDataTooBig < Error; end
15
15
 
16
+ # Raised when a row could not be inserted into the database
17
+ class InsertError < Error; end
18
+
16
19
  # Run a single query on a backend connection. This should only be used when running a single query. If you need
17
20
  # to do multiple things on the same connection (e.g. INSERT and then get LAST_INSERT_ID) you should checkot your
18
21
  # own connection using ObejctStore::Connection.client
@@ -73,13 +76,7 @@ module Atech
73
76
  options[:created_at] = options[:created_at].utc
74
77
  options[:updated_at] = options[:updated_at].utc
75
78
 
76
- # Create an insert query
77
- last_insert_id = ObjectStore::Connection.client do |client|
78
- columns = options.keys.join('`,`')
79
- data = options.values.map { |v| escape_and_quote(v) }.join(',')
80
- client.query("INSERT INTO files (`#{columns}`) VALUES (#{data})")
81
- client.last_id
82
- end
79
+ last_insert_id = insert_into_database(options)
83
80
 
84
81
  ## Return a new File object
85
82
  self.new(options.merge(:id => last_insert_id))
@@ -182,6 +179,26 @@ module Atech
182
179
  end
183
180
  end
184
181
 
182
+ def self.insert_into_database(options)
183
+ retries = 0
184
+
185
+ # Create an insert query
186
+ last_insert_id = ObjectStore::Connection.client do |client|
187
+ columns = options.keys.join('`,`')
188
+ data = options.values.map { |v| escape_and_quote(v) }.join(',')
189
+ client.query("INSERT INTO files (`#{columns}`) VALUES (#{data})")
190
+ client.last_id
191
+ end
192
+
193
+ raise InsertError if last_insert_id == 0
194
+
195
+ last_insert_id
196
+ rescue InsertError => e
197
+ raise e if retries >= 2
198
+ retries += 1
199
+ retry
200
+ end
201
+
185
202
  def self.escape_and_quote(string)
186
203
  string = string.strftime('%Y-%m-%d %H:%M:%S') if string.is_a?(Time)
187
204
  ObjectStore::Connection.client do |client|
@@ -1,5 +1,5 @@
1
1
  module Atech
2
2
  module ObjectStore
3
- VERSION = '2.0.1'.freeze
3
+ VERSION = '2.0.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: objectstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-10 00:00:00.000000000 Z
11
+ date: 2019-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  version: '0'
55
55
  requirements: []
56
56
  rubyforge_project:
57
- rubygems_version: 2.5.1
57
+ rubygems_version: 2.6.14.3
58
58
  signing_key:
59
59
  specification_version: 4
60
60
  summary: A SQL based object store library