From 8336dc70df3db618fe79fe93d570278907354713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Thu, 26 Jan 2023 07:17:20 +0100 Subject: [PATCH] server: improve parent merging --- server.rb | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/server.rb b/server.rb index 234bdc0..62914f9 100755 --- a/server.rb +++ b/server.rb @@ -63,17 +63,15 @@ get '/' do end 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 = ?") part = statement.execute(id).to_a[0] return nil unless part - # merge with family info - while part and part["parent"] do - family = statement.execute(part["parent"]).to_a[0] - part["parent"] = nil # reset info - break unless family - part["family"] ||= family["name"] - family.each do |k,v| - part[k] ||= v + parent = get_part_by_id(part["parent"]) + # merge parent info + if parent then + part.each do |k,v| + part[k] ||= parent[k] end end # add all distributors @@ -101,18 +99,14 @@ def get_part_by_id(id) end # add 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 = ?") - family_stmt = @db.prepare("SELECT family FROM part WHERE id = ?") - while family do - statement.execute(family).each do |row| - part["properties"][row["name"]] ||= [] - part["properties"][row["name"]] << row["value"] - end - results = family_stmt.execute(family) - family = nil - results.each do |row| - family = row["id"] + statement.execute(id).each do |row| + part["properties"][row["name"]] ||= [] + part["properties"][row["name"]] << row["value"] + end + if parent then + parent["properties"].each do |k,v| + part["properties"][k] ||= v end end # clean up