private void ProcessSqlNodeList(XmlNodeList rootList, TSqlObfuscatingFormattingState state) { foreach (XmlElement contentElement in rootList) { ProcessSqlNode(contentElement, state); } }
private void ProcessSqlNodeList(IEnumerable <Node> rootList, TSqlObfuscatingFormattingState state) { foreach (Node contentElement in rootList) { ProcessSqlNode(contentElement, state); } }
public string FormatSQLTree(XmlDocument sqlTreeDoc) { //thread-safe - each call to FormatSQLTree() gets its own independent state object TSqlObfuscatingFormattingState state = new TSqlObfuscatingFormattingState(RandomizeColor, RandomizeLineLength); if (sqlTreeDoc.SelectSingleNode(string.Format("/{0}/@{1}[.=1]", SqlXmlConstants.ENAME_SQL_ROOT, SqlXmlConstants.ANAME_ERRORFOUND)) != null) state.AddOutputContent(ErrorOutputPrefix); XmlNodeList rootList = sqlTreeDoc.SelectNodes(string.Format("/{0}/*", SqlXmlConstants.ENAME_SQL_ROOT)); return FormatSQLNodes(rootList, state); }
public string FormatSQLTree(XmlDocument sqlTreeDoc) { //thread-safe - each call to FormatSQLTree() gets its own independent state object TSqlObfuscatingFormattingState state = new TSqlObfuscatingFormattingState(RandomizeColor, RandomizeLineLength); if (sqlTreeDoc.SelectSingleNode(string.Format("/{0}/@{1}[.=1]", SqlXmlConstants.ENAME_SQL_ROOT, SqlXmlConstants.ANAME_ERRORFOUND)) != null) { state.AddOutputContent(ErrorOutputPrefix); } XmlNodeList rootList = sqlTreeDoc.SelectNodes(string.Format("/{0}/*", SqlXmlConstants.ENAME_SQL_ROOT)); return(FormatSQLNodes(rootList, state)); }
public string FormatSQLTree(Node sqlTreeDoc) { //thread-safe - each call to FormatSQLTree() gets its own independent state object TSqlObfuscatingFormattingState state = new TSqlObfuscatingFormattingState(RandomizeColor, RandomizeLineLength); if (sqlTreeDoc.Name == SqlStructureConstants.ENAME_SQL_ROOT && sqlTreeDoc.GetAttributeValue(SqlStructureConstants.ANAME_ERRORFOUND) == "1") { state.AddOutputContent(ErrorOutputPrefix); } //pass "doc" itself into process: useful/necessary when formatting MINIFY sub-regions from standard formatter ProcessSqlNodeList(new[] { sqlTreeDoc }, state); state.BreakIfExpected(); return(state.DumpOutput()); }
private void ProcessSqlNode(XmlElement contentElement, TSqlObfuscatingFormattingState state) { switch (contentElement.Name) { case SqlXmlConstants.ENAME_SQL_ROOT: case SqlXmlConstants.ENAME_SQL_STATEMENT: case SqlXmlConstants.ENAME_SQL_CLAUSE: case SqlXmlConstants.ENAME_SET_OPERATOR_CLAUSE: case SqlXmlConstants.ENAME_DDL_PROCEDURAL_BLOCK: case SqlXmlConstants.ENAME_DDL_OTHER_BLOCK: case SqlXmlConstants.ENAME_DDL_DECLARE_BLOCK: case SqlXmlConstants.ENAME_CURSOR_DECLARATION: case SqlXmlConstants.ENAME_BEGIN_TRANSACTION: case SqlXmlConstants.ENAME_SAVE_TRANSACTION: case SqlXmlConstants.ENAME_COMMIT_TRANSACTION: case SqlXmlConstants.ENAME_ROLLBACK_TRANSACTION: case SqlXmlConstants.ENAME_CONTAINER_OPEN: case SqlXmlConstants.ENAME_CONTAINER_CLOSE: case SqlXmlConstants.ENAME_WHILE_LOOP: case SqlXmlConstants.ENAME_IF_STATEMENT: case SqlXmlConstants.ENAME_SELECTIONTARGET: case SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT: case SqlXmlConstants.ENAME_CTE_WITH_CLAUSE: case SqlXmlConstants.ENAME_PERMISSIONS_BLOCK: case SqlXmlConstants.ENAME_PERMISSIONS_DETAIL: case SqlXmlConstants.ENAME_MERGE_CLAUSE: case SqlXmlConstants.ENAME_MERGE_TARGET: case SqlXmlConstants.ENAME_CASE_INPUT: case SqlXmlConstants.ENAME_BOOLEAN_EXPRESSION: case SqlXmlConstants.ENAME_BETWEEN_LOWERBOUND: case SqlXmlConstants.ENAME_BETWEEN_UPPERBOUND: case SqlXmlConstants.ENAME_CONTAINER_SINGLESTATEMENT: case SqlXmlConstants.ENAME_CONTAINER_MULTISTATEMENT: case SqlXmlConstants.ENAME_MERGE_ACTION: case SqlXmlConstants.ENAME_PERMISSIONS_TARGET: case SqlXmlConstants.ENAME_PERMISSIONS_RECIPIENT: case SqlXmlConstants.ENAME_DDL_WITH_CLAUSE: case SqlXmlConstants.ENAME_MERGE_CONDITION: case SqlXmlConstants.ENAME_MERGE_THEN: case SqlXmlConstants.ENAME_JOIN_ON_SECTION: case SqlXmlConstants.ENAME_CTE_ALIAS: case SqlXmlConstants.ENAME_ELSE_CLAUSE: case SqlXmlConstants.ENAME_DDL_AS_BLOCK: case SqlXmlConstants.ENAME_CURSOR_FOR_BLOCK: case SqlXmlConstants.ENAME_TRIGGER_CONDITION: case SqlXmlConstants.ENAME_CURSOR_FOR_OPTIONS: case SqlXmlConstants.ENAME_CTE_AS_BLOCK: case SqlXmlConstants.ENAME_DDL_RETURNS: case SqlXmlConstants.ENAME_MERGE_USING: case SqlXmlConstants.ENAME_MERGE_WHEN: case SqlXmlConstants.ENAME_BETWEEN_CONDITION: case SqlXmlConstants.ENAME_BEGIN_END_BLOCK: case SqlXmlConstants.ENAME_TRY_BLOCK: case SqlXmlConstants.ENAME_CATCH_BLOCK: case SqlXmlConstants.ENAME_CASE_STATEMENT: case SqlXmlConstants.ENAME_CASE_WHEN: case SqlXmlConstants.ENAME_CASE_THEN: case SqlXmlConstants.ENAME_CASE_ELSE: case SqlXmlConstants.ENAME_AND_OPERATOR: case SqlXmlConstants.ENAME_OR_OPERATOR: //these are all containers, and therefore have no impact on obfuscated output. ProcessSqlNodeList(contentElement.SelectNodes("*"), state); break; case SqlXmlConstants.ENAME_DDLDETAIL_PARENS: case SqlXmlConstants.ENAME_FUNCTION_PARENS: case SqlXmlConstants.ENAME_IN_PARENS: case SqlXmlConstants.ENAME_DDL_PARENS: case SqlXmlConstants.ENAME_EXPRESSION_PARENS: case SqlXmlConstants.ENAME_SELECTIONTARGET_PARENS: state.SpaceExpected = false; state.AddOutputContent("("); ProcessSqlNodeList(contentElement.SelectNodes("*"), state); state.SpaceExpected = false; state.SpaceExpectedForAnsiString = false; state.AddOutputContent(")"); break; case SqlXmlConstants.ENAME_WHITESPACE: //do nothing break; case SqlXmlConstants.ENAME_COMMENT_MULTILINE: if (PreserveComments) { state.SpaceExpected = false; state.AddOutputContent("/*" + contentElement.InnerText + "*/"); } break; case SqlXmlConstants.ENAME_COMMENT_SINGLELINE: if (PreserveComments) { state.SpaceExpected = false; state.AddOutputContent("--" + contentElement.InnerText.Replace("\r", "").Replace("\n", "")); state.BreakExpected = true; } break; case SqlXmlConstants.ENAME_COMMENT_SINGLELINE_CSTYLE: if (PreserveComments) { state.SpaceExpected = false; state.AddOutputContent("//" + contentElement.InnerText.Replace("\r", "").Replace("\n", "")); state.BreakExpected = true; } break; case SqlXmlConstants.ENAME_BATCH_SEPARATOR: //newline regardless of whether previous element recommended a break or not. state.BreakExpected = true; ProcessSqlNodeList(contentElement.SelectNodes("*"), state); state.BreakExpected = true; break; case SqlXmlConstants.ENAME_STRING: state.SpaceIfExpectedForAnsiString(); state.SpaceExpected = false; state.AddOutputContent("'" + contentElement.InnerText.Replace("'", "''") + "'"); state.SpaceExpectedForAnsiString = true; break; case SqlXmlConstants.ENAME_NSTRING: state.AddOutputContent("N'" + contentElement.InnerText.Replace("'", "''") + "'"); state.SpaceExpectedForAnsiString = true; break; case SqlXmlConstants.ENAME_BRACKET_QUOTED_NAME: state.SpaceExpected = false; state.AddOutputContent("[" + contentElement.InnerText.Replace("]", "]]") + "]"); break; case SqlXmlConstants.ENAME_QUOTED_STRING: state.SpaceExpected = false; state.AddOutputContent("\"" + contentElement.InnerText.Replace("\"", "\"\"") + "\""); break; case SqlXmlConstants.ENAME_COMMA: case SqlXmlConstants.ENAME_PERIOD: case SqlXmlConstants.ENAME_SEMICOLON: case SqlXmlConstants.ENAME_SCOPERESOLUTIONOPERATOR: case SqlXmlConstants.ENAME_ASTERISK: case SqlXmlConstants.ENAME_EQUALSSIGN: case SqlXmlConstants.ENAME_OTHEROPERATOR: state.SpaceExpected = false; state.AddOutputContent(contentElement.InnerText); break; case SqlXmlConstants.ENAME_COMPOUNDKEYWORD: state.AddOutputContent(FormatKeyword(contentElement.Attributes[SqlXmlConstants.ANAME_SIMPLETEXT].Value)); state.SpaceExpected = true; break; case SqlXmlConstants.ENAME_LABEL: state.AddOutputContent(contentElement.InnerText); state.BreakExpected = true; break; case SqlXmlConstants.ENAME_OTHERKEYWORD: case SqlXmlConstants.ENAME_ALPHAOPERATOR: case SqlXmlConstants.ENAME_DATATYPE_KEYWORD: case SqlXmlConstants.ENAME_PSEUDONAME: case SqlXmlConstants.ENAME_BINARY_VALUE: state.AddOutputContent(FormatKeyword(contentElement.InnerText)); state.SpaceExpected = true; break; case SqlXmlConstants.ENAME_NUMBER_VALUE: state.AddOutputContent(FormatKeyword(contentElement.InnerText)); if (!contentElement.InnerText.ToLowerInvariant().Contains("e")) { state.SpaceExpectedForE = true; if (contentElement.InnerText.Equals("0")) { state.SpaceExpectedForX = true; } } break; case SqlXmlConstants.ENAME_MONETARY_VALUE: if (!contentElement.InnerText.Substring(0, 1).Equals("$")) { state.SpaceExpected = false; } state.AddOutputContent(contentElement.InnerText); if (contentElement.InnerText.Length == 1) { state.SpaceExpectedForPlusMinus = true; } break; case SqlXmlConstants.ENAME_OTHERNODE: case SqlXmlConstants.ENAME_FUNCTION_KEYWORD: state.AddOutputContent(contentElement.InnerText); state.SpaceExpected = true; break; default: throw new Exception("Unrecognized element in SQL Xml!"); } }
private string FormatSQLNodes(XmlNodeList nodes, TSqlObfuscatingFormattingState state) { ProcessSqlNodeList(nodes, state); state.BreakIfExpected(); return(state.DumpOutput()); }
public string FormatSQLTree(XmlNode fragmentNode) { TSqlObfuscatingFormattingState state = new TSqlObfuscatingFormattingState(false, false); return(FormatSQLNodes(fragmentNode.SelectNodes("."), state)); }
private void ProcessSqlNodeList(XmlNodeList rootList, TSqlObfuscatingFormattingState state) { foreach (XmlElement contentElement in rootList) ProcessSqlNode(contentElement, state); }
private void ProcessSqlNode(XmlElement contentElement, TSqlObfuscatingFormattingState state) { switch (contentElement.Name) { case SqlXmlConstants.ENAME_SQL_ROOT: case SqlXmlConstants.ENAME_SQL_STATEMENT: case SqlXmlConstants.ENAME_SQL_CLAUSE: case SqlXmlConstants.ENAME_SET_OPERATOR_CLAUSE: case SqlXmlConstants.ENAME_DDL_PROCEDURAL_BLOCK: case SqlXmlConstants.ENAME_DDL_OTHER_BLOCK: case SqlXmlConstants.ENAME_CURSOR_DECLARATION: case SqlXmlConstants.ENAME_BEGIN_TRANSACTION: case SqlXmlConstants.ENAME_SAVE_TRANSACTION: case SqlXmlConstants.ENAME_COMMIT_TRANSACTION: case SqlXmlConstants.ENAME_ROLLBACK_TRANSACTION: case SqlXmlConstants.ENAME_CONTAINER_OPEN: case SqlXmlConstants.ENAME_CONTAINER_CLOSE: case SqlXmlConstants.ENAME_WHILE_LOOP: case SqlXmlConstants.ENAME_IF_STATEMENT: case SqlXmlConstants.ENAME_SELECTIONTARGET: case SqlXmlConstants.ENAME_CONTAINER_GENERALCONTENT: case SqlXmlConstants.ENAME_CTE_WITH_CLAUSE: case SqlXmlConstants.ENAME_PERMISSIONS_BLOCK: case SqlXmlConstants.ENAME_PERMISSIONS_DETAIL: case SqlXmlConstants.ENAME_MERGE_CLAUSE: case SqlXmlConstants.ENAME_MERGE_TARGET: case SqlXmlConstants.ENAME_CASE_INPUT: case SqlXmlConstants.ENAME_BOOLEAN_EXPRESSION: case SqlXmlConstants.ENAME_BETWEEN_LOWERBOUND: case SqlXmlConstants.ENAME_BETWEEN_UPPERBOUND: case SqlXmlConstants.ENAME_CONTAINER_SINGLESTATEMENT: case SqlXmlConstants.ENAME_CONTAINER_MULTISTATEMENT: case SqlXmlConstants.ENAME_MERGE_ACTION: case SqlXmlConstants.ENAME_PERMISSIONS_TARGET: case SqlXmlConstants.ENAME_PERMISSIONS_RECIPIENT: case SqlXmlConstants.ENAME_DDL_WITH_CLAUSE: case SqlXmlConstants.ENAME_MERGE_CONDITION: case SqlXmlConstants.ENAME_MERGE_THEN: case SqlXmlConstants.ENAME_JOIN_ON_SECTION: case SqlXmlConstants.ENAME_CTE_ALIAS: case SqlXmlConstants.ENAME_ELSE_CLAUSE: case SqlXmlConstants.ENAME_DDL_AS_BLOCK: case SqlXmlConstants.ENAME_CURSOR_FOR_BLOCK: case SqlXmlConstants.ENAME_TRIGGER_CONDITION: case SqlXmlConstants.ENAME_CURSOR_FOR_OPTIONS: case SqlXmlConstants.ENAME_CTE_AS_BLOCK: case SqlXmlConstants.ENAME_DDL_RETURNS: case SqlXmlConstants.ENAME_MERGE_USING: case SqlXmlConstants.ENAME_MERGE_WHEN: case SqlXmlConstants.ENAME_BETWEEN_CONDITION: case SqlXmlConstants.ENAME_BEGIN_END_BLOCK: case SqlXmlConstants.ENAME_TRY_BLOCK: case SqlXmlConstants.ENAME_CATCH_BLOCK: case SqlXmlConstants.ENAME_CASE_STATEMENT: case SqlXmlConstants.ENAME_CASE_WHEN: case SqlXmlConstants.ENAME_CASE_THEN: case SqlXmlConstants.ENAME_CASE_ELSE: case SqlXmlConstants.ENAME_AND_OPERATOR: case SqlXmlConstants.ENAME_OR_OPERATOR: //these are all containers, and therefore have no impact on obfuscated output. ProcessSqlNodeList(contentElement.SelectNodes("*"), state); break; case SqlXmlConstants.ENAME_DDLDETAIL_PARENS: case SqlXmlConstants.ENAME_FUNCTION_PARENS: case SqlXmlConstants.ENAME_DDL_PARENS: case SqlXmlConstants.ENAME_EXPRESSION_PARENS: case SqlXmlConstants.ENAME_SELECTIONTARGET_PARENS: state.SpaceExpected = false; state.AddOutputContent("("); ProcessSqlNodeList(contentElement.SelectNodes("*"), state); state.SpaceExpected = false; state.SpaceExpectedForAnsiString = false; state.AddOutputContent(")"); break; case SqlXmlConstants.ENAME_WHITESPACE: //do nothing break; case SqlXmlConstants.ENAME_COMMENT_MULTILINE: if (PreserveComments) { state.SpaceExpected = false; state.AddOutputContent("/*" + contentElement.InnerText + "*/"); } break; case SqlXmlConstants.ENAME_COMMENT_SINGLELINE: if (PreserveComments) { state.SpaceExpected = false; state.AddOutputContent("--" + contentElement.InnerText.Replace("\r", "").Replace("\n", "")); state.BreakExpected = true; } break; case SqlXmlConstants.ENAME_BATCH_SEPARATOR: //newline regardless of whether previous element recommended a break or not. state.BreakExpected = true; ProcessSqlNodeList(contentElement.SelectNodes("*"), state); state.BreakExpected = true; break; case SqlXmlConstants.ENAME_STRING: state.SpaceIfExpectedForAnsiString(); state.SpaceExpected = false; state.AddOutputContent("'" + contentElement.InnerText.Replace("'", "''") + "'"); state.SpaceExpectedForAnsiString = true; break; case SqlXmlConstants.ENAME_NSTRING: state.AddOutputContent("N'" + contentElement.InnerText.Replace("'", "''") + "'"); state.SpaceExpectedForAnsiString = true; break; case SqlXmlConstants.ENAME_BRACKET_QUOTED_NAME: state.SpaceExpected = false; state.AddOutputContent("[" + contentElement.InnerText.Replace("]", "]]") + "]"); break; case SqlXmlConstants.ENAME_QUOTED_STRING: state.SpaceExpected = false; state.AddOutputContent("\"" + contentElement.InnerText.Replace("\"", "\"\"") + "\""); break; case SqlXmlConstants.ENAME_COMMA: case SqlXmlConstants.ENAME_PERIOD: case SqlXmlConstants.ENAME_SEMICOLON: case SqlXmlConstants.ENAME_SCOPERESOLUTIONOPERATOR: case SqlXmlConstants.ENAME_ASTERISK: case SqlXmlConstants.ENAME_OTHEROPERATOR: state.SpaceExpected = false; state.AddOutputContent(contentElement.InnerText); break; case SqlXmlConstants.ENAME_COMPOUNDKEYWORD: state.AddOutputContent(FormatKeyword(contentElement.Attributes[SqlXmlConstants.ANAME_SIMPLETEXT].Value)); state.SpaceExpected = true; break; case SqlXmlConstants.ENAME_LABEL: state.AddOutputContent(contentElement.InnerText); state.BreakExpected = true; break; case SqlXmlConstants.ENAME_OTHERKEYWORD: case SqlXmlConstants.ENAME_ALPHAOPERATOR: case SqlXmlConstants.ENAME_DATATYPE_KEYWORD: case SqlXmlConstants.ENAME_PSEUDONAME: case SqlXmlConstants.ENAME_BINARY_VALUE: state.AddOutputContent(FormatKeyword(contentElement.InnerText)); state.SpaceExpected = true; break; case SqlXmlConstants.ENAME_NUMBER_VALUE: state.AddOutputContent(FormatKeyword(contentElement.InnerText)); if (!contentElement.InnerText.ToLowerInvariant().Contains("e")) { state.SpaceExpectedForE = true; if (contentElement.InnerText.Equals("0")) state.SpaceExpectedForX = true; } break; case SqlXmlConstants.ENAME_MONETARY_VALUE: if (!contentElement.InnerText.Substring(0, 1).Equals("$")) state.SpaceExpected = false; state.AddOutputContent(contentElement.InnerText); if (contentElement.InnerText.Length == 1) state.SpaceExpectedForPlusMinus = true; break; case SqlXmlConstants.ENAME_OTHERNODE: case SqlXmlConstants.ENAME_FUNCTION_KEYWORD: state.AddOutputContent(contentElement.InnerText); state.SpaceExpected = true; break; default: throw new Exception("Unrecognized element in SQL Xml!"); } }
private string FormatSQLNodes(XmlNodeList nodes, TSqlObfuscatingFormattingState state) { ProcessSqlNodeList(nodes, state); state.BreakIfExpected(); return state.DumpOutput(); }
public string FormatSQLTree(XmlNode fragmentNode) { TSqlObfuscatingFormattingState state = new TSqlObfuscatingFormattingState(false, false); return FormatSQLNodes(fragmentNode.SelectNodes("."), state); }