﻿create or replace function update_db_model() returns void as 
$$ 
begin 
 
 ------------------------------------------------------------------------------------------------
 --
    if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'carrier_data') then 
 
			CREATE TABLE "carrier_data"
			(
				"guid" text NOT NULL,
				"load_time" timestamp without time zone,
				"unload_time" timestamp without time zone,
				"rfid" text,
				"lot_id" text,
				"product_category" text,
				"station" text,
				CONSTRAINT "carrier_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "carrier_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "carrier_data" TO postgres; 
    end if; 

 ------------------------------------------------------------------------------------------------
 --
	if not exists(select * from information_schema.tables  
		where  
			table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
			and table_name = 'carrier_move_history') then 
 
			CREATE TABLE "carrier_move_history"
			(
				"gid" serial NOT NULL,
				"carrier_data_guid" text,
				"arrive_time" timestamp without time zone,
				"lot_id" text,
				"station" text,
				"status" text,
				CONSTRAINT "carrier_move_history_pkey" PRIMARY KEY ("gid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "carrier_move_history"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "carrier_move_history" TO postgres; 
    end if; 
 ------------------------------------------------------------------------------------------------
 --	
	if not exists(select * from information_schema.tables
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'wafer_data') then 
 
			CREATE TABLE "wafer_data"
			(
				"guid" text NOT NULL,
				"create_time" timestamp without time zone,
				"delete_time" timestamp without time zone,
				"carrier_data_guid" text,
				"create_station" text,
				"create_slot" text,
				"process_data_guid" text,
				"wafer_id" text,
				"lasermarker1" text,
				"lasermarker2" text,
				"lasermarker3" text,
				"t7code1" text,
				"t7code2" text,
				"t7code3" text,
				"pj_data_guid" text,
				"lot_data_guid" text,
				"lot_id" text,
				"notch_angle" real,
				"sequence_name" text,
				"process_status" text,
				"use_count" real,
				"use_time" real,
				"use_thick" real,
				CONSTRAINT "wafer_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "wafer_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "wafer_data" TO postgres; 
    end if; 
 ------------------------------------------------------------------------------------------------
 --	
	 if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'event_data') then 
 
					CREATE TABLE "event_data"
				(
				  "gid" serial NOT NULL,
				  "event_id" integer,
				  "event_enum" text,
				  "type" text,
				  "source" text,
				  "description" text,
				  "level" text,
				  "occur_time" timestamp without time zone,
				  CONSTRAINT "event_data_pkey" PRIMARY KEY ("gid" )
				)
					WITH (
					OIDS=FALSE
					);
					--ALTER TABLE "EventManager"
					--OWNER TO postgres;
					GRANT ALL ON TABLE "event_data" TO postgres;
					GRANT SELECT ON TABLE "event_data" TO postgres;

					CREATE INDEX "event_data_occur_time_event_id_idx"
					ON "event_data"
					USING btree
					("occur_time" , "event_id" );
    end if; 

 ------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'wafer_move_history') then 
 
					CREATE TABLE "wafer_move_history"
					(
					  "gid" serial NOT NULL,
					  "wafer_data_guid" text,
					  "arrive_time" timestamp without time zone,
					  "station" text,
					  "slot" text,
					  "status" text,
					  CONSTRAINT "wafer_move_history_pkey" PRIMARY KEY ("gid" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "wafer_move_history"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "wafer_move_history" TO postgres;
 
    end if; 
 ------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'process_data') then 
 
					CREATE TABLE "process_data"
					(
					  "guid" text NOT NULL,
					  "process_begin_time" timestamp without time zone,
					  "process_end_time" timestamp without time zone,
					  "recipe_name" text,
					  "process_status" text,
					   "wafer_data_guid" text,
					   "process_in" text,
					  CONSTRAINT "process_data_pkey" PRIMARY KEY ("guid" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "process_data"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "process_data" TO postgres;
 
    end if; 

 ------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'stats_data') then 
 
					CREATE TABLE "stats_data"
					(
					  "name" text,
					  "value" integer,
					  "total" integer,
					  "description" text,
					  "last_update_time" timestamp without time zone,
					  "last_reset_time" timestamp without time zone,
					  "last_total_reset_time" timestamp without time zone,		
					  "is_visible" boolean,
					  "enable_alarm" boolean,
					  "alarm_value" integer,
					  "warning_value" integer,
					  CONSTRAINT "stats_data_pkey" PRIMARY KEY ("name" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "stats_data"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "stats_data" TO postgres;
 
    end if; 
	
	------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'PM_statsData') then 
 
					CREATE TABLE "PM_statsData"
					(
					  "chamber" text,
					  "name" text,
					  "partsNo" text,
					  "current_cycle" text,
					  "target_cycle" text,
					  "current_value" text,
					  "warning_value" text,
					  "target_value" text,
					  "install_Date" timestamp without time zone,
					  CONSTRAINT "PM_statsData_pkey" PRIMARY KEY ("name" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "PM_statsData"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "PM_statsData" TO postgres;
 
    end if; 
	
	------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'PM_statsHistory') then 
 
					CREATE TABLE "PM_statsHistory"
					(
					  "id" serial,
					  "chamber" text,
					  "name" text,
					  "partsNo" text,
					  "current_cycle" text,
					  "target_cycle" text,
					  "current_value" text,
					  "warning_value" text,
					  "target_value" text,
					  "install_Date" timestamp without time zone,
					  CONSTRAINT "PM_statsHistory_pkey" PRIMARY KEY ("id" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "PM_statsHistory"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "PM_statsHistory" TO postgres;
 
    end if; 

------------------------------------------------------------------------------------------------
--	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'leak_check_data') then 
 
					CREATE TABLE "leak_check_data"
					(
						"guid" text NOT NULL,
						"operate_time" timestamp without time zone,
						"status" text,
						"leak_rate" real,
						"start_pressure" real,
						"stop_pressure" real,
						"mode" text,
						"leak_check_time" integer,
					  CONSTRAINT "leak_check_data_pkey" PRIMARY KEY ("guid" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "leak_check_data"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "leak_check_data" TO postgres;
 
    end if; 
 ------------------------------------------------------------------------------------------------
 --
    if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'cj_data') then 
 
			CREATE TABLE cj_data
			(
				"guid" text NOT NULL,
				"start_time" timestamp without time zone,
				"end_time" timestamp without time zone,
				"carrier_data_guid" text,
				"name" text,
				"input_port" text,
				"output_port" text,
				"total_wafer_count" integer,
				"abort_wafer_count" integer,
				"unprocessed_wafer_count" integer,
				CONSTRAINT "cj_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "cj_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "cj_data" TO postgres; 
    end if; 
 ------------------------------------------------------------------------------------------------
 --
    if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'pj_data') then 
 
			CREATE TABLE pj_data
			(
				"guid" text NOT NULL,
				"start_time" timestamp without time zone,
				"end_time" timestamp without time zone,
				"job_name" text,
				"batch_id" text,
				"recipe_name" text,
				"layout_name" text,
				"layout_data" text,
				"wafer_data" text,
				"form" text,
				"carrier_data_guid" text,
				"cj_data_guid" text,
				"name" text,
				"input_port" text,
				"output_port" text,
				"total_wafer_count" integer,
				"abort_wafer_count" integer,
				"unprocessed_wafer_count" integer,
				CONSTRAINT "pj_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "pj_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "pj_data" TO postgres; 
    end if; 

	 ------------------------------------------------------------------------------------------------
 --
    if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'lot_data') then 
 
			CREATE TABLE lot_data
			(
				"guid" text NOT NULL,
				"start_time" timestamp without time zone,
				"end_time" timestamp without time zone,
				"carrier_data_guid" text,
				"cj_data_guid" text,
				"name" text,
				"input_port" text,
				"output_port" text,
				"total_wafer_count" integer,
				"abort_wafer_count" integer,
				"unprocessed_wafer_count" integer,
				CONSTRAINT "lot_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "lot_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "lot_data" TO postgres; 
    end if; 

		 ------------------------------------------------------------------------------------------------
 --
    if not exists(select * from information_schema.tables  
        where  
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
            and table_name = 'lot_wafer_data') then 
 
			CREATE TABLE lot_wafer_data
			(
				"guid" text NOT NULL,
				"create_time" timestamp without time zone,
				"lot_data_guid" text,
				"wafer_data_guid" text,
				CONSTRAINT "lot_wafer_data_pkey" PRIMARY KEY ("guid" )
			)
			WITH (
			OIDS=FALSE
			);
			ALTER TABLE "lot_wafer_data"
			OWNER TO postgres;
			GRANT SELECT ON TABLE "lot_wafer_data" TO postgres; 

			CREATE INDEX "lot_wafer_data_idx1"
			ON "lot_wafer_data"
			USING btree
			("lot_data_guid" , "wafer_data_guid" );
    end if; 


	 ------------------------------------------------------------------------------------------------
 --	
	    if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'recipe_step_data') then 
 
					CREATE TABLE "recipe_step_data"
					(
					  "guid" text NOT NULL,
					  "step_begin_time" timestamp without time zone,
					  "step_end_time" timestamp without time zone,
					  "step_name" text,
					  "step_time" real,
					   "process_data_guid" text,
					   "step_number" integer,
					  CONSTRAINT "recipe_step_data_pkey" PRIMARY KEY ("guid" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "recipe_step_data"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "recipe_step_data" TO postgres;

								CREATE INDEX "recipe_step_data_idx1"
					ON "recipe_step_data"
					USING btree
					("process_data_guid" , "step_number" );
 
    end if; 
 ------------------------------------------------------------------------------------------------
 --	
 if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'Recipe_History') then 
 
					CREATE TABLE "Recipe_History"
					(
					  "guid" text NOT NULL,				 
                      "createdBy" text,
					  "creationTime"  timestamp without time zone,
                      "lastRevisedBy" text,
					  "lastRevisionTime" timestamp without time zone,
					  "recipe_description" text,
					  "recipe_type" text,
					  "recipe_name" text,
					  "recipe_path" text,
					  "recipe_version" text,
					  "recipe_level" text,
					  "recipe_premission" text,
					  "recipe_compare" text,
					  "recipe_content" text,
					  CONSTRAINT "Recipe_History_pkey" PRIMARY KEY ("guid" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "Recipe_History"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "Recipe_History" TO postgres;
 
    end if; 

------------------------------------------------------------------------------------------------
 --	
   if not exists(select * from information_schema.tables  
				where  
				table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA 
				and table_name = 'schedule_maintenance') then 
 
					CREATE TABLE "schedule_maintenance"
					(
                      "maintenance_item" text,
                      "maintenance_display" text,
                      "current_value" text,
                      "scheduling_start_value" text,
                      "maintenance_limit_value" text,
                      "maintenance_processing" text,
                      "unit" text,
                      "path" text,
                      "addition_information_name" text,
                      "addition_information_display" text,
					  CONSTRAINT "schedule_maintenance_pkey" PRIMARY KEY ("maintenance_item" )
					)
					WITH (
					  OIDS=FALSE
					);
					ALTER TABLE "schedule_maintenance"
					OWNER TO postgres;
					GRANT SELECT ON TABLE "schedule_maintenance" TO postgres;
 
    end if; 

------------------------------------------------------------------------------------------------
--	
end; 
$$ 
language 'plpgsql'; 
 
select update_db_model(); 

CREATE OR REPLACE FUNCTION batch_delete_tables(text)
RETURNS int AS
$$
DECLARE
    r RECORD;
    count int;
BEGIN
    count := 0;
FOR r IN SELECT tablename FROM pg_tables where tablename like $1 || '%'  LOOP
    RAISE NOTICE 'tablename: %', r.tablename;
    EXECUTE 'DROP TABLE "' || r.tablename || '" CASCADE';
    count := count + 1;
END LOOP;
RETURN count;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
