Mining computations update
* Added a few that can be used to retrieve mining settings for resource providers from empire-owned planets from either the empire-wide or planet-specific settings
This commit is contained in:
parent
c18bdc2d1f
commit
038bba896a
3 changed files with 158 additions and 0 deletions
|
@ -59,3 +59,43 @@ REVOKE EXECUTE
|
||||||
DOUBLE PRECISION , DOUBLE PRECISION ,
|
DOUBLE PRECISION , DOUBLE PRECISION ,
|
||||||
DOUBLE PRECISION )
|
DOUBLE PRECISION )
|
||||||
FROM PUBLIC;
|
FROM PUBLIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mining settings view
|
||||||
|
* ---------------------
|
||||||
|
*
|
||||||
|
* This view lists mining settings being used on planets owned by empires
|
||||||
|
* for each resource providers. The settings are taken from planet-specific
|
||||||
|
* settings if they are available, or from empire-wide settings.
|
||||||
|
*
|
||||||
|
* Columns:
|
||||||
|
*
|
||||||
|
* planet_id The planet's identifier
|
||||||
|
* resource_name_id The type of resources
|
||||||
|
* mset_weight The setting to use for mining priorities
|
||||||
|
* mset_specific True if the settings are specific for this planet,
|
||||||
|
* false if empire-wise settings are in use.
|
||||||
|
*/
|
||||||
|
DROP VIEW IF EXISTS emp.mining_settings_view CASCADE;
|
||||||
|
CREATE VIEW emp.mining_settings_view
|
||||||
|
AS SELECT planet_id , resource_name_id ,
|
||||||
|
( CASE
|
||||||
|
WHEN _pl_settings.planet_id IS NULL THEN
|
||||||
|
_emp_settings.empmset_weight
|
||||||
|
ELSE
|
||||||
|
_pl_settings.emppmset_weight
|
||||||
|
END ) AS mset_weight ,
|
||||||
|
( _pl_settings.planet_id IS NOT NULL ) AS mset_specific
|
||||||
|
FROM verse.resource_providers
|
||||||
|
INNER JOIN emp.planets
|
||||||
|
USING ( planet_id )
|
||||||
|
INNER JOIN emp.mining_settings _emp_settings
|
||||||
|
USING ( empire_id , resource_name_id )
|
||||||
|
LEFT OUTER JOIN emp.planet_mining_settings _pl_settings
|
||||||
|
USING ( planet_id , empire_id , resource_name_id );
|
||||||
|
|
||||||
|
GRANT SELECT
|
||||||
|
ON emp.mining_settings_view
|
||||||
|
TO :dbuser;
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*
|
||||||
|
* Test the emp.mining_settings_view view
|
||||||
|
*/
|
||||||
|
BEGIN;
|
||||||
|
/* Create 1 natural resource, 3 planets and 2 empire names */
|
||||||
|
\i utils/strings.sql
|
||||||
|
\i utils/resources.sql
|
||||||
|
\i utils/accounts.sql
|
||||||
|
\i utils/naming.sql
|
||||||
|
\i utils/universe.sql
|
||||||
|
SELECT _create_natural_resources( 1 , 'testResource' );
|
||||||
|
SELECT _create_raw_planets( 3 , 'testPlanet' );
|
||||||
|
SELECT _create_emp_names( 2 , 'testEmp' );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an empire which possesses a planet, but has no planet-specific
|
||||||
|
* mining settings. Modify the default empire-wide settings so we can
|
||||||
|
* check the results.
|
||||||
|
*
|
||||||
|
* The planet only has a resource provider for one type of resource.
|
||||||
|
*/
|
||||||
|
SELECT emp.create_empire( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet1' ) , 1 );
|
||||||
|
UPDATE emp.mining_settings
|
||||||
|
SET empmset_weight = 3
|
||||||
|
WHERE empire_id = _get_emp_name( 'testEmp1' )
|
||||||
|
AND resource_name_id = _get_string( 'testResource1' );
|
||||||
|
INSERT INTO verse.resource_providers ( planet_id , resource_name_id ,
|
||||||
|
resprov_quantity_max , resprov_quantity ,
|
||||||
|
resprov_difficulty , resprov_recovery )
|
||||||
|
VALUES (
|
||||||
|
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||||
|
100 , 50 ,
|
||||||
|
0.5 , 0.5
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add a resource provider to the second planet; create an empire which
|
||||||
|
* owns the planet and has planet-specific settings for the resource
|
||||||
|
* provider.
|
||||||
|
*
|
||||||
|
* This empire also has settings for the testPlanet1 planet.
|
||||||
|
*/
|
||||||
|
INSERT INTO verse.resource_providers ( planet_id , resource_name_id ,
|
||||||
|
resprov_quantity_max , resprov_quantity ,
|
||||||
|
resprov_difficulty , resprov_recovery )
|
||||||
|
VALUES (
|
||||||
|
_get_map_name( 'testPlanet2' ) , _get_string( 'testResource1' ) ,
|
||||||
|
100 , 50 ,
|
||||||
|
0.5 , 0.5
|
||||||
|
);
|
||||||
|
SELECT emp.create_empire( _get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet2' ) , 1 );
|
||||||
|
INSERT INTO emp.planet_mining_settings(
|
||||||
|
empire_id , planet_id , resource_name_id , emppmset_weight
|
||||||
|
) VALUES (
|
||||||
|
_get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet2' ) ,
|
||||||
|
_get_string( 'testResource1' ) , 0
|
||||||
|
) , (
|
||||||
|
_get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet1' ) ,
|
||||||
|
_get_string( 'testResource1' ) , 0
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* While the last planet is not owned by any empire, make sure it has a
|
||||||
|
* resource provider.
|
||||||
|
*/
|
||||||
|
INSERT INTO verse.resource_providers ( planet_id , resource_name_id ,
|
||||||
|
resprov_quantity_max , resprov_quantity ,
|
||||||
|
resprov_difficulty , resprov_recovery )
|
||||||
|
VALUES (
|
||||||
|
_get_map_name( 'testPlanet3' ) , _get_string( 'testResource1' ) ,
|
||||||
|
100 , 50 ,
|
||||||
|
0.5 , 0.5
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/***** TESTS BEGIN HERE *****/
|
||||||
|
SELECT plan( 6 );
|
||||||
|
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Ignore neutral planets' );
|
||||||
|
SELECT is( COUNT(*)::INT , 0 )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet3' );
|
||||||
|
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Only display provided resources' );
|
||||||
|
SELECT is( COUNT(*)::INT , 1 )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet1' );
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Settings from empire-wide table' );
|
||||||
|
SELECT ok( NOT mset_specific )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet1' );
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Value from empire-wide table' );
|
||||||
|
SELECT is( mset_weight , 3 )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet1' );
|
||||||
|
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Settings from planet-specific table' );
|
||||||
|
SELECT ok( mset_specific )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet2' );
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Value from planet-specific table' );
|
||||||
|
SELECT is( mset_weight , 0 )
|
||||||
|
FROM emp.mining_settings_view
|
||||||
|
WHERE planet_id = _get_map_name( 'testPlanet2' );
|
||||||
|
|
||||||
|
SELECT * FROM finish( );
|
||||||
|
ROLLBACK;
|
|
@ -0,0 +1,11 @@
|
||||||
|
/*
|
||||||
|
* Test privileges on emp.mining_settings_view
|
||||||
|
*/
|
||||||
|
BEGIN;
|
||||||
|
SELECT plan( 1 );
|
||||||
|
|
||||||
|
SELECT diag_test_name( 'emp.mining_settings_view - Privileges' );
|
||||||
|
SELECT lives_ok( 'SELECT * FROM emp.mining_settings_view' );
|
||||||
|
|
||||||
|
SELECT * FROM finish( );
|
||||||
|
ROLLBACK;
|
Reference in a new issue