/// <summary>
        /// Initializes a new instance of the <see cref="PostgreSqlDatabaseTrigger"/> class.
        /// </summary>
        /// <param name="name">A trigger name.</param>
        /// <param name="definition">The definition of the trigger.</param>
        /// <param name="queryTiming">A trigger query timing.</param>
        /// <param name="events">Table events that cause the trigger to fire.</param>
        /// <param name="isEnabled">If <see langword="true"/>, determines that the trigger is currently enabled.</param>
        /// <exception cref="ArgumentNullException"><paramref name="name"/> is <c>null</c>. Alternatively if <paramref name="definition"/> is <c>null</c>, empty or whitespace.</exception>
        /// <exception cref="ArgumentException"><paramref name="queryTiming"/> or <paramref name="events"/> is an invalid enum or has invalid values.</exception>
        public PostgreSqlDatabaseTrigger(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;
        }
        /// <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;
        }