kicad: use table of properties to export

This commit is contained in:
King Kévin 2023-02-03 01:41:53 +01:00
parent e69ed06ff7
commit 3b24444fa3
1 changed files with 27 additions and 25 deletions

View File

@ -17,17 +17,20 @@ JSON.parse(IO.read(CREDENTIALS)).each {|key,value| credentials[key.to_sym] = val
Mysql2::Client.default_query_options.merge!(:as => :hash) Mysql2::Client.default_query_options.merge!(:as => :hash)
db = Mysql2::Client.new(credentials) db = Mysql2::Client.new(credentials)
KICAD_FILE = "partdb.kicad_dbl" KICAD_FILE = "partdb.kicad_dbl"
DEBUG = false # print debug information
puts "create part to model views" puts "= create part to properties views ="
db.query("CREATE OR REPLACE VIEW part_kicad_symbol AS \ prop2view = [{property: "kicad_symbol"}, {property: "kicad_footprint"}, {property: "qeda_part"}, {property: "qeda_variant"}]
SELECT properties.part AS part, properties.value AS kicad_symbol FROM properties JOIN property ON property.id = properties.property WHERE property.name = 'kicad_symbol'") prop2view.each do |prop|
db.query("CREATE OR REPLACE VIEW part_kicad_footprint AS \ puts prop[:property]
SELECT properties.part AS part, properties.value AS kicad_footprint FROM properties JOIN property ON property.id = properties.property WHERE property.name = 'kicad_footprint'") prop[:table] = "part_" + prop[:property].downcase.gsub(/[- \/]/,"_")
db.query("CREATE OR REPLACE VIEW part_qeda AS \ view = "CREATE OR REPLACE VIEW #{prop[:table]} AS SELECT properties.part AS part, properties.value AS #{prop[:property]} FROM properties JOIN property ON property.id = properties.property WHERE property.name = '#{prop[:property]}'"
SELECT v1.part AS part,v1.value AS qeda_part,v2.value AS qeda_variant FROM properties AS v1 LEFT JOIN property AS p1 ON p1.id = v1.property LEFT JOIN properties AS v2 ON v2.part = v1.part LEFT JOIN property AS p2 ON p2.id = v2.property WHERE p1.name = 'qeda_part' AND p2.name = 'qeda_variant'") puts view if DEBUG
db.query(view)
end
puts "create part category tables" puts "= create part category tables ="
kicad_dbl = {} # kicad database library file kicad_dbl = {} # kicad database library file
kicad_dbl["meta"] = {version: 0} kicad_dbl["meta"] = {version: 0}
@ -41,24 +44,23 @@ categories = db.query("SELECT properties.value AS category FROM properties LEFT
categories.uniq! categories.uniq!
categories.each do |category| categories.each do |category|
puts category puts category
table = "kicad_lib_" + category.gsub(" ","_").gsub("-","_").gsub("/","_").downcase table = "kicad_lib_" + category.downcase.gsub(/[- \/]/,"_")
view = "CREATE OR REPLACE VIEW #{table} AS \ view = "CREATE OR REPLACE VIEW #{table} AS "
SELECT part.id, part.name, part.description, \ view += "SELECT part.id, part.name, "
COALESCE(symbol1.kicad_symbol,symbol2.kicad_symbol) AS kicad_symbol, \ prop2view.each do |prop|
COALESCE(footprint1.kicad_footprint,footprint2.kicad_footprint) AS kicad_footprint, \ view += "COALESCE(#{prop[:table]}1.#{prop[:property]},#{prop[:table]}2.#{prop[:property]}) AS #{prop[:property]}, "
COALESCE(qeda1.qeda_part,qeda2.qeda_part) AS qeda_part, \ end
COALESCE(qeda1.qeda_variant,qeda2.qeda_variant) AS qeda_variant \ view += "part.description FROM part "
FROM part \ view += "LEFT JOIN part AS parent ON parent.id = part.family "
LEFT JOIN part AS parent ON parent.id = part.family \ prop2view.each do |prop|
LEFT JOIN part_kicad_symbol AS symbol1 ON symbol1.part = part.id \ view += "LEFT JOIN #{prop[:table]} AS #{prop[:table]}1 ON #{prop[:table]}1.part = part.id "
LEFT JOIN part_kicad_symbol AS symbol2 ON symbol2.part = parent.id \ view += "LEFT JOIN #{prop[:table]} AS #{prop[:table]}2 ON #{prop[:table]}2.part = parent.id "
LEFT JOIN part_kicad_footprint AS footprint1 ON footprint1.part = part.id \ end
LEFT JOIN part_kicad_footprint AS footprint2 ON footprint2.part = parent.id \ view += "WHERE part.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}') "
LEFT JOIN part_qeda AS qeda1 ON qeda1.part = part.id \ view += "OR parent.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}')"
LEFT JOIN part_qeda AS qeda2 ON qeda2.part = parent.id \ puts view if DEBUG
WHERE part.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}') \
OR parent.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}')"
db.query(view) db.query(view)
library = {name: category, table: table, key: "name", symbols: "kicad_symbol", footprints: "kicad_footprint"} library = {name: category, table: table, key: "name", symbols: "kicad_symbol", footprints: "kicad_footprint"}
library[:properties] = {description: "description"} library[:properties] = {description: "description"}
library[:fields] = [] library[:fields] = []