93 lines
1.8 KiB
MySQL
93 lines
1.8 KiB
MySQL
|
/*
|
||
|
* Utility functions used by unit tests
|
||
|
*
|
||
|
* Naming system
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Obtain a map name identifier
|
||
|
*/
|
||
|
CREATE FUNCTION _get_map_name( TEXT ) RETURNS INT AS $$
|
||
|
SELECT id FROM naming.map_names WHERE name = $1;
|
||
|
$$ LANGUAGE SQL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Obtain a map name identifier that does not exist
|
||
|
*/
|
||
|
CREATE FUNCTION _get_bad_map_name( ) RETURNS INT AS $$
|
||
|
SELECT MAX( id ) + 1 FROM naming.map_names;
|
||
|
$$ LANGUAGE SQL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Create a few map names using a prefix
|
||
|
*/
|
||
|
CREATE FUNCTION _create_map_names( _quantity INT , _prefix TEXT )
|
||
|
RETURNS VOID
|
||
|
AS $$
|
||
|
DECLARE
|
||
|
i INT;
|
||
|
BEGIN
|
||
|
i := 0;
|
||
|
WHILE i < _quantity
|
||
|
LOOP
|
||
|
i := i + 1;
|
||
|
BEGIN
|
||
|
INSERT INTO naming.map_names (name) VALUES ( _prefix || i::TEXT );
|
||
|
EXCEPTION
|
||
|
WHEN unique_violation THEN
|
||
|
-- Ignore the error
|
||
|
END;
|
||
|
END LOOP;
|
||
|
END;
|
||
|
$$ LANGUAGE PLPGSQL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Get the empire that belongs to some user, based on that user's email
|
||
|
*/
|
||
|
CREATE FUNCTION _get_emp_name( TEXT ) RETURNS INT AS $$
|
||
|
SELECT id FROM naming.empire_names WHERE owner_id = _find_address( $1 );
|
||
|
$$ LANGUAGE SQL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Obtain a map name identifier that does not exist
|
||
|
*/
|
||
|
CREATE FUNCTION _get_bad_emp_name( ) RETURNS INT AS $$
|
||
|
SELECT MAX( id ) + 1 FROM naming.empire_names;
|
||
|
$$ LANGUAGE SQL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Create a few empire names using a prefix for user accounts.
|
||
|
* Empires are named "testX" independently of the user accounts.
|
||
|
*/
|
||
|
CREATE FUNCTION _create_emp_names( _quantity INT , _prefix TEXT )
|
||
|
RETURNS VOID
|
||
|
AS $$
|
||
|
DECLARE
|
||
|
i INT;
|
||
|
j INT;
|
||
|
BEGIN
|
||
|
PERFORM _create_accounts( _quantity , _prefix );
|
||
|
i := 0;
|
||
|
WHILE i < _quantity
|
||
|
LOOP
|
||
|
i := i + 1;
|
||
|
j := 0;
|
||
|
LOOP
|
||
|
BEGIN
|
||
|
INSERT INTO naming.empire_names ( owner_id , name )
|
||
|
VALUES ( _find_address( _prefix || i::TEXT ) , 'test' || j::TEXT );
|
||
|
EXIT;
|
||
|
EXCEPTION
|
||
|
WHEN unique_violation THEN
|
||
|
j := j + 1;
|
||
|
END;
|
||
|
END LOOP;
|
||
|
END LOOP;
|
||
|
END;
|
||
|
$$ LANGUAGE PLPGSQL;
|