Ejemplo n.º 1
0
        public ResultSet(TParseTreeNode gspObject)
        {
            if (gspObject == null)
            {
                throw new System.ArgumentException("ResultSet arguments can't be null.");
            }

            id = ++Table.TABLE_ID;

            this.gspObject = gspObject;

            TSourceToken startToken = gspObject.startToken;
            TSourceToken endToken   = gspObject.endToken;

            if (startToken != null)
            {
                this.startPosition = new Tuple <long, long>(startToken.lineNo, startToken.columnNo);
            }
            else
            {
                Console.Error.WriteLine();
                Console.Error.WriteLine("Can't get start token, the start token is null");
            }
            if (endToken != null)
            {
                this.endPosition = new Tuple <long, long>(endToken.lineNo, endToken.columnNo + endToken.astext.Length);
            }
            else
            {
                Console.Error.WriteLine();
                Console.Error.WriteLine("Can't get end token, the end token is null");
            }
        }
 public virtual bool exprVisit(TParseTreeNode pNode, bool isLeafNode)
 {
     if (!isLeafNode)
     {
         // We return the value or appended value after recursion of the where clause of this statement/nested query
         // columnTableStmt.ExpressionStatement = pNode.String;
         Console.WriteLine(pNode.String);
     }
     return(true);
 }
        public virtual bool exprVisit(TParseTreeNode pNode, bool isLeafNode)
        {
            string sign = "";

            if (isLeafNode)
            {
                sign = "*";
            }
            Console.WriteLine(sign + pNode.GetType().ToString() + " " + pNode.ToString());
            return(true);
        }
Ejemplo n.º 4
0
 public virtual bool exprVisit(TParseTreeNode pNode, bool isLeafNode)
 {
     if (pNode.startToken == column.startToken && pNode.endToken == column.endToken)
     {
         if (pNode is TExpression)
         {
             ((TExpression)pNode).remove();
         }
     }
     return(true);
 }
Ejemplo n.º 5
0
 public virtual bool exprVisit(TParseTreeNode pNode, bool isLeafNode)
 {
     if (pNode is TExpression)
     {
         TExpression expr = (TExpression)pNode;
         if ((Regex.Match(expr.ToString(), "'\\s*'").Success || Regex.Match(expr.ToString(), "\"\\s*\"").Success) && (expr.ParentExpr != null && isLogicExpression(expr.ParentExpr)))
         {
             piggybacked = true;
         }
     }
     return(true);
 }
Ejemplo n.º 6
0
        public virtual bool exprVisit(TParseTreeNode pNode, bool isLeafNode)
        {
            TExpression expr = (TExpression)pNode;

            switch ((expr.ExpressionType))
            {
            case EExpressionType.simple_object_name_t:
                TObjectName obj = expr.ObjectOperand;
                if (obj.ObjectType != TObjectName.ttobjNotAObject)
                {
                    Console.WriteLine(getColumnWithBaseTable(obj));
                }
                break;

            case EExpressionType.function_t:
                functionCallVisitor fcv = new functionCallVisitor(statement);
                expr.FunctionCall.accept(fcv);
                break;
            }
            return(true);
        }
Ejemplo n.º 7
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);
        }
Ejemplo n.º 8
0
 private void checkFunction(spInfo spInfo, TSourceTokenList tokenList)
 {
     for (int i = 0; i < tokenList.size(); i++)
     {
         TSourceToken token = tokenList.get(i);
         if (token.DbObjType == EDbObjectType.function)
         {
             List <TParseTreeNode> list = token.nodesStartFromThisToken;
             for (int j = 0; j < list.Count; j++)
             {
                 TParseTreeNode node = (TParseTreeNode)list[j];
                 if (node is TFunctionCall)
                 {
                     builtInFunctionInfo function = new builtInFunctionInfo();
                     function.function = token.astext;
                     function.lineNo   = token.lineNo;
                     function.columnNo = token.columnNo;
                     TCustomSqlStatement stmt = token.stmt;
                     if (stmt == null)
                     {
                         bool flag = false;
                         for (int k = token.posinlist - 1; k >= 0; k--)
                         {
                             TSourceToken before = node.Gsqlparser.sourcetokenlist.get(k);
                             if (token.nodesStartFromThisToken != null)
                             {
                                 for (int z = 0; z < before.nodesStartFromThisToken.Count; z++)
                                 {
                                     if (before.nodesStartFromThisToken[z] is TCustomSqlStatement)
                                     {
                                         TCustomSqlStatement tempStmt = (TCustomSqlStatement)before.nodesStartFromThisToken[z];
                                         if (tempStmt.startToken.posinlist <= token.posinlist && tempStmt.endToken.posinlist >= token.posinlist)
                                         {
                                             stmt = tempStmt;
                                             flag = true;
                                             break;
                                         }
                                     }
                                 }
                             }
                             if (flag)
                             {
                                 break;
                             }
                         }
                     }
                     if (stmt is TInsertSqlStatement)
                     {
                         function.stmtType = usageType.Insert;
                     }
                     else if (stmt is TSelectSqlStatement)
                     {
                         function.stmtType = usageType.Read;
                     }
                     else if (stmt is TUpdateSqlStatement)
                     {
                         function.stmtType = usageType.Update;
                     }
                     else if (stmt is TDeleteSqlStatement)
                     {
                         function.stmtType = usageType.Delete;
                     }
                     else if (stmt is TMssqlDropTable)
                     {
                         function.stmtType = usageType.Drop;
                     }
                     else if (stmt is TDropTableSqlStatement)
                     {
                         function.stmtType = usageType.Drop;
                     }
                     else if (stmt is TMssqlExecute)
                     {
                         function.stmtType = usageType.Exec;
                     }
                     else if (stmt is TMssqlCreateProcedure)
                     {
                         function.stmtType = usageType.Create;
                     }
                     spInfo.functions.Add(function);
                 }
             }
         }
     }
 }