mysql_framework 2.1.2 → 2.1.3
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38653f6e3d1d849566574e58eb8386b4c32890370404cb3eade583b0070f5041
|
4
|
+
data.tar.gz: 5534eca9f224d13580cfd09f4e2478208857e5b353c9a664ed7b772bf8a088e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa4e726ac90ac8b1ecd8ca20a64b4c33e81d003c395b49c340f712df500fc7879956f5479f9c23e53fe20ca947d41d2798ad42732c596a03ab219129f02a7dbd
|
7
|
+
data.tar.gz: ba2080bb5f7595b82996a48a0316ed70cf7560b5687abb9d5c9768c73f5e2b296e42378aa9139c80e2d5f705a8fa7bdb08167a740c019a6d5d0a0825436873e7
|
@@ -75,17 +75,18 @@ module MysqlFramework
|
|
75
75
|
|
76
76
|
# This method is called to execute a prepared statement
|
77
77
|
#
|
78
|
-
# @note Ensure we close each statement, otherwise we
|
79
|
-
# a 'Commands out of sync' error if multiple threads are
|
80
|
-
# queries at the same time.
|
78
|
+
# @note Ensure we free any result and close each statement, otherwise we
|
79
|
+
# can run into a 'Commands out of sync' error if multiple threads are
|
80
|
+
# running different queries at the same time.
|
81
81
|
def execute(query, provided_client = nil)
|
82
82
|
with_client(provided_client) do |client|
|
83
83
|
begin
|
84
84
|
statement = client.prepare(query.sql)
|
85
85
|
result = statement.execute(*query.params)
|
86
|
-
result
|
86
|
+
result&.to_a
|
87
87
|
ensure
|
88
|
-
|
88
|
+
result&.free
|
89
|
+
statement&.close
|
89
90
|
end
|
90
91
|
end
|
91
92
|
end
|
@@ -291,6 +291,35 @@ describe MysqlFramework::Connector do
|
|
291
291
|
expect(results[0][:id]).to eq(guid)
|
292
292
|
end
|
293
293
|
|
294
|
+
context 'when cleaning up resources' do
|
295
|
+
let(:mock_client) { double('client') }
|
296
|
+
let(:mock_statement) { double('statement') }
|
297
|
+
let(:mock_result) { double('result') }
|
298
|
+
let(:select_query) { MysqlFramework::SqlQuery.new.select('*').from('demo') }
|
299
|
+
|
300
|
+
before do
|
301
|
+
allow(mock_result).to receive(:to_a)
|
302
|
+
allow(mock_result).to receive(:free)
|
303
|
+
|
304
|
+
allow(mock_statement).to receive(:close)
|
305
|
+
allow(mock_statement).to receive(:execute).and_return(mock_result)
|
306
|
+
|
307
|
+
allow(mock_client).to receive(:prepare).and_return(mock_statement)
|
308
|
+
end
|
309
|
+
|
310
|
+
it 'frees the result' do
|
311
|
+
expect(mock_result).to receive(:free)
|
312
|
+
|
313
|
+
subject.execute(select_query, mock_client)
|
314
|
+
end
|
315
|
+
|
316
|
+
it 'closes the statement' do
|
317
|
+
expect(mock_statement).to receive(:close)
|
318
|
+
|
319
|
+
subject.execute(select_query, mock_client)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
294
323
|
it 'does not raise a commands out of sync error' do
|
295
324
|
threads = []
|
296
325
|
threads << Thread.new do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mysql_framework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sage
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|