public override void preVisit(TFunctionCall node) { if (node.FunctionName != null) { TObjectName procedureName = node.FunctionName; ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureName); setProcedureDlinage(procedureMetaData, procedureName); } }
public void testTreat() { TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle); sqlparser.sqltext = "SELECT name, TREAT(VALUE(p) AS employee_t).salary salary \n" + " FROM persons p;"; Assert.IsTrue(sqlparser.parse() == 0); TSelectSqlStatement select = (TSelectSqlStatement)sqlparser.sqlstatements.get(0); TResultColumn column = select.ResultColumnList.getResultColumn(1); TExpression expr = column.Expr; TFunctionCall f = expr.FunctionCall; Assert.IsTrue(expr.ExpressionType == EExpressionType.object_access_t); }
public void testExtractXML() { TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle); sqlparser.sqltext = "SELECT warehouse_name,\n" + " EXTRACT(warehouse_spec, '/Warehouse/Docks')\n" + " \"Number of Docks\"\n" + " FROM warehouses\n" + " WHERE warehouse_name = 'San Francisco';"; Assert.IsTrue(sqlparser.parse() == 0); TSelectSqlStatement select = (TSelectSqlStatement)sqlparser.sqlstatements.get(0); TResultColumn column = select.ResultColumnList.getResultColumn(1); TExpression expr = column.Expr; TFunctionCall f = expr.FunctionCall; Assert.IsTrue(f.FunctionType == EFunctionType.extractxml_t); Assert.IsTrue(f.XMLType_Instance.ToString().Equals("warehouse_spec", StringComparison.CurrentCultureIgnoreCase)); Assert.IsTrue(f.XPath_String.ToString().Equals("'/Warehouse/Docks'", StringComparison.CurrentCultureIgnoreCase)); }
public virtual void checkFunctionCall(TFunctionCall func) { if (func.Args != null) { for (int k = 0; k < func.Args.size(); k++) { TExpression expr = func.Args.getExpression(k); if (expr.SubQuery != null) { expr.SubQuery.String = removevars.remove(expr.SubQuery); } } } if (func.AnalyticFunction != null) { TExpressionList list = func.AnalyticFunction.PartitionBy_ExprList; if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { TExpression expr = list.getExpression(i); if (expr.SubQuery != null) { expr.SubQuery.String = removevars.remove(expr.SubQuery); } } } if (func.AnalyticFunction.OrderBy != null) { TOrderByItemList orderByItemList = func.AnalyticFunction.OrderBy.Items; if (orderByItemList != null && orderByItemList.size() > 0) { for (int i = 0; i < orderByItemList.size(); i++) { TExpression sortKey = orderByItemList.getOrderByItem(i).SortKey; if (sortKey.SubQuery != null) { sortKey.SubQuery.String = removevars.remove(sortKey.SubQuery); } } } } } }
public void testXmlAgg() { TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle); sqlparser.sqltext = "SELECT\n" + " O.OBJECT_ID,\n" + " '|' || RTRIM (XMLAGG (XMLELEMENT (K, O.KEY_1 || '|')).EXTRACT ('//text()'),\n" + "'|') || '|' AS TEXT_KEY\n" + "FROM DAG_OBJECT_FACT O"; Assert.IsTrue(sqlparser.parse() == 0); TResultColumn rc = ((TSelectSqlStatement)sqlparser.sqlstatements.get(0)).ResultColumnList.getResultColumn(1); TExpression expression = rc.Expr.LeftOperand.RightOperand; TFunctionCall functionCall = expression.FunctionCall; TExpression xmlaggExpr = functionCall.Args.getExpression(0); Assert.IsTrue(xmlaggExpr.ExpressionType == EExpressionType.object_access_t); TObjectAccess objectAccess = xmlaggExpr.ObjectAccess; TFunctionCall xmlelement = objectAccess.ObjectExpr.FunctionCall.Args.getExpression(0).FunctionCall; //Assert.IsTrue(xmlelement.getArgs().size() == 1); Assert.IsTrue(xmlelement.XMLElementNameExpr.ToString().Equals("K", StringComparison.CurrentCultureIgnoreCase)); TResultColumn resultColumn = xmlelement.XMLElementValueExprList.getResultColumn(0); TExpression expression1 = resultColumn.Expr; Assert.IsTrue(expression1.ToString().Equals("O.KEY_1 || '|'", StringComparison.CurrentCultureIgnoreCase)); }
public virtual bool exprVisit(TParseTreeNode pnode, bool pIsLeafNode) { TExpression expression = (TExpression)pnode; if (expression.ExpressionType == EExpressionType.parenthesis_t) { expression = expression.LeftOperand; } if (is_compare_condition(expression.ExpressionType)) { TExpression leftExpr = (TExpression)expression.LeftOperand; TExpression rightExpr = (TExpression)expression.RightOperand; TExpression[] leftExprs = new TExpression[] { leftExpr }; TExpression[] rightExprs = new TExpression[] { rightExpr }; if (leftExpr != null && !checkCondition(leftExprs)) { removeExpression(expression); } expression.LeftOperand = leftExprs[0]; if (rightExpr != null && !checkCondition(rightExprs)) { removeExpression(expression); } expression.RightOperand = rightExprs[0]; if ((expression.LeftOperand != null && string.ReferenceEquals(toExprString(expression.LeftOperand.ToScript()), null)) || (expression.RightOperand != null && string.ReferenceEquals(toExprString(expression.RightOperand.ToScript()), null))) { removeExpression(expression); } } if (expression.ExpressionType == EExpressionType.between_t) { TExpression[] exprs = new TExpression[] { expression }; if (!checkCondition(exprs)) { removeExpression(expression); } if (expression.OperatorToken != null && string.ReferenceEquals(toExprString(expression.OperatorToken.ToString()), null)) { removeExpression(expression); } } if (expression.ExpressionType == EExpressionType.pattern_matching_t) { TExpression[] exprs = new TExpression[] { expression }; if (!checkCondition(exprs)) { removeExpression(expression); } if (expression.OperatorToken != null && string.ReferenceEquals(toExprString(expression.OperatorToken.ToString()), null)) { removeExpression(expression); } } if (expression.ExpressionType == EExpressionType.in_t) { TExpression left = expression.LeftOperand; TExpression[] leftExprs = new TExpression[] { left }; if (!checkCondition(leftExprs)) { removeExpression(expression); return(true); } expression.LeftOperand = leftExprs[0]; TExpression right = expression.RightOperand; TExpression[] rightExprs = new TExpression[] { right }; if (right.SubQuery != null) { right.SubQuery.String = removevars.remove(right.SubQuery); } else if (!checkCondition(rightExprs)) { removeExpression(expression); } expression.RightOperand = rightExprs[0]; if (expression.OperatorToken != null && string.ReferenceEquals(toExprString(expression.OperatorToken.ToString()), null)) { removeExpression(expression); } } if (expression.FunctionCall != null) { TFunctionCall func = (TFunctionCall)expression.FunctionCall; checkFunctionCall(func); } if (expression.SubQuery is TCustomSqlStatement) { expression.SubQuery.String = removevars.remove(expression.SubQuery); } if (expression.CaseExpression != null) { TCaseExpression expr = expression.CaseExpression; TExpression conditionExpr = expr.Input_expr; if (conditionExpr != null) { if (conditionExpr.SubQuery != null) { conditionExpr.SubQuery.String = removevars.remove(conditionExpr.SubQuery); } } TExpression defaultExpr = expr.Else_expr; if (defaultExpr != null) { if (defaultExpr.SubQuery != null) { defaultExpr.SubQuery.String = removevars.remove(defaultExpr.SubQuery); } } TStatementList defaultStatList = expr.Else_statement_list; if (defaultStatList != null && defaultStatList.size() > 0) { for (int i = 0; i < defaultStatList.size(); i++) { TCustomSqlStatement stmt = defaultStatList.get(i); stmt.String = removevars.remove(stmt); } } TWhenClauseItemList list = expr.WhenClauseItemList; if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { TWhenClauseItem item = list.getWhenClauseItem(i); if (item.Comparison_expr != null) { if (item.Comparison_expr.SubQuery != null) { item.Comparison_expr.SubQuery.String = removevars.remove(item.Comparison_expr.SubQuery); } } if (item.Return_expr != null) { if (item.Return_expr.SubQuery != null) { item.Return_expr.SubQuery.String = removevars.remove(item.Return_expr.SubQuery); } } TStatementList statList = expr.Else_statement_list; if (statList != null && statList.size() > 0) { for (int j = 0; j < statList.size(); j++) { TCustomSqlStatement stmt = statList.get(j); stmt.String = removevars.remove(statList.get(j)); } } } } if (expression.OperatorToken != null && string.ReferenceEquals(toExprString(expression.OperatorToken.ToString()), null)) { removeExpression(expression); } } if (expression.LeftOperand == null) { TExpression[] exprs = new TExpression[] { expression }; if (!checkCondition(exprs)) { removeExpression(expression); } } return(true); }
public override void preVisit(TFunctionCall node) { Console.WriteLine("--> function: " + node.FunctionName.ToString()); }