From 84e17c448cb962696b6fa839feadab7e75f6dcc7 Mon Sep 17 00:00:00 2001 From: GradedJestRisk Date: Wed, 18 Dec 2019 21:58:10 +0100 Subject: [PATCH] Add SQL (without test support) --- sql/README.md | 12 +++++ sql/code/update_quality.sql | 69 +++++++++++++++++++++++++++++ sql/structure/postgreSQL/create.sql | 9 ++++ sql/test/data/load.sql | 15 +++++++ 4 files changed, 105 insertions(+) create mode 100644 sql/README.md create mode 100644 sql/code/update_quality.sql create mode 100644 sql/structure/postgreSQL/create.sql create mode 100644 sql/test/data/load.sql diff --git a/sql/README.md b/sql/README.md new file mode 100644 index 00000000..b667e475 --- /dev/null +++ b/sql/README.md @@ -0,0 +1,12 @@ +# Introduction +This code aims to be based on ISO-compliant, therefore database-agnostic. +However, Data Definition Language (DDL) usually involves vendor variants. + +# Setup +Create database structure: see ./structure//create.sql +Load test data: see ./test/data/load.sql + +# Execution +Execute SQL script: see /code/update_quality.sql +TODO: Introduce test framework - vendor specific + diff --git a/sql/code/update_quality.sql b/sql/code/update_quality.sql new file mode 100644 index 00000000..9da22bd5 --- /dev/null +++ b/sql/code/update_quality.sql @@ -0,0 +1,69 @@ +UPDATE item +SET + quality = quality - 1 +WHERE 1=1 + AND ( name <> 'Aged Brie' AND name <> 'Backstage passes to a TAFKAL80ETC concert') + AND quality > 0 + AND name <> 'Sulfuras, Hand of Ragnaros' +; + +UPDATE item +SET + quality = quality + 1 +WHERE 1=1 + AND NOT ( name <> 'Aged Brie' AND name <> 'Backstage passes to a TAFKAL80ETC concert') + AND quality < 50 + AND name = 'Backstage passes to a TAFKAL80ETC concert' + AND sellIn < 11 + AND quality < 50 +; + +UPDATE item +SET + quality = quality + 1 +WHERE 1=1 + AND NOT ( name <> 'Aged Brie' AND name <> 'Backstage passes to a TAFKAL80ETC concert') + AND quality < 50 + AND name = 'Backstage passes to a TAFKAL80ETC concert' + AND sellIn < 6 + AND quality < 50 +; + +UPDATE item +SET + sellIn = sellIn - 1 +WHERE 1=1 + AND name <> 'Sulfuras, Hand of Ragnaros' +; + +UPDATE item +SET + quality = quality - 1 +WHERE 1=1 + AND sellIn < 0 + AND name <> 'Aged Brie' + AND name <> 'Backstage passes to a TAFKAL80ETC concert' + AND quality > 0 + AND name <> 'Sulfuras, Hand of Ragnaros' +; + +UPDATE item +SET + quality = quality - quality +WHERE 1=1 + AND sellIn < 0 + AND name <> 'Aged Brie' + AND NOT (name <> 'Backstage passes to a TAFKAL80ETC concert') +; + +UPDATE item +SET + quality = quality + 1 +WHERE 1=1 + AND sellIn < 0 + AND NOT (name <> 'Aged Brie') + AND quality < 50 + AND name <> 'Sulfuras, Hand of Ragnaros' +; + +COMMIT; \ No newline at end of file diff --git a/sql/structure/postgreSQL/create.sql b/sql/structure/postgreSQL/create.sql new file mode 100644 index 00000000..5ce4d245 --- /dev/null +++ b/sql/structure/postgreSQL/create.sql @@ -0,0 +1,9 @@ +CREATE DATABASE gilded_rose; + +\connect gilded_rose; + +CREATE TABLE item ( + name CHARACTER VARYING(100) NOT NULL, + sellIn INTEGER, + quality INTEGER NOT NULL +); diff --git a/sql/test/data/load.sql b/sql/test/data/load.sql new file mode 100644 index 00000000..7a142212 --- /dev/null +++ b/sql/test/data/load.sql @@ -0,0 +1,15 @@ +DELETE FROM item; + +INSERT INTO item (name, sellIn, quality) VALUES ('+5 Dexterity Vest', 10, 20); +INSERT INTO item (name, sellIn, quality) VALUES ('Aged Brie', 2, 0); +INSERT INTO item (name, sellIn, quality) VALUES ('Elixir of the Mongoose', 5, 7); +INSERT INTO item (name, sellIn, quality) VALUES ('Sulfuras, Hand of Ragnaros', 0, 80); +INSERT INTO item (name, sellIn, quality) VALUES ('Sulfuras, Hand of Ragnaros', -1, 80); +INSERT INTO item (name, sellIn, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 15, 20); +INSERT INTO item (name, sellIn, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 10, 49); +INSERT INTO item (name, sellIn, quality) VALUES ('Backstage passes to a TAFKAL80ETC concert', 5, 49); + +-- this conjured item does not work properly yet +INSERT INTO item (name, sellIn, quality) VALUES ('Conjured Mana Cake', 3, 6); + +COMMIT;