本文整理汇总了C#中ParseTree.SaveNewElementWithError方法的典型用法代码示例。如果您正苦于以下问题:C# ParseTree.SaveNewElementWithError方法的具体用法?C# ParseTree.SaveNewElementWithError怎么用?C# ParseTree.SaveNewElementWithError使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParseTree
的用法示例。
在下文中一共展示了ParseTree.SaveNewElementWithError方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ParseSQL
//.........这里部分代码省略.........
// we definitely want the side-effects (all the lower-level escapes)
sqlTree.EscapeAnySingleOrPartialStatementContainers();
//check whether we expected to end the parens...
if (sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_DDLDETAIL_PARENS)
|| sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_DDL_PARENS)
|| sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_FUNCTION_PARENS)
|| sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_EXPRESSION_PARENS)
|| sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_SELECTIONTARGET_PARENS)
)
{
sqlTree.MoveToAncestorContainer(1); //unspecified parent node...
}
else if (sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_SQL_CLAUSE)
&& sqlTree.CurrentContainer.ParentNode.Name.Equals(SqlXmlConstants.ENAME_SELECTIONTARGET_PARENS)
&& sqlTree.CurrentContainer.ParentNode.ParentNode.Name.Equals(SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT)
&& sqlTree.CurrentContainer.ParentNode.ParentNode.ParentNode.Name.Equals(SqlXmlConstants.ENAME_CTE_AS_BLOCK)
)
{
sqlTree.MoveToAncestorContainer(4, SqlXmlConstants.ENAME_CTE_WITH_CLAUSE);
sqlTree.CurrentContainer = sqlTree.SaveNewElement(SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT, "");
}
else if (sqlTree.CurrentContainer.Name.Equals(SqlXmlConstants.ENAME_SQL_CLAUSE)
&& (
sqlTree.CurrentContainer.ParentNode.Name.Equals(SqlXmlConstants.ENAME_EXPRESSION_PARENS)
|| sqlTree.CurrentContainer.ParentNode.Name.Equals(SqlXmlConstants.ENAME_SELECTIONTARGET_PARENS)
)
)
{
sqlTree.MoveToAncestorContainer(2); //unspecified grandfather node.
}
else
{
sqlTree.SaveNewElementWithError(SqlXmlConstants.ENAME_OTHERNODE, ")");
}
break;
case SqlTokenType.OtherNode:
//prepare multi-keyword detection by "peeking" up to 7 keywords ahead
List<int> significantTokenPositions = GetSignificantTokenPositions(tokenList, tokenID, 7);
string significantTokensString = ExtractTokensString(tokenList, significantTokenPositions);
if (sqlTree.PathNameMatches(0, SqlXmlConstants.ENAME_PERMISSIONS_DETAIL))
{
//if we're in a permissions detail clause, we can expect all sorts of statements
// starters and should ignore them all; the only possible keywords to escape are
// "ON" and "TO".
if (significantTokensString.StartsWith("ON "))
{
sqlTree.MoveToAncestorContainer(1, SqlXmlConstants.ENAME_PERMISSIONS_BLOCK);
sqlTree.StartNewContainer(SqlXmlConstants.ENAME_PERMISSIONS_TARGET, token.Value, SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT);
}
else if (significantTokensString.StartsWith("TO ")
|| significantTokensString.StartsWith("FROM ")
)
{
sqlTree.MoveToAncestorContainer(1, SqlXmlConstants.ENAME_PERMISSIONS_BLOCK);
sqlTree.StartNewContainer(SqlXmlConstants.ENAME_PERMISSIONS_RECIPIENT, token.Value, SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT);
}
else
{
//default to "some classification of permission"
sqlTree.SaveNewElement(SqlXmlConstants.ENAME_OTHERKEYWORD, token.Value);
}
}