//******************************************************************************************************
// RootQueryRestrictionAttribute.cs - Gbtc
//
// Copyright © 2017, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may
// not use this file except in compliance with the License. You may obtain a copy of the License at:
//
// http://opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 05/14/2017 - J. Ritchie Carroll
// Generated original version of source code.
//
//******************************************************************************************************
using System;
using System.Data;
using System.Diagnostics.CodeAnalysis;
namespace GSF.Data.Model
{
///
/// Defines an attribute that will mark a modeled table with a record restriction that applies
/// to all query functions for modeled .
///
[SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")]
[AttributeUsage(AttributeTargets.Class)]
public sealed class RootQueryRestrictionAttribute : Attribute
{
#region [ Members ]
// Fields
///
/// Defines filter SQL expression for restriction as a composite format string - does not
/// include WHERE. When escaping is needed for field names, use standard ANSI quotes.
///
///
///
/// Each indexed parameter, e.g., "{0}", in the composite format string will be converted into
/// query parameters where each of the corresponding values in the
/// collection will be applied as values to an executed
/// query.
///
///
/// If needed, field names that are escaped with standard ANSI quotes in the filter expression
/// will be updated to reflect what is defined in the user model.
///
///
public readonly string FilterExpression;
///
/// Defines restriction parameter values.
///
public readonly object[] Parameters;
///
/// Gets or sets flag that determines if root query restriction should be applied to update operations.
///
///
/// If root query restriction only references primary key fields, then this property value should
/// be set to false since default update operations for a modeled record already work against
/// primary key fields.
///
public bool ApplyToUpdates;
///
/// Gets or sets flag that determines if root query restriction should be applied to delete operations.
///
///
/// If root query restriction only references primary key fields, then this property value should
/// be set to false since default delete operations for a modeled record already work against
/// primary key fields.
///
public bool ApplyToDeletes;
#endregion
#region [ Constructors ]
///
/// Creates a new parameterized with the specified
/// SQL filter expression and parameters.
///
///
/// Filter SQL expression for restriction as a composite format string - does not include WHERE.
/// When escaping is needed for field names, use standard ANSI quotes.
///
/// Restriction parameter values.
///
///
/// Each indexed parameter, e.g., "{0}", in the composite format
/// will be converted into query parameters where each of the corresponding values in the
/// collection will be applied as
/// values to an executed query.
///
///
/// If needed, field names that are escaped with standard ANSI quotes in the filter expression
/// will be updated to reflect what is defined in the user model.
///
///
public RootQueryRestrictionAttribute(string filterExpression, params object[] parameters)
{
FilterExpression = filterExpression;
Parameters = parameters;
}
#endregion
}
}