objectstore 2.0.1 → 2.0.2

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: 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