Empire mining settings
* Modified mining settings stored procedures to use text identifiers instead of numeric identifiers * Added DAO for mining settings and controller for resource operations * Added UpdateEmpireMiningSettingsCommand and associated command delegate. The command always returns NullResponse. * Overview page templates split into multiple files for clarity, added priority update form to the empire economy view and associated web server handler
This commit is contained in:
parent
92dd01ffce
commit
d38576a5cf
24 changed files with 1024 additions and 160 deletions
legacyworlds-server-data/db-structure
parts/040-functions
tests
admin/040-functions/045-empire-mining
010-mset-update-start.sql015-mset-update-start-planet.sql020-mset-update-set.sql030-mset-update-apply.sql
user/040-functions/045-empire-mining
|
@ -29,15 +29,17 @@ BEGIN
|
|||
|
||||
CREATE TEMPORARY TABLE mset_update(
|
||||
empire_id INT ,
|
||||
resource_name_id INT ,
|
||||
resource_name TEXT ,
|
||||
empmset_weight INT
|
||||
) ON COMMIT DROP;
|
||||
|
||||
INSERT INTO mset_update
|
||||
SELECT _mset.empire_id , _mset.resource_name_id , 2
|
||||
SELECT _mset.empire_id , _str.name , 2
|
||||
FROM emp.empires _empire
|
||||
INNER JOIN emp.mining_settings _mset
|
||||
ON _empire.name_id = _mset.empire_id
|
||||
INNER JOIN defs.strings _str
|
||||
ON _str.id = _mset.resource_name_id
|
||||
WHERE _empire.name_id = _empire_id
|
||||
FOR SHARE OF _empire
|
||||
FOR UPDATE OF _mset;
|
||||
|
@ -81,7 +83,7 @@ BEGIN
|
|||
CREATE TEMPORARY TABLE mset_update(
|
||||
empire_id INT ,
|
||||
planet_id INT ,
|
||||
resource_name_id INT ,
|
||||
resource_name TEXT ,
|
||||
empmset_weight INT
|
||||
) ON COMMIT DROP;
|
||||
|
||||
|
@ -106,8 +108,10 @@ BEGIN
|
|||
FOR UPDATE;
|
||||
|
||||
INSERT INTO mset_update
|
||||
SELECT _empire_id , _planet_id , resource_name_id , 2
|
||||
SELECT _empire_id , _planet_id , _str.name , 2
|
||||
FROM verse.resource_providers
|
||||
INNER JOIN defs.strings _str
|
||||
ON _str.id = resource_name_id
|
||||
WHERE planet_id = _planet_id;
|
||||
|
||||
RETURN TRUE;
|
||||
|
@ -131,14 +135,14 @@ GRANT EXECUTE
|
|||
* must be called after emp.mset_update_start() has initialised the table.
|
||||
*
|
||||
* Parameters:
|
||||
* _resource_id The resource's identifier
|
||||
* _resource The resource's text identifier
|
||||
* _weight The setting's new value
|
||||
*
|
||||
* Returns:
|
||||
* ? True if the resource exists, false otherwise.
|
||||
*/
|
||||
DROP FUNCTION IF EXISTS emp.mset_update_set( INT , INT );
|
||||
CREATE FUNCTION emp.mset_update_set( _resource_id INT , _weight INT )
|
||||
DROP FUNCTION IF EXISTS emp.mset_update_set( TEXT , INT );
|
||||
CREATE FUNCTION emp.mset_update_set( _resource TEXT , _weight INT )
|
||||
RETURNS BOOLEAN
|
||||
STRICT VOLATILE
|
||||
SECURITY DEFINER
|
||||
|
@ -147,7 +151,7 @@ BEGIN
|
|||
|
||||
UPDATE mset_update
|
||||
SET empmset_weight = _weight
|
||||
WHERE resource_name_id = _resource_id;
|
||||
WHERE resource_name = _resource;
|
||||
RETURN FOUND;
|
||||
|
||||
END;
|
||||
|
@ -155,10 +159,10 @@ $mset_update_set$ LANGUAGE PLPGSQL;
|
|||
|
||||
|
||||
REVOKE EXECUTE
|
||||
ON FUNCTION emp.mset_update_set( INT , INT )
|
||||
ON FUNCTION emp.mset_update_set( TEXT , INT )
|
||||
FROM PUBLIC;
|
||||
GRANT EXECUTE
|
||||
ON FUNCTION emp.mset_update_set( INT , INT )
|
||||
ON FUNCTION emp.mset_update_set( TEXT , INT )
|
||||
TO :dbuser;
|
||||
|
||||
|
||||
|
@ -201,8 +205,10 @@ BEGIN
|
|||
empire_id , planet_id , resource_name_id ,
|
||||
emppmset_weight
|
||||
) SELECT empire_id , planet_id ,
|
||||
resource_name_id , empmset_weight
|
||||
FROM mset_update;
|
||||
_str.id , empmset_weight
|
||||
FROM mset_update
|
||||
INNER JOIN defs.strings _str
|
||||
ON _str.name = resource_name;
|
||||
|
||||
EXCEPTION
|
||||
|
||||
|
@ -211,8 +217,10 @@ BEGIN
|
|||
UPDATE emp.mining_settings _settings
|
||||
SET empmset_weight = _update.empmset_weight
|
||||
FROM mset_update _update
|
||||
INNER JOIN defs.strings _str
|
||||
ON _str.name = _update.resource_name
|
||||
WHERE _update.empire_id = _settings.empire_id
|
||||
AND _update.resource_name_id = _settings.resource_name_id;
|
||||
AND _str.id = _settings.resource_name_id;
|
||||
END;
|
||||
RETURN TRUE;
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ BEGIN;
|
|||
SELECT ok( NOT emp.mset_update_start( _get_bad_emp_name( ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT ) - Temporary table exists despite bad empire identifier' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT ) - Return value on valid empire identifier' );
|
||||
|
|
|
@ -28,31 +28,31 @@ BEGIN;
|
|||
SELECT ok( NOT emp.mset_update_start( _get_bad_emp_name( ) , _get_map_name( 'testPlanet1' ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Temporary table exists despite bad empire identifier' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Return value on bad planet identifier' );
|
||||
SELECT ok( NOT emp.mset_update_start( _get_emp_name( 'testEmp1' ) , _get_bad_map_name( ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Temporary table exists despite bad planet identifier' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Return value on unowned planet identifier' );
|
||||
SELECT ok( NOT emp.mset_update_start( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet2' ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Temporary table exists despite unowned planet identifier' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Return value on unowned planet identifier' );
|
||||
SELECT ok( NOT emp.mset_update_start( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet2' ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Temporary table exists despite unowned planet identifier' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Return value on planet with no resource providers' );
|
||||
SELECT ok( NOT emp.mset_update_start( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet3' ) ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Temporary table exists despite planet with no resource providers' );
|
||||
SELECT has_table( 'mset_update' );
|
||||
DROP TABLE mset_update;
|
||||
DROP TABLE IF EXISTS mset_update;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_start( INT , INT ) - Return value on valid identifiers' );
|
||||
|
|
|
@ -4,34 +4,34 @@
|
|||
BEGIN;
|
||||
CREATE TEMPORARY TABLE mset_update(
|
||||
empire_id INT ,
|
||||
resource_name_id INT ,
|
||||
resource_name TEXT ,
|
||||
empmset_weight INT
|
||||
) ON COMMIT DROP;
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 0 ) , ( 1 , 2 , 0 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 'a' , 0 ) , ( 1 , 'b' , 0 );
|
||||
|
||||
/***** TESTS BEGIN HERE *****/
|
||||
SELECT plan( 7 );
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Valid update' );
|
||||
SELECT ok( emp.mset_update_set( 1 , 1 ) );
|
||||
SELECT ok( emp.mset_update_set( 'a' , 1 ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Valid update results (1/2)' );
|
||||
SELECT is( empmset_weight , 1 ) FROM mset_update WHERE resource_name_id = 1;
|
||||
SELECT is( empmset_weight , 1 ) FROM mset_update WHERE resource_name = 'a';
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Valid update results (2/2)' );
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name_id = 2;
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name = 'b';
|
||||
DELETE FROM mset_update;
|
||||
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 0 ) , ( 1 , 2 , 0 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 'a' , 0 ) , ( 1 , 'b' , 0 );
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Update on unknown resource' );
|
||||
SELECT ok( NOT emp.mset_update_set( 12 , 1 ) );
|
||||
SELECT ok( NOT emp.mset_update_set( 'c' , 1 ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Unknown resource update results (1/2)' );
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name_id = 1;
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name = 'a';
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Unknown resource update results (2/2)' );
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name_id = 2;
|
||||
SELECT is( empmset_weight , 0 ) FROM mset_update WHERE resource_name = 'b';
|
||||
DELETE FROM mset_update;
|
||||
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 0 ) , ( 1 , 2 , 0 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 'a' , 0 ) , ( 1 , 'b' , 0 );
|
||||
SELECT diag_test_name( 'emp.mset_update_set( ) - Update with invalid weight' );
|
||||
SELECT ok( emp.mset_update_set( 1 , -1 ) );
|
||||
SELECT ok( emp.mset_update_set( 'a' , -1 ) );
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -2,6 +2,11 @@
|
|||
* Test the emp.mset_update_apply() function
|
||||
*/
|
||||
BEGIN;
|
||||
/*
|
||||
* Create a pair of strings
|
||||
*/
|
||||
INSERT INTO defs.strings (name) VALUES ( 'a' ) , ( 'b' );
|
||||
|
||||
/*
|
||||
* Remove foreign keys from the empire mining settings table, insert some
|
||||
* data into it.
|
||||
|
@ -10,15 +15,17 @@ BEGIN;
|
|||
DROP CONSTRAINT fk_empmset_empire ,
|
||||
DROP CONSTRAINT fk_empmset_resource;
|
||||
INSERT INTO emp.mining_settings ( empire_id , resource_name_id )
|
||||
VALUES ( 1 , 1 ) , ( 1 , 2 );
|
||||
SELECT 1 , id
|
||||
FROM defs.strings
|
||||
WHERE name IN ( 'a' , 'b' );
|
||||
|
||||
/* Create the temporary table */
|
||||
CREATE TEMPORARY TABLE mset_update(
|
||||
empire_id INT ,
|
||||
resource_name_id INT ,
|
||||
resource_name TEXT ,
|
||||
empmset_weight INT
|
||||
) ON COMMIT DROP;
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 0 ) , ( 1 , 2 , 4 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 'a' , 0 ) , ( 1 , 'b' , 4 );
|
||||
|
||||
/***** TESTS BEGIN HERE *****/
|
||||
SELECT plan( 8 );
|
||||
|
@ -27,23 +34,31 @@ BEGIN;
|
|||
SELECT ok( emp.mset_update_apply( ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Empire update results' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , empmset_weight FROM emp.mining_settings $$ ,
|
||||
$$ VALUES ( 1 , 0 ) , ( 2 , 4 ) $$
|
||||
$$ SELECT name , empmset_weight
|
||||
FROM emp.mining_settings
|
||||
INNER JOIN defs.strings
|
||||
ON resource_name_id = id $$ ,
|
||||
$$ VALUES ( 'a' , 0 ) , ( 'b' , 4 ) $$
|
||||
);
|
||||
|
||||
/* Reset temporary table and settings */
|
||||
DELETE FROM mset_update;
|
||||
DELETE FROM emp.mining_settings;
|
||||
INSERT INTO emp.mining_settings ( empire_id , resource_name_id )
|
||||
VALUES ( 1 , 1 ) , ( 1 , 2 );
|
||||
SELECT 1 , id
|
||||
FROM defs.strings
|
||||
WHERE name IN ( 'a' , 'b' );
|
||||
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , -1 ) , ( 1 , 2 , 4 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 'a' , -1 ) , ( 1 , 'b' , 4 );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Applying invalid empire update' );
|
||||
SELECT ok( NOT emp.mset_update_apply( ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Invalid empire update results' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , empmset_weight FROM emp.mining_settings $$ ,
|
||||
$$ VALUES ( 1 , 2 ) , ( 2 , 2 ) $$
|
||||
$$ SELECT name , empmset_weight
|
||||
FROM emp.mining_settings
|
||||
INNER JOIN defs.strings
|
||||
ON resource_name_id = id $$ ,
|
||||
$$ VALUES ( 'a' , 2 ) , ( 'b' , 2 ) $$
|
||||
);
|
||||
|
||||
|
||||
|
@ -55,38 +70,48 @@ BEGIN;
|
|||
DROP CONSTRAINT fk_emppmset_empire ,
|
||||
DROP CONSTRAINT fk_emppmset_resource;
|
||||
INSERT INTO emp.planet_mining_settings ( empire_id , planet_id , resource_name_id )
|
||||
VALUES ( 1 , 1 , 1 ) , ( 1 , 1 , 2 );
|
||||
SELECT 1 , 1 , id
|
||||
FROM defs.strings
|
||||
WHERE name IN ( 'a' , 'b' );
|
||||
|
||||
DROP TABLE mset_update;
|
||||
CREATE TEMPORARY TABLE mset_update(
|
||||
empire_id INT ,
|
||||
planet_id INT ,
|
||||
resource_name_id INT ,
|
||||
resource_name TEXT ,
|
||||
empmset_weight INT
|
||||
) ON COMMIT DROP;
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 1 , 0 ) , ( 1 , 1 , 2 , 4 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 'a' , 0 ) , ( 1 , 1 , 'b' , 4 );
|
||||
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Applying valid planet update' );
|
||||
SELECT ok( emp.mset_update_apply( ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Planet update results' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , emppmset_weight FROM emp.planet_mining_settings $$ ,
|
||||
$$ VALUES ( 1 , 0 ) , ( 2 , 4 ) $$
|
||||
$$ SELECT name , emppmset_weight
|
||||
FROM emp.planet_mining_settings
|
||||
INNER JOIN defs.strings
|
||||
ON resource_name_id = id $$ ,
|
||||
$$ VALUES ( 'a' , 0 ) , ( 'b' , 4 ) $$
|
||||
);
|
||||
|
||||
/* Reset temporary table and settings */
|
||||
DELETE FROM mset_update;
|
||||
DELETE FROM emp.planet_mining_settings;
|
||||
INSERT INTO emp.planet_mining_settings ( empire_id , planet_id , resource_name_id )
|
||||
VALUES ( 1 , 1 , 1 ) , ( 1 , 1 , 2 );
|
||||
SELECT 1 , 1 , id
|
||||
FROM defs.strings
|
||||
WHERE name IN ( 'a' , 'b' );
|
||||
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 1 , -1 ) , ( 1 , 1 , 2 , 4 );
|
||||
INSERT INTO mset_update VALUES ( 1 , 1 , 'a' , -1 ) , ( 1 , 1 , 'b' , 4 );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Applying invalid planet update' );
|
||||
SELECT ok( NOT emp.mset_update_apply( ) );
|
||||
SELECT diag_test_name( 'emp.mset_update_apply() - Invalid planet update results' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , emppmset_weight FROM emp.planet_mining_settings $$ ,
|
||||
$$ VALUES ( 1 , 2 ) , ( 2 , 2 ) $$
|
||||
$$ SELECT name , emppmset_weight
|
||||
FROM emp.planet_mining_settings
|
||||
INNER JOIN defs.strings
|
||||
ON resource_name_id = id $$ ,
|
||||
$$ VALUES ( 'a' , 2 ) , ( 'b' , 2 ) $$
|
||||
);
|
||||
|
||||
SELECT * FROM finish( );
|
||||
|
|
|
@ -7,7 +7,7 @@ BEGIN;
|
|||
|
||||
SELECT diag_test_name( 'emp.mset_update_set() - Privileges' );
|
||||
SELECT lives_ok( $$
|
||||
SELECT emp.mset_update_set( 1 , -1 )
|
||||
SELECT emp.mset_update_set( 'a' , -1 )
|
||||
$$ );
|
||||
|
||||
SELECT * FROM finish( );
|
||||
|
|
Reference in a new issue