omf_oml 0.9.4 → 0.9.5
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.
- data/lib/omf_oml/schema.rb +17 -4
- data/lib/omf_oml/sql_row.rb +10 -2
- data/lib/omf_oml/version.rb +1 -1
- metadata +1 -1
data/lib/omf_oml/schema.rb
CHANGED
@@ -50,7 +50,10 @@ module OMF::OML
|
|
50
50
|
# Return the col name at a specific index
|
51
51
|
#
|
52
52
|
def name_at(index)
|
53
|
-
@schema[index]
|
53
|
+
unless d = @schema[index]
|
54
|
+
raise "Index '#{index}' out of bounds"
|
55
|
+
end
|
56
|
+
d[:name]
|
54
57
|
end
|
55
58
|
|
56
59
|
# Return the col index for column named +name+
|
@@ -143,23 +146,27 @@ module OMF::OML
|
|
143
146
|
end
|
144
147
|
|
145
148
|
# Translate a record described in a hash of 'col_name => value'
|
146
|
-
# to a row array
|
149
|
+
# to a row array. Note: Will suppress column '__id__'
|
147
150
|
#
|
148
151
|
# hrow - Hash describing a row
|
149
152
|
# set_nil_when_missing - If true, set any columns not described in hrow to nil
|
150
153
|
#
|
151
154
|
def hash_to_row(hrow, set_nil_when_missing = false, call_type_conversion = true)
|
152
155
|
#puts "HASH2A => #{hrow.inspect}"
|
156
|
+
remove_first_col = false
|
153
157
|
r = @schema.collect do |cdescr|
|
154
158
|
cname = cdescr[:name]
|
155
|
-
|
159
|
+
if cname == :__id__
|
160
|
+
remove_first_col = true
|
161
|
+
next nil
|
162
|
+
end
|
156
163
|
unless (v = hrow[cname]) || (v = hrow[cname.to_sym])
|
157
164
|
next nil if set_nil_when_missing
|
158
165
|
raise "Missing record element '#{cname}' in record '#{hrow}'"
|
159
166
|
end
|
160
167
|
call_type_conversion ? cdescr[:type_conversion].call(v) : v
|
161
168
|
end
|
162
|
-
r.shift # remove __id__ columns
|
169
|
+
r.shift if remove_first_col # remove __id__ columns
|
163
170
|
#puts "#{r.inspect} -- #{@schema.map {|c| c[:name]}.inspect}"
|
164
171
|
r
|
165
172
|
end
|
@@ -187,6 +194,12 @@ module OMF::OML
|
|
187
194
|
describe.to_json(*opt)
|
188
195
|
end
|
189
196
|
|
197
|
+
def clone()
|
198
|
+
c = self.dup
|
199
|
+
c.instance_variable_set('@schema', @schema.clone)
|
200
|
+
c
|
201
|
+
end
|
202
|
+
|
190
203
|
protected
|
191
204
|
|
192
205
|
# schema_description - Array containing [name, type*] for every column in table
|
data/lib/omf_oml/sql_row.rb
CHANGED
@@ -50,7 +50,14 @@ module OMF::OML
|
|
50
50
|
# by it's name, or its col index
|
51
51
|
#
|
52
52
|
def [](name_or_index)
|
53
|
-
|
53
|
+
if name_or_index.is_a? Integer
|
54
|
+
@row[@schema.name_at_index(name_or_index)]
|
55
|
+
else
|
56
|
+
unless @row.key? name_or_index
|
57
|
+
raise "Unknown column name '#{name_or_index}'"
|
58
|
+
end
|
59
|
+
@row[name_or_index]
|
60
|
+
end
|
54
61
|
end
|
55
62
|
|
56
63
|
# Return the elements of the vector as an array
|
@@ -180,7 +187,7 @@ module OMF::OML
|
|
180
187
|
{:name => name, :type => opts[:db_type]}
|
181
188
|
end
|
182
189
|
# Query we are using is adding the 'oml_sender_name' to the front of the table
|
183
|
-
sd.insert(0, :name =>
|
190
|
+
sd.insert(0, :name => :oml_sender, :type => :string)
|
184
191
|
OmlSchema.new(sd)
|
185
192
|
end
|
186
193
|
|
@@ -191,6 +198,7 @@ module OMF::OML
|
|
191
198
|
schema.each_column do |col|
|
192
199
|
name = col[:name]
|
193
200
|
j = i + 0
|
201
|
+
puts "SCHEMA: '#{name.inspect}'-#{j}"
|
194
202
|
l = @vprocs[name] = lambda do |r| r[j] end
|
195
203
|
@vprocs[i - 4] = l if i > 4
|
196
204
|
i += 1
|
data/lib/omf_oml/version.rb
CHANGED