From c4deeae1eafc426bbf7f4dc0157d50724099bb47 Mon Sep 17 00:00:00 2001 From: kangj-pluto Date: Tue, 26 Mar 2024 13:08:23 -0400 Subject: [PATCH 1/3] added script to generate a countries table --- script/countries.sc | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 script/countries.sc diff --git a/script/countries.sc b/script/countries.sc new file mode 100644 index 0000000..fdfd466 --- /dev/null +++ b/script/countries.sc @@ -0,0 +1,47 @@ +/* +TO run from project root: +cat script/countries.sc | sbt console + */ +import io.flow.reference.data.Countries +import java.io.{FileOutputStream, PrintWriter} +def cleanStr(str: String) = str.replace("'", "''") +val writer = new PrintWriter(new FileOutputStream("./countries.sql")) +val definition = + """ + |create schema reference; + |CREATE TABLE reference.countries ( + | id numeric not null primary key, + | iso31663 character varying(3) NOT NULL, + | iso31662 character varying(2) NOT NULL, + | languages text, + | name text NOT NULL, + | measurement_system text, + | default_currency text, + | default_language text, + | timezones text, + | default_delivered_duty text + |); + |""".stripMargin +writer.println(definition) +writer.flush() +val lines = Countries.all.zipWithIndex.map { + case (country, ndx) => { + val line = + s""" + |insert into reference.countries (id,iso31663,iso31662,languages,name,measurement_system,default_currency,default_language,timezones,default_delivered_duty) values (${ndx + 1},'${country.iso31663}','${country.iso31662}','${country.languages.mkString(",") + }','${cleanStr(country.name)}','${country.measurementSystem}','${ + country.defaultCurrency + .getOrElse("") + }','${country.defaultLanguage.getOrElse("")}','${ + country.timezones.mkString( + ",", + ) + }','${country.defaultDeliveredDuty.getOrElse("")}');""".stripMargin + line + } +} + +lines.foreach(l => writer.println(l)) +writer.flush() +writer.close() + From 4364f78387d2f75d77ac39dfad9a3b386fa80135 Mon Sep 17 00:00:00 2001 From: kangj-pluto Date: Tue, 26 Mar 2024 14:12:08 -0400 Subject: [PATCH 2/3] get rid of blank cols. use json[] for languages --- script/countries.sc | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/script/countries.sc b/script/countries.sc index fdfd466..89b1741 100644 --- a/script/countries.sc +++ b/script/countries.sc @@ -13,13 +13,11 @@ val definition = | id numeric not null primary key, | iso31663 character varying(3) NOT NULL, | iso31662 character varying(2) NOT NULL, - | languages text, + | languages JSON[], | name text NOT NULL, | measurement_system text, | default_currency text, - | default_language text, - | timezones text, - | default_delivered_duty text + | default_language text |); |""".stripMargin writer.println(definition) @@ -28,15 +26,10 @@ val lines = Countries.all.zipWithIndex.map { case (country, ndx) => { val line = s""" - |insert into reference.countries (id,iso31663,iso31662,languages,name,measurement_system,default_currency,default_language,timezones,default_delivered_duty) values (${ndx + 1},'${country.iso31663}','${country.iso31662}','${country.languages.mkString(",") - }','${cleanStr(country.name)}','${country.measurementSystem}','${ + |insert into reference.countries (id,iso31663,iso31662,languages,name,measurement_system,default_currency,default_language) values (${ndx + 1},'${country.iso31663}','${country.iso31662}',array[${country.languages.map(l => s"""'"${l}"'""").mkString(",")}]::json[],'${cleanStr(country.name)}','${country.measurementSystem}','${ country.defaultCurrency .getOrElse("") - }','${country.defaultLanguage.getOrElse("")}','${ - country.timezones.mkString( - ",", - ) - }','${country.defaultDeliveredDuty.getOrElse("")}');""".stripMargin + }','${country.defaultLanguage.getOrElse("")}');""".stripMargin line } } From f10cdaa22dafd726c74f2e3cc0b343b51e0ee145 Mon Sep 17 00:00:00 2001 From: kangj-pluto Date: Tue, 26 Mar 2024 14:32:50 -0400 Subject: [PATCH 3/3] cleanup --- script/countries.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/countries.sc b/script/countries.sc index 89b1741..af8e847 100644 --- a/script/countries.sc +++ b/script/countries.sc @@ -29,7 +29,7 @@ val lines = Countries.all.zipWithIndex.map { |insert into reference.countries (id,iso31663,iso31662,languages,name,measurement_system,default_currency,default_language) values (${ndx + 1},'${country.iso31663}','${country.iso31662}',array[${country.languages.map(l => s"""'"${l}"'""").mkString(",")}]::json[],'${cleanStr(country.name)}','${country.measurementSystem}','${ country.defaultCurrency .getOrElse("") - }','${country.defaultLanguage.getOrElse("")}');""".stripMargin + }',${country.defaultLanguage.map(dl => s"'${dl}'").getOrElse(null)});""".stripMargin line } }