예제 #1
0
        public void SimpleTest()
        {
            var location = Path.GetDirectoryName(typeof(BuildTaskUnitTest).Assembly.Location);

            // find root of XmlNotepad repo.
            location = new Uri(new Uri("file:///" + location), "../../..").LocalPath;

            SyncVersions wix = new SyncVersions()
            {
                DropDir                = Path.Combine(location, @"src\drop"),
                MasterVersionFile      = Path.Combine(location, @"src\Version\Version.props"),
                CSharpVersionFile      = Path.Combine(location, @"src\Version\Version.cs"),
                ApplicationProjectFile = Path.Combine(location, @"src\Application\Application.csproj"),
                WixFile                = Path.Combine(location, @"src\XmlNotepadSetup\Product.wxs"),
                UpdatesFile            = Path.Combine(location, @"src\Updates\Updates.xml"),
                AppManifestFile        = Path.Combine(location, @"src\XmlNotepadPackage\Package.appxmanifest"),
            };

            var mock = new Mock <IBuildEngine>();

            mock.Setup(x => x.LogMessageEvent(It.IsAny <BuildMessageEventArgs>())).Callback(new LogMessageHandler((e) =>
            {
                Trace.WriteLine(e.Message);
            }));
            mock.Setup(x => x.LogCustomEvent(It.IsAny <CustomBuildEventArgs>())).Callback(new LogCustomHandler((e) =>
            {
                Trace.WriteLine(e.Message);
            }));
            mock.Setup(x => x.LogErrorEvent(It.IsAny <BuildErrorEventArgs>())).Callback(new LogErrorHandler((e) =>
            {
                Trace.WriteLine(e.Message);
            }));
            mock.Setup(x => x.LogWarningEvent(It.IsAny <BuildWarningEventArgs>())).Callback(new LogWarningHandler((e) =>
            {
                Trace.WriteLine(e.Message);
            }));

            wix.BuildEngine = mock.Object;
            wix.Execute();
        }
예제 #2
0
        public static void CheckTrigger(SQLServerConnection Connection, TableMapping Table, int DbVersion)
        {
            int Timeout = 30;

            try
            {
                Timeout = Connection.CommandTimeout;
                Connection.CommandTimeout = (int)TimeSpan.FromMinutes(9).TotalMinutes;

                string TriggerName = $"{Table.TableName}_TRIGGER";

                bool TriggerExists = Connection.TriggerExists(TriggerName);

                SyncVersions version =
                    TriggerExists ?
                    SyncVersions.GetVersion(Connection, TriggerName, SyncVersionObject.Trigger) :
                    new SyncVersions()
                {
                    Name = TriggerName,
                    SyncVersionObject = SyncVersionObject.Trigger
                };

                if (!TriggerExists || !Connection.TableExists(Table.TableName) || version.Version != DbVersion)
                {
                    Connection.CreateTable(Table);
                    if (TriggerExists)
                    {
                        Connection.EXEC($"DROP TRIGGER {TriggerName}", System.Data.CommandType.Text);
                    }

                    string clustered_index_name = $"IX_{Table.TableName}_{ISync.SyncGuidColumnName}";
                    if (!Connection.ExistsClusteredIndex(Table.TableName, clustered_index_name))
                    {
                        Connection.CreateClusteredIndex(Table.TableName, ISync.SyncGuidColumnName, clustered_index_name);
                    }

                    //REMOVE OLD TRIGGERS
                    if (Connection.TriggerExists($"{Table.TableName}_Tablet"))
                    {
                        Connection.EXEC($"DROP TRIGGER {Table.TableName}_Tablet");
                    }

                    Connection.EXEC($@"CREATE TRIGGER dbo.{TriggerName} ON dbo.{Table.TableName} AFTER INSERT,DELETE,UPDATE AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	-- Check if this is an INSERT, UPDATE or DELETE Action.
    DECLARE @action as char(10);
    SET @action = '{NotifyTableChangedAction.Insert}'; -- Set Action to Insert by default.
    IF EXISTS(SELECT * FROM DELETED)
    BEGIN
        SET @action =
            CASE
                WHEN EXISTS(SELECT * FROM INSERTED) THEN '{NotifyTableChangedAction.Update}' -- Set Action to Updated.
                ELSE '{NotifyTableChangedAction.Delete}' -- Set Action to Deleted.
            END
    END
    ELSE
        IF NOT EXISTS(SELECT * FROM INSERTED)
	RETURN;

IF @ACTION='{NotifyTableChangedAction.Insert}' OR @action='{NotifyTableChangedAction.Update}'
BEGIN
DELETE FROM SyncHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM deleted)
DELETE FROM ChangesHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM deleted)
DELETE FROM ChangesHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM inserted)

INSERT INTO ChangesHistory (Action,SyncGuid,TableName,Priority)
SELECT @action,inserted.SyncGuid,'{Table.TableName}',{Table.SyncMode.Order}
FROM inserted 
GROUP BY inserted.SyncGuid
---DEBUG
--SELECT 'INSERT INTO ChangesHistory (Action,SyncGuid,TableName,Priority) VALUES('''
--+RTRIM(LTRIM(@action))+''','''
--+CAST(inserted.SyncGuid AS varchar(MAX))+''',''{Table.TableName}'',{Table.SyncMode.Order})' 
--FROM inserted  GROUP BY inserted.SyncGuid
--DEBUG

END ELSE
BEGIN
DELETE FROM SyncHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM deleted)
DELETE FROM ChangesHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM deleted)
DELETE FROM ChangesHistory WHERE SyncGuid IN ( SELECT SyncGuid FROM inserted)

INSERT INTO ChangesHistory (Action,SyncGuid,TableName,Priority)
SELECT @action,deleted.SyncGuid,'{Table.TableName}',{Table.SyncMode.Order}
FROM deleted 
GROUP BY deleted.SyncGuid
---DEBUG
--SELECT 'INSERT INTO ChangesHistory (Action,SyncGuid,TableName,Priority) VALUES('''
--+RTRIM(LTRIM(@action))+''','''
--+CAST(inserted.SyncGuid AS varchar(MAX))+''',''{Table.TableName}'',{Table.SyncMode.Order})' 
--FROM inserted  GROUP BY inserted.SyncGuid
--DEBUG

END
END", System.Data.CommandType.Text);

                    var last = Table.Columns.LastOrDefault();
                    if (last != null)
                    {
                        using (var con = Connection.Con())
                        {
                            using (var cmd = new System.Data.SqlClient.SqlCommand($"UPDATE {Table.TableName} SET SyncGuid=ISNULL(SyncGuid,NEWID())", con)
                            {
                                CommandTimeout = Int32.MaxValue
                            })
                            {
                                con.Open();
                                cmd.ExecuteNonQuery();
                                con.Close();
                            }
                        }
                    }
                    version.Version = DbVersion;
                    version.Save(Connection);
                }
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex, $"Al revisar el trigger de {Table.TableName}");
            }
            finally
            {
                Connection.CommandTimeout = Timeout;
            }
        }