This repository has been archived on 2025-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server-data/db-structure/tests/admin/040-functions/026-technology-dependencies/010-technologies-cache-entries.sql
Emmanuel BENOîT 4f083830f2 Technology dependencies caching and integrity checks
* Added table that will contain the cached technology dependencies.

* Implemented trigger functions that update the cache and make sure
there are no cycles or redundancies in the technology graph.

* The following SQL files need to be (re-)executed:
  -> 030-data/080-techs.sql (for the defs.techdep_cache table)
  -> 040-functions/026-technology-dependencies.sql (new file)
2012-02-16 18:30:58 +01:00

49 lines
No EOL
1.7 KiB
PL/PgSQL

/*
* Make sure that inserting new technologies create corresponding dependency
* cache entries, and that these entries are deleted along with the
* technologies.
*/
BEGIN;
\i utils/strings.sql
-- Make the columns we don't use in the technology definition table NULL-able
ALTER TABLE defs.technologies
ALTER technology_category_id DROP NOT NULL ,
ALTER technology_discovery_id DROP NOT NULL ,
ALTER technology_description_id DROP NOT NULL ,
ALTER technology_price DROP NOT NULL ,
ALTER technology_points DROP NOT NULL;
-- Create a string to use as the technology's name
SELECT _create_test_strings( 1 , 'tech' );
-- Insert the new technology
INSERT INTO defs.technologies ( technology_name_id )
VALUES ( _get_string( 'tech1' ) );
-- ***** TESTS BEGIN HERE *****
SELECT plan( 2 );
SELECT diag_test_name( 'defs.technologies - Inserting creates cache entries' );
SELECT set_eq( $$
SELECT tdcache_reverse , ( tdcache_id_parent IS NULL ) AS no_parent ,
tdcache_depth , technology_name_id_copyof ,
( tdcache_id_copyof IS NULL ) AS not_a_copy ,
( techdep_id IS NULL ) AS not_a_dependency
FROM defs.techdep_cache
WHERE technology_name_id = _get_string( 'tech1' );
$$ , $$ VALUES (
FALSE , TRUE , 0 , _get_string( 'tech1' ) , TRUE , TRUE
) , (
TRUE , TRUE , 0 , _get_string( 'tech1' ) , TRUE , TRUE
) $$ );
SELECT diag_test_name( 'defs.technologies - Cache entries are deleted along with technologies' );
DELETE FROM defs.technologies WHERE technology_name_id = _get_string( 'tech1' );
SELECT is_empty( $$
SELECT * FROM defs.techdep_cache
WHERE technology_name_id = _get_string( 'tech1' );
$$ );
SELECT * FROM finish( );
ROLLBACK;