server: improve parent merging
This commit is contained in:
parent
904724cbce
commit
8336dc70df
32
server.rb
32
server.rb
|
@ -63,17 +63,15 @@ get '/' do
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_part_by_id(id)
|
def get_part_by_id(id)
|
||||||
|
return nil unless id
|
||||||
statement = @db.prepare("SELECT part.id, part.name, part.description, part.datasheet, manufacturer.name AS manufacturer, package.name AS package, part.pincount AS pincount, part.page AS page, part.family AS parent FROM part LEFT JOIN package ON package.id = part.package LEFT JOIN manufacturer ON manufacturer.id = part.manufacturer WHERE part.id = ?")
|
statement = @db.prepare("SELECT part.id, part.name, part.description, part.datasheet, manufacturer.name AS manufacturer, package.name AS package, part.pincount AS pincount, part.page AS page, part.family AS parent FROM part LEFT JOIN package ON package.id = part.package LEFT JOIN manufacturer ON manufacturer.id = part.manufacturer WHERE part.id = ?")
|
||||||
part = statement.execute(id).to_a[0]
|
part = statement.execute(id).to_a[0]
|
||||||
return nil unless part
|
return nil unless part
|
||||||
# merge with family info
|
parent = get_part_by_id(part["parent"])
|
||||||
while part and part["parent"] do
|
# merge parent info
|
||||||
family = statement.execute(part["parent"]).to_a[0]
|
if parent then
|
||||||
part["parent"] = nil # reset info
|
part.each do |k,v|
|
||||||
break unless family
|
part[k] ||= parent[k]
|
||||||
part["family"] ||= family["name"]
|
|
||||||
family.each do |k,v|
|
|
||||||
part[k] ||= v
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# add all distributors
|
# add all distributors
|
||||||
|
@ -101,18 +99,14 @@ def get_part_by_id(id)
|
||||||
end
|
end
|
||||||
# add properties
|
# add properties
|
||||||
part["properties"] = {}
|
part["properties"] = {}
|
||||||
family = id
|
|
||||||
statement = @db.prepare("SELECT property.name AS name, property_value.value AS value FROM property_value JOIN property ON property.id = property_value.property WHERE property_value.part = ?")
|
statement = @db.prepare("SELECT property.name AS name, property_value.value AS value FROM property_value JOIN property ON property.id = property_value.property WHERE property_value.part = ?")
|
||||||
family_stmt = @db.prepare("SELECT family FROM part WHERE id = ?")
|
statement.execute(id).each do |row|
|
||||||
while family do
|
part["properties"][row["name"]] ||= []
|
||||||
statement.execute(family).each do |row|
|
part["properties"][row["name"]] << row["value"]
|
||||||
part["properties"][row["name"]] ||= []
|
end
|
||||||
part["properties"][row["name"]] << row["value"]
|
if parent then
|
||||||
end
|
parent["properties"].each do |k,v|
|
||||||
results = family_stmt.execute(family)
|
part["properties"][k] ||= v
|
||||||
family = nil
|
|
||||||
results.each do |row|
|
|
||||||
family = row["id"]
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# clean up
|
# clean up
|
||||||
|
|
Loading…
Reference in New Issue