private void CreateView(ICommands cmd, IAParser parser, IATranslator translator, IViewDefinition view) { ASTNodeList aNodes = null; StringBuilder createViewStmt = new StringBuilder("create view "); createViewStmt.Append(view.ViewName); if (view.DbType == DbTypeName.Any || parser.ExpandEmptyStrings) { aNodes = parser.CreateNodeList(view.SelectStatement); } if (view.DbType == DbTypeName.Any) { if (!ColumnListContainStar(aNodes)) { createViewStmt.Append(CreateColumnList(aNodes)); } aNodes = translator.Translate(aNodes); } createViewStmt.Append(" as "); if (aNodes != null) { createViewStmt.Append(aNodes); } else { createViewStmt.Append(view.SelectStatement); } cmd.ExecuteNonQuery(createViewStmt.ToString()); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { Translator = translator; NodeFactory = nodeFactory; AddFunction(newNodes, "to_number", CreateFunctionParameterNodeWithSubNodes(subNodes[1])); }
private string CreateColumnList(ASTNodeList aNodes) { StringBuilder columnList = new StringBuilder(); columnList.Append(" ("); int nodeCounter = 0; IASTNode currentNode = null; while (nodeCounter < aNodes.Count) { var previousNode = currentNode; currentNode = aNodes[nodeCounter++]; if (currentNode.Text[0] == ',' || currentNode.TextEqualTo("from")) { columnList.Append(previousNode.Text.Trim('"', '[', ']')); if (currentNode.TextEqualTo("from")) { break; } columnList.Append(", "); } } columnList.Append(")"); return(columnList.ToString()); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // TO_CHAR(123) => CONVERT(nvarchar, 123) Translator = translator; NodeFactory = nodeFactory; AddFunction(newNodes, "convert", CreateFunctionParameterNode("nvarchar"), CreateFunctionParameterNodeWithSubNodes(subNodes[1])); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // TO_int('123') => CONVERT(int, '123') Translator = translator; NodeFactory = nodeFactory; AddFunction(newNodes, "convert", CreateFunctionParameterNode("int"), CreateFunctionParameterNodeWithSubNodes(subNodes[1])); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // TO_COUNTER('9') => convert(bigint, '0') ) Translator = translator; NodeFactory = nodeFactory; AddFunction(newNodes, "convert", CreateFunctionParameterNode("bigint"), CreateFunctionParameterNodeWithSubNodes(subNodes[1])); }
private void WrapParameterInParentheses(ASTNodeList newNodes, IASTNode parameter) { IASTNode newNode = NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false); Translator.TranslateSubNodes(newNode.SubNodes, parameter); newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord)); newNodes.Add(newNode); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // GUID2STR(guid_col) => lower(guid_col) Translator = translator; NodeFactory = nodeFactory; AddFunction(newNodes, "lower", CreateFunctionParameterNodeWithSubNodes(subNodes[1])); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // MOD(3, 5) => (3) % (5) Translator = translator; NodeFactory = nodeFactory; WrapParameterInParentheses(newNodes, subNodes[1]); newNodes.Add(nodeFactory.CreateNode("%")); WrapParameterInParentheses(newNodes, subNodes[3]); }
private void TestDoFunctions(string input, string expected) { IASTNodeFactory nodeFactory = new ASTNodeFactory(); IAParser parser = AParserFactory.CreateInstance(nodeFactory); ASTNodeList aNodes = parser.CreateNodeList(input); IATranslator translator = ATranslatorFactory.CreateInstance(DbTypeName.SqlServer, nodeFactory); ASTNodeList msNodes = translator.Translate(aNodes); string result = msNodes.ToString(); result.Should().BeEquivalentTo(expected); }
public ASTNodeList ParseExpression(ATokens tokens) { ASTNodeList nodes = new ASTNodeList(); while (tokens.CurrentToken != null) { IASTNode node = NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace); node.Parse(NodeFactory, this, tokens); nodes.Add(node); } return(nodes); }
private bool ColumnListContainStar(ASTNodeList aNodes) { for (int i = 0; i < aNodes.Count && !aNodes[i].TextEqualTo("from"); i++) { if (aNodes[i].Text.Contains('*')) { return(true); } } return(false); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { IASTNode newNode = nodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false); newNode.SubNodes.Add(nodeFactory.CreateFunctionParameterNode()); newNode.SubNodes.Add(nodeFactory.CreateNode("+")); newNode.SubNodes.Add(nodeFactory.CreateFunctionParameterNode()); newNode.SubNodes.Add(nodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord)); newNodes.Add(newNode); translator.TranslateSubNodes(newNode.SubNodes[0].SubNodes, subNodes[1]); translator.TranslateSubNodes(newNode.SubNodes[2].SubNodes, subNodes[3]); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // MOD(3, 5) translated to: mod(floor(3), floor(5)) Translator = translator; NodeFactory = nodeFactory; IASTNode newParam1 = NodeFactory.CreateFunctionParameterNode(); AddFunction(newParam1.SubNodes, "floor", CreateFunctionParameterNodeWithSubNodes(subNodes[1])); IASTNode newParam2 = NodeFactory.CreateFunctionParameterNode(); AddFunction(newParam2.SubNodes, "floor", CreateFunctionParameterNodeWithSubNodes(subNodes[3])); AddFunction(newNodes, "mod", newParam1, newParam2); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { // TO_FLOAT('123') => convert(dec(28,8) , '123') Translator = translator; NodeFactory = nodeFactory; IASTNode newNode = NodeFactory.CreateNode("convert", false); newNode.SubNodes.Add(NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false)); newNode.SubNodes.Add(NodeFactory.CreateFunctionParameterNode()); newNode.SubNodes.Add(NodeFactory.CreateNode(ASTCommaNode.KeyWord)); newNode.SubNodes.Add(CreateFunctionParameterNodeWithSubNodes(subNodes[1])); newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord)); AddFunction(newNode.SubNodes[1].SubNodes, "dec", CreateFunctionParameterNode("28"), CreateFunctionParameterNode("8")); newNodes.Add(newNode); }
public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory) { newNodes.Add(nodeFactory.CreateNode("sysdate")); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ASTNodeList obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }