public override void preVisit(TFunctionCall node)
 {
     if (node.FunctionName != null)
     {
         TObjectName       procedureName     = node.FunctionName;
         ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureName);
         setProcedureDlinage(procedureMetaData, procedureName);
     }
 }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
 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);
                     }
                 }
             }
         }
     }
 }
示例#5
0
        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));
        }
示例#6
0
        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());
 }