dohmysql 0.2.33 → 0.2.34

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: 3cec61c5a47a3b5fccd99953a0e8c931eb5008bc
4
- data.tar.gz: da47d7e1916cb59462de5cf0a9048ef7fcc04dad
3
+ metadata.gz: 781550d6ef60c6d499005d5b89634c70a760a250
4
+ data.tar.gz: a59db4a488222896c14c6b1b27bd0363b947a285
5
5
  SHA512:
6
- metadata.gz: d30a63c850e32db1ff7894cce5e11ba4282d55f8d5a9c3373134da0613799593ae80ed1741a827915d52bce6244d582b51a5a801719734574460deac213c7fa4
7
- data.tar.gz: 98442287c0925d04f552e1b5ec5ed1111dafdef392aa1df8ecce0ab61b65cc9fbbfe78d7dd1afed3c6c228193bcf4e990dfe964dbc013ab1883b26f773a60ddb
6
+ metadata.gz: d4ff31f3263f689a4be21cf9c032e906280500ffc3814d459d02646665c062ed3958d82cd9dd82cac0c24f0b14ebab8ee6b8bcfd063da746db55cc5b6c23c91f
7
+ data.tar.gz: 0d5716c9067c15684993be13a4f5e4949300f9e0ceb72073f3a74e0ff572d5971525a318ea38c1edf528151a142656cdb37351320f79c44e0fb53df1178e04ce
@@ -97,18 +97,18 @@ class Handle
97
97
 
98
98
  # The most generic form of select.
99
99
  # It calls to_s on the statement object to facilitate the use of sql builder objects.
100
- def select(statement, row_builder = nil)
100
+ def select(statement, build_arg = nil)
101
101
  result_set = generic_query(statement)
102
102
  DohDb.logger.call('result', "selected #{result_set.size} rows")
103
- rows = get_row_builder(row_builder).build_rows(result_set)
103
+ rows = get_row_builder(build_arg).build_rows(result_set)
104
104
  rows
105
105
  end
106
106
 
107
107
  # Simple convenience wrapper around the generic select call.
108
108
  # Throws an exception unless the result set is a single row.
109
109
  # Returns the row selected.
110
- def select_row(statement, row_builder = nil)
111
- rows = select(statement, row_builder)
110
+ def select_row(statement, build_arg = nil)
111
+ rows = select(statement, build_arg)
112
112
  raise UnexpectedQueryResult, "selected #{rows.size} rows; expected 1" unless rows.size == 1
113
113
  rows[0]
114
114
  end
@@ -116,22 +116,22 @@ class Handle
116
116
  # Simple convenience wrapper around the generic select call.
117
117
  # Throws an exception unless the result set is empty or a single row.
118
118
  # Returns nil if the result set is empty, or the row selected.
119
- def select_optional_row(statement, row_builder = nil)
120
- rows = select(statement, row_builder)
119
+ def select_optional_row(statement, build_arg = nil)
120
+ rows = select(statement, build_arg)
121
121
  raise UnexpectedQueryResult, "selected #{rows.size} rows; expected 0 or 1" if rows.size > 1
122
122
  if rows.empty? then nil else rows[0] end
123
123
  end
124
124
 
125
125
  # Simple convenience wrapper around select_row.
126
126
  # Returns the first (and typically, the only) field from the selected row.
127
- def select_field(statement, row_builder = nil)
128
- select_row(statement, row_builder).at(0)
127
+ def select_field(statement, build_arg = nil)
128
+ select_row(statement, build_arg).at(0)
129
129
  end
130
130
 
131
131
  # Simple convenience wrapper around select_optional_row.
132
132
  # Returns the first (and typically, the only) field from the selected row, if any, or nil.
133
- def select_optional_field(statement, row_builder = nil)
134
- row = select_optional_row(statement, row_builder)
133
+ def select_optional_field(statement, build_arg = nil)
134
+ row = select_optional_row(statement, build_arg)
135
135
  row && row.at(0)
136
136
  end
137
137
 
@@ -139,8 +139,8 @@ class Handle
139
139
  # 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.
140
140
  # If there are more than 2 fields, returns a hash where each key is the first field in the result set,
141
141
  # and the value is the row itself, as a Hash, and without the field used as a key.
142
- def select_transpose(statement, row_builder = nil)
143
- rows = select(statement, row_builder)
142
+ def select_transpose(statement, build_arg = nil)
143
+ rows = select(statement, build_arg)
144
144
  return {} if rows.empty?
145
145
  field_count = rows.first.size
146
146
  if field_count < 2
@@ -158,13 +158,13 @@ class Handle
158
158
  end
159
159
 
160
160
  # Returns an array of arrays, where the individual arrays contain just the values from each database row -- they lack field names.
161
- def select_values(statement, row_builder = nil)
162
- select(statement, row_builder).collect { |row| row.values }
161
+ def select_values(statement, build_arg = nil)
162
+ select(statement, build_arg).collect { |row| row.values }
163
163
  end
164
164
 
165
165
  # Returns an array of the first (and typically, the only) field of every row in the result set.
166
- def select_list(statement, row_builder = nil)
167
- select(statement, row_builder).collect { |row| row.at(0) }
166
+ def select_list(statement, build_arg = nil)
167
+ select(statement, build_arg).collect { |row| row.at(0) }
168
168
  end
169
169
 
170
170
  def transaction
@@ -255,21 +255,21 @@ private
255
255
  insert("#{keyword} INTO #{table} #{keystr} VALUES #{valuestrs.join(",")}")
256
256
  end
257
257
 
258
- def get_row_builder(row_builder = nil)
259
- if row_builder.nil?
258
+ def get_row_builder(build_arg = nil)
259
+ if build_arg.nil?
260
260
  TypedRowBuilder.new
261
- elsif row_builder == :read
261
+ elsif build_arg == :read
262
262
  TypedRowBuilder.new(ReadOnlyRow)
263
- elsif row_builder == :hash
263
+ elsif build_arg == :hash
264
264
  TypedRowBuilder.new(HashRow)
265
- elsif row_builder == :write
265
+ elsif build_arg == :write
266
266
  TypedRowBuilder.new(WritableRow)
267
- elsif row_builder == :smart
267
+ elsif build_arg == :smart
268
268
  TypedRowBuilder.new(SmartRow)
269
- elsif row_builder.respond_to?('build_rows')
270
- row_builder
269
+ elsif build_arg.respond_to?('build_rows')
270
+ build_arg
271
271
  else
272
- TypedRowBuilder.new(row_builder)
272
+ TypedRowBuilder.new(build_arg)
273
273
  end
274
274
  end
275
275
 
@@ -1,4 +1,5 @@
1
1
  require 'dohmysql/abstract_row'
2
+ require 'sqlstmt/update'
2
3
 
3
4
  module DohDb
4
5
 
@@ -66,6 +67,19 @@ class AbstractSmartRow < AbstractRow
66
67
  def guess_missing_set(key, value)
67
68
  set(key, value)
68
69
  end
70
+
71
+ def db_update
72
+ return if @changed_keys.empty?
73
+ sqlb = SqlStmt::Update.new.table(@table)
74
+ sqlb.where("#{primary_key} = #{get(primary_key).to_sql}")
75
+ @changed_keys.each {|key| sqlb.field(key, get(key).to_sql)}
76
+ Doh.db.query(sqlb)
77
+ @changed_keys.clear
78
+ end
79
+
80
+ def primary_key
81
+ @primary_key ||= "#{@table}_id"
82
+ end
69
83
  end
70
84
 
71
85
  class SmartRow < AbstractSmartRow
@@ -1,10 +1,17 @@
1
1
  require 'dohmysql/readonly_row'
2
+ require 'dohmysql/smart_row'
2
3
 
3
4
  module DohDb
4
5
 
5
6
  class TypedRowBuilder
6
- def initialize(row_klass = nil, guesser = nil)
7
- @row_klass = row_klass || ReadOnlyRow
7
+ def initialize(arg = ReadOnlyRow)
8
+ if arg.is_a?(String)
9
+ @row_klass = SmartRow
10
+ @table = arg
11
+ else
12
+ @row_klass = arg
13
+ @table = nil
14
+ end
8
15
  end
9
16
 
10
17
  def build_rows(result_set)
@@ -22,7 +29,12 @@ class TypedRowBuilder
22
29
  values.push(value)
23
30
  end
24
31
  end
25
- retval.push(@row_klass.new(keys, values))
32
+ if @table
33
+ row = @row_klass.new(keys, values, @table)
34
+ else
35
+ row = @row_klass.new(keys, values)
36
+ end
37
+ retval.push(row)
26
38
  end
27
39
  retval
28
40
  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.33
4
+ version: 0.2.34
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-29 00:00:00.000000000 Z
12
+ date: 2013-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dohroot