Removed old research system
* Removed all tables, views and functions * Removed references to old system in Java code, including old import tool * Replaced XML dump code
This commit is contained in:
parent
070d55dc05
commit
96c296e9d5
22 changed files with 345 additions and 705 deletions
legacyworlds-server-data/db-structure/parts
|
@ -161,56 +161,3 @@ ALTER TABLE defs.techdep_cache
|
|||
REFERENCES defs.techdep_cache( technology_name_id , tdcache_reverse , tdcache_id )
|
||||
ON DELETE CASCADE;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Old B6M1 research system below.
|
||||
*/
|
||||
|
||||
--
|
||||
-- Technology lines
|
||||
--
|
||||
|
||||
CREATE TABLE tech.lines(
|
||||
name_id INT NOT NULL PRIMARY KEY ,
|
||||
description_id INT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX idx_lines_description
|
||||
ON tech.lines (description_id);
|
||||
|
||||
ALTER TABLE tech.lines
|
||||
ADD CONSTRAINT fk_lines_name
|
||||
FOREIGN KEY (name_id) REFERENCES defs.strings ,
|
||||
ADD CONSTRAINT fk_lines_description
|
||||
FOREIGN KEY (description_id) REFERENCES defs.strings;
|
||||
|
||||
|
||||
--
|
||||
-- Technology levels
|
||||
--
|
||||
|
||||
CREATE TABLE tech.levels(
|
||||
id SERIAL NOT NULL PRIMARY KEY ,
|
||||
line_id INT NOT NULL ,
|
||||
level INT NOT NULL CHECK( level > 0 ) ,
|
||||
name_id INT NOT NULL ,
|
||||
description_id INT NOT NULL ,
|
||||
points INT NOT NULL CHECK( points > 0 ) ,
|
||||
cost INT NOT NULL CHECK( cost > 0 )
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX idx_levels_linelevel
|
||||
ON tech.levels (line_id, level);
|
||||
CREATE INDEX idx_levels_name
|
||||
ON tech.levels (name_id);
|
||||
CREATE INDEX idx_levels_description
|
||||
ON tech.levels (description_id);
|
||||
|
||||
ALTER TABLE tech.levels
|
||||
ADD CONSTRAINT fk_levels_line
|
||||
FOREIGN KEY (line_id) REFERENCES tech.lines ,
|
||||
ADD CONSTRAINT fk_levels_name
|
||||
FOREIGN KEY (name_id) REFERENCES defs.strings ,
|
||||
ADD CONSTRAINT fk_levels_description
|
||||
FOREIGN KEY (description_id) REFERENCES defs.strings;
|
||||
|
|
|
@ -32,25 +32,6 @@ ALTER TABLE tech.buildables
|
|||
FOREIGN KEY (technology_name_id) REFERENCES defs.technologies;
|
||||
|
||||
|
||||
--
|
||||
-- Requirements
|
||||
--
|
||||
CREATE TABLE tech.buildable_requirements(
|
||||
buildable_id INT NOT NULL ,
|
||||
level_id INT NOT NULL ,
|
||||
PRIMARY KEY( buildable_id , level_id )
|
||||
);
|
||||
|
||||
CREATE INDEX idx_buildablereqs_level
|
||||
ON tech.buildable_requirements( level_id );
|
||||
|
||||
ALTER TABLE tech.buildable_requirements
|
||||
ADD CONSTRAINT fk_buildablereqs_buildable
|
||||
FOREIGN KEY (buildable_id) REFERENCES tech.buildables ,
|
||||
ADD CONSTRAINT fk_buildablereqs_level
|
||||
FOREIGN KEY (level_id) REFERENCES tech.levels;
|
||||
|
||||
|
||||
--
|
||||
-- Buildings
|
||||
--
|
||||
|
|
|
@ -146,32 +146,6 @@ ALTER TABLE emp.technologies_v2
|
|||
FOREIGN KEY ( technology_name_id ) REFERENCES defs.technologies;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Empire technologies
|
||||
--
|
||||
|
||||
CREATE TABLE emp.technologies(
|
||||
empire_id INT NOT NULL ,
|
||||
line_id INT NOT NULL ,
|
||||
level INT NOT NULL DEFAULT 1
|
||||
CHECK( level > 0 ) ,
|
||||
accumulated REAL NOT NULL DEFAULT 0
|
||||
CHECK( accumulated >= 0 ),
|
||||
PRIMARY KEY( empire_id , line_id )
|
||||
);
|
||||
|
||||
CREATE INDEX idx_technologies_line
|
||||
ON emp.technologies (line_id);
|
||||
|
||||
ALTER TABLE emp.technologies
|
||||
ADD CONSTRAINT fk_technologies_empire
|
||||
FOREIGN KEY (empire_id) REFERENCES emp.empires
|
||||
ON DELETE CASCADE ,
|
||||
ADD CONSTRAINT fk_technologies_line
|
||||
FOREIGN KEY (line_id) REFERENCES tech.lines;
|
||||
|
||||
|
||||
--
|
||||
-- Empire planets
|
||||
--
|
||||
|
|
|
@ -83,28 +83,6 @@ ALTER TABLE events.bqe_locations
|
|||
FOREIGN KEY (location_id) REFERENCES verse.planets;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Empire events
|
||||
--
|
||||
|
||||
CREATE TABLE events.empire_events(
|
||||
event_id BIGINT NOT NULL PRIMARY KEY ,
|
||||
technology_id INT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX idx_empevents_tech
|
||||
ON events.empire_events (technology_id);
|
||||
|
||||
ALTER TABLE events.empire_events
|
||||
ADD CONSTRAINT fk_empevents_event
|
||||
FOREIGN KEY (event_id) REFERENCES events.events
|
||||
ON DELETE CASCADE,
|
||||
ADD CONSTRAINT fk_empevents_tech
|
||||
FOREIGN KEY (technology_id) REFERENCES tech.levels;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Fleet events
|
||||
--
|
||||
|
|
|
@ -404,95 +404,6 @@ CREATE VIEW tech.ships_view
|
|||
ON b.name_id = s.buildable_id;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a technology line
|
||||
--
|
||||
-- Parameters:
|
||||
-- tln Tech line name
|
||||
-- tld Tech line description
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION tech.uoc_line( tln TEXT , tld TEXT )
|
||||
RETURNS VOID
|
||||
STRICT
|
||||
VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
nid INT;
|
||||
did INT;
|
||||
BEGIN
|
||||
-- Get string identifiers
|
||||
SELECT INTO nid id FROM defs.strings WHERE name = tln;
|
||||
SELECT INTO did id FROM defs.strings WHERE name = tld;
|
||||
|
||||
-- Try creating / updating
|
||||
BEGIN
|
||||
INSERT INTO tech.lines ( name_id , description_id )
|
||||
VALUES ( nid , did );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
UPDATE tech.lines SET description_id = did
|
||||
WHERE name_id = nid;
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION tech.uoc_line( TEXT , TEXT ) TO :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a technology level
|
||||
--
|
||||
-- Parameters:
|
||||
-- tln Tech line name
|
||||
-- lv Level
|
||||
-- lvn Level name
|
||||
-- lvd Level description
|
||||
-- lvp Points
|
||||
-- lvc Cost
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION tech.uoc_level( tln TEXT , lv INT , lvn TEXT , lvd TEXT , lvp INT , lvc INT )
|
||||
RETURNS VOID
|
||||
STRICT
|
||||
VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
lid INT;
|
||||
nid INT;
|
||||
did INT;
|
||||
BEGIN
|
||||
-- Get tech line
|
||||
SELECT INTO lid t.name_id
|
||||
FROM tech.lines t
|
||||
INNER JOIN defs.strings s
|
||||
ON s.id = t.name_id
|
||||
WHERE s.name = tln;
|
||||
|
||||
-- Get name / description IDs
|
||||
SELECT INTO nid id FROM defs.strings WHERE name = lvn;
|
||||
SELECT INTO did id FROM defs.strings WHERE name = lvd;
|
||||
|
||||
-- Create or update the level
|
||||
BEGIN
|
||||
INSERT INTO tech.levels ( line_id , level , name_id , description_id , points , cost )
|
||||
VALUES ( lid , lv , nid , did , lvp , lvc );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
UPDATE tech.levels SET name_id = nid , description_id = did , points = lvp , cost = lvc
|
||||
WHERE line_id = lid AND level = lv;
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION tech.uoc_level( TEXT , INT , TEXT , TEXT , INT , INT ) to :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a buildable definition
|
||||
--
|
||||
|
|
|
@ -105,48 +105,6 @@ GRANT EXECUTE ON FUNCTION emp.get_current( INT ) TO :dbuser;
|
|||
|
||||
|
||||
|
||||
--
|
||||
-- Implements a technology (OLD VERSION)
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION emp.implement_tech( e_id INT , l_id INT )
|
||||
RETURNS VOID
|
||||
STRICT VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
e_cash REAL;
|
||||
lev INT;
|
||||
cost REAL;
|
||||
BEGIN
|
||||
SELECT INTO e_cash , lev , cost e.cash , et.level , tl.cost
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et
|
||||
ON et.line_id = l_id AND et.empire_id = e.name_id
|
||||
INNER JOIN tech.levels tl
|
||||
ON tl.line_id = l_id AND tl.level = et.level
|
||||
AND tl.points = floor( et.accumulated )
|
||||
AND tl.cost <= e.cash
|
||||
WHERE e.name_id = e_id
|
||||
FOR UPDATE OF e , et;
|
||||
|
||||
IF NOT FOUND THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
UPDATE emp.empires
|
||||
SET cash = e_cash - cost
|
||||
WHERE name_id = e_id;
|
||||
UPDATE emp.technologies
|
||||
SET level = lev + 1 , accumulated = 0
|
||||
WHERE empire_id = e_id AND line_id = l_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION emp.implement_tech( INT , INT ) TO :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Add an enemy empire
|
||||
--
|
||||
|
@ -628,50 +586,6 @@ CREATE VIEW emp.overview
|
|||
GRANT SELECT ON emp.overview TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Empire tech lines
|
||||
--
|
||||
|
||||
CREATE VIEW emp.tech_lines_view
|
||||
AS SELECT e.name_id AS empire , tl.name_id AS tech_line ,
|
||||
t1.translated_string AS name ,
|
||||
t2.translated_string AS description
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et ON et.empire_id = e.name_id
|
||||
INNER JOIN tech.lines tl ON tl.name_id = et.line_id
|
||||
INNER JOIN naming.empire_names en ON en.id = e.name_id
|
||||
INNER JOIN users.credentials c ON c.address_id = en.owner_id
|
||||
INNER JOIN defs.translations t1 ON t1.string_id = tl.name_id AND t1.lang_id = c.language_id
|
||||
INNER JOIN defs.translations t2 ON t2.string_id = tl.description_id AND t2.lang_id = c.language_id
|
||||
ORDER BY t1.translated_string;
|
||||
|
||||
GRANT SELECT ON emp.tech_lines_view TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Empire technologies
|
||||
--
|
||||
|
||||
CREATE VIEW emp.technologies_view
|
||||
AS SELECT e.name_id AS empire , tl.name_id AS tech_line ,
|
||||
t1.translated_string AS name ,
|
||||
t2.translated_string AS description ,
|
||||
( et.level > tlv.level ) AS implemented ,
|
||||
floor( 100 * et.accumulated / tlv.points ) AS progress ,
|
||||
tlv.cost AS cost
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et ON et.empire_id = e.name_id
|
||||
INNER JOIN tech.lines tl ON tl.name_id = et.line_id
|
||||
INNER JOIN tech.levels tlv ON tlv.line_id = tl.name_id AND tlv.level <= et.level
|
||||
INNER JOIN naming.empire_names en ON en.id = e.name_id
|
||||
INNER JOIN users.credentials c ON c.address_id = en.owner_id
|
||||
INNER JOIN defs.translations t1 ON t1.string_id = tlv.name_id AND t1.lang_id = c.language_id
|
||||
INNER JOIN defs.translations t2 ON t2.string_id = tlv.description_id AND t2.lang_id = c.language_id
|
||||
ORDER BY tl.name_id , tlv.level;
|
||||
|
||||
GRANT SELECT ON emp.technologies_view TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Enemy lists
|
||||
--
|
||||
|
|
|
@ -228,32 +228,6 @@ $$ LANGUAGE plpgsql;
|
|||
|
||||
|
||||
|
||||
--
|
||||
-- Creates an event for a technology's availability
|
||||
--
|
||||
-- Parameters:
|
||||
-- e_id Empire identifier
|
||||
-- t_id Technology identifier
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION events.tech_ready_event( e_id INT , t_id INT )
|
||||
RETURNS VOID
|
||||
STRICT VOLATILE
|
||||
SECURITY INVOKER
|
||||
AS $$
|
||||
DECLARE
|
||||
evt_id BIGINT;
|
||||
BEGIN
|
||||
INSERT INTO events.events ( empire_id , tick , evt_type , evt_subtype , status )
|
||||
VALUES ( e_id , sys.get_tick( ) - 1 , 'EMPIRE' , 0 , 'READY' )
|
||||
RETURNING event_id INTO evt_id;
|
||||
INSERT INTO events.empire_events ( event_id , technology_id )
|
||||
VALUES ( evt_id , t_id );
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates an event for start/end of debt
|
||||
--
|
||||
|
@ -856,17 +830,6 @@ CREATE VIEW events.queue_events_view
|
|||
GRANT SELECT ON events.queue_events_view TO :dbuser;
|
||||
|
||||
|
||||
CREATE VIEW events.empire_events_view
|
||||
AS SELECT e.event_id AS id , e.evt_type , e.evt_subtype , e.tick , e.real_time , s.name AS technology
|
||||
FROM events.events e
|
||||
LEFT OUTER JOIN events.empire_events ed USING (event_id)
|
||||
LEFT OUTER JOIN tech.levels tl ON tl.id = ed.technology_id
|
||||
LEFT OUTER JOIN defs.strings s ON s.id = tl.name_id
|
||||
WHERE e.evt_type = 'EMPIRE';
|
||||
|
||||
GRANT SELECT ON events.empire_events_view TO :dbuser;
|
||||
|
||||
|
||||
CREATE VIEW events.fleets_events_view
|
||||
AS SELECT e.event_id AS id , e.evt_type , e.evt_subtype , e.tick , e.real_time ,
|
||||
ed.* , s.x , s.y , p.orbit
|
||||
|
|
|
@ -1196,11 +1196,10 @@ GRANT SELECT ON bugs.dump_main_view TO :dbuser;
|
|||
|
||||
|
||||
CREATE VIEW bugs.dump_research_view
|
||||
AS SELECT et.empire_id , et.line_id AS line_id , et.level AS level ,
|
||||
tst.name AS name , et.accumulated AS accumulated
|
||||
FROM emp.technologies et
|
||||
LEFT OUTER JOIN tech.levels tlv ON tlv.line_id = et.line_id AND tlv.level = et.level
|
||||
LEFT OUTER JOIN defs.strings tst ON tst.id = tlv.name_id;
|
||||
AS SELECT et.empire_id , tst.name AS name , et.emptech_state AS state ,
|
||||
et.emptech_points AS points , et.emptech_priority AS priority
|
||||
FROM emp.technologies_v2 et
|
||||
INNER JOIN defs.strings tst ON tst.id = et.technology_name_id;
|
||||
|
||||
GRANT SELECT ON bugs.dump_research_view TO :dbuser;
|
||||
|
||||
|
|
Reference in a new issue