m4dbi 0.8.8 → 0.8.9
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 +7 -0
- data/lib/m4dbi/collection.rb +10 -4
- data/lib/m4dbi/database.rb +18 -5
- data/lib/m4dbi/model.rb +31 -11
- data/lib/m4dbi/statement.rb +4 -0
- data/lib/m4dbi/version.rb +1 -1
- metadata +50 -67
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d9b6b21860211863ed3ef697886bc4dd8d017743
|
4
|
+
data.tar.gz: 75fb2e328554c618b22c8919c05b3039d9a7f750
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 333d1c3056960225ab40c2d1db68e397637b8dad22265c1e604ddc20130720a4afa757fb7f25ef3912228db18a8a78a2ddc848f952c8a62e304817af7c61fcc0
|
7
|
+
data.tar.gz: c971fd38a928c3a4bae6f63e633344728bb1208dc0f5a99d1e9ec0fd12ba5e05cfd421e3aa04982dc9d6fd4471c46e993a62f5d57929922181d0220922a0db80
|
data/lib/m4dbi/collection.rb
CHANGED
@@ -33,10 +33,12 @@ module M4DBI
|
|
33
33
|
AND #{@the_many_model.pk_clause}
|
34
34
|
}
|
35
35
|
)
|
36
|
-
stm.execute(
|
36
|
+
success = stm.execute(
|
37
37
|
@the_one.pk,
|
38
38
|
arg.pk
|
39
39
|
).affected_count > 0
|
40
|
+
stm.finish
|
41
|
+
success
|
40
42
|
when Hash
|
41
43
|
hash = arg
|
42
44
|
keys = hash.keys
|
@@ -51,14 +53,16 @@ module M4DBI
|
|
51
53
|
AND #{where_subclause}
|
52
54
|
}
|
53
55
|
)
|
54
|
-
stm.execute(
|
56
|
+
num_deleted = stm.execute(
|
55
57
|
@the_one.pk,
|
56
58
|
*( keys.map { |k| hash[ k ] } )
|
57
59
|
).affected_count
|
60
|
+
stm.finish
|
61
|
+
num_deleted
|
58
62
|
end
|
59
63
|
end
|
60
64
|
|
61
|
-
#
|
65
|
+
# @return the number of records deleted
|
62
66
|
def clear
|
63
67
|
stm = @the_many_model.dbh.prepare(
|
64
68
|
%{
|
@@ -66,7 +70,9 @@ module M4DBI
|
|
66
70
|
WHERE #{@the_one_fk} = ?
|
67
71
|
}
|
68
72
|
)
|
69
|
-
stm.execute( @the_one.pk ).affected_count
|
73
|
+
num_deleted = stm.execute( @the_one.pk ).affected_count
|
74
|
+
stm.finish
|
75
|
+
num_deleted
|
70
76
|
end
|
71
77
|
end
|
72
78
|
end
|
data/lib/m4dbi/database.rb
CHANGED
@@ -11,21 +11,34 @@ module M4DBI
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def execute( *args )
|
14
|
-
@dbh.execute
|
14
|
+
result = @dbh.execute(*args)
|
15
|
+
if defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === @dbh.driver
|
16
|
+
result.finish
|
17
|
+
end
|
18
|
+
result
|
15
19
|
end
|
16
20
|
|
17
21
|
def select( sql, *bindvars )
|
18
|
-
execute( sql, *bindvars )
|
22
|
+
result = @dbh.execute( sql, *bindvars )
|
23
|
+
rows = result.fetch( :all, RDBI::Result::Driver::Struct )
|
24
|
+
if defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === @dbh.driver
|
25
|
+
result.finish
|
26
|
+
end
|
27
|
+
rows
|
19
28
|
end
|
20
29
|
|
21
30
|
def select_one( sql, *bindvars )
|
22
|
-
select( sql, *bindvars )[
|
31
|
+
select( sql, *bindvars )[0]
|
23
32
|
end
|
24
33
|
|
25
34
|
def select_column( sql, *bindvars )
|
26
|
-
|
35
|
+
result = @dbh.execute( sql, *bindvars )
|
36
|
+
rows = result.fetch( 1, RDBI::Result::Driver::Array )
|
37
|
+
if defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === @dbh.driver
|
38
|
+
result.finish
|
39
|
+
end
|
27
40
|
if rows.any?
|
28
|
-
rows[
|
41
|
+
rows[0][0]
|
29
42
|
else
|
30
43
|
raise RDBI::Error.new( "Query returned no rows. SQL: #{@dbh.last_query}" )
|
31
44
|
end
|
data/lib/m4dbi/model.rb
CHANGED
@@ -2,14 +2,14 @@ module M4DBI
|
|
2
2
|
class Model
|
3
3
|
#attr_reader :row
|
4
4
|
ancestral_trait_reader :dbh, :table
|
5
|
-
ancestral_trait_class_reader :dbh, :table, :pk, :columns, :
|
5
|
+
ancestral_trait_class_reader :dbh, :table, :pk, :columns, :hooks
|
6
6
|
|
7
7
|
M4DBI_UNASSIGNED = '__m4dbi_unassigned__'
|
8
8
|
|
9
9
|
extend Enumerable
|
10
10
|
|
11
11
|
def self.prepare( sql )
|
12
|
-
|
12
|
+
dbh.prepare(sql)
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.[]( first_arg, *args )
|
@@ -32,6 +32,7 @@ module M4DBI
|
|
32
32
|
sql = "SELECT * FROM #{table} WHERE #{clause}"
|
33
33
|
stm = prepare(sql)
|
34
34
|
row = stm.select_one(*values)
|
35
|
+
stm.finish
|
35
36
|
|
36
37
|
if row
|
37
38
|
self.new( row )
|
@@ -72,9 +73,11 @@ module M4DBI
|
|
72
73
|
end
|
73
74
|
|
74
75
|
stm = prepare(sql)
|
75
|
-
self.from_rows(
|
76
|
+
rows = self.from_rows(
|
76
77
|
stm.select_all(*params)
|
77
78
|
)
|
79
|
+
stm.finish
|
80
|
+
rows
|
78
81
|
end
|
79
82
|
|
80
83
|
def self.one_where( conditions, *args )
|
@@ -89,6 +92,7 @@ module M4DBI
|
|
89
92
|
|
90
93
|
stm = prepare(sql)
|
91
94
|
row = stm.select_one( *params )
|
95
|
+
stm.finish
|
92
96
|
if row
|
93
97
|
self.new( row )
|
94
98
|
end
|
@@ -96,7 +100,9 @@ module M4DBI
|
|
96
100
|
|
97
101
|
def self.all
|
98
102
|
stm = prepare("SELECT * FROM #{table}")
|
99
|
-
self.from_rows( stm.select_all )
|
103
|
+
records = self.from_rows( stm.select_all )
|
104
|
+
stm.finish
|
105
|
+
records
|
100
106
|
end
|
101
107
|
|
102
108
|
# TODO: Perhaps we'll use cursors for Model#each.
|
@@ -107,6 +113,7 @@ module M4DBI
|
|
107
113
|
def self.one
|
108
114
|
stm = prepare("SELECT * FROM #{table} LIMIT 1")
|
109
115
|
row = stm.select_one
|
116
|
+
stm.finish
|
110
117
|
if row
|
111
118
|
self.new( row )
|
112
119
|
end
|
@@ -114,7 +121,9 @@ module M4DBI
|
|
114
121
|
|
115
122
|
def self.count
|
116
123
|
stm = prepare("SELECT COUNT(*) FROM #{table}")
|
117
|
-
stm.select_column.to_i
|
124
|
+
retval = stm.select_column.to_i
|
125
|
+
stm.finish
|
126
|
+
retval
|
118
127
|
end
|
119
128
|
|
120
129
|
def self.create( hash = {} )
|
@@ -145,6 +154,7 @@ module M4DBI
|
|
145
154
|
end
|
146
155
|
stm = prepare(sql)
|
147
156
|
num_inserted = stm.execute(*values).affected_count
|
157
|
+
stm.finish
|
148
158
|
if num_inserted > 0
|
149
159
|
pk_hash = hash.slice( *(
|
150
160
|
self.pk.map { |pk_col| pk_col.to_sym }
|
@@ -199,14 +209,17 @@ module M4DBI
|
|
199
209
|
|
200
210
|
def self.select_all( sql, *binds )
|
201
211
|
stm = prepare(sql)
|
202
|
-
self.from_rows(
|
212
|
+
records = self.from_rows(
|
203
213
|
stm.select_all( *binds )
|
204
214
|
)
|
215
|
+
stm.finish
|
216
|
+
records
|
205
217
|
end
|
206
218
|
|
207
219
|
def self.select_one( sql, *binds )
|
208
220
|
stm = prepare(sql)
|
209
221
|
row = stm.select_one( *binds )
|
222
|
+
stm.finish
|
210
223
|
if row
|
211
224
|
self.new( row )
|
212
225
|
end
|
@@ -232,7 +245,9 @@ module M4DBI
|
|
232
245
|
set_clause, set_params = set_hash.to_set_clause
|
233
246
|
params = set_params + where_params
|
234
247
|
stm = prepare("UPDATE #{table} SET #{set_clause} WHERE #{where_clause}")
|
235
|
-
stm.execute( *params )
|
248
|
+
result = stm.execute( *params )
|
249
|
+
stm.finish
|
250
|
+
result
|
236
251
|
end
|
237
252
|
|
238
253
|
def self.update_one( *args )
|
@@ -240,7 +255,9 @@ module M4DBI
|
|
240
255
|
pk_values = args[ 0..-2 ]
|
241
256
|
params = set_params + pk_values
|
242
257
|
stm = prepare("UPDATE #{table} SET #{set_clause} WHERE #{pk_clause}")
|
243
|
-
stm.execute( *params )
|
258
|
+
result = stm.execute( *params )
|
259
|
+
stm.finish
|
260
|
+
result
|
244
261
|
end
|
245
262
|
|
246
263
|
def self.after_create(&block)
|
@@ -343,11 +360,10 @@ module M4DBI
|
|
343
360
|
# warn "Do not call M4DBI::Model#new directly; use M4DBI::Model#create instead."
|
344
361
|
# end
|
345
362
|
@row = row
|
346
|
-
@st = Hash.new
|
347
363
|
end
|
348
364
|
|
349
365
|
def prepare( sql )
|
350
|
-
|
366
|
+
dbh.prepare(sql)
|
351
367
|
end
|
352
368
|
|
353
369
|
def method_missing( method, *args )
|
@@ -420,6 +436,7 @@ module M4DBI
|
|
420
436
|
state_before = self.to_h
|
421
437
|
st = prepare("UPDATE #{table} SET #{set_clause} WHERE #{pk_clause}")
|
422
438
|
num_updated = st.execute( *set_params ).affected_count
|
439
|
+
st.finish if defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === dbh.driver
|
423
440
|
if num_updated > 0
|
424
441
|
hash.each do |key,value|
|
425
442
|
@row[ key ] = value
|
@@ -447,6 +464,7 @@ module M4DBI
|
|
447
464
|
|
448
465
|
st = prepare("DELETE FROM #{table} WHERE #{pk_clause}")
|
449
466
|
num_deleted = st.execute( *pk_values ).affected_count
|
467
|
+
st.finish
|
450
468
|
if num_deleted != 1
|
451
469
|
false
|
452
470
|
else
|
@@ -507,7 +525,6 @@ module M4DBI
|
|
507
525
|
:table => table,
|
508
526
|
:pk => pk_,
|
509
527
|
:columns => h.table_schema( table.to_sym ).columns,
|
510
|
-
:st => Hash.new, # prepared statements for all queries
|
511
528
|
:hooks => {
|
512
529
|
after_create: [],
|
513
530
|
after_update: [],
|
@@ -563,6 +580,9 @@ module M4DBI
|
|
563
580
|
new_value,
|
564
581
|
*pk_values
|
565
582
|
).affected_count
|
583
|
+
if defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === h.driver
|
584
|
+
stm.finish
|
585
|
+
end
|
566
586
|
if num_changed > 0
|
567
587
|
@row[ colname ] = new_value
|
568
588
|
end
|
data/lib/m4dbi/statement.rb
CHANGED
data/lib/m4dbi/version.rb
CHANGED
metadata
CHANGED
@@ -1,61 +1,53 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: m4dbi
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
- 8
|
10
|
-
version: 0.8.8
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.9
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Pistos
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: metaid
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
32
20
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: rdbi
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdbi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
46
34
|
type: :runtime
|
47
|
-
|
48
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: M4DBI provides models, associations and some convenient extensions to
|
42
|
+
RDBI.
|
49
43
|
email: m4dbi dot pistos at purepistos dot net
|
50
44
|
executables: []
|
51
|
-
|
52
45
|
extensions: []
|
53
|
-
|
54
|
-
extra_rdoc_files:
|
46
|
+
extra_rdoc_files:
|
55
47
|
- README.rdoc
|
56
48
|
- CHANGELOG
|
57
49
|
- LICENCE
|
58
|
-
files:
|
50
|
+
files:
|
59
51
|
- README.rdoc
|
60
52
|
- CHANGELOG
|
61
53
|
- LICENCE
|
@@ -76,38 +68,29 @@ files:
|
|
76
68
|
- spec/hash.rb
|
77
69
|
homepage: https://github.com/Pistos/m4dbi
|
78
70
|
licenses: []
|
79
|
-
|
71
|
+
metadata: {}
|
80
72
|
post_install_message:
|
81
73
|
rdoc_options: []
|
82
|
-
|
83
|
-
require_paths:
|
74
|
+
require_paths:
|
84
75
|
- lib
|
85
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
hash: 3
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
version: "0"
|
103
|
-
requirements:
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements:
|
104
87
|
- bacon (optional)
|
105
88
|
rubyforge_project:
|
106
|
-
rubygems_version:
|
89
|
+
rubygems_version: 2.0.3
|
107
90
|
signing_key:
|
108
|
-
specification_version:
|
91
|
+
specification_version: 4
|
109
92
|
summary: Models (and More) for RDBI
|
110
|
-
test_files:
|
93
|
+
test_files:
|
111
94
|
- spec/database.rb
|
112
95
|
- spec/model.rb
|
113
96
|
- spec/helper.rb
|