---- Neste arquivo deve ser considerada toda lógica que deve estar no banco de dados antes do mesmo ser criado. Será chamado no createDB dentro do repositório, e é um item opcional.
---- Se voce precisar de algo que seja executado na sua aplicação antes destes procedimentos, voce pode adicionar o numero 0 na frente do nome do arquivo, pois eles serão ordenados de forma crescente antes de sua execução
---- O mesmo vale para se voce precisar que algo seja executado apos este processo. Nenhum arquivo é obrigatorio, e se presentes devem ser inobtrusivos.

---- Criar a Extensão DBLINK
CREATE EXTENSION IF NOT EXISTS DBLINK;

-- Criar função que retorna os dados configurados de dblink na aplicação

CREATE OR REPLACE FUNCTION PUBLIC.RETORNADADOSDBLINK() RETURNS TEXT AS
$BD$
DECLARE
  RDADOS RECORD;
BEGIN
  SELECT INTO RDADOS
  'DBNAME='||P.BASEDADOS||' HOSTADDR='||P.SERVIDOR||' USER='||P.USUARIO||' PASSWORD='||P.SENHA||' PORT='||P.PORTA AS CONEXAO
  FROM PUBLIC.PARAMETRO P;
  
  IF RDADOS.CONEXAO IS NULL THEN
    RAISE EXCEPTION 'NÃO FORAM ENCONTRADOS DADOS DE CONEXÃO!';
  END IF;
  
  RETURN RDADOS.CONEXAO;
END;
$BD$
LANGUAGE PLPGSQL;

-- funcao que retorna o value mapper de uma entidade
CREATE OR REPLACE FUNCTION PUBLIC.GETVALUEMAPPER (
  ORDERBY TEXT,
  ESQUEMA TEXT,
  TABELA TEXT,
  IDREGISTRO BIGINT
)
RETURNS BIGINT AS
$BD$
DECLARE
  RETORNO RECORD;
  SQL TEXT;
BEGIN
  SELECT 'SELECT ROW_INDEX FROM (SELECT ID, ROW_NUMBER() OVER(ORDER BY '|| ORDERBY ||') AS ROW_INDEX FROM '|| ESQUEMA ||'.'|| TABELA ||') P WHERE P.ID = '|| IDREGISTRO INTO SQL; 
  FOR RETORNO IN EXECUTE SQL 
  LOOP
  	  RETURN RETORNO.ROW_INDEX -1;
  END LOOP;
  RETURN NULL;
END;
$BD$
LANGUAGE PLPGSQL;