Example #1
0
 private void parseSubQueryColumnDefinition(TCreateTableSqlStatement createTable, TSelectSqlStatement stmt, TableMetaData tableMetaData, ColumnImpactModel columnImpactModel)
 {
     if (stmt.SetOperatorType != ESetOperatorType.none)
     {
         parseSubQueryColumnDefinition(createTable, stmt.LeftStmt, tableMetaData, columnImpactModel);
         parseSubQueryColumnDefinition(createTable, stmt.RightStmt, tableMetaData, columnImpactModel);
     }
     else
     {
         int      columnCount = stmt.ResultColumnList.size();
         string[] aliasNames  = new string[columnCount];
         if (createTable.ColumnList != null && createTable.ColumnList.size() > 0)
         {
             columnCount = createTable.ColumnList.size();
             aliasNames  = new string[columnCount];
             TColumnDefinitionList items = createTable.ColumnList;
             for (int i = 0; i < items.size(); i++)
             {
                 aliasNames[i] = items.getColumn(i).ToString();
             }
         }
         for (int i = 0; i < columnCount; i++)
         {
             TResultColumn resultColumn = stmt.ResultColumnList.getResultColumn(i);
             parseColumnDefinition(resultColumn, tableMetaData, columnImpactModel, aliasNames[i]);
         }
     }
 }
Example #2
0
 private void parseSubQueryColumnDefinition(TCreateViewSqlStatement createView, TSelectSqlStatement stmt, TableMetaData viewMetaData, ColumnImpactModel columnImpactModel)
 {
     if (stmt.SetOperatorType != ESetOperatorType.none)
     {
         parseSubQueryColumnDefinition(createView, stmt.LeftStmt, viewMetaData, columnImpactModel);
         parseSubQueryColumnDefinition(createView, stmt.RightStmt, viewMetaData, columnImpactModel);
     }
     else
     {
         int      columnCount = stmt.ResultColumnList.size();
         string[] aliasNames  = new string[columnCount];
         if (createView.ViewAliasClause != null)
         {
             columnCount = createView.ViewAliasClause.ViewAliasItemList.size();
             aliasNames  = new string[columnCount];
             TViewAliasItemList items = createView.ViewAliasClause.ViewAliasItemList;
             for (int i = 0; i < items.size(); i++)
             {
                 if (items.getViewAliasItem(i).Alias != null)
                 {
                     aliasNames[i] = items.getViewAliasItem(i).Alias.ToString();
                 }
             }
         }
         for (int i = 0; i < columnCount; i++)
         {
             TResultColumn resultColumn = stmt.ResultColumnList.getResultColumn(i);
             parseColumnDefinition(resultColumn, viewMetaData, columnImpactModel, aliasNames[i]);
         }
     }
 }
Example #3
0
        public virtual void testAddResultColumnInSelectList()
        {
            parser.sqltext = "SELECT A as A_Alias, B AS B_Alias FROM TABLE_X";
            Assert.IsTrue(parser.parse() == 0);
            TSelectSqlStatement select  = (TSelectSqlStatement)parser.sqlstatements.get(0);
            TResultColumnList   columns = select.ResultColumnList;

            TResultColumn resultColumn = new TResultColumn();

            resultColumn.Expr = parser.parseExpression("d");
            columns.addResultColumn(resultColumn);
            TAliasClause aliasClause = new TAliasClause();

            aliasClause.AliasName    = parser.parseObjectName("d_alias");
            aliasClause.HasAs        = true;
            resultColumn.AliasClause = aliasClause;

            //  System.out.println(scriptGenerator.generateScript(select, true));
            Assert.IsTrue(testScriptGenerator.verifyScript(EDbVendor.dbvoracle
                                                           , select.ToScript()
                                                           , "SELECT a AS a_alias,\n" +
                                                           "       b AS b_alias,\n" +
                                                           "       d AS d_alias\n" +
                                                           "FROM   table_x"
                                                           ));
        }
Example #4
0
        public virtual void testModifySelectList()
        {
            parser.sqltext = "select t1.f1, t2.f2 as f2 from table1 t1 left join table2 t2 on t1.f1 = t2.f2 ";
            Assert.IsTrue(parser.parse() == 0);
            TSelectSqlStatement select = (TSelectSqlStatement)parser.sqlstatements.get(0);

            select.ResultColumnList.removeElementAt(1);
            select.ResultColumnList.removeElementAt(0);

            TResultColumn resultColumn1 = new TResultColumn();

            resultColumn1.Expr = parser.parseExpression("t1.f3");
            TAliasClause aliasClause1 = new TAliasClause();

            aliasClause1.AliasName    = parser.parseObjectName("f1");
            aliasClause1.HasAs        = true;
            resultColumn1.AliasClause = aliasClause1;
            select.ResultColumnList.addResultColumn(resultColumn1);

            TResultColumn resultColumn2 = new TResultColumn();

            resultColumn2.Expr = parser.parseExpression("t2.f3");
            select.ResultColumnList.addResultColumn(resultColumn2);
            // System.out.println(scriptGenerator.generateScript(select,true));

            Assert.IsTrue(testScriptGenerator.verifyScript(EDbVendor.dbvoracle
                                                           , select.ToScript()
                                                           , "SELECT t1.f3 AS f1,\n" +
                                                           "       t2.f3\n" +
                                                           "FROM   table1 t1\n" +
                                                           "       LEFT JOIN table2 t2\n" +
                                                           "       ON t1.f1 = t2.f2"
                                                           ));
        }
Example #5
0
        private void parseInsertColumnDefinition(TResultColumn resultColumn, TableMetaData viewMetaData, ColumnImpactModel columnImpactModel, string aliasName)
        {
            ColumnMetaData columnMetaData = new ColumnMetaData();

            columnMetaData.Table = viewMetaData;

            if (!string.ReferenceEquals(aliasName, null))
            {
                columnMetaData.DisplayName = aliasName;
                columnMetaData.Name        = aliasName;
            }

            if (tableColumns[viewMetaData] == null)
            {
                return;
            }

            int index = tableColumns[viewMetaData].IndexOf(columnMetaData);

            if (index != -1)
            {
                columnMetaData = tableColumns[viewMetaData][index];
            }
            else
            {
                tableColumns[viewMetaData].Add(columnMetaData);
            }

            ColumnMetaData[] referColumns = getRefTableColumns(resultColumn, columnImpactModel);
            for (int i = 0; i < referColumns.Length; i++)
            {
                columnMetaData.addReferColumn(referColumns[i]);
            }
        }
        private void removeObjectFromResultColumn(TCustomSqlStatement stmt, TObjectName column)
        {
            if (stmt.ResultColumnList != null)
            {
                for (int i = 0; i < stmt.ResultColumnList.Count; i++)
                {
                    TResultColumn resultSetColumn = stmt.ResultColumnList.getResultColumn(i);
                    TExpression   expression      = resultSetColumn.Expr;
                    switch (expression.ExpressionType)
                    {
                    case EExpressionType.simple_object_name_t:
                        if (column.startToken == expression.startToken && column.endToken == expression.endToken)
                        {
                            stmt.ResultColumnList.removeResultColumn(i);
                            return;
                        }
                        break;
                    }
                }
            }

            if (stmt is TInsertSqlStatement)
            {
                TInsertSqlStatement insert = (TInsertSqlStatement)stmt;
                if (insert.ColumnList == null)
                {
                    return;
                }
                for (int i = 0; i < insert.ColumnList.Count; i++)
                {
                    TObjectName insertColumn = insert.ColumnList.getObjectName(i);

                    if (column.startToken == insertColumn.startToken && column.endToken == insertColumn.endToken)
                    {
                        if (insert.Values != null)
                        {
                            for (int j = 0; j < insert.Values.Count; j++)
                            {
                                TMultiTarget target = insert.Values[j];
                                if (target.ColumnList != null && target.ColumnList.Count == insert.ColumnList.Count)
                                {
                                    target.ColumnList.removeResultColumn(i);
                                }
                            }
                        }

                        insert.ColumnList.removeObjectName(i);
                        return;
                    }
                }
            }
        }
Example #7
0
        internal static void printColumns(TResultColumn cl, TCustomSqlStatement sqlStatement)
        {
            if (cl.AliasClause != null)
            {
                Console.WriteLine("\nResult column:" + cl.AliasClause.ToString());
            }
            else
            {
                Console.WriteLine("\nResult column:" + cl.Expr.ToString());
            }

            (new columnInClause()).printColumns(cl.Expr, sqlStatement);
        }
Example #8
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);
        }
Example #9
0
        public virtual void testModifyAlias()
        {
            TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvmssql);

            sqlparser.sqltext = @"Select X as [Y]";

            sqlparser.parse();
            TSelectSqlStatement select       = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
            TResultColumn       resultColumn = select.ResultColumnList.getResultColumn(0);
            TAliasClause        aliasClause  = resultColumn.AliasClause;

            aliasClause.AliasName = parser.parseObjectName("\"Y\"");

            //Console.WriteLine(sqlparser.sqlstatements.get(0).ToScript());
        }
Example #10
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));
        }
Example #11
0
 private static void AnalyzeUpdateStmt(TUpdateSqlStatement stmt)
 {
     Console.WriteLine(string.Format("Table name: {0}", stmt.TargetTable.ToString()));
     Console.WriteLine("set clause:");
     for (int i = 0; i < stmt.ResultColumnList.Count; i++)
     {
         TResultColumn resultColumn = stmt.ResultColumnList.getResultColumn(i);
         TExpression   expression   = resultColumn.Expr;
         Console.WriteLine(string.Format("\tColumn: {0}\tvalue: {1}", expression.LeftOperand.ToString(), expression.RightOperand.ToString()));
     }
     if (stmt.WhereClause != null)
     {
         Console.WriteLine("Where clause: {0}", stmt.WhereClause.Condition.ToString());
     }
 }
Example #12
0
        private void parseSubQueryColumnDefinition(TInsertSqlStatement insert, TSelectSqlStatement stmt, TableMetaData tableMetaData, ColumnImpactModel columnImpactModel)
        {
            if (stmt.SetOperatorType != ESetOperatorType.none)
            {
                parseSubQueryColumnDefinition(insert, stmt.LeftStmt, tableMetaData, columnImpactModel);
                parseSubQueryColumnDefinition(insert, stmt.RightStmt, tableMetaData, columnImpactModel);
            }
            else
            {
                if (insert.ColumnList != null)
                {
                    TObjectNameList items       = insert.ColumnList;
                    int             columnCount = items.size();
                    string[]        aliasNames  = new string[columnCount];

                    for (int i = 0; i < items.size(); i++)
                    {
                        aliasNames[i] = items.getObjectName(i).ToString();
                    }

                    for (int i = 0; i < columnCount; i++)
                    {
                        TResultColumn resultColumn = null;
                        if (i < stmt.ResultColumnList.size())
                        {
                            resultColumn = stmt.ResultColumnList.getResultColumn(i);
                        }
                        else
                        {
                            resultColumn = stmt.ResultColumnList.getResultColumn(stmt.ResultColumnList.size() - 1);
                        }
                        parseInsertColumnDefinition(resultColumn, tableMetaData, columnImpactModel, aliasNames[i]);
                    }
                }
                else if (insert.SubQuery != null && insert.SubQuery.ResultColumnList != null)
                {
                    int      columnCount = insert.SubQuery.ResultColumnList.size();
                    String[] aliasNames  = new String[columnCount];
                    for (int i = 0; i < columnCount; i++)
                    {
                        TResultColumn resultColumn = insert.SubQuery.ResultColumnList.getResultColumn(i);
                        parseColumnDefinition(resultColumn, tableMetaData, columnImpactModel, aliasNames[i]);
                    }
                }
            }
        }
Example #13
0
 private void removeObjectFromSetClause(TCustomSqlStatement stmt, TObjectName column)
 {
     if (stmt is TUpdateSqlStatement)
     {
         TUpdateSqlStatement update = (TUpdateSqlStatement)stmt;
         if (update.ResultColumnList != null)
         {
             for (int i = 0; i < update.ResultColumnList.Count; i++)
             {
                 TResultColumn resultcolumn = update.ResultColumnList.getResultColumn(i);
                 if (resultcolumn.startToken.posinlist <= column.startToken.posinlist && resultcolumn.endToken.posinlist >= column.endToken.posinlist)
                 {
                     update.ResultColumnList.removeResultColumn(i);
                     break;
                 }
             }
         }
     }
 }
Example #14
0
        public virtual void testRemoveResultColumnInSelectList()
        {
            parser.sqltext = "SELECT A as A_Alias, B AS B_Alias FROM TABLE_X";
            Assert.IsTrue(parser.parse() == 0);
            TSelectSqlStatement select  = (TSelectSqlStatement)parser.sqlstatements.get(0);
            TResultColumnList   columns = select.ResultColumnList;

            columns.removeElementAt(1);
            TResultColumn resultColumn = new TResultColumn();

            resultColumn.Expr = parser.parseExpression("x");
            columns.addResultColumn(resultColumn);
            // System.out.println(scriptGenerator.generateScript(select, true));
            Assert.IsTrue(testScriptGenerator.verifyScript(EDbVendor.dbvoracle
                                                           , select.ToScript()
                                                           , "SELECT a AS a_alias,\n" +
                                                           "       x\n" +
                                                           "FROM   table_x"
                                                           ));
        }
Example #15
0
        public virtual void testRemoveIntoClause()
        {
            TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle);

            sqlparser.sqltext = @"SELECT * INTO newTbl FROM ( SELECT * FROM Instructor) AS tmp;";

            sqlparser.parse();
            TSelectSqlStatement select = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);

            // remove into clause
            select.IntoClause = null;
            // remove * in the select list
            select.ResultColumnList.removeElementAt(0);

            // add a new select list item
            TResultColumn resultColumn = new TResultColumn();

            resultColumn.Expr = sqlparser.parseExpression("count(*)");
            TAliasClause aliasClause = new TAliasClause();

            aliasClause.AliasName    = sqlparser.parseObjectName("count");
            aliasClause.HasAs        = true;
            resultColumn.AliasClause = aliasClause;

            select.ResultColumnList.addResultColumn(resultColumn);

            // Console.WriteLine(sqlparser.sqlstatements.get(0).ToScript());
            Assert.IsTrue(testScriptGenerator.verifyScript(EDbVendor.dbvoracle
                                                           , select.ToScript()
                                                           , @"select 
                    count(*) as count
                     from 
                    ( select 
                    *
                     from 
                    Instructor) as tmp"
                                                           ));
        }
Example #16
0
        public virtual void testOracleBindVariable()
        {
            parser.sqltext = "UPDATE Art SET Desc=:Desc WHERE ID=:ID";
            Assert.IsTrue(parser.parse() == 0);
            TUpdateSqlStatement updateStmt = (TUpdateSqlStatement)parser.sqlstatements.get(0);

            TResultColumn setClause  = updateStmt.ResultColumnList.getResultColumn(0);
            TExpression   assignment = setClause.Expr;
            // create a vairable
            TObjectName bindVar     = new TObjectName(new TSourceToken(":bindVar"), EDbObjectType.variable);
            TExpression newVariable = new TExpression(EExpressionType.simple_object_name_t);

            newVariable.ObjectOperand = bindVar;
            //set new varaible
            assignment.RightOperand = newVariable;

            //Console.WriteLine(updateStmt.ToScript());

            Assert.IsTrue(testScriptGenerator.verifyScript(EDbVendor.dbvoracle
                                                           , updateStmt.ToScript()
                                                           , "UPDATE Art SET Desc=:bindVar WHERE ID=:ID"
                                                           ));
        }
Example #17
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));
        }
Example #18
0
        private static void AnalyzeSelectStmt(TSelectSqlStatement stmt)
        {
            Console.WriteLine("Select Statement");
            if (stmt.CombinedQuery)
            {
                string setstr = string.Empty;
                switch (stmt.SetOperator)
                {
                case TSelectSqlStatement.setOperator_union:
                    setstr = "union";
                    break;

                case TSelectSqlStatement.setOperator_unionall:
                    setstr = "union all";
                    break;

                case TSelectSqlStatement.setOperator_except:
                    setstr = "except";
                    break;

                case TSelectSqlStatement.setOperator_exceptall:
                    setstr = "except all";
                    break;

                case TSelectSqlStatement.setOperator_minus:
                    setstr = "minus";
                    break;

                case TSelectSqlStatement.setOperator_minusall:
                    setstr = "minus all";
                    break;

                case TSelectSqlStatement.setOperator_intersect:
                    setstr = "intersect";
                    break;

                case TSelectSqlStatement.setOperator_intersectall:
                    setstr = "intersect all";
                    break;
                }
                Console.WriteLine(string.Format("set type: {0}", setstr));
                Console.WriteLine("left select: ");
                AnalyzeSelectStmt(stmt.LeftStmt);
                Console.WriteLine("left select: ");
                AnalyzeSelectStmt(stmt.RightStmt);
                if (stmt.OrderbyClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.OrderbyClause.ToScript()))
                    {
                        Console.WriteLine("Order by Clause: " + stmt.OrderbyClause.ToString());
                    }
                }
            }
            else
            {
                // select list
                for (int i = 0; i < stmt.ResultColumnList.Count; i++)
                {
                    TResultColumn resultColumn = stmt.ResultColumnList.getResultColumn(i);
                    Console.WriteLine(string.Format("Column: {0}, Alias: {1}", resultColumn.Expr.ToString(), (resultColumn.AliasClause == null) ? string.Empty : resultColumn.AliasClause.ToString()));
                }

                // from clause
                for (int i = 0; i < stmt.joins.Count; i++)
                {
                    TJoin join = stmt.joins.getJoin(i);
                    switch (join.Kind)
                    {
                    case TBaseType.join_source_fake:
                        Console.WriteLine(string.Format("table: {0},  alias: {1}", join.Table.ToString(), (join.Table.AliasClause == null) ? string.Empty : join.Table.AliasClause.ToString()));
                        break;

                    case TBaseType.join_source_table:
                        Console.WriteLine(string.Format("table: {0},  alias: {1}", join.Table.ToString(), (join.Table.AliasClause == null) ? string.Empty : join.Table.AliasClause.ToString()));
                        for (int j = 0; j < join.JoinItems.Count; j++)
                        {
                            TJoinItem joinItem = join.JoinItems.getJoinItem(j);
                            Console.WriteLine(string.Format("Join type: {0}", joinItem.JoinType.ToString()));
                            Console.WriteLine(string.Format("table: {0},  alias: {1}", joinItem.Table.ToString(), (joinItem.Table.AliasClause == null) ? string.Empty : joinItem.Table.AliasClause.ToString()));
                            if (joinItem.OnCondition != null)
                            {
                                Console.WriteLine(string.Format("On: {0}", joinItem.OnCondition.ToString()));
                            }
                            else if (joinItem.UsingColumns != null)
                            {
                                Console.WriteLine(string.Format("Using: {0}", joinItem.UsingColumns.ToString()));
                            }
                        }
                        break;

                    case TBaseType.join_source_join:
                        TJoin source_join = join.Join;
                        Console.WriteLine(string.Format("table: {0},  alias: {1}", source_join.Table.ToString(), (source_join.Table.AliasClause == null) ? string.Empty : source_join.Table.AliasClause.ToString()));
                        for (int j = 0; j < source_join.JoinItems.Count; j++)
                        {
                            TJoinItem joinItem = source_join.JoinItems.getJoinItem(j);
                            Console.WriteLine(string.Format("source_join type: {0}", joinItem.JoinType.ToString()));
                            Console.WriteLine(string.Format("table: {0},  alias: {1}", joinItem.Table.ToString(), (joinItem.Table.AliasClause == null) ? string.Empty : joinItem.Table.AliasClause.ToString()));
                            if (joinItem.OnCondition != null)
                            {
                                Console.WriteLine(string.Format("On: {0}", joinItem.OnCondition.ToString()));
                            }
                            else if (joinItem.UsingColumns != null)
                            {
                                Console.WriteLine(string.Format("Using: {0}", joinItem.UsingColumns.ToString()));
                            }
                        }

                        for (int j = 0; j < join.JoinItems.Count; j++)
                        {
                            TJoinItem joinItem = join.JoinItems.getJoinItem(j);
                            Console.WriteLine(string.Format("Join type: {0}", joinItem.JoinType.ToString()));
                            Console.WriteLine(string.Format("table: {0},  alias: {1}", joinItem.Table.ToString(), (joinItem.Table.AliasClause == null) ? string.Empty : joinItem.Table.AliasClause.ToString()));
                            if (joinItem.OnCondition != null)
                            {
                                Console.WriteLine(string.Format("On: {0}", joinItem.OnCondition.ToString()));
                            }
                            else if (joinItem.UsingColumns != null)
                            {
                                Console.WriteLine(string.Format("Using: {0}", joinItem.UsingColumns.ToString()));
                            }
                        }

                        break;

                    default:
                        break;
                    }
                }

                // where clause
                if (stmt.WhereClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.WhereClause.ToString()))
                    {
                        Console.WriteLine("Where clause: " + stmt.WhereClause.Condition.ToString());
                    }
                }

                // group by
                if (stmt.GroupByClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.GroupByClause.ToString()))
                    {
                        Console.WriteLine("group by clause: " + stmt.GroupByClause.ToString());
                    }
                }

                // order by
                if (stmt.OrderbyClause != null)
                {
                    Console.WriteLine("Order by:");
                    for (int i = 0; i < stmt.OrderbyClause.Items.Count; i++)
                    {
                        Console.WriteLine(string.Format("\t{0}", stmt.OrderbyClause.Items.getOrderByItem(i).ToString()));
                    }
                }

                // for update
                if (stmt.ForUpdateClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.ForUpdateClause.ToString()))
                    {
                        Console.WriteLine("for update clause: " + stmt.ForUpdateClause.ToString());
                    }
                }

                // top clause
                if (stmt.TopClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.TopClause.ToString()))
                    {
                        Console.WriteLine("top clause: " + stmt.TopClause.ToString());
                    }
                }

                // limit clause
                if (stmt.LimitClause != null)
                {
                    if (!string.IsNullOrEmpty(stmt.LimitClause.ToString()))
                    {
                        Console.WriteLine("limit clause: " + stmt.LimitClause.ToString());
                    }
                }
            }
        }
Example #19
0
        internal virtual string remove(TCustomSqlStatement stat, LinkedHashMap <string, string> conditionMap)
        {
            if (stat.ResultColumnList != null)
            {
                for (int j = 0; j < stat.ResultColumnList.size(); j++)
                {
                    TResultColumn column = stat.ResultColumnList.getResultColumn(j);
                    if (column.Expr != null && column.Expr.SubQuery is TCustomSqlStatement)
                    {
                        TCustomSqlStatement query = (TCustomSqlStatement)column.Expr.SubQuery;
                        getParserString(query, conditionMap);
                    }
                }
            }
            if (stat.CteList != null)
            {
                for (int i = 0; i < stat.CteList.size(); i++)
                {
                    TCTE cte = stat.CteList.getCTE(i);
                    if (cte.Subquery != null)
                    {
                        getParserString(cte.Subquery, conditionMap);
                    }
                    if (cte.InsertStmt != null)
                    {
                        getParserString(cte.InsertStmt, conditionMap);
                    }
                    if (cte.UpdateStmt != null)
                    {
                        getParserString(cte.UpdateStmt, conditionMap);
                    }
                    if (cte.PreparableStmt != null)
                    {
                        getParserString(cte.PreparableStmt, conditionMap);
                    }
                    if (cte.DeleteStmt != null)
                    {
                        getParserString(cte.DeleteStmt, conditionMap);
                    }
                }
            }

            if (stat is TSelectSqlStatement && ((TSelectSqlStatement)stat).SetOperator != TSelectSqlStatement.setOperator_none)
            {
                TSelectSqlStatement select = ((TSelectSqlStatement)stat);
                getParserString(select.LeftStmt, conditionMap);
                getParserString(select.RightStmt, conditionMap);
                return(select.ToScript());
            }

            if (stat.Statements != null && stat.Statements.size() > 0)
            {
                for (int i = 0; i < stat.Statements.size(); i++)
                {
                    getParserString(stat.Statements.get(i), conditionMap);
                }
            }
            if (stat.ReturningClause != null)
            {
                if (stat.ReturningClause.ColumnValueList != null)
                {
                    for (int i = 0; i < stat.ReturningClause.ColumnValueList.size(); i++)
                    {
                        if (stat.ReturningClause.ColumnValueList.getExpression(i).SubQuery != null)
                        {
                            getParserString(stat.ReturningClause.ColumnValueList.getExpression(i).SubQuery, conditionMap);
                        }
                    }
                }
                if (stat.ReturningClause.VariableList != null)
                {
                    for (int i = 0; i < stat.ReturningClause.VariableList.size(); i++)
                    {
                        if (stat.ReturningClause.VariableList.getExpression(i).SubQuery != null)
                        {
                            getParserString(stat.ReturningClause.VariableList.getExpression(i).SubQuery, conditionMap);
                        }
                    }
                }
            }
            if (stat is TSelectSqlStatement)
            {
                TTableList list = ((TSelectSqlStatement)stat).tables;
                for (int i = 0; i < list.size(); i++)
                {
                    TTable table = list.getTable(i);
                    if (table.Subquery != null)
                    {
                        getParserString(table.Subquery, conditionMap);
                    }
                    if (table.FuncCall != null)
                    {
                        ExpressionChecker w = new ExpressionChecker(this);
                        w.checkFunctionCall(table.FuncCall, conditionMap);
                    }
                }
            }

            if (stat is TSelectSqlStatement)
            {
                TJoinList list = ((TSelectSqlStatement)stat).joins;
                for (int i = 0; i < list.size(); i++)
                {
                    TJoin join = list.getJoin(i);
                    for (int j = 0; j < join.JoinItems.size(); j++)
                    {
                        TJoinItem joinItem = join.JoinItems.getJoinItem(j);
                        if (joinItem.Table != null)
                        {
                            if (joinItem.Table.Subquery != null)
                            {
                                getParserString(joinItem.Table.Subquery, conditionMap);
                            }
                            if (joinItem.Table.FuncCall != null)
                            {
                                ExpressionChecker w = new ExpressionChecker(this);
                                w.checkFunctionCall(joinItem.Table.FuncCall, conditionMap);
                            }
                            if (joinItem.OnCondition != null)
                            {
                                ExpressionChecker w = new ExpressionChecker(this);
                                w.checkExpression(joinItem.OnCondition, conditionMap);
                            }
                        }
                    }
                }
            }

            if (stat is TSelectSqlStatement)
            {
                TSelectSqlStatement select = (TSelectSqlStatement)stat;
                for (int i = 0; i < select.ResultColumnList.size(); i++)
                {
                    TResultColumn field = select.ResultColumnList.getResultColumn(i);
                    TExpression   expr  = field.Expr;
                    if (expr != null && expr.ExpressionType == EExpressionType.subquery_t)
                    {
                        getParserString(expr.SubQuery, conditionMap);
                    }
                }
            }

            if (stat.WhereClause != null && stat.WhereClause.Condition != null && stat.WhereClause.Condition.ToScript().Trim().Length > 0)
            {
                TExpression whereExpression = stat.Gsqlparser.parseExpression(stat.WhereClause.Condition.ToScript());
                if (string.ReferenceEquals(whereExpression.ToString(), null))
                {
                    removeCondition removeCondition = new removeCondition(stat.ToString(), stat.dbvendor, conditionMap);
                    return(removeCondition.result);
                }
                else
                {
                    string oldString = stat.ToScript();
                    conditionBuffer.Remove(0, conditionBuffer.Length);
                    ExpressionChecker w = new ExpressionChecker(this);
                    w.checkExpression(whereExpression, conditionMap);
                    stat.WhereClause.Condition = stat.Gsqlparser.parseExpression(whereExpression.ToScript());
                }
            }
            if ((stat is TSelectSqlStatement) && ((TSelectSqlStatement)stat).GroupByClause != null && ((TSelectSqlStatement)stat).GroupByClause.HavingClause != null)
            {
                TExpression havingExpression = ((TSelectSqlStatement)stat).GroupByClause.HavingClause;

                if (havingExpression == null)
                {
                    removeCondition removeCondition = new removeCondition(stat.ToScript(), stat.dbvendor, conditionMap);
                    return(removeCondition.result);
                }
                else
                {
                    string oldString = stat.ToScript();
                    conditionBuffer.Remove(0, conditionBuffer.Length);
                    ExpressionChecker w = new ExpressionChecker(this);
                    w.checkExpression(havingExpression, conditionMap);
                    string newString = stat.ToScript();
                    if (!oldString.Equals(newString))
                    {
                        if (havingExpression != null && havingExpression.ToScript().Trim().Length == 0)
                        {
                            ((TSelectSqlStatement)stat).GroupByClause = null;
                        }
                    }
                }
            }
            return(stat.ToScript());
        }
Example #20
0
        private void analyzeSqlStatement(procedureInfo procedureInfo, TCustomSqlStatement stmt)
        {
            if (stmt is TMssqlBlock)
            {
                TMssqlBlock block = (TMssqlBlock)stmt;
                if (block.BodyStatements != null)
                {
                    for (int i = 0; i < block.BodyStatements.size(); i++)
                    {
                        analyzeSqlStatement(procedureInfo, block.BodyStatements.get(i));
                    }
                }
            }
            else if (stmt is TMssqlIfElse)
            {
                TMssqlIfElse ifElse = (TMssqlIfElse)stmt;
                if (ifElse.Stmt != null)
                {
                    analyzeSqlStatement(procedureInfo, ifElse.Stmt);
                }
                if (ifElse.Condition != null)
                {
                }
                if (ifElse.ElseStmt != null)
                {
                    analyzeSqlStatement(procedureInfo, ifElse.ElseStmt);
                }
            }
            else if (stmt is TMssqlDeclare)
            {
                TMssqlDeclare declareStmt = (TMssqlDeclare)stmt;
                if (declareStmt.Subquery != null && declareStmt.Subquery.ToString().Trim().Length > 0)
                {
                    analyzeSqlStatement(procedureInfo, declareStmt.Subquery);
                }
            }
            else if (stmt is TMssqlExecute && ((TMssqlExecute)stmt).ModuleName != null)
            {
                TMssqlExecute executeStmt = (TMssqlExecute)stmt;
                operateInfo   operateInfo = new operateInfo();
                operateInfo.objectType = objectType.SP;
                operateInfo.objectUsed = executeStmt.ModuleName.ToString().Trim();
                operateInfo.usageType  = usageType.Exec;
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TCreateTableSqlStatement)
            {
                TCreateTableSqlStatement createStmt = (TCreateTableSqlStatement)stmt;
                TColumnDefinitionList    columns    = createStmt.ColumnList;
                operateInfo operateInfo             = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = createStmt.TargetTable.ToString().Trim();
                operateInfo.usageType  = usageType.Create;
                for (int i = 0; i < columns.size(); i++)
                {
                    TColumnDefinition column = columns.getColumn(i);
                    operateInfo.columns.Add(column.ColumnName.ToString());
                }
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TInsertSqlStatement)
            {
                TInsertSqlStatement insertStmt  = (TInsertSqlStatement)stmt;
                TObjectNameList     columns     = insertStmt.ColumnList;
                operateInfo         operateInfo = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = insertStmt.TargetTable.ToString().Trim();
                operateInfo.usageType  = usageType.Insert;
                if (columns != null)
                {
                    for (int i = 0; i < columns.size(); i++)
                    {
                        TObjectName column = columns.getObjectName(i);
                        operateInfo.columns.Add(column.ToString());
                    }
                }
                procedureInfo.operates.Add(operateInfo);

                // if (insertStmt.ExecStmt != null)
                // {
                // analyzeSqlStatement(procedureInfo, insertStmt.ExecStmt);
                // }
            }
            else if (stmt is TUpdateSqlStatement)
            {
                TUpdateSqlStatement updateStmt  = (TUpdateSqlStatement)stmt;
                TResultColumnList   columns     = updateStmt.ResultColumnList;
                operateInfo         operateInfo = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = updateStmt.TargetTable.ToString().Trim();
                operateInfo.usageType  = usageType.Update;
                for (int i = 0; i < columns.size(); i++)
                {
                    TResultColumn column = columns.getResultColumn(i);
                    operateInfo.columns.Add(column.Expr.LeftOperand.ToString());
                }
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TDeleteSqlStatement)
            {
                TDeleteSqlStatement deleteStmt  = (TDeleteSqlStatement)stmt;
                operateInfo         operateInfo = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = deleteStmt.TargetTable.ToString().Trim();
                operateInfo.usageType  = usageType.Delete;
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TMssqlDropTable)
            {
                TMssqlDropTable dropStmt    = (TMssqlDropTable)stmt;
                operateInfo     operateInfo = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = dropStmt.TargetTable.ToString().Trim();
                operateInfo.usageType  = usageType.Drop;
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TDropTableSqlStatement)
            {
                TDropTableSqlStatement dropStmt    = (TDropTableSqlStatement)stmt;
                operateInfo            operateInfo = new operateInfo();
                operateInfo.objectType = objectType.Table;
                operateInfo.objectUsed = dropStmt.TableName.ToString().Trim();
                operateInfo.usageType  = usageType.Drop;
                procedureInfo.operates.Add(operateInfo);
            }
            else if (stmt is TSelectSqlStatement)
            {
                TSelectSqlStatement selectStmt  = (TSelectSqlStatement)stmt;
                List <columnInfo>   columnInfos = new List <columnInfo>();
                List <tableInfo>    tableInfos  = new List <tableInfo>();
                tableTokensInStmt(columnInfos, tableInfos, selectStmt);
                LinkedHashMap <tableInfo, List <columnInfo> > columnMap = new LinkedHashMap <tableInfo, List <columnInfo> >();
                for (int i = 0; i < columnInfos.Count; i++)
                {
                    columnInfo column = columnInfos[i];
                    tableInfo  table  = column.table;
                    if (columnMap.ContainsKey(table))
                    {
                        List <columnInfo> columns = (List <columnInfo>)columnMap[table];
                        bool flag = false;
                        foreach (columnInfo temp in columns)
                        {
                            if (temp.ToString().Equals(column.ToString(), StringComparison.CurrentCultureIgnoreCase))
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (!flag)
                        {
                            columns.Add(column);
                        }
                    }
                    else
                    {
                        List <columnInfo> columns = new List <columnInfo>();
                        columnMap[table] = columns;
                        columns.Add(column);
                    }
                }
                for (int i = 0; i < tableInfos.Count; i++)
                {
                    operateInfo operateInfo = new operateInfo();
                    operateInfo.objectType = objectType.Table;
                    operateInfo.objectUsed = tableInfos[i].ToString();
                    if (tableInfos[i].stmt is TSelectSqlStatement && ((TSelectSqlStatement)tableInfos[i].stmt).IntoClause != null)
                    {
                        operateInfo.usageType = usageType.Insert;
                    }
                    else
                    {
                        operateInfo.usageType = usageType.Read;
                    }
                    if (columnMap.ContainsKey(tableInfos[i]))
                    {
                        foreach (columnInfo column in (List <columnInfo>)columnMap[tableInfos[i]])
                        {
                            operateInfo.columns.Add(column.ToString());
                            operateInfo.objectUsed = column.table.ToString();
                        }
                    }
                    procedureInfo.operates.Add(operateInfo);
                }
            }
        }
Example #21
0
        private ColumnMetaData[] getRefTableColumns(TResultColumn resultColumn, ColumnImpactModel columnImpactModel)
        {
            ReferenceModel[]      referenceModels = columnImpactModel.References;
            List <ColumnMetaData> columns         = new List <ColumnMetaData>();

            if (resultColumn.AliasClause != null)
            {
                for (int i = 0; i < referenceModels.Length; i++)
                {
                    ReferenceModel referModel = referenceModels[i];
                    // if ( referModel.getClause( ) != Clause.SELECT )
                    // continue;
                    if (referModel.Alias != null)
                    {
                        string aliasName = resultColumn.AliasClause.AliasName.ToString();
                        if (removeQuote(referModel.Alias.Name).Equals(removeQuote(aliasName), StringComparison.CurrentCultureIgnoreCase))
                        {
                            ColumnMetaData columnMetaData = getColumn(referModel.Column);
                            if (columnMetaData != null && !columns.Contains(columnMetaData))
                            {
                                columns.Add(columnMetaData);
                            }
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < referenceModels.Length; i++)
                {
                    ReferenceModel referModel = referenceModels[i];
                    // if ( referModel.getClause( ) != Clause.SELECT )
                    // continue;
                    if (referModel.Field != null)
                    {
                        if (resultColumn.FieldAttr != null)
                        {
                            if (removeQuote(resultColumn.FieldAttr.ToString()).Equals(removeQuote(referModel.Field.FullName), StringComparison.CurrentCultureIgnoreCase))
                            {
                                ColumnMetaData columnMetaData = getColumn(referModel.Column);
                                if (!columns.Contains(columnMetaData))
                                {
                                    columns.Add(columnMetaData);
                                }
                            }
                        }
                        else
                        {
                            if (removeQuote(resultColumn.ToString()).Equals(removeQuote(referModel.Field.FullName), StringComparison.CurrentCultureIgnoreCase))
                            {
                                ColumnMetaData columnMetaData = getColumn(referModel.Column);
                                if (!columns.Contains(columnMetaData))
                                {
                                    columns.Add(columnMetaData);
                                }
                            }
                        }
                    }
                }
            }
            return(columns.ToArray());
        }
        public static TObjectName[] getTableColumns(TTable table)
        {
            Table createTable = ModelBindingManager.getCreateTable(table);

            if (createTable != null)
            {
                IList <TableColumn> columnList = createTable.Columns;
                TObjectName[]       columns    = new TObjectName[columnList.Count];
                for (int i = 0; i < columns.Length; i++)
                {
                    columns[i] = columnList[i].ColumnObject;
                }
                Array.Sort(columns, new ComparatorAnonymousInnerClass());
                return(columns);
            }
            else
            {
                TObjectNameList    list    = table.ObjectNameReferences;
                List <TObjectName> columns = new List <TObjectName>();

                if (list.size() == 0 && table.Subquery != null)
                {
                    ResultSet resultSet = (ResultSet)ModelBindingManager.getModel(table.Subquery);
                    if (resultSet != null)
                    {
                        IList <ResultColumn> columnList = resultSet.Columns;
                        for (int i = 0; i < columnList.Count; i++)
                        {
                            ResultColumn resultColumn = columnList[i];
                            if (resultColumn.ColumnObject is TResultColumn)
                            {
                                TResultColumn columnObject = ((TResultColumn)resultColumn.ColumnObject);
                                TAliasClause  alias        = columnObject.AliasClause;
                                if (alias != null && alias.AliasName != null)
                                {
                                    columns.Add(alias.AliasName);
                                }
                                else
                                {
                                    if (columnObject.FieldAttr != null)
                                    {
                                        columns.Add(columnObject.FieldAttr);
                                    }
                                    else
                                    {
                                        continue;
                                    }
                                }
                            }
                            else if (resultColumn.ColumnObject is TObjectName)
                            {
                                columns.Add((TObjectName)resultColumn.ColumnObject);
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < list.size(); i++)
                    {
                        columns.Add(list.getObjectName(i));
                    }
                }

                TObjectName[] columnArray = columns.ToArray();
                Array.Sort(columnArray, new ComparatorAnonymousInnerClass());
                return(columnArray);
            }
        }