﻿CREATE OR REPLACE FUNCTION public.AddNewFields()
  RETURNS void 
  LANGUAGE 'plpgsql'
  AS
$BODY$
BEGIN

IF NOT EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'radio_gw' AND column_name = 'deleted') THEN
	ALTER TABLE public.radio_gw ADD COLUMN deleted boolean NOT NULL DEFAULT false;
   
    RAISE NOTICE '%', 'ADD COLUMN : deleted in table radio_gw !';
ELSE 
	RAISE NOTICE '%', 'COLUMN deleted already exists in table radio_gw !';
	
END IF;



IF EXISTS ( SELECT * FROM pg_constraint WHERE conname = 'uniqueKey_radio_gw' ) THEN
  ALTER TABLE public.radio_gw DROP CONSTRAINT "uniqueKey_radio_gw";

  RAISE NOTICE '%', 'DROP CONSTRAINT  uniqueKey_radio_gw  in table radio_gw !';
END IF;

IF NOT EXISTS ( SELECT * FROM pg_indexes WHERE tablename = 'radio_gw' and schemaname = 'public' and  indexname = 'uniqueKey_radio_gw' ) THEN
  CREATE UNIQUE INDEX "uniqueKey_radio_gw" ON  radio_gw ("IP", "GW_ID", deleted) WHERE deleted = false;

  RAISE NOTICE '%', 'CREATE UNIQUE INDEX  uniqueKey_radio_gw  in table radio_gw !';
ELSE 
  RAISE NOTICE '%', 'UNIQUE INDEX uniqueKey_radio_gw already exists in table radio_gw !';

END IF;



IF NOT EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'gateways' AND column_name='deleted') THEN
	 ALTER TABLE public.gateways ADD COLUMN deleted boolean NOT NULL DEFAULT false;

	 RAISE NOTICE '%', 'ADD COLUMN : deleted in table gateways !';
ELSE 
	RAISE NOTICE '%', 'COLUMN deleted already exists in table gateways !';
END IF;


IF EXISTS ( SELECT * FROM pg_constraint WHERE conname = 'uniqueKey_gateways' ) THEN
 ALTER TABLE public.gateways DROP CONSTRAINT "uniqueKey_gateways";

 RAISE NOTICE '%', 'DROP CONSTRAINT  uniqueKey_gateways  in table gateways !';
END IF ;

IF NOT EXISTS ( SELECT * FROM pg_indexes WHERE tablename = 'gateways' and schemaname = 'public' and  indexname = 'uniqueKey_gateways' ) THEN
 CREATE UNIQUE INDEX "uniqueKey_gateways" ON  gateways ("IP", deleted) WHERE deleted = false ;

 RAISE NOTICE '%', 'CREATE UNIQUE INDEX  uniqueKey_gateways  in table gateways !';
ELSE 
 RAISE NOTICE '%', 'UNIQUE INDEX uniqueKey_gateways already exists in table gateways !';

END IF;


IF NOT EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'subs_gateway' AND column_name = 'id') THEN
	CREATE SEQUENCE IF NOT EXISTS subs_gateway_seq;

	ALTER TABLE public.subs_gateway ADD COLUMN id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('subs_gateway_seq'::regclass) ;

	RAISE NOTICE '%', 'ADD COLUMN : id in table subs_gateway and set it as primary key!';
ELSE 
	RAISE NOTICE '%', 'COLUMN id already exists in table subs_gateway !';

END IF;

IF EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'subs_gateway' AND column_name = 'gateway_id' AND is_nullable = 'NO') THEN
	ALTER TABLE public.subs_gateway ALTER COLUMN gateway_id DROP NOT NULL;

	RAISE NOTICE '%', 'DROP NOT NULL attribute FOR COLUMN : gateway_id in the table subs_gateway !';
ELSE 
	RAISE NOTICE '%', 'The attribute NULL already exists for the column : gateway_id in the table subs_gateway !';
END IF;

IF EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'subs_gateway' AND column_name = 'radio_gw_id' AND is_nullable = 'NO') THEN
	ALTER TABLE public.subs_gateway ALTER COLUMN radio_gw_id DROP NOT NULL;

	RAISE NOTICE '%', 'DROP NOT NULL attribute FOR COLUMN : radio_gw_id in the table subs_gateway !';
ELSE 
	RAISE NOTICE '%', 'The attribute NULL already exists for the column : radio_gw_id in the table subs_gateway !';
END IF;

IF NOT EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'VoiceRecordings' AND column_name = 'dispatcher_id') THEN
	ALTER TABLE public."VoiceRecordings" ADD COLUMN dispatcher_id integer NULL;

	RAISE NOTICE '%', 'ADD COLUMN : dispatcher_id in table VoiceRecordings !';
END IF;

IF  EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'VoiceRecordings' AND column_name = 'subscriber_id' AND is_nullable = 'NO') THEN
	ALTER TABLE public."VoiceRecordings" ALTER COLUMN subscriber_id DROP NOT NULL;

	RAISE NOTICE '%', 'DROP NOT NULL attribute FOR COLUMN : subscriber_id in the table VoiceRecordings !';
ELSE 
	RAISE NOTICE '%', 'The attribute NULL already exists for the column : subscriber_id in the table VoiceRecordings !';
END IF;

IF  EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'VoiceRecordings' AND column_name = 'group_id' AND is_nullable = 'NO') THEN
	ALTER TABLE public."VoiceRecordings" ALTER COLUMN group_id DROP NOT NULL;

	RAISE NOTICE '%', 'DROP NOT NULL attribute FOR COLUMN : group_id in the table VoiceRecordings !';
ELSE 
	RAISE NOTICE '%', 'The attribute NULL already exists for the column : group_id in the table VoiceRecordings !';

END IF;

IF  NOT EXISTS (SELECT * FROM information_schema.columns  WHERE table_name = 'vehicle' AND column_name = 'is_deleted' AND is_nullable = 'NO') THEN
	ALTER TABLE vehicle ADD COLUMN is_deleted BOOLEAN NOT NULL DEFAULT FALSE;

	RAISE NOTICE '%', 'ADD COLUMN : is_deleted in table vehicle and set it to FALSE!';
ELSE 
	RAISE NOTICE '%', 'COLUMN is_deleted already exists in table vehicle !';

END IF;

END;
$BODY$;
