From 169e9fdd7d921598daa71330fa0fdcda07bbfa6d Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Mon, 11 Nov 2024 21:29:42 -0500 Subject: [PATCH 01/31] Update create_tables.sql to enforce uniqueness on player and world names, adjust data types for various fields, and improve schema consistency --- create_tables.sql | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/create_tables.sql b/create_tables.sql index 556abe8..556abed 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -3,7 +3,7 @@ USE 0ce; CREATE TABLE IF NOT EXISTS player ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, - name VARCHAR(100), + name VARCHAR(100) UNIQUE, email VARCHAR(100) UNIQUE, password VARBINARY(255) NOT NULL, salt VARBINARY(16), @@ -14,16 +14,16 @@ CREATE TABLE IF NOT EXISTS player ( CREATE TABLE IF NOT EXISTS world ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, - name VARCHAR(100), + name VARCHAR(100) UNIQUE, description TEXT, seed INT NOT NULL, - action_speed INT DEFAULT 1 NOT NULL, - unit_speed INT DEFAULT 1 NOT NULL, - trade_speed INT DEFAULT 1 NOT NULL, + action_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, + unit_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, + trade_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, night_bonus INT DEFAULT 0 NOT NULL, - BEGINNER_PROTECTION INT DEFAULT 0 NOT NULL, - MORALE BOOL DEFAULT FALSE NOT NULL, - ALLIANCE_CAP INT DEFAULT 0 NOT NULL, + beginner_protection INT DEFAULT 0 NOT NULL, + morale BOOL DEFAULT FALSE NOT NULL, + alliance_limit INT DEFAULT 0 NOT NULL, STATUS TINYINT DEFAULT 1 NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB; @@ -82,8 +82,8 @@ CREATE TABLE IF NOT EXISTS building_prerequisite ( ) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS unit ( - id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, - name VARCHAR(100), + id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, + name VARCHAR(100) UNIQUE, description TEXT, type TINYINT NOT NULL, wood_cost INT DEFAULT 0 NOT NULL, @@ -91,7 +91,7 @@ CREATE TABLE IF NOT EXISTS unit ( silver_cost INT DEFAULT 0 NOT NULL, population_cost INT DEFAULT 0 NOT NULL, training_time INT DEFAULT 0 NOT NULL, - damage INT DEFAULT 1 NOT NULL, + damage INT DEFAULT 0 NOT NULL, defense_blunt INT DEFAULT 0 NOT NULL, defense_distance INT DEFAULT 0 NOT NULL, defense_sharp INT DEFAULT 0 NOT NULL, @@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS unit ( CREATE TABLE IF NOT EXISTS city_unit ( city_id INT UNSIGNED NOT NULL, - unit_id INT UNSIGNED NOT NULL, + unit_id TINYINT UNSIGNED NOT NULL, quantity INT DEFAULT 0 NOT NULL, PRIMARY KEY (city_id, unit_id), FOREIGN KEY (city_id) REFERENCES city(id), @@ -126,7 +126,7 @@ CREATE TABLE IF NOT EXISTS battle ( CREATE TABLE IF NOT EXISTS battle_unit ( battle_id INT UNSIGNED NOT NULL, - unit_id INT UNSIGNED NOT NULL, + unit_id TINYINT UNSIGNED NOT NULL, quantity INT DEFAULT 0 NOT NULL, side TINYINT NOT NULL, PRIMARY KEY (battle_id, unit_id), From 38f8afee53268af472b0fa822fa244bb7aee838d Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Mon, 11 Nov 2024 21:29:51 -0500 Subject: [PATCH 02/31] Add stored procedures for player, world, island, city, building, unit, and battle management; update Dockerfile to include the new SQL script --- Dockerfile | 2 +- create_get_procedures.sql | 218 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 create_get_procedures.sql diff --git a/Dockerfile b/Dockerfile index 0947d3a..5521e5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ ENV TZ=America/Montreal # /docker-entrypoint-initdb.d/: Is the directory where MariaDB automatically runs any .sql, .sql.gz, or .sh files placed inside during the container's first run. COPY create_database.sql /docker-entrypoint-initdb.d/ COPY create_tables.sql /docker-entrypoint-initdb.d/ -# COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ +COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ # Expose the default MariaDB port (3306) EXPOSE 3306 diff --git a/create_get_procedures.sql b/create_get_procedures.sql new file mode 100644 index 0000000..9664daf --- /dev/null +++ b/create_get_procedures.sql @@ -0,0 +1,218 @@ +-- Use the database +USE 0ce; + +-- Player Procedures + +DELIMITER // + +CREATE PROCEDURE get_all_players() +BEGIN + SELECT id, name, email, gold, created_at, last_login FROM player; +END // + +CREATE PROCEDURE get_player_by_id(IN player_id INT) +BEGIN + SELECT id, name, email, gold, created_at, last_login + FROM player + WHERE id = player_id; +END // + +CREATE PROCEDURE get_player_by_name(IN name VARCHAR(100)) +BEGIN + SELECT id, name, email, gold, created_at, last_login + FROM player + WHERE name = name; +END // + +CREATE PROCEDURE get_player_worlds(IN player_id INT) +BEGIN + SELECT w.id, w.name, w.description, w.created_at + FROM world w + JOIN player_world pw ON w.id = pw.world_id + WHERE pw.player_id = player_id; +END // + +CREATE PROCEDURE get_player_cities(IN player_id INT) +BEGIN + SELECT c.id, c.name, c.x, c.y, c.island_id + FROM city c + WHERE c.owner_id = player_id; +END // + +-- World Procedures + +CREATE PROCEDURE get_all_worlds() +BEGIN + SELECT id, name, description, seed, action_speed, unit_speed, trade_speed, night_bonus, + BEGINNER_PROTECTION, MORALE, ALLIANCE_CAP, STATUS, created_at + FROM world; +END // + +CREATE PROCEDURE get_world_by_id(IN world_id INT) +BEGIN + SELECT id, name, description, seed, action_speed, unit_speed, trade_speed, night_bonus, + BEGINNER_PROTECTION, MORALE, ALLIANCE_CAP, STATUS, created_at + FROM world + WHERE id = world_id; +END // + +CREATE PROCEDURE get_active_worlds() +BEGIN + SELECT id, name, description, created_at + FROM world + WHERE STATUS = 1; +END // + +CREATE PROCEDURE get_players_in_world(IN world_id INT) +BEGIN + SELECT p.id, p.name, p.email, p.gold, p.created_at + FROM player p + JOIN player_world pw ON p.id = pw.player_id + WHERE pw.world_id = world_id; +END // + +CREATE PROCEDURE get_world_islands(IN world_id INT) +BEGIN + SELECT id, x, y + FROM island + WHERE world_id = world_id; +END // + +-- Island Procedures + +CREATE PROCEDURE get_all_islands() +BEGIN + SELECT id, x, y, world_id + FROM island; +END // + +CREATE PROCEDURE get_island_by_id(IN island_id INT) +BEGIN + SELECT id, x, y, world_id + FROM island + WHERE id = island_id; +END // + +CREATE PROCEDURE get_island_cities(IN island_id INT) +BEGIN + SELECT id, name, x, y, owner_id + FROM city + WHERE island_id = island_id; +END // + +-- City Procedures + +CREATE PROCEDURE get_all_cities() +BEGIN + SELECT id, name, x, y, island_id, owner_id + FROM city; +END // + +CREATE PROCEDURE get_city_by_id(IN city_id INT) +BEGIN + SELECT id, name, x, y, island_id, owner_id + FROM city + WHERE id = city_id; +END // + +CREATE PROCEDURE get_cities_in_world(IN world_id INT) +BEGIN + SELECT c.id, c.name, c.x, c.y, c.owner_id, c.island_id + FROM city c + JOIN island i ON c.island_id = i.id + WHERE i.world_id = world_id; +END // + +-- Building Procedures + +CREATE PROCEDURE get_all_buildings() +BEGIN + SELECT id, name, level, max_level, city_id + FROM building; +END // + +CREATE PROCEDURE get_city_buildings(IN city_id INT) +BEGIN + SELECT id, name, level, max_level + FROM building + WHERE city_id = city_id; +END // + +CREATE PROCEDURE get_building_by_id(IN building_id INT) +BEGIN + SELECT id, name, level, max_level, city_id + FROM building + WHERE id = building_id; +END // + +CREATE PROCEDURE get_building_prerequisites(IN building_id INT) +BEGIN + SELECT prerequisite_id + FROM building_prerequisite + WHERE building_id = building_id; +END // + +-- Unit Procedures + +CREATE PROCEDURE get_all_units() +BEGIN + SELECT id, name, description, type, wood_cost, stone_cost, silver_cost, population_cost, + training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly + FROM unit; +END // + +CREATE PROCEDURE get_city_units(IN city_id INT) +BEGIN + SELECT u.id, u.name, cu.quantity + FROM unit u + JOIN city_unit cu ON u.id = cu.unit_id + WHERE cu.city_id = city_id; +END // + +CREATE PROCEDURE get_unit_by_id(IN unit_id INT) +BEGIN + SELECT id, name, description, type, wood_cost, stone_cost, silver_cost, population_cost, + training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly + FROM unit + WHERE id = unit_id; +END // + +-- Battle Procedures + +CREATE PROCEDURE get_all_battles() +BEGIN + SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + FROM battle; +END // + +CREATE PROCEDURE get_battle_by_id(IN battle_id INT) +BEGIN + SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + FROM battle + WHERE id = battle_id; +END // + +CREATE PROCEDURE get_player_battles(IN player_id INT) +BEGIN + SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + FROM battle + WHERE attacker_id = player_id OR defender_id = player_id; +END // + +CREATE PROCEDURE get_battle_units(IN battle_id INT) +BEGIN + SELECT unit_id, quantity, side + FROM battle_unit + WHERE battle_id = battle_id; +END // + +-- Miscellaneous Procedures + +CREATE PROCEDURE get_building_requirements(IN building_id INT) +BEGIN + SELECT wood, stone, silver, population + FROM building_requirement + WHERE building_id = building_id; +END // + +DELIMITER ; From b7117d04359916eae87ca4fbdedf60add85fb804 Mon Sep 17 00:00:00 2001 From: Vianney Date: Tue, 12 Nov 2024 17:58:16 -0500 Subject: [PATCH 03/31] Enhance player table schema by making player_name and salt fields NOT NULL --- create_tables.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/create_tables.sql b/create_tables.sql index 77cb111..151d5d0 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -3,10 +3,10 @@ USE 0ce; CREATE TABLE IF NOT EXISTS player ( player_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, - player_name VARCHAR(100), - email VARCHAR(100) UNIQUE, + player_name VARCHAR(100) UNIQUE NOT NULL, + email VARCHAR(100) UNIQUE NOT NULL, hashed_password VARBINARY(255) NOT NULL, - salt VARBINARY(16), + salt VARBINARY(16) NOT NULL, gold INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP From fd42439c833b1e8669130615f47a949603d4dccb Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:15:01 -0500 Subject: [PATCH 04/31] Refactor stored procedures to use consistent naming conventions for player, world, city, and building identifiers --- create_get_procedures.sql | 81 +++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 9664daf..86417ec 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -7,34 +7,34 @@ DELIMITER // CREATE PROCEDURE get_all_players() BEGIN - SELECT id, name, email, gold, created_at, last_login FROM player; + SELECT player_id, player_name, email, gold, created_at, last_login FROM player; END // CREATE PROCEDURE get_player_by_id(IN player_id INT) BEGIN - SELECT id, name, email, gold, created_at, last_login + SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE id = player_id; END // -CREATE PROCEDURE get_player_by_name(IN name VARCHAR(100)) +CREATE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN - SELECT id, name, email, gold, created_at, last_login + SELECT player_id, player_name, email, gold, created_at, last_login FROM player - WHERE name = name; + WHERE player_name = player_name; END // CREATE PROCEDURE get_player_worlds(IN player_id INT) BEGIN - SELECT w.id, w.name, w.description, w.created_at + SELECT w.world_id, w.world_name, w.world_description, w.created_at FROM world w - JOIN player_world pw ON w.id = pw.world_id + JOIN player_world pw ON w.world_id = pw.world_id WHERE pw.player_id = player_id; END // CREATE PROCEDURE get_player_cities(IN player_id INT) BEGIN - SELECT c.id, c.name, c.x, c.y, c.island_id + SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c WHERE c.owner_id = player_id; END // @@ -43,37 +43,37 @@ END // CREATE PROCEDURE get_all_worlds() BEGIN - SELECT id, name, description, seed, action_speed, unit_speed, trade_speed, night_bonus, - BEGINNER_PROTECTION, MORALE, ALLIANCE_CAP, STATUS, created_at + SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, + night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world; END // CREATE PROCEDURE get_world_by_id(IN world_id INT) BEGIN - SELECT id, name, description, seed, action_speed, unit_speed, trade_speed, night_bonus, - BEGINNER_PROTECTION, MORALE, ALLIANCE_CAP, STATUS, created_at + SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, + night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world - WHERE id = world_id; + WHERE world_id = world_id; END // CREATE PROCEDURE get_active_worlds() BEGIN - SELECT id, name, description, created_at + SELECT world_id, world_name, world_description, created_at FROM world WHERE STATUS = 1; END // CREATE PROCEDURE get_players_in_world(IN world_id INT) BEGIN - SELECT p.id, p.name, p.email, p.gold, p.created_at + SELECT p.player_id, p.player_name, p.email, p.gold, p.created_at FROM player p - JOIN player_world pw ON p.id = pw.player_id + JOIN player_world pw ON p.player_id = pw.player_id WHERE pw.world_id = world_id; END // CREATE PROCEDURE get_world_islands(IN world_id INT) BEGIN - SELECT id, x, y + SELECT island_id, x, y FROM island WHERE world_id = world_id; END // @@ -82,20 +82,20 @@ END // CREATE PROCEDURE get_all_islands() BEGIN - SELECT id, x, y, world_id + SELECT island_id, x, y, world_id FROM island; END // CREATE PROCEDURE get_island_by_id(IN island_id INT) BEGIN - SELECT id, x, y, world_id + SELECT island_id, x, y, world_id FROM island - WHERE id = island_id; + WHERE island_id = island_id; END // CREATE PROCEDURE get_island_cities(IN island_id INT) BEGIN - SELECT id, name, x, y, owner_id + SELECT city_id, city_name, x, y, owner_id FROM city WHERE island_id = island_id; END // @@ -104,22 +104,22 @@ END // CREATE PROCEDURE get_all_cities() BEGIN - SELECT id, name, x, y, island_id, owner_id + SELECT city_id, city_name, x, y, island_id, owner_id FROM city; END // CREATE PROCEDURE get_city_by_id(IN city_id INT) BEGIN - SELECT id, name, x, y, island_id, owner_id + SELECT city_id, city_name, x, y, island_id, owner_id FROM city WHERE id = city_id; END // CREATE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN - SELECT c.id, c.name, c.x, c.y, c.owner_id, c.island_id + SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id FROM city c - JOIN island i ON c.island_id = i.id + JOIN island i ON c.island_id = i.island_id WHERE i.world_id = world_id; END // @@ -127,20 +127,20 @@ END // CREATE PROCEDURE get_all_buildings() BEGIN - SELECT id, name, level, max_level, city_id + SELECT building_id, building_name, building_level, max_level, city_id FROM building; END // CREATE PROCEDURE get_city_buildings(IN city_id INT) BEGIN - SELECT id, name, level, max_level + SELECT building_id, building_name, building_level, max_level FROM building WHERE city_id = city_id; END // CREATE PROCEDURE get_building_by_id(IN building_id INT) BEGIN - SELECT id, name, level, max_level, city_id + SELECT building_id, building_name, building_level, max_level, city_id FROM building WHERE id = building_id; END // @@ -156,23 +156,25 @@ END // CREATE PROCEDURE get_all_units() BEGIN - SELECT id, name, description, type, wood_cost, stone_cost, silver_cost, population_cost, - training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly + SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, + population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, + speed, can_fly FROM unit; END // CREATE PROCEDURE get_city_units(IN city_id INT) BEGIN - SELECT u.id, u.name, cu.quantity + SELECT u.unit_id, u.unit_name, cu.quantity FROM unit u - JOIN city_unit cu ON u.id = cu.unit_id + JOIN city_unit cu ON u.unit_id = cu.unit_id WHERE cu.city_id = city_id; END // CREATE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN - SELECT id, name, description, type, wood_cost, stone_cost, silver_cost, population_cost, - training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly + SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, + population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, + speed, can_fly FROM unit WHERE id = unit_id; END // @@ -181,20 +183,23 @@ END // CREATE PROCEDURE get_all_battles() BEGIN - SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, + loot_stone, loot_silver FROM battle; END // CREATE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN - SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, + loot_stone, loot_silver FROM battle WHERE id = battle_id; END // CREATE PROCEDURE get_player_battles(IN player_id INT) BEGIN - SELECT id, attacker_id, defender_id, time, winner_id, loser_id, loot_wood, loot_stone, loot_silver + SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, + loot_stone, loot_silver FROM battle WHERE attacker_id = player_id OR defender_id = player_id; END // @@ -210,7 +215,7 @@ END // CREATE PROCEDURE get_building_requirements(IN building_id INT) BEGIN - SELECT wood, stone, silver, population + SELECT required_wood, required_stone, required_silver, required_population FROM building_requirement WHERE building_id = building_id; END // From edbd6c567db315db0e8d5b429e6729da75491855 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:17:45 -0500 Subject: [PATCH 05/31] Exclude PRS rule from SQLFluff configuration --- .sqlfluff | 1 + 1 file changed, 1 insertion(+) diff --git a/.sqlfluff b/.sqlfluff index a9b2870..2e88908 100644 --- a/.sqlfluff +++ b/.sqlfluff @@ -1,3 +1,4 @@ [sqlfluff] dialect = mariadb max_line_length = 100 +exlude_rules = PRS From ea37297de85f848023a4418b2d05ac387cc0adcb Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:38:56 -0500 Subject: [PATCH 06/31] Replace CREATE PROCEDURE with CREATE OR REPLACE PROCEDURE for all stored procedures in create_get_procedures.sql --- create_get_procedures.sql | 56 +++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 86417ec..2018633 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -5,26 +5,26 @@ USE 0ce; DELIMITER // -CREATE PROCEDURE get_all_players() +CREATE OR REPLACE PROCEDURE get_all_players() BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; END // -CREATE PROCEDURE get_player_by_id(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE id = player_id; END // -CREATE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) +CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE player_name = player_name; END // -CREATE PROCEDURE get_player_worlds(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) BEGIN SELECT w.world_id, w.world_name, w.world_description, w.created_at FROM world w @@ -32,7 +32,7 @@ BEGIN WHERE pw.player_id = player_id; END // -CREATE PROCEDURE get_player_cities(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c @@ -41,14 +41,14 @@ END // -- World Procedures -CREATE PROCEDURE get_all_worlds() +CREATE OR REPLACE PROCEDURE get_all_worlds() BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world; END // -CREATE PROCEDURE get_world_by_id(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at @@ -56,14 +56,14 @@ BEGIN WHERE world_id = world_id; END // -CREATE PROCEDURE get_active_worlds() +CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at FROM world WHERE STATUS = 1; END // -CREATE PROCEDURE get_players_in_world(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) BEGIN SELECT p.player_id, p.player_name, p.email, p.gold, p.created_at FROM player p @@ -71,7 +71,7 @@ BEGIN WHERE pw.world_id = world_id; END // -CREATE PROCEDURE get_world_islands(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) BEGIN SELECT island_id, x, y FROM island @@ -80,20 +80,20 @@ END // -- Island Procedures -CREATE PROCEDURE get_all_islands() +CREATE OR REPLACE PROCEDURE get_all_islands() BEGIN SELECT island_id, x, y, world_id FROM island; END // -CREATE PROCEDURE get_island_by_id(IN island_id INT) +CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) BEGIN SELECT island_id, x, y, world_id FROM island WHERE island_id = island_id; END // -CREATE PROCEDURE get_island_cities(IN island_id INT) +CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id FROM city @@ -102,20 +102,20 @@ END // -- City Procedures -CREATE PROCEDURE get_all_cities() +CREATE OR REPLACE PROCEDURE get_all_cities() BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city; END // -CREATE PROCEDURE get_city_by_id(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city WHERE id = city_id; END // -CREATE PROCEDURE get_cities_in_world(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id FROM city c @@ -125,27 +125,27 @@ END // -- Building Procedures -CREATE PROCEDURE get_all_buildings() +CREATE OR REPLACE PROCEDURE get_all_buildings() BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building; END // -CREATE PROCEDURE get_city_buildings(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level FROM building WHERE city_id = city_id; END // -CREATE PROCEDURE get_building_by_id(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building WHERE id = building_id; END // -CREATE PROCEDURE get_building_prerequisites(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) BEGIN SELECT prerequisite_id FROM building_prerequisite @@ -154,7 +154,7 @@ END // -- Unit Procedures -CREATE PROCEDURE get_all_units() +CREATE OR REPLACE PROCEDURE get_all_units() BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, @@ -162,7 +162,7 @@ BEGIN FROM unit; END // -CREATE PROCEDURE get_city_units(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) BEGIN SELECT u.unit_id, u.unit_name, cu.quantity FROM unit u @@ -170,7 +170,7 @@ BEGIN WHERE cu.city_id = city_id; END // -CREATE PROCEDURE get_unit_by_id(IN unit_id INT) +CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, @@ -181,14 +181,14 @@ END // -- Battle Procedures -CREATE PROCEDURE get_all_battles() +CREATE OR REPLACE PROCEDURE get_all_battles() BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle; END // -CREATE PROCEDURE get_battle_by_id(IN battle_id INT) +CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver @@ -196,7 +196,7 @@ BEGIN WHERE id = battle_id; END // -CREATE PROCEDURE get_player_battles(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver @@ -204,7 +204,7 @@ BEGIN WHERE attacker_id = player_id OR defender_id = player_id; END // -CREATE PROCEDURE get_battle_units(IN battle_id INT) +CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) BEGIN SELECT unit_id, quantity, side FROM battle_unit @@ -213,7 +213,7 @@ END // -- Miscellaneous Procedures -CREATE PROCEDURE get_building_requirements(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_requirements(IN building_id INT) BEGIN SELECT required_wood, required_stone, required_silver, required_population FROM building_requirement From 8df5335515a1499596d8f15969101be4ce28e826 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:40:49 -0500 Subject: [PATCH 07/31] Weird test to revert if not working --- create_get_procedures.sql | 108 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2018633..43cf0b3 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -10,6 +10,10 @@ BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login @@ -17,6 +21,10 @@ BEGIN WHERE id = player_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login @@ -24,6 +32,10 @@ BEGIN WHERE player_name = player_name; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) BEGIN SELECT w.world_id, w.world_name, w.world_description, w.created_at @@ -32,6 +44,10 @@ BEGIN WHERE pw.player_id = player_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id @@ -39,6 +55,10 @@ BEGIN WHERE c.owner_id = player_id; END // +DELIMITER ; + +DELIMITER // + -- World Procedures CREATE OR REPLACE PROCEDURE get_all_worlds() @@ -48,6 +68,10 @@ BEGIN FROM world; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, @@ -56,6 +80,10 @@ BEGIN WHERE world_id = world_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at @@ -63,6 +91,10 @@ BEGIN WHERE STATUS = 1; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) BEGIN SELECT p.player_id, p.player_name, p.email, p.gold, p.created_at @@ -71,6 +103,10 @@ BEGIN WHERE pw.world_id = world_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) BEGIN SELECT island_id, x, y @@ -78,6 +114,10 @@ BEGIN WHERE world_id = world_id; END // +DELIMITER ; + +DELIMITER // + -- Island Procedures CREATE OR REPLACE PROCEDURE get_all_islands() @@ -86,6 +126,10 @@ BEGIN FROM island; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) BEGIN SELECT island_id, x, y, world_id @@ -93,6 +137,10 @@ BEGIN WHERE island_id = island_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id @@ -100,6 +148,10 @@ BEGIN WHERE island_id = island_id; END // +DELIMITER ; + +DELIMITER // + -- City Procedures CREATE OR REPLACE PROCEDURE get_all_cities() @@ -108,6 +160,10 @@ BEGIN FROM city; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id @@ -115,6 +171,10 @@ BEGIN WHERE id = city_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id @@ -123,6 +183,10 @@ BEGIN WHERE i.world_id = world_id; END // +DELIMITER ; + +DELIMITER // + -- Building Procedures CREATE OR REPLACE PROCEDURE get_all_buildings() @@ -131,6 +195,10 @@ BEGIN FROM building; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level @@ -138,6 +206,10 @@ BEGIN WHERE city_id = city_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id @@ -145,6 +217,10 @@ BEGIN WHERE id = building_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) BEGIN SELECT prerequisite_id @@ -152,6 +228,10 @@ BEGIN WHERE building_id = building_id; END // +DELIMITER ; + +DELIMITER // + -- Unit Procedures CREATE OR REPLACE PROCEDURE get_all_units() @@ -162,6 +242,10 @@ BEGIN FROM unit; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) BEGIN SELECT u.unit_id, u.unit_name, cu.quantity @@ -170,6 +254,10 @@ BEGIN WHERE cu.city_id = city_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, @@ -179,6 +267,10 @@ BEGIN WHERE id = unit_id; END // +DELIMITER ; + +DELIMITER // + -- Battle Procedures CREATE OR REPLACE PROCEDURE get_all_battles() @@ -188,6 +280,10 @@ BEGIN FROM battle; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, @@ -196,6 +292,10 @@ BEGIN WHERE id = battle_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, @@ -204,6 +304,10 @@ BEGIN WHERE attacker_id = player_id OR defender_id = player_id; END // +DELIMITER ; + +DELIMITER // + CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) BEGIN SELECT unit_id, quantity, side @@ -211,6 +315,10 @@ BEGIN WHERE battle_id = battle_id; END // +DELIMITER ; + +DELIMITER // + -- Miscellaneous Procedures CREATE OR REPLACE PROCEDURE get_building_requirements(IN building_id INT) From 5c83f3ccb08b2d557dd104b55b5d1473f5c13c7f Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:43:48 -0500 Subject: [PATCH 08/31] Revert "Weird test to revert if not working" This reverts commit 8df5335515a1499596d8f15969101be4ce28e826. --- create_get_procedures.sql | 108 -------------------------------------- 1 file changed, 108 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 43cf0b3..2018633 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -10,10 +10,6 @@ BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login @@ -21,10 +17,6 @@ BEGIN WHERE id = player_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login @@ -32,10 +24,6 @@ BEGIN WHERE player_name = player_name; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) BEGIN SELECT w.world_id, w.world_name, w.world_description, w.created_at @@ -44,10 +32,6 @@ BEGIN WHERE pw.player_id = player_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id @@ -55,10 +39,6 @@ BEGIN WHERE c.owner_id = player_id; END // -DELIMITER ; - -DELIMITER // - -- World Procedures CREATE OR REPLACE PROCEDURE get_all_worlds() @@ -68,10 +48,6 @@ BEGIN FROM world; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, @@ -80,10 +56,6 @@ BEGIN WHERE world_id = world_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at @@ -91,10 +63,6 @@ BEGIN WHERE STATUS = 1; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) BEGIN SELECT p.player_id, p.player_name, p.email, p.gold, p.created_at @@ -103,10 +71,6 @@ BEGIN WHERE pw.world_id = world_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) BEGIN SELECT island_id, x, y @@ -114,10 +78,6 @@ BEGIN WHERE world_id = world_id; END // -DELIMITER ; - -DELIMITER // - -- Island Procedures CREATE OR REPLACE PROCEDURE get_all_islands() @@ -126,10 +86,6 @@ BEGIN FROM island; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) BEGIN SELECT island_id, x, y, world_id @@ -137,10 +93,6 @@ BEGIN WHERE island_id = island_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id @@ -148,10 +100,6 @@ BEGIN WHERE island_id = island_id; END // -DELIMITER ; - -DELIMITER // - -- City Procedures CREATE OR REPLACE PROCEDURE get_all_cities() @@ -160,10 +108,6 @@ BEGIN FROM city; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id @@ -171,10 +115,6 @@ BEGIN WHERE id = city_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id @@ -183,10 +123,6 @@ BEGIN WHERE i.world_id = world_id; END // -DELIMITER ; - -DELIMITER // - -- Building Procedures CREATE OR REPLACE PROCEDURE get_all_buildings() @@ -195,10 +131,6 @@ BEGIN FROM building; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level @@ -206,10 +138,6 @@ BEGIN WHERE city_id = city_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id @@ -217,10 +145,6 @@ BEGIN WHERE id = building_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) BEGIN SELECT prerequisite_id @@ -228,10 +152,6 @@ BEGIN WHERE building_id = building_id; END // -DELIMITER ; - -DELIMITER // - -- Unit Procedures CREATE OR REPLACE PROCEDURE get_all_units() @@ -242,10 +162,6 @@ BEGIN FROM unit; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) BEGIN SELECT u.unit_id, u.unit_name, cu.quantity @@ -254,10 +170,6 @@ BEGIN WHERE cu.city_id = city_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, @@ -267,10 +179,6 @@ BEGIN WHERE id = unit_id; END // -DELIMITER ; - -DELIMITER // - -- Battle Procedures CREATE OR REPLACE PROCEDURE get_all_battles() @@ -280,10 +188,6 @@ BEGIN FROM battle; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, @@ -292,10 +196,6 @@ BEGIN WHERE id = battle_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, @@ -304,10 +204,6 @@ BEGIN WHERE attacker_id = player_id OR defender_id = player_id; END // -DELIMITER ; - -DELIMITER // - CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) BEGIN SELECT unit_id, quantity, side @@ -315,10 +211,6 @@ BEGIN WHERE battle_id = battle_id; END // -DELIMITER ; - -DELIMITER // - -- Miscellaneous Procedures CREATE OR REPLACE PROCEDURE get_building_requirements(IN building_id INT) From ce0316eb3879cb5ed0ea5966c58496cdc40ca549 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 18:54:32 -0500 Subject: [PATCH 09/31] Fix SQLFluff configuration and standardize procedure delimiters in create_get_procedures.sql --- .sqlfluff | 1 - create_get_procedures.sql | 58 +++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/.sqlfluff b/.sqlfluff index 2e88908..a9b2870 100644 --- a/.sqlfluff +++ b/.sqlfluff @@ -1,4 +1,3 @@ [sqlfluff] dialect = mariadb max_line_length = 100 -exlude_rules = PRS diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2018633..2251fca 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -3,26 +3,26 @@ USE 0ce; -- Player Procedures -DELIMITER // +DELIMITER '' CREATE OR REPLACE PROCEDURE get_all_players() BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; -END // +END '' CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE id = player_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE player_name = player_name; -END // +END '' CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) BEGIN @@ -30,14 +30,14 @@ BEGIN FROM world w JOIN player_world pw ON w.world_id = pw.world_id WHERE pw.player_id = player_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c WHERE c.owner_id = player_id; -END // +END '' -- World Procedures @@ -46,7 +46,7 @@ BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world; -END // +END '' CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN @@ -54,14 +54,14 @@ BEGIN night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world WHERE world_id = world_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at FROM world WHERE STATUS = 1; -END // +END '' CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) BEGIN @@ -69,14 +69,14 @@ BEGIN FROM player p JOIN player_world pw ON p.player_id = pw.player_id WHERE pw.world_id = world_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) BEGIN SELECT island_id, x, y FROM island WHERE world_id = world_id; -END // +END '' -- Island Procedures @@ -84,21 +84,21 @@ CREATE OR REPLACE PROCEDURE get_all_islands() BEGIN SELECT island_id, x, y, world_id FROM island; -END // +END '' CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) BEGIN SELECT island_id, x, y, world_id FROM island WHERE island_id = island_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id FROM city WHERE island_id = island_id; -END // +END '' -- City Procedures @@ -106,14 +106,14 @@ CREATE OR REPLACE PROCEDURE get_all_cities() BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city; -END // +END '' CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city WHERE id = city_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN @@ -121,7 +121,7 @@ BEGIN FROM city c JOIN island i ON c.island_id = i.island_id WHERE i.world_id = world_id; -END // +END '' -- Building Procedures @@ -129,28 +129,28 @@ CREATE OR REPLACE PROCEDURE get_all_buildings() BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building; -END // +END '' CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level FROM building WHERE city_id = city_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building WHERE id = building_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) BEGIN SELECT prerequisite_id FROM building_prerequisite WHERE building_id = building_id; -END // +END '' -- Unit Procedures @@ -160,7 +160,7 @@ BEGIN population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly FROM unit; -END // +END '' CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) BEGIN @@ -168,7 +168,7 @@ BEGIN FROM unit u JOIN city_unit cu ON u.unit_id = cu.unit_id WHERE cu.city_id = city_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN @@ -177,7 +177,7 @@ BEGIN speed, can_fly FROM unit WHERE id = unit_id; -END // +END '' -- Battle Procedures @@ -186,7 +186,7 @@ BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle; -END // +END '' CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN @@ -194,7 +194,7 @@ BEGIN loot_stone, loot_silver FROM battle WHERE id = battle_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) BEGIN @@ -202,14 +202,14 @@ BEGIN loot_stone, loot_silver FROM battle WHERE attacker_id = player_id OR defender_id = player_id; -END // +END '' CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) BEGIN SELECT unit_id, quantity, side FROM battle_unit WHERE battle_id = battle_id; -END // +END '' -- Miscellaneous Procedures @@ -218,6 +218,6 @@ BEGIN SELECT required_wood, required_stone, required_silver, required_population FROM building_requirement WHERE building_id = building_id; -END // +END '' DELIMITER ; From 80625410e6d63a1b3a0e7c66e2da423f7545e1f2 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 19:00:26 -0500 Subject: [PATCH 10/31] Revert "Fix SQLFluff configuration and standardize procedure delimiters in create_get_procedures.sql" This reverts commit ce0316eb3879cb5ed0ea5966c58496cdc40ca549. --- .sqlfluff | 1 + create_get_procedures.sql | 58 +++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/.sqlfluff b/.sqlfluff index a9b2870..2e88908 100644 --- a/.sqlfluff +++ b/.sqlfluff @@ -1,3 +1,4 @@ [sqlfluff] dialect = mariadb max_line_length = 100 +exlude_rules = PRS diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2251fca..2018633 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -3,26 +3,26 @@ USE 0ce; -- Player Procedures -DELIMITER '' +DELIMITER // CREATE OR REPLACE PROCEDURE get_all_players() BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; -END '' +END // CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE id = player_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player WHERE player_name = player_name; -END '' +END // CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) BEGIN @@ -30,14 +30,14 @@ BEGIN FROM world w JOIN player_world pw ON w.world_id = pw.world_id WHERE pw.player_id = player_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c WHERE c.owner_id = player_id; -END '' +END // -- World Procedures @@ -46,7 +46,7 @@ BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world; -END '' +END // CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN @@ -54,14 +54,14 @@ BEGIN night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at FROM world WHERE world_id = world_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at FROM world WHERE STATUS = 1; -END '' +END // CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) BEGIN @@ -69,14 +69,14 @@ BEGIN FROM player p JOIN player_world pw ON p.player_id = pw.player_id WHERE pw.world_id = world_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) BEGIN SELECT island_id, x, y FROM island WHERE world_id = world_id; -END '' +END // -- Island Procedures @@ -84,21 +84,21 @@ CREATE OR REPLACE PROCEDURE get_all_islands() BEGIN SELECT island_id, x, y, world_id FROM island; -END '' +END // CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) BEGIN SELECT island_id, x, y, world_id FROM island WHERE island_id = island_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id FROM city WHERE island_id = island_id; -END '' +END // -- City Procedures @@ -106,14 +106,14 @@ CREATE OR REPLACE PROCEDURE get_all_cities() BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city; -END '' +END // CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city WHERE id = city_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) BEGIN @@ -121,7 +121,7 @@ BEGIN FROM city c JOIN island i ON c.island_id = i.island_id WHERE i.world_id = world_id; -END '' +END // -- Building Procedures @@ -129,28 +129,28 @@ CREATE OR REPLACE PROCEDURE get_all_buildings() BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building; -END '' +END // CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level FROM building WHERE city_id = city_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building WHERE id = building_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) BEGIN SELECT prerequisite_id FROM building_prerequisite WHERE building_id = building_id; -END '' +END // -- Unit Procedures @@ -160,7 +160,7 @@ BEGIN population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly FROM unit; -END '' +END // CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) BEGIN @@ -168,7 +168,7 @@ BEGIN FROM unit u JOIN city_unit cu ON u.unit_id = cu.unit_id WHERE cu.city_id = city_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN @@ -177,7 +177,7 @@ BEGIN speed, can_fly FROM unit WHERE id = unit_id; -END '' +END // -- Battle Procedures @@ -186,7 +186,7 @@ BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle; -END '' +END // CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) BEGIN @@ -194,7 +194,7 @@ BEGIN loot_stone, loot_silver FROM battle WHERE id = battle_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) BEGIN @@ -202,14 +202,14 @@ BEGIN loot_stone, loot_silver FROM battle WHERE attacker_id = player_id OR defender_id = player_id; -END '' +END // CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) BEGIN SELECT unit_id, quantity, side FROM battle_unit WHERE battle_id = battle_id; -END '' +END // -- Miscellaneous Procedures @@ -218,6 +218,6 @@ BEGIN SELECT required_wood, required_stone, required_silver, required_population FROM building_requirement WHERE building_id = building_id; -END '' +END // DELIMITER ; From 5e4d6b5d4b76939638299f6e0995f9343a664086 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 19:00:51 -0500 Subject: [PATCH 11/31] Update SQLFluff configuration to ignore parsing errors --- .sqlfluff | 1 + 1 file changed, 1 insertion(+) diff --git a/.sqlfluff b/.sqlfluff index 2e88908..0a33ea9 100644 --- a/.sqlfluff +++ b/.sqlfluff @@ -2,3 +2,4 @@ dialect = mariadb max_line_length = 100 exlude_rules = PRS +ignore = parsing From b75f255fb48b47f0071f7fc227db4dbfe824aace Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 20:42:26 -0500 Subject: [PATCH 12/31] Update Dockerfile to change ownership to mysql user and modify unit_id type in create_tables.sql --- Dockerfile | 5 +---- create_tables.sql | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 468846d..770d163 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,14 +13,11 @@ COPY create_tables.sql /docker-entrypoint-initdb.d/ COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ # Adjust permissions on database init files and directories -RUN chown -R mariadbuser:mariadbuser /docker-entrypoint-initdb.d +RUN chown -R mysql:mysql /docker-entrypoint-initdb.d # Expose the default MariaDB port (3306) EXPOSE 3306 -# Switch to the new user -USER mariadbuser - # Add health check for the container HEALTHCHECK --interval=1m --timeout=10s --start-period=30s --retries=3 \ CMD mysqladmin ping -h localhost || exit 1 diff --git a/create_tables.sql b/create_tables.sql index 151d5d0..5dc82eb 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -82,7 +82,7 @@ CREATE TABLE IF NOT EXISTS building_prerequisite ( ) ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS unit ( - unit_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, + unit_id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, unit_name VARCHAR(100), unit_description TEXT, unit_type TINYINT NOT NULL, From 35d9cf2b003cf20933c9cded5978d89c2d437ac3 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 20:52:58 -0500 Subject: [PATCH 13/31] Update Dockerfile to set ownership for SQL files and adjust permissions for MariaDB directories --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 770d163..7c6f25a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,13 +7,14 @@ ENV TZ=America/Montreal # Create a new user and group with limited privileges RUN groupadd -r mariadbuser && useradd -r -g mariadbuser mariadbuser -# Copy SQL files from the repository root into the container +# Copy SQL files from the repository root into the container and set permissions COPY create_database.sql /docker-entrypoint-initdb.d/ COPY create_tables.sql /docker-entrypoint-initdb.d/ COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ +RUN chown -R mariadbuser:mariadbuser /docker-entrypoint-initdb.d -# Adjust permissions on database init files and directories -RUN chown -R mysql:mysql /docker-entrypoint-initdb.d +# Set permissions for MariaDB's default directories for its own user (typically `mysql`) +RUN chown -R mysql:mysql /var/lib/mysql /etc/mysql # Expose the default MariaDB port (3306) EXPOSE 3306 From 10c884a2c233a5c5e49871996ff5d514fe1485ca Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 20:57:39 -0500 Subject: [PATCH 14/31] Switch to the limited user at the end of the Dockerfile --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 7c6f25a..7e4cf93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,3 +22,6 @@ EXPOSE 3306 # Add health check for the container HEALTHCHECK --interval=1m --timeout=10s --start-period=30s --retries=3 \ CMD mysqladmin ping -h localhost || exit 1 + +# Switch to the limited user at the end +USER mariadbuser From 730211e1657a3401a7c3a3eb4dab549b36e71aa7 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 21:29:20 -0500 Subject: [PATCH 15/31] Refactor create_tables.sql to remove NOT NULL constraints from optional fields and update default world_status value --- create_tables.sql | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/create_tables.sql b/create_tables.sql index 5dc82eb..e7879b3 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -17,14 +17,13 @@ CREATE TABLE IF NOT EXISTS world ( world_name VARCHAR(100), world_description TEXT, seed INT NOT NULL, - action_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, - unit_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, - trade_speed TINYINT UNSIGNED DEFAULT 1 NOT NULL, - night_bonus INT DEFAULT 0 NOT NULL, - beginner_protection INT DEFAULT 0 NOT NULL, - morale BOOL DEFAULT FALSE NOT NULL, - alliance_cap INT DEFAULT 0 NOT NULL, - world_status TINYINT DEFAULT 1 NOT NULL, + action_speed TINYINT UNSIGNED DEFAULT 1, + unit_speed TINYINT UNSIGNED DEFAULT 1, + trade_speed TINYINT UNSIGNED DEFAULT 1, + night_bonus INT DEFAULT 0, + beginner_protection INT DEFAULT 0, + morale BOOL DEFAULT FALSE, + world_status TINYINT DEFAULT 2, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB; From 2c591aa4ef1606729b7c76f57800a3ed35862dc9 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 21:47:25 -0500 Subject: [PATCH 16/31] Fix parameter naming in get_player_by_id procedure for clarity --- create_get_procedures.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2018633..5c74b5f 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -10,11 +10,11 @@ BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player; END // -CREATE OR REPLACE PROCEDURE get_player_by_id(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_by_id(IN p_player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player - WHERE id = player_id; + WHERE p_player_id = player_id; END // CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) From 2ae6124fb994e919ca8f174e0389e1e45a2f642d Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 22:09:26 -0500 Subject: [PATCH 17/31] Update Dockerfile to simplify user management and ensure proper permissions for SQL files and MariaDB directories --- Dockerfile | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7e4cf93..1d7f960 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,17 +4,13 @@ FROM mariadb:11.5.2 # Set environment variables ENV TZ=America/Montreal -# Create a new user and group with limited privileges -RUN groupadd -r mariadbuser && useradd -r -g mariadbuser mariadbuser - -# Copy SQL files from the repository root into the container and set permissions +# Copy SQL files from the repository root into the container COPY create_database.sql /docker-entrypoint-initdb.d/ COPY create_tables.sql /docker-entrypoint-initdb.d/ COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ -RUN chown -R mariadbuser:mariadbuser /docker-entrypoint-initdb.d -# Set permissions for MariaDB's default directories for its own user (typically `mysql`) -RUN chown -R mysql:mysql /var/lib/mysql /etc/mysql +# Ensure proper permissions for MariaDB directories +RUN chown -R mysql:mysql /docker-entrypoint-initdb.d /var/lib/mysql /etc/mysql # Expose the default MariaDB port (3306) EXPOSE 3306 @@ -22,6 +18,3 @@ EXPOSE 3306 # Add health check for the container HEALTHCHECK --interval=1m --timeout=10s --start-period=30s --retries=3 \ CMD mysqladmin ping -h localhost || exit 1 - -# Switch to the limited user at the end -USER mariadbuser From e28e5c7fbfbd422084d915239b780694f786974f Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 22:12:20 -0500 Subject: [PATCH 18/31] Remove alliance_cap selection --- create_get_procedures.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 5c74b5f..d1c1a05 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -44,14 +44,14 @@ END // CREATE OR REPLACE PROCEDURE get_all_worlds() BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, - night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at + night_bonus, beginner_protection, morale, world_status, created_at FROM world; END // CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, - night_bonus, beginner_protection, morale, alliance_cap, world_status, created_at + night_bonus, beginner_protection, morale, world_status, created_at FROM world WHERE world_id = world_id; END // From b2fd06777669ba3cf3784adf72a62467a680a4f8 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 22:37:33 -0500 Subject: [PATCH 19/31] Fix parameter naming in get_player_by_name procedure for consistency --- create_get_procedures.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index d1c1a05..3162fd4 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -17,11 +17,11 @@ BEGIN WHERE p_player_id = player_id; END // -CREATE OR REPLACE PROCEDURE get_player_by_name(IN player_name VARCHAR(100)) +CREATE OR REPLACE PROCEDURE get_player_by_name(IN p_player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player - WHERE player_name = player_name; + WHERE p_player_name = player_name; END // CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) From ffa3bd22aa07da08fe40d39bcb955f8ac08f2700 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Tue, 12 Nov 2024 23:04:55 -0500 Subject: [PATCH 20/31] Fix parameter naming in player retrieval procedures for consistency --- create_get_procedures.sql | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 3162fd4..1021e81 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -7,36 +7,37 @@ DELIMITER // CREATE OR REPLACE PROCEDURE get_all_players() BEGIN - SELECT player_id, player_name, email, gold, created_at, last_login FROM player; + SELECT player_id, player_name, email, gold, created_at, last_login + FROM player; END // CREATE OR REPLACE PROCEDURE get_player_by_id(IN p_player_id INT) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player - WHERE p_player_id = player_id; + WHERE player_id = p_player_id; END // CREATE OR REPLACE PROCEDURE get_player_by_name(IN p_player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login FROM player - WHERE p_player_name = player_name; + WHERE player_name = p_player_name; END // -CREATE OR REPLACE PROCEDURE get_player_worlds(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_worlds(IN p_player_id INT) BEGIN SELECT w.world_id, w.world_name, w.world_description, w.created_at FROM world w JOIN player_world pw ON w.world_id = pw.world_id - WHERE pw.player_id = player_id; + WHERE pw.player_id = p_player_id; END // -CREATE OR REPLACE PROCEDURE get_player_cities(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_cities(IN p_player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c - WHERE c.owner_id = player_id; + WHERE c.owner_id = p_player_id; END // -- World Procedures From d7f4701acd0d1bd01ecc28e8ae291b958a6a0c4e Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 09:15:34 -0500 Subject: [PATCH 21/31] Update Dockerfile to create a non-root user and adjust file ownership for improved security --- Dockerfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d7f960..8b12385 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,13 +4,17 @@ FROM mariadb:11.5.2 # Set environment variables ENV TZ=America/Montreal -# Copy SQL files from the repository root into the container +# Create a non-root user and group +RUN groupadd -r dbuser && useradd -r -g dbuser dbuser + +# Copy SQL files and set ownership COPY create_database.sql /docker-entrypoint-initdb.d/ COPY create_tables.sql /docker-entrypoint-initdb.d/ COPY create_get_procedures.sql /docker-entrypoint-initdb.d/ +RUN chown -R dbuser:dbuser /docker-entrypoint-initdb.d # Ensure proper permissions for MariaDB directories -RUN chown -R mysql:mysql /docker-entrypoint-initdb.d /var/lib/mysql /etc/mysql +RUN chown -R dbuser:dbuser /var/lib/mysql /etc/mysql # Expose the default MariaDB port (3306) EXPOSE 3306 @@ -18,3 +22,6 @@ EXPOSE 3306 # Add health check for the container HEALTHCHECK --interval=1m --timeout=10s --start-period=30s --retries=3 \ CMD mysqladmin ping -h localhost || exit 1 + +# Switch to the non-root user +USER dbuser From 553781f4390bef7026eae130205503437f90a8fc Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 10:39:40 -0500 Subject: [PATCH 22/31] Add world_id parameter to get_player_cities procedure and update city table schema --- create_get_procedures.sql | 6 ++++-- create_tables.sql | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 1021e81..9f16813 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -33,11 +33,13 @@ BEGIN WHERE pw.player_id = p_player_id; END // -CREATE OR REPLACE PROCEDURE get_player_cities(IN p_player_id INT) +CREATE OR REPLACE PROCEDURE get_player_cities(IN p_world_id INT, IN p_player_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.island_id FROM city c - WHERE c.owner_id = p_player_id; + JOIN world w ON c.world_id = w.world_id + WHERE c.owner_id = p_player_id + AND w.world_id = p_world_id; END // -- World Procedures diff --git a/create_tables.sql b/create_tables.sql index e7879b3..0cdf1cb 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -50,8 +50,10 @@ CREATE TABLE IF NOT EXISTS city ( x INT NOT NULL, y INT NOT NULL, owner_id INT UNSIGNED NOT NULL, + world_id INT UNSIGNED NOT NULL, FOREIGN KEY (island_id) REFERENCES island (island_id), - FOREIGN KEY (owner_id) REFERENCES player (player_id) + FOREIGN KEY (owner_id) REFERENCES player (player_id), + FOREIGN KEY (world_id) REFERENCES world (world_id) ) ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS building ( From 1ad69dfeac6484f6eef8dd35c20e00dbfb727f05 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 11:48:14 -0500 Subject: [PATCH 23/31] Fix column name in get_active_worlds procedure for consistency --- create_get_procedures.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 9f16813..66d5e38 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -63,7 +63,7 @@ CREATE OR REPLACE PROCEDURE get_active_worlds() BEGIN SELECT world_id, world_name, world_description, created_at FROM world - WHERE STATUS = 1; + WHERE world_status = 1; END // CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) From 851317da546c5f0f6e058ef1be4d8054a960216e Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 12:01:21 -0500 Subject: [PATCH 24/31] Update world table schema to enforce uniqueness on world_name and allow null seed values --- create_tables.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_tables.sql b/create_tables.sql index 0cdf1cb..6ae28cc 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -14,9 +14,9 @@ CREATE TABLE IF NOT EXISTS player ( CREATE TABLE IF NOT EXISTS world ( world_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, - world_name VARCHAR(100), + world_name VARCHAR(100) UNIQUE NOT NULL, world_description TEXT, - seed INT NOT NULL, + seed INT, action_speed TINYINT UNSIGNED DEFAULT 1, unit_speed TINYINT UNSIGNED DEFAULT 1, trade_speed TINYINT UNSIGNED DEFAULT 1, From 6f38b58e584b684d7771ee846c9d79a049178c6d Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 12:15:45 -0500 Subject: [PATCH 25/31] Add procedure to check for existing player email in the database --- create_get_procedures.sql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 66d5e38..2649e14 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -18,6 +18,12 @@ BEGIN WHERE player_id = p_player_id; END // +-- This procedure is used to check if an email already exists in the database +CREATE OR REPLACE PROCEDURE get_player_by_email(IN p_email VARCHAR(100), OUT email_exists BOOLEAN) +BEGIN + SELECT EXISTS(SELECT 1 FROM player WHERE email = p_email) INTO email_exists; +END // + CREATE OR REPLACE PROCEDURE get_player_by_name(IN p_player_name VARCHAR(100)) BEGIN SELECT player_id, player_name, email, gold, created_at, last_login From ff143bfcb43ae7726bd02f2fdb1d003dce48f87b Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 15:44:42 -0500 Subject: [PATCH 26/31] Rename get_world_islands procedure to get_islands_in_world and add get_cities_in_world procedure for improved clarity and functionality --- create_get_procedures.sql | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2649e14..ee87d64 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -80,13 +80,21 @@ BEGIN WHERE pw.world_id = world_id; END // -CREATE OR REPLACE PROCEDURE get_world_islands(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_islands_in_world(IN world_id INT) BEGIN SELECT island_id, x, y FROM island WHERE world_id = world_id; END // +CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) +BEGIN + SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id + FROM city c + JOIN island i ON c.island_id = i.island_id + WHERE i.world_id = world_id; +END // + -- Island Procedures CREATE OR REPLACE PROCEDURE get_all_islands() @@ -124,14 +132,6 @@ BEGIN WHERE id = city_id; END // -CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) -BEGIN - SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id - FROM city c - JOIN island i ON c.island_id = i.island_id - WHERE i.world_id = world_id; -END // - -- Building Procedures CREATE OR REPLACE PROCEDURE get_all_buildings() From c944b7d8950fc83739525b5fa96ad7cbb614d334 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 19:55:01 -0500 Subject: [PATCH 27/31] Add get_city_buildings procedure to retrieve buildings by city_id --- create_get_procedures.sql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index ee87d64..2c95ae9 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -132,6 +132,13 @@ BEGIN WHERE id = city_id; END // +CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) +BEGIN + SELECT building_id, building_name, building_level, max_level + FROM building + WHERE city_id = city_id; +END // + -- Building Procedures CREATE OR REPLACE PROCEDURE get_all_buildings() @@ -140,13 +147,6 @@ BEGIN FROM building; END // -CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) -BEGIN - SELECT building_id, building_name, building_level, max_level - FROM building - WHERE city_id = city_id; -END // - CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id From f1bae04ef7ae8c33c94cede267e2b921927b27dc Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 19:57:11 -0500 Subject: [PATCH 28/31] Add get_city_units procedure to retrieve units by city_id --- create_get_procedures.sql | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 2c95ae9..bda48e9 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -139,6 +139,14 @@ BEGIN WHERE city_id = city_id; END // +CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) +BEGIN + SELECT u.unit_id, u.unit_name, cu.quantity + FROM unit u + JOIN city_unit cu ON u.unit_id = cu.unit_id + WHERE cu.city_id = city_id; +END // + -- Building Procedures CREATE OR REPLACE PROCEDURE get_all_buildings() @@ -171,14 +179,6 @@ BEGIN FROM unit; END // -CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) -BEGIN - SELECT u.unit_id, u.unit_name, cu.quantity - FROM unit u - JOIN city_unit cu ON u.unit_id = cu.unit_id - WHERE cu.city_id = city_id; -END // - CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, From 8f1d76bf360cf6fa4d1cfd93e9a45b98077d737d Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 20:01:07 -0500 Subject: [PATCH 29/31] Refactor procedure parameters to improve clarity by prefixing with 'p_' --- create_get_procedures.sql | 66 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index bda48e9..086cc50 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -57,12 +57,12 @@ BEGIN FROM world; END // -CREATE OR REPLACE PROCEDURE get_world_by_id(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_world_by_id(IN p_world_id INT) BEGIN SELECT world_id, world_name, world_description, seed, action_speed, unit_speed, trade_speed, night_bonus, beginner_protection, morale, world_status, created_at FROM world - WHERE world_id = world_id; + WHERE world_id = p_world_id; END // CREATE OR REPLACE PROCEDURE get_active_worlds() @@ -72,27 +72,27 @@ BEGIN WHERE world_status = 1; END // -CREATE OR REPLACE PROCEDURE get_players_in_world(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_players_in_world(IN p_world_id INT) BEGIN SELECT p.player_id, p.player_name, p.email, p.gold, p.created_at FROM player p - JOIN player_world pw ON p.player_id = pw.player_id - WHERE pw.world_id = world_id; + JOIN p_player_world pw ON p.player_id = pw.player_id + WHERE pw.world_id = p_world_id; END // -CREATE OR REPLACE PROCEDURE get_islands_in_world(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_islands_in_world(IN p_world_id INT) BEGIN SELECT island_id, x, y FROM island - WHERE world_id = world_id; + WHERE world_id = p_world_id; END // -CREATE OR REPLACE PROCEDURE get_cities_in_world(IN world_id INT) +CREATE OR REPLACE PROCEDURE get_cities_in_world(IN p_world_id INT) BEGIN SELECT c.city_id, c.city_name, c.x, c.y, c.owner_id, c.island_id FROM city c JOIN island i ON c.island_id = i.island_id - WHERE i.world_id = world_id; + WHERE i.world_id = p_world_id; END // -- Island Procedures @@ -103,18 +103,18 @@ BEGIN FROM island; END // -CREATE OR REPLACE PROCEDURE get_island_by_id(IN island_id INT) +CREATE OR REPLACE PROCEDURE get_island_by_id(IN p_island_id INT) BEGIN SELECT island_id, x, y, world_id FROM island - WHERE island_id = island_id; + WHERE island_id = p_island_id; END // -CREATE OR REPLACE PROCEDURE get_island_cities(IN island_id INT) +CREATE OR REPLACE PROCEDURE get_island_cities(IN p_island_id INT) BEGIN SELECT city_id, city_name, x, y, owner_id FROM city - WHERE island_id = island_id; + WHERE island_id = p_island_id; END // -- City Procedures @@ -125,26 +125,26 @@ BEGIN FROM city; END // -CREATE OR REPLACE PROCEDURE get_city_by_id(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_by_id(IN p_city_id INT) BEGIN SELECT city_id, city_name, x, y, island_id, owner_id FROM city - WHERE id = city_id; + WHERE id = p_city_id; END // -CREATE OR REPLACE PROCEDURE get_city_buildings(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_buildings(IN p_city_id INT) BEGIN SELECT building_id, building_name, building_level, max_level FROM building - WHERE city_id = city_id; + WHERE city_id = p_city_id; END // -CREATE OR REPLACE PROCEDURE get_city_units(IN city_id INT) +CREATE OR REPLACE PROCEDURE get_city_units(IN p_city_id INT) BEGIN SELECT u.unit_id, u.unit_name, cu.quantity FROM unit u JOIN city_unit cu ON u.unit_id = cu.unit_id - WHERE cu.city_id = city_id; + WHERE cu.city_id = p_city_id; END // -- Building Procedures @@ -155,18 +155,18 @@ BEGIN FROM building; END // -CREATE OR REPLACE PROCEDURE get_building_by_id(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_by_id(IN p_building_id INT) BEGIN SELECT building_id, building_name, building_level, max_level, city_id FROM building - WHERE id = building_id; + WHERE id = p_building_id; END // -CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_prerequisites(IN p_building_id INT) BEGIN SELECT prerequisite_id FROM building_prerequisite - WHERE building_id = building_id; + WHERE building_id = p_building_id; END // -- Unit Procedures @@ -179,13 +179,13 @@ BEGIN FROM unit; END // -CREATE OR REPLACE PROCEDURE get_unit_by_id(IN unit_id INT) +CREATE OR REPLACE PROCEDURE get_unit_by_id(IN p_unit_id INT) BEGIN SELECT unit_id, unit_name, unit_description, unit_type, wood_cost, stone_cost, silver_cost, population_cost, training_time, damage, defense_blunt, defense_distance, defense_sharp, speed, can_fly FROM unit - WHERE id = unit_id; + WHERE id = p_unit_id; END // -- Battle Procedures @@ -197,36 +197,36 @@ BEGIN FROM battle; END // -CREATE OR REPLACE PROCEDURE get_battle_by_id(IN battle_id INT) +CREATE OR REPLACE PROCEDURE get_battle_by_id(IN p_battle_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle - WHERE id = battle_id; + WHERE id = p_battle_id; END // -CREATE OR REPLACE PROCEDURE get_player_battles(IN player_id INT) +CREATE OR REPLACE PROCEDURE get_player_battles(IN p_player_id INT) BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle - WHERE attacker_id = player_id OR defender_id = player_id; + WHERE attacker_id = p_player_id OR defender_id = p_player_id; END // -CREATE OR REPLACE PROCEDURE get_battle_units(IN battle_id INT) +CREATE OR REPLACE PROCEDURE get_battle_units(IN p_battle_id INT) BEGIN SELECT unit_id, quantity, side FROM battle_unit - WHERE battle_id = battle_id; + WHERE battle_id = p_battle_id; END // -- Miscellaneous Procedures -CREATE OR REPLACE PROCEDURE get_building_requirements(IN building_id INT) +CREATE OR REPLACE PROCEDURE get_building_requirements(IN p_building_id INT) BEGIN SELECT required_wood, required_stone, required_silver, required_population FROM building_requirement - WHERE building_id = building_id; + WHERE building_id = p_building_id; END // DELIMITER ; From 59086c8359b95652a6b4a05062b0a41be145b026 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 20:07:29 -0500 Subject: [PATCH 30/31] Add get_player_battles procedure to retrieve battle details for a player --- create_get_procedures.sql | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 086cc50..18e37c7 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -48,6 +48,14 @@ BEGIN AND w.world_id = p_world_id; END // +CREATE OR REPLACE PROCEDURE get_player_battles(IN p_player_id INT) +BEGIN + SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, + loot_stone, loot_silver + FROM battle + WHERE attacker_id = p_player_id OR defender_id = p_player_id; +END // + -- World Procedures CREATE OR REPLACE PROCEDURE get_all_worlds() @@ -205,14 +213,6 @@ BEGIN WHERE id = p_battle_id; END // -CREATE OR REPLACE PROCEDURE get_player_battles(IN p_player_id INT) -BEGIN - SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, - loot_stone, loot_silver - FROM battle - WHERE attacker_id = p_player_id OR defender_id = p_player_id; -END // - CREATE OR REPLACE PROCEDURE get_battle_units(IN p_battle_id INT) BEGIN SELECT unit_id, quantity, side From da6b41e34f2bcaa6e392adc64b0a62fdff0f7be7 Mon Sep 17 00:00:00 2001 From: Vianpyro Date: Wed, 13 Nov 2024 21:03:44 -0500 Subject: [PATCH 31/31] Fix SQL query in get_battle_details procedure to use correct column name for battle_id --- create_get_procedures.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_get_procedures.sql b/create_get_procedures.sql index 18e37c7..bd1a3f7 100644 --- a/create_get_procedures.sql +++ b/create_get_procedures.sql @@ -210,7 +210,7 @@ BEGIN SELECT battle_id, attacker_id, defender_id, battle_time, winner_id, loser_id, loot_wood, loot_stone, loot_silver FROM battle - WHERE id = p_battle_id; + WHERE battle_id = p_battle_id; END // CREATE OR REPLACE PROCEDURE get_battle_units(IN p_battle_id INT)