//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
namespace System.Data.Common.EntitySql.AST
{
using System.Diagnostics;
///
/// Represents an identifier ast node.
///
internal sealed class Identifier : Node
{
private readonly string _name;
private readonly bool _isEscaped;
///
/// Initializes identifier.
///
internal Identifier(string name, bool isEscaped, string query, int inputPos) : base(query, inputPos)
{
// name may be empty in the case of "byte[]".
// "byte" and "[]" come in as two identifiers where second one is escaped and empty.
Debug.Assert(isEscaped || name[0] != '[', "isEscaped || name[0] != '['");
if (!isEscaped)
{
bool isIdentifierASCII = true;
if (!CqlLexer.IsLetterOrDigitOrUnderscore(name, out isIdentifierASCII))
{
if (isIdentifierASCII)
{
throw EntityUtil.EntitySqlError(this.ErrCtx, System.Data.Entity.Strings.InvalidSimpleIdentifier(name));
}
else
{
throw EntityUtil.EntitySqlError(this.ErrCtx, System.Data.Entity.Strings.InvalidSimpleIdentifierNonASCII(name));
}
}
}
_name = name;
_isEscaped = isEscaped;
}
///
/// Returns identifier name (without escaping chars).
///
internal string Name
{
get { return _name; }
}
///
/// True if an identifier is escaped.
///
internal bool IsEscaped
{
get { return _isEscaped; }
}
}
}