Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 69 additions & 63 deletions DataFresh/DataFreshConsole.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,81 +38,87 @@ public string Results
public void Start(string[] args)
{
ConsoleWrite("DataFresh provided by Entropy Zero Consulting");

if (args == null || args.Length < 2)
try
{
WriteUsage();
return;
}
if (args == null || args.Length < 2)
{
WriteUsage();
return;
}

for (int i = 0; i < args.Length; i = i + 2)
{
this.arguments.Add(args[i].Replace("-", ""), args[i + 1]);
//ConsoleWrite(args[i] + ": " +args[i+1]);
}
for (int i = 0; i < args.Length; i = i + 2)
{
this.arguments.Add(args[i].Replace("-", ""), args[i + 1]);
//ConsoleWrite(args[i] + ": " +args[i+1]);
}

if (!CheckForRequiredArguments(this.arguments))
{
return;
}
if (!CheckForRequiredArguments(this.arguments))
{
return;
}

connectionString = string.Format(@"user id={0};password={1};Initial Catalog={2};Data Source={3};",
this.arguments["u"],
this.arguments["p"],
this.arguments["d"],
this.arguments["s"]);
connectionString = string.Format(@"user id={0};password={1};Initial Catalog={2};Data Source={3};",
this.arguments["u"],
this.arguments["p"],
this.arguments["d"],
this.arguments["s"]);

SqlDataFresh dataFresh = new SqlDataFresh(connectionString, true);
SqlDataFresh dataFresh = new SqlDataFresh(connectionString, true);

string snapshotPath = this.arguments["sp"];
string snapshotPath = this.arguments["sp"];

if (snapshotPath != null)
{
snapshotPath = snapshotPath.Replace("\"", "");
if (!snapshotPath.EndsWith(@"\"))
if (snapshotPath != null)
{
snapshotPath += @"\";
}
snapshotPath = snapshotPath.Replace("\"", "");
if (!snapshotPath.EndsWith(@"\"))
{
snapshotPath += @"\";
}

ConsoleWrite("snapshotPath = {0}", snapshotPath);
string fullPath = Path.GetFullPath(snapshotPath);
ConsoleWrite("fullPath = {0}", fullPath);
dataFresh.SnapshotPath = new DirectoryInfo(snapshotPath);
}
ConsoleWrite("snapshotPath = {0}", snapshotPath);
string fullPath = Path.GetFullPath(snapshotPath);
ConsoleWrite("fullPath = {0}", fullPath);
dataFresh.SnapshotPath = new DirectoryInfo(snapshotPath);
}

string command = this.arguments["c"].ToUpper();
switch (command)
{
case "PREPARE":
bool ignoreSnapshot = false;
string ignoreSnapshotArgument = arguments["ignoresnapshot"];
if(ignoreSnapshotArgument != null)
{
if(ignoreSnapshotArgument == "1")
string command = this.arguments["c"].ToUpper();
switch (command)
{
case "PREPARE":
bool ignoreSnapshot = false;
string ignoreSnapshotArgument = arguments["ignoresnapshot"];
if (ignoreSnapshotArgument != null)
{
ignoreSnapshot = true;
if (ignoreSnapshotArgument == "1")
{
ignoreSnapshot = true;
}
}
}
dataFresh.PrepareDatabaseforDataFresh(!ignoreSnapshot);
break;
case "REFRESH":
dataFresh.RefreshTheDatabase();
break;
case "FORCEREFRESH":
dataFresh.RefreshTheEntireDatabase();
break;
case "REMOVE":
dataFresh.RemoveDataFreshFromDatabase();
break;
case "SNAPSHOT":
dataFresh.CreateSnapshot();
break;
case "FOO":
//no nothing
break;
default:
ConsoleWrite("Command '{0}' was not recognized", command);
break;
dataFresh.PrepareDatabaseforDataFresh(!ignoreSnapshot);
break;
case "REFRESH":
dataFresh.RefreshTheDatabase();
break;
case "FORCEREFRESH":
dataFresh.RefreshTheEntireDatabase();
break;
case "REMOVE":
dataFresh.RemoveDataFreshFromDatabase();
break;
case "SNAPSHOT":
dataFresh.CreateSnapshot();
break;
case "FOO":
//no nothing
break;
default:
ConsoleWrite("Command '{0}' was not recognized", command);
break;
}
}
catch (Exception exception)
{
ConsoleWrite($"DataFresh failed: {exception.Message}.{Environment.NewLine}StackTrace: {exception.StackTrace}");
}
}

Expand Down
51 changes: 29 additions & 22 deletions DataFresh/Resources/PrepareDataFresh.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@ IF EXISTS (SELECT * FROM [DBO].SYSOBJECTS WHERE ID = Object_ID(N'[DBO].[df_Table
DROP PROCEDURE [dbo].[df_TableDataImport]
GO

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[df_ChangeTracking]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [dbo].[df_ChangeTracking]
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[df_ChangeTracking]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[df_ChangeTracking]
GO

CREATE TABLE [dbo].[df_ChangeTracking]
(
[TABLENAME] sysname
[TABLENAME] sysname,
[TABLESCHEMA] sysname
)
GO

Expand All @@ -33,55 +37,57 @@ AS

DECLARE @sql NVARCHAR(4000)
DECLARE @TableName VARCHAR(255)
DECLARE @TableSchema VARCHAR(255)

SELECT DISTINCT TableName INTO #ChangedTables FROM df_ChangeTracking
SELECT DISTINCT TableName, TableSchema INTO #ChangedTables FROM df_ChangeTracking

TRUNCATE TABLE df_ChangeTracking

DECLARE Table_Cursor INSENSITIVE SCROLL CURSOR FOR
SELECT [tablename] from #ChangedTables
SELECT [tablename], [tableschema] from #ChangedTables
UNION
SELECT DISTINCT
OBJECT_NAME(fkeyid) AS Referenced_Table
OBJECT_NAME(fkeyid) AS Referenced_Table_Name,
OBJECT_SCHEMA_NAME(fkeyid) AS Referenced_Table_Schema
FROM
sysreferences sr
INNER JOIN #ChangedTables ct ON sr.rkeyid = OBJECT_ID(ct.tablename)

OPEN Table_Cursor

-- Deactivate Constrains for tables referencing changed tables
FETCH NEXT FROM Table_Cursor INTO @TableName
FETCH NEXT FROM Table_Cursor INTO @TableName, @TableSchema

WHILE (@@Fetch_Status = 0)
BEGIN
SET @sql = N'Alter Table [' + @TableName + '] NOCHECK CONSTRAINT ALL'
SET @sql = N'Alter Table [' + @TableSchema + '].[' + @TableName + '] NOCHECK CONSTRAINT ALL'
EXEC sp_executesql @sql

FETCH NEXT FROM Table_Cursor INTO @TableName
FETCH NEXT FROM Table_Cursor INTO @TableName, @TableSchema
END

-- Delete All data from Changed Tables and Refill
DECLARE ChangedTable_Cursor CURSOR FOR
SELECT [tablename] FROM #ChangedTables WHERE tablename not in('dbo.df_ChangeTracking', 'dbo.dr_DeltaVersion')
SELECT [tablename], [tableschema] FROM #ChangedTables WHERE tablename not in('df_ChangeTracking', 'dr_DeltaVersion')

OPEN ChangedTable_Cursor
FETCH NEXT FROM ChangedTable_Cursor INTO @TableName
FETCH NEXT FROM ChangedTable_Cursor INTO @TableName, @TableSchema
WHILE (@@Fetch_Status = 0)
BEGIN
PRINT @TableName
SET @sql = N'DELETE [' + @TableName + ']; DELETE df_ChangeTracking WHERE TableName=''' + @TableName + ''''
SET @sql = N'DELETE [' + @TableSchema + '].[' + @TableName + ']; DELETE FROM df_ChangeTracking WHERE TableName=''' + @TableName + ''' and TableSchema=''' + @TableSchema + ''''
EXEC sp_executesql @sql

SET @sql = N'IF(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema + ''.'' + table_name = ''' + @TableName + ''' AND IDENT_SEED(TABLE_NAME) IS NOT NULL) > 0
SET @sql = N'IF(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = ''' + @TableSchema + ''' AND table_name = ''' + @TableName + ''' AND IDENT_SEED(TABLE_NAME) IS NOT NULL) > 0
BEGIN
DBCC CHECKIDENT ([' + @TableName + '], RESEED, 0)
DBCC CHECKIDENT ([' + @TableSchema + '.' + @TableName + '], RESEED, 0)
END'

EXEC sp_executesql @sql


SET @sql = N'BULK INSERT [' + @TableName + ']
FROM ''' + @BasePath + @TableName + '.df''
SET @sql = N'BULK INSERT [' + @TableSchema + '].[' + @TableName + ']
FROM ''' + @BasePath + @TableSchema + '.' + @TableName + '.df''
WITH
(
KEEPIDENTITY,
Expand All @@ -90,19 +96,19 @@ AS
)'
EXEC sp_executesql @sql

FETCH NEXT FROM ChangedTable_Cursor INTO @TableName
FETCH NEXT FROM ChangedTable_Cursor INTO @TableName, @TableSchema
END
CLOSE ChangedTable_Cursor
DEALLOCATE ChangedTable_Cursor

-- ReEnable Constrants for All Tables
FETCH FIRST FROM Table_Cursor INTO @TableName
FETCH FIRST FROM Table_Cursor INTO @TableName, @TableSchema
WHILE (@@Fetch_Status = 0)
BEGIN
SET @sql = N'Alter Table [' + @TableName + '] CHECK CONSTRAINT ALL'
SET @sql = N'Alter Table [' + @TableSchema + '].[' + @TableName + '] CHECK CONSTRAINT ALL'
EXEC sp_executesql @sql

FETCH NEXT FROM Table_Cursor INTO @TableName
FETCH NEXT FROM Table_Cursor INTO @TableName, @TableSchema
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
Expand All @@ -115,7 +121,8 @@ AS
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[df_ChangeTracking]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [df_ChangeTracking]
(
[TABLENAME] sysname
[TABLENAME] sysname,
[TABLESCHEMA] sysname
)

DECLARE @sql NVARCHAR(4000)
Expand All @@ -137,7 +144,7 @@ AS
SET @sql = N'CREATE TRIGGER [' + @TableSchema + '].[trig_df_ChangeTracking_' + @TableName + '] on [' + @TableSchema + '].[' + @TableName + '] for insert, update, delete
as
SET NOCOUNT ON
INSERT INTO df_ChangeTracking (tablename) VALUES (''' + @TableSchema + '.' + @TableName + ''')
INSERT INTO df_ChangeTracking (tablename, tableschema) VALUES (''' + @TableName + ''', ''' + @TableSchema + ''')
SET NOCOUNT OFF'

EXEC sp_executesql @sql
Expand Down