/***** CREATE TABLES *******/

/************/
/****** Object:  Table [dbo].[PollAnswers]    Script Date: 06/10/2006 16:40:28 ******/

CREATE TABLE [dbo].[PollAnswers](
	[PollId] [int] NOT NULL,
	[AnswerId] [int] IDENTITY(1,1) NOT NULL,
	[AnswerText] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[AnswerCount] [int] NULL CONSTRAINT [DF_PollAnswers_AnswerCount]  DEFAULT ((0)),
 CONSTRAINT [PK_PollAnswers] PRIMARY KEY CLUSTERED 
(
	[AnswerId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

/****** Object:  END Table [dbo].[PollAnswers]    Script Date: 06/10/2006 16:40:28 ******/
/************/



/************/
/****** Object:  Table [dbo].[PollQuestions]    Script Date: 06/10/2006 16:36:01 ******/

CREATE TABLE [dbo].[PollQuestions](
	[PollId] [int] IDENTITY(1,1) NOT NULL,
	[SiteId] [int] NOT NULL CONSTRAINT [DF_PollQuestions_SiteId]  DEFAULT ((0)),
	[PollQuestion] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[CloseType] [int] NOT NULL CONSTRAINT [DF_PollQuestions_CloseType]  DEFAULT ((0)),
	[CloseDate] [datetime] NULL,
	[CreatedBy] [int] NOT NULL,
	[CreatedOn] [datetime] NOT NULL,
	[Closed] [bit] NOT NULL CONSTRAINT [DF_PollQuestions_Closed]  DEFAULT ((0)),
	[AnswerCount] [int] NOT NULL CONSTRAINT [DF_PollQuestions_AnswerCount]  DEFAULT ((0)),
 CONSTRAINT [PK_PollQuestions] PRIMARY KEY CLUSTERED 
(
	[PollId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

/****** Object:  END Table [dbo].[PollQuestions]    Script Date: 06/10/2006 16:36:01 ******/
/************/



/************/
/****** Object:  Table [dbo].[PollResults]    Script Date: 06/10/2006 16:36:42 ******/

CREATE TABLE [dbo].[PollResults](
	[PollId] [int] NOT NULL,
	[PollChoice] [int] NOT NULL,
	[MemberId] [int] NOT NULL,
 CONSTRAINT [PK_PollResults] PRIMARY KEY CLUSTERED 
(
	[PollId] ASC,
	[MemberId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

/****** Object:  END Table [dbo].[PollResults]    Script Date: 06/10/2006 16:36:42 ******/
/************/



/***** CREATE TRIGGERS *******/

/************/
/****** Object:  Trigger [trg_UpdateVoteCountOnDelete]    Script Date: 06/10/2006 16:37:20 ******/

CREATE TRIGGER [trg_UpdateVoteCountOnDelete] ON [dbo].[PollResults] AFTER DELETE 
AS
	DECLARE @PollId		int,
			@AnswerId	int
	
	BEGIN
		
		select @PollId=pollid, @AnswerId=pollchoice from deleted

		update pollanswers 
			set answercount=(select count(*) from pollresults where pollid=@PollId and pollchoice=@AnswerId) where pollid=@PollId and answerid=@AnswerId
			
		update pollquestions 
			set answercount=(select count(*) from pollresults where pollid=@PollId) where pollid=@PollId
				
	END
	
	RETURN
	
GO

/****** Object:  END Trigger [trg_UpdateVoteCountOnDelete]    Script Date: 06/10/2006 16:37:20 ******/
/************/





/************/
/****** Object:  Trigger [trg_UpdateVoteCountOnInsert]    Script Date: 06/10/2006 16:38:15 ******/

CREATE TRIGGER [trg_UpdateVoteCountOnInsert] ON [dbo].[PollResults] AFTER INSERT 
AS
	DECLARE @PollId		int,
			@AnswerId	int
	
	BEGIN
		
		select @PollId=pollid, @AnswerId=pollchoice from inserted

		update 
			pollanswers 
		set answercount=( 
			select count(*) 
			from pollresults 
			where pollid=@PollId 
			and pollchoice=@AnswerId) 
		where pollid=@PollId 
		and AnswerId=@AnswerId
			
		update pollquestions set answercount=( select count(*) from pollresults where pollid=@PollId) where pollid=@PollId
		
	END
	
	RETURN

GO

/****** Object:  END Trigger [trg_UpdateVoteCountOnInsert]    Script Date: 06/10/2006 16:38:15 ******/
/************/




/************/
/************/
/****** STORED PROCEDURES ******/
/************/
/************/

CREATE PROCEDURE [dbo].[DeletePoll] 
	(
	@PollId		int
	)
AS
	begin try
		Begin Transaction
		
		delete from pollresults where pollid=@PollId

		delete from pollanswers where pollid=@PollId

		delete from pollquestions where pollid=@PollId
				
		Commit Transaction
	END TRY
	BEGIN CATCH
		ROLLBACK
	END CATCH
	
	/* SET NOCOUNT ON */ 
	RETURN
	
GO


CREATE PROCEDURE [dbo].[DeleteVote]
	(
	@PollId		int,
	@MemberId	int
	)
AS
	delete from pollresults where pollid=@PollId and memberid=@MemberId
	
	/* SET NOCOUNT ON */ 
	RETURN

GO


CREATE PROCEDURE [dbo].[InsertPollAnswer] 
	(
		@PollId		int,
		@AnswerText		varchar(250)
	)
AS
	insert into pollanswers ( pollid, answertext, answercount ) values ( @PollId, @AnswerText, 0 )

	/* SET NOCOUNT ON */ 
	RETURN
GO


/****** Object:  StoredProcedure [dbo].[InsertPollQuestion]    Script Date: 06/10/2006 16:32:12 ******/

CREATE PROCEDURE [dbo].[InsertPollQuestion] 
	(
		@SiteId		int,
		@PollQuestion	varchar(Max),
		@CloseType	int,
		@CloseDate	datetime,
		@CreatedBy	int
	)
AS
	insert into pollquestions (
		SiteId,
		PollQuestion,
		CloseType,
		CloseDate,
		CreatedBy,
		CreatedOn,
		Closed,
		AnswerCount 
		) values (
		@SiteId,
		@PollQuestion,
		@CloseType,
		@CloseDate,
		@CreatedBy,
		GetDate(),
		0,
		0
		)
	/* SET NOCOUNT ON */ 
	RETURN SCOPE_IDENTITY()
GO



/****** Object:  StoredProcedure [dbo].[InsertPollResult]    Script Date: 06/10/2006 16:32:53 ******/

CREATE PROCEDURE [dbo].[InsertPollResult]
	(
		@PollId		int,
		@PollChoice		int,
		@MemberId	int
	)
AS
	insert into pollresults ( pollid, pollchoice, memberid ) values ( @PollId, @PollChoice, @MemberId )
	
	/* SET NOCOUNT ON */ 
	RETURN
GO


/****** Object:  StoredProcedure [dbo].[MemberCanVote]    Script Date: 06/10/2006 16:33:25 ******/

CREATE PROCEDURE [dbo].[MemberCanVote] 
	(
		@PollId		int,
		@MemberId	int
	)
AS
	select count(*) as voted from pollresults where pollid=@PollId and memberid=@MemberId
	
	/* SET NOCOUNT ON */ 
	RETURN
GO


/****** Object:  StoredProcedure [dbo].[SelectPollAnswers]    Script Date: 06/10/2006 16:33:51 ******/

CREATE PROCEDURE [dbo].[SelectPollAnswers] 
	(
		@PollId		int
	)
AS
	select * from pollanswers where pollid=@PollId
	
	/* SET NOCOUNT ON */ 
	RETURN
GO


/****** Object:  StoredProcedure [dbo].[SelectPolls]    Script Date: 06/10/2006 16:34:17 ******/

CREATE PROCEDURE [dbo].[SelectPolls] 
	@SiteId		int
AS
	select pollquestions.* from pollquestions where siteid=0 or siteid=@SiteId and closed=0
	/* SET NOCOUNT ON */ 
	RETURN
GO

