Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DatabaseTrigger"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="definition">The definition.</param>
        /// <param name="queryTiming">The query timing.</param>
        /// <param name="events">The events.</param>
        /// <param name="isEnabled">if set to <c>true</c> [is enabled].</param>
        /// <exception cref="ArgumentNullException"><paramref name="name"/> is <c>null</c>, or <paramref name="definition"/> is <c>null, empty, or whitespace</c>.</exception>
        /// <exception cref="ArgumentException">If invalid enum values are provided for <paramref name="queryTiming"/> or <paramref name="events"/>. Additionally this will be thrown when provided a <paramref name="events"/> value of <see cref="TriggerEvent.None"/>.</exception>
        public DatabaseTrigger(Identifier name, string definition, TriggerQueryTiming queryTiming, TriggerEvent events, bool isEnabled)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (definition.IsNullOrWhiteSpace())
            {
                throw new ArgumentNullException(nameof(definition));
            }
            if (!queryTiming.IsValid())
            {
                throw new ArgumentException($"The { nameof(TriggerQueryTiming) } provided must be a valid enum.", nameof(queryTiming));
            }
            if (!events.IsValid())
            {
                throw new ArgumentException($"The { nameof(TriggerEvent) } provided must be a valid enum.", nameof(events));
            }
            if (events == TriggerEvent.None)
            {
                throw new ArgumentException("Invalid trigger event flags given. Must include at least one event, e.g. INSERT, DELETE, UPDATE.", nameof(events));
            }

            Name         = name.LocalName;
            Definition   = definition;
            QueryTiming  = queryTiming;
            TriggerEvent = events;
            IsEnabled    = isEnabled;
        }
Ejemplo n.º 2
0
        public static void Ctor_GivenNullName_ThrowsArgumentNullException()
        {
            const string             definition = "create trigger test_trigger...";
            const TriggerQueryTiming timing     = TriggerQueryTiming.Before;
            const TriggerEvent       events     = TriggerEvent.Update;

            Assert.That(() => new DatabaseTrigger(null, definition, timing, events, true), Throws.ArgumentNullException);
        }
Ejemplo n.º 3
0
        public static void Ctor_GivenNullOrWhiteSpaceDefinition_ThrowsArgumentNullException(string definition)
        {
            Identifier triggerName          = "test_trigger";
            const TriggerQueryTiming timing = TriggerQueryTiming.Before;
            const TriggerEvent       events = TriggerEvent.Update;

            Assert.That(() => new DatabaseTrigger(triggerName, definition, timing, events, true), Throws.ArgumentNullException);
        }
        public static void Ctor_GivenInvalidTriggerEvent_ThrowsArgumentException()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events      = (TriggerEvent)55;

            Assert.That(() => new MySqlDatabaseTrigger(triggerName, definition, timing, events), Throws.ArgumentException);
        }
Ejemplo n.º 5
0
        public static void Ctor_GivenNoTriggerEvents_ThrowsArgumentException()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.Before;
            const TriggerEvent       events      = TriggerEvent.None;

            Assert.That(() => new DatabaseTrigger(triggerName, definition, timing, events, true), Throws.ArgumentException);
        }
Ejemplo n.º 6
0
        public static void Ctor_GivenNullOrWhiteSpaceDefinition_ThrowsArgumentNullException(string definition)
        {
            Identifier triggerName          = "test_trigger";
            const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events = TriggerEvent.Update;
            const bool enabled = true;

            Assert.That(() => new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled), Throws.ArgumentNullException);
        }
Ejemplo n.º 7
0
        public static void Ctor_GivenNullName_ThrowsArgumentNullException()
        {
            const string             definition = "create trigger test_trigger...";
            const TriggerQueryTiming timing     = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events     = TriggerEvent.Update;
            const bool enabled = true;

            Assert.That(() => new PostgreSqlDatabaseTrigger(null, definition, timing, events, enabled), Throws.ArgumentNullException);
        }
Ejemplo n.º 8
0
        public static void Ctor_GivenNoTriggerEvents_ThrowsArgumentException()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events      = TriggerEvent.None;
            const bool               enabled     = true;

            Assert.That(() => new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled), Throws.ArgumentException);
        }
        public static void IsEnabled_PropertyGet_ReturnsTrue()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.Before;
            const TriggerEvent       events      = TriggerEvent.Update;

            var trigger = new SqliteDatabaseTrigger(triggerName, definition, timing, events);

            Assert.That(trigger.IsEnabled, Is.True);
        }
Ejemplo n.º 10
0
        public static void QueryTiming_PropertyGet_EqualsCtorArg()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.Before;
            const TriggerEvent       events      = TriggerEvent.Update;

            var trigger = new DatabaseTrigger(triggerName, definition, timing, events, true);

            Assert.That(trigger.QueryTiming, Is.EqualTo(timing));
        }
        public static void Definition_PropertyGet_EqualsCtorArg()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events      = TriggerEvent.Update;

            var trigger = new MySqlDatabaseTrigger(triggerName, definition, timing, events);

            Assert.That(trigger.Definition, Is.EqualTo(definition));
        }
Ejemplo n.º 12
0
        public static void IsEnabled_WhenFalseProvidedInCtor_ReturnsFalse()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.Before;
            const TriggerEvent       events      = TriggerEvent.Update;

            var trigger = new DatabaseTrigger(triggerName, definition, timing, events, false);

            Assert.That(trigger.IsEnabled, Is.False);
        }
Ejemplo n.º 13
0
        public static void QueryTiming_PropertyGet_EqualsCtorArg()
        {
            Identifier               triggerName = "test_trigger";
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.InsteadOf;
            const TriggerEvent       events      = TriggerEvent.Update;
            const bool               enabled     = true;

            var trigger = new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled);

            Assert.That(trigger.QueryTiming, Is.EqualTo(timing));
        }
Ejemplo n.º 14
0
        public static void ToString_WhenInvoked_ReturnsExpectedValues(string name, string expectedResult)
        {
            var                      triggerName = Identifier.CreateQualifiedIdentifier(name);
            const string             definition  = "create trigger test_trigger...";
            const TriggerQueryTiming timing      = TriggerQueryTiming.Before;
            const TriggerEvent       events      = TriggerEvent.Update;

            var trigger = new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, false);
            var result  = trigger.ToString();

            Assert.That(result, Is.EqualTo(expectedResult));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ParsedTriggerData"/> class.
        /// </summary>
        /// <param name="queryTiming">A query timing.</param>
        /// <param name="events">Trigger events.</param>
        /// <exception cref="ArgumentException"><paramref name="queryTiming"/> or <paramref name="events"/> are invalid enum values.</exception>
        public ParsedTriggerData(TriggerQueryTiming queryTiming, TriggerEvent events)
        {
            if (!queryTiming.IsValid())
            {
                throw new ArgumentException($"The { nameof(TriggerQueryTiming) } provided must be a valid enum.", nameof(queryTiming));
            }
            if (!events.IsValid())
            {
                throw new ArgumentException($"The { nameof(TriggerEvent) } provided must be a valid enum.", nameof(events));
            }

            Timing = queryTiming;
            Event  = events;
        }
        public async Task Triggers_GivenTableWithTriggerForDelete_ReturnsCorrectEventAndTiming()
        {
            var table = await GetTableAsync("v11_trigger_test_table_1").ConfigureAwait(false);

            var trigger = table.Triggers.First(t => t.Name == "v11_trigger_test_table_1_trigger_3");

            const TriggerQueryTiming timing = TriggerQueryTiming.Before;
            const TriggerEvent       events = TriggerEvent.Delete;

            Assert.Multiple(() =>
            {
                Assert.That(trigger.QueryTiming, Is.EqualTo(timing));
                Assert.That(trigger.TriggerEvent, Is.EqualTo(events));
            });
        }
        public async Task Triggers_GivenTableWithTriggerAfterUpdate_ReturnsCorrectEventAndTiming()
        {
            var table = await GetTableAsync("trigger_test_table_1").ConfigureAwait(false);

            var trigger = table.Triggers.First(t => t.Name == "TRIGGER_TEST_TABLE_1_TRIGGER_5");

            const TriggerQueryTiming timing = TriggerQueryTiming.After;
            const TriggerEvent       events = TriggerEvent.Update;

            Assert.Multiple(() =>
            {
                Assert.That(trigger.QueryTiming, Is.EqualTo(timing));
                Assert.That(trigger.TriggerEvent, Is.EqualTo(events));
            });
        }
Ejemplo n.º 18
0
            public Trigger(
                Identifier tableName,
                Identifier triggerName,
                string definition,
                TriggerQueryTiming queryTiming,
                TriggerEvent triggerEvent
                )
            {
                if (tableName == null)
                {
                    throw new ArgumentNullException(nameof(tableName));
                }
                if (triggerName == null)
                {
                    throw new ArgumentNullException(nameof(triggerName));
                }
                if (definition.IsNullOrWhiteSpace())
                {
                    throw new ArgumentNullException(nameof(definition));
                }

                TriggerName = triggerName.LocalName;
                Definition  = definition;

                TriggerUrl = "../" + UrlRouter.GetTriggerUrl(tableName, triggerName);

                var queryFlags = queryTiming.GetFlags()
                                 .Select(qt => TimingDescriptions[qt])
                                 .OrderBy(qt => qt)
                                 .ToList();
                var eventFlags = triggerEvent.GetFlags()
                                 .Select(te => EventDescriptions[te])
                                 .OrderBy(te => te)
                                 .ToList();

                QueryTiming = queryFlags.Join(", ");
                Events      = eventFlags.Join(", ");
            }
Ejemplo n.º 19
0
        public Trigger(
            Identifier tableName,
            Identifier triggerName,
            string rootPath,
            string definition,
            TriggerQueryTiming queryTiming,
            TriggerEvent triggerEvent
            )
        {
            if (tableName == null)
            {
                throw new ArgumentNullException(nameof(tableName));
            }
            if (triggerName == null)
            {
                throw new ArgumentNullException(nameof(triggerName));
            }

            Name       = triggerName.ToVisibleName();
            TableName  = tableName.ToVisibleName();
            TableUrl   = rootPath + UrlRouter.GetTableUrl(tableName);
            TriggerUrl = rootPath + UrlRouter.GetTriggerUrl(tableName, triggerName);
            RootPath   = rootPath ?? throw new ArgumentNullException(nameof(rootPath));
            Definition = definition ?? throw new ArgumentNullException(nameof(definition));

            var queryFlags = queryTiming.GetFlags()
                             .Select(qt => TimingDescriptions[qt])
                             .OrderBy(qt => qt)
                             .ToList();
            var eventFlags = triggerEvent.GetFlags()
                             .Select(te => EventDescriptions[te])
                             .OrderBy(te => te)
                             .ToList();

            QueryTiming = queryFlags.Join(", ");
            Events      = eventFlags.Join(", ");
        }