08.11.2014 Views

Full Disclosure Report

Full Disclosure Report

Full Disclosure Report

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Appendix E: Refresh Function Source Code<br />

E.1. CreateRF1Proc.sql<br />

-- File: CREATERF1PROC.SQL<br />

-- Microsoft TPC-H Benchmark Kit Ver. 1.00<br />

-- Copyright Microsoft, 1999<br />

--<br />

IF exists (SELECT name FROM sysobjects WHERE name = 'RF1')<br />

DROP PROCEDURE RF1<br />

GO<br />

--<br />

-- Create a stored RefreshInsert procedure which will catch the deadlock<br />

-- victim abort and restart the insert transaction.<br />

--<br />

CREATE PROCEDURE RF1<br />

@current_execution INTEGER, @insert_sets INTEGER,<br />

@parallel_executions INTEGER, @total_executions INTEGER<br />

AS<br />

BEGIN<br />

SET NOCOUNT OFF<br />

DECLARE @startdate DATE<br />

DECLARE @enddate DATE<br />

DECLARE @edate DATE<br />

DECLARE @rangeStart INTEGER<br />

DECLARE @rangeSize INTEGER<br />

DECLARE @range INTEGER<br />

DECLARE @success INTEGER<br />

DECLARE @index INTEGER<br />

DECLARE @div INTEGER<br />

DECLARE @mod INTEGER<br />

DECLARE @skip INTEGER<br />

DECLARE @i INTEGER<br />

DECLARE @rangeSum INTEGER<br />

DECLARE @totRangeSize INTEGER<br />

DECLARE @stmt NCHAR(1000)<br />

DECLARE @orderSql NCHAR(1000)<br />

DECLARE @liSql NCHAR(1000)<br />

DECLARE @ErrorMessage NVARCHAR(4000)<br />

DECLARE @ErrorNumber INT<br />

DECLARE @ErrorSeverity INT<br />

DECLARE @ErrorState INT<br />

DECLARE @ErrorLine INT<br />

DECLARE @ErrorProcedure NVARCHAR(200)<br />

SET @skip = @total_executions/@parallel_executions<br />

SET @div = (@current_execution - 1)/@parallel_executions<br />

SET @mod = (@current_execution - 1) - @div * @parallel_executions<br />

SET @index = @mod*@skip + @div + 1<br />

--<br />

-- Get the range for this execution<br />

--<br />

SET @stmt = N'SELECT @sdate = dateadd(day,-1,min(O_ORDERDATE)),<br />

@edate = max(O_ORDERDATE)<br />

FROM NEWORDERS'<br />

EXEC sp_executesql @stmt,N'@sdate DATE output, @edate DATE<br />

output',@startdate output, @enddate output<br />

select 'Start RF1'<br />

--SELECT 'CurrExec:'+cast(@current_execution as varchar(200))<br />

+','+cast(scheduler_id as varchar(200)) as [sched] from<br />

sys.dm_exec_requests where session_id=@@spid<br />

IF (@total_executions > @parallel_executions)<br />

BEGIN<br />

SET @div = (@index-1)/@skip<br />

SET @mod = (@index-1) - @div * @skip<br />

--SET @rangeSize = datediff(day, @startdate,<br />

@enddate)/@parallel_executions + 1<br />

SET @rangeSize = ((@div+1) * datediff(day, @startdate,<br />

@enddate))/@parallel_executions - (@div * datediff(day, @startdate,<br />

@enddate))/@parallel_executions<br />

--SET @rangeStart = @div * @rangeSize<br />

SET @rangeStart = (@div * datediff(day, @startdate,<br />

@enddate))/@parallel_executions<br />

SET @rangeStart = @rangeStart + (@rangeSize * @mod)/@skip<br />

SET @totRangeSize = ((@mod + 1) * @rangeSize)/@skip -<br />

(@mod * @rangeSize)/@skip<br />

SET @rangeSize = @totRangeSize<br />

IF (@rangeSize < 0)<br />

SET @rangeSize = 0<br />

IF (@insert_sets

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!