-- LegacyWorlds Beta 6
-- PostgreSQL database scripts
--
-- Main database script
--
-- Initialises the various roles and the database itself,
-- then processes scripts from the "parts" directory.
--
-- Copyright(C) 2004-2010, DeepClone Development
-- --------------------------------------------------------

-- Read configuration from file
\set pgadmin `grep ^admin= db-config.txt | sed -e s/.*=//`
\set dbname `grep ^db= db-config.txt | sed -e s/.*=//`
\set dbname_string '''':dbname''''
\set dbuser `grep ^user= db-config.txt | sed -e s/.*=//`
\set dbuser_string '''':dbuser''''
\set dbupass ''''`grep ^password= db-config.txt | sed -e s/.*=// -e "s/'/''/g"`''''


-- Connect to the main system database
\c postgres :pgadmin

-- Drop the database and users if they exist
DROP DATABASE IF EXISTS :dbname;
DROP ROLE IF EXISTS :dbuser;

-- Create the LW users
CREATE ROLE :dbuser WITH LOGIN ENCRYPTED PASSWORD :dbupass;

-- Create the database
CREATE DATABASE :dbname ENCODING='UTF8' TEMPLATE=template0;
GRANT CONNECT ON DATABASE :dbname TO :dbuser;


-- Connect to the LW database with the PostgreSQL admin user
\c :dbname :pgadmin

-- Register the dblink extension
CREATE EXTENSION dblink;

-- Create foreign data wrapper and server used to write logs from within
-- transanctions
CREATE FOREIGN DATA WRAPPER pgsql
	VALIDATOR postgresql_fdw_validator;
CREATE SERVER srv_logging
	FOREIGN DATA WRAPPER pgsql
	OPTIONS ( hostaddr '127.0.0.1' , dbname :dbname_string );
CREATE USER MAPPING FOR :dbuser
	SERVER srv_logging
	OPTIONS ( user :dbuser_string , password :dbupass );
GRANT USAGE ON FOREIGN SERVER srv_logging TO :dbuser;


BEGIN;

-- Create database schemas
\i parts/000-schemas.sql

-- Process structure definition scripts
\i parts/010-data.sql

-- Process functions and views definition scripts
\i parts/020-functions.sql

-- Process game update functions
\i parts/030-updates.sql

COMMIT;