Beispiel #1
0
        static void toXML()
        {
            EDbVendor dbVendor = EDbVendor.dbvoracle;

            Console.WriteLine("Selected SQL dialect: " + dbVendor.ToString());

            TGSqlParser sqlparser = new TGSqlParser(dbVendor);

            sqlparser.sqltext = @"SELECT e.last_name AS name,
                                    e.commission_pct comm,
                                    e.salary * 12 ""Annual Salary""
                                    FROM scott.employees AS e
                                    WHERE e.salary > 1000
                                    ORDER BY
                                    e.first_name,
                                    e.last_name; ";

            int ret = sqlparser.parse();

            if (ret == 0)
            {
                xmlVisitor xv2 = new xmlVisitor();
                xv2.run(sqlparser);
                Console.WriteLine(xv2.FormattedXml);
            }
            else
            {
                Console.WriteLine(sqlparser.Errormessage);
            }
        }
        public static void doSearch(String filename)
        {
            //long t = DateTime.Now.Millisecond;

            EDbVendor dbVendor = EDbVendor.dbvmssql;

            Console.WriteLine("Selected SQL dialect: " + dbVendor.ToString());

            TGSqlParser sqlparser = new TGSqlParser(dbVendor);

            sqlparser.sqlfilename = filename;

            int ret = sqlparser.parse();

            if (ret == 0)
            {
                functionVisitor fv = new functionVisitor();
                for (int i = 0; i < sqlparser.sqlstatements.size(); i++)
                {
                    TCustomSqlStatement sqlStatement = sqlparser.sqlstatements.get(i);
                    Console.WriteLine(sqlStatement.sqlstatementtype);
                    sqlStatement.acceptChildren(fv);
                }
            }
            else
            {
                Console.WriteLine(sqlparser.Errormessage);
            }

            //Console.WriteLine("Time Escaped: " + (DateTime.Now.Millisecond - t));
        }
		public static void doIt(String sqlFilename)
		{

            EDbVendor dbVendor = EDbVendor.dbvmssql;
			Console.WriteLine("Selected SQL dialect: " + dbVendor.ToString());


			TGSqlParser sqlparser = new TGSqlParser(dbVendor);
			sqlparser.sqlfilename = sqlFilename;

			int ret = sqlparser.parse();
			if (ret == 0)
			{
				for (int i = 0;i < sqlparser.sqlstatements.size();i++)
				{
					iterateStmt(sqlparser.sqlstatements.get(i));
				}
			}
			else
			{
				Console.WriteLine(sqlparser.Errormessage);
			}
		}
Beispiel #4
0
        static void toXML(String sqlFilename, EDbVendor dbVendor)
        {
            Console.WriteLine("Selected SQL dialect: " + dbVendor.ToString());

            TGSqlParser sqlparser = new TGSqlParser(dbVendor);
            String      inputFile = sqlFilename;

            sqlparser.sqlfilename = inputFile;
            string xmlFile = inputFile + ".xml";

            int ret = sqlparser.parse();

            if (ret == 0)
            {
                xmlVisitor xv2 = new xmlVisitor();
                xv2.run(sqlparser);
                xv2.writeToFile(xmlFile);
                Console.WriteLine(xmlFile + " was generated!");
            }
            else
            {
                Console.WriteLine(sqlparser.Errormessage);
            }
        }
        //public static List<NestedStmtWhereClauses> StatementWhereClauses = new List<NestedStmtWhereClauses>();

        public static void ParseWorkload(String sqlFilename)
        {
            EDbVendor dbVendor = EDbVendor.dbvmssql;

            Console.WriteLine("\n");
            Console.WriteLine("Selected SQL dialect: " + ((dbVendor.ToString() == "dbvmssql") ? "Transact SQL for Microsoft SQL Server" : "SQL for Oracle."));
            Console.WriteLine("\n");

            TGSqlParser sqlparser = new TGSqlParser(dbVendor);

            sqlparser.sqlfilename = sqlFilename;

            int ret = sqlparser.parse();

            if (ret == 0)
            {
                Console.WriteLine("###################### Parsing Started : " + sqlFilename);

                // Print output Headers
                var consoletable = new ConsoleTable("Statement Number", "Statement Type", "Parse OK ?", "Query Text [Truncated]");

                for (int i = 0; i < sqlparser.sqlstatements.size(); i++)
                {
                    ESqlStatementType sqlStatementType = sqlparser.sqlstatements.get(i).sqlstatementtype;                   // Get the statementtype of the sql qwuery

                    if (sqlStatementType == ESqlStatementType.sstselect || sqlStatementType == ESqlStatementType.sstupdate) // Take the statement in dictionary only if it is a DML(SELECT/UPDATE) statement
                    {
                        // We have taken iterate statement inside if block since parsong for "Use Database", "Go", "Set variable values", etc is not useful for our applicaiton scope.
                        iterateStmt(sqlparser.sqlstatements.get(i));


                        // Create a new query object
                        SQLQueryStmt query = new SQLQueryStmt();

                        // get the query text of the sql statement from the workload
                        query.QueryText = sqlparser.sqlstatements.get(i).String;

                        // check if this statement appeared for the first time and add it to the dictionary, else increment the count of already added statement from the dictionary.
                        if (Utilities.DictWorkloadQueries.Where(qry => qry.Value.QueryText == query.QueryText).Any())                    // If the statement is occuring again.
                        {
                            Guid guid = Utilities.DictWorkloadQueries.FirstOrDefault(qry => qry.Value.QueryText == query.QueryText).Key; // Get the queryId of the SQL already in the Dictionary.
                            Utilities.DictWorkloadQueries[guid].NumOfOccurences += 1;                                                    // Increment the count of occurence.
                        }
                        else                                                                                                             // If the statement occurs for the first time.
                        {
                            query.QueryId = Guid.NewGuid();                                                                              // New key for query
                            Utilities.DictWorkloadQueries.Add(query.QueryId, query);                                                     // Add the query to Dictionary.
                            Utilities.DictWorkloadQueries[query.QueryId].NumOfOccurences = 1;
                        }

                        consoletable.AddRow("Parsed Statement[" + i + "]", (sqlStatementType == ESqlStatementType.sstselect)?"SELECT": "OTHER", "Successful", query.QueryText.Replace(System.Environment.NewLine, " ").Substring(0, 35) + "...");
                    }
                }
                consoletable.Write(Format.MarkDown);
                Console.WriteLine();
                Console.WriteLine("###################### " + sqlFilename + " Parsing Complete ####################");
            }
            else
            {
                Console.WriteLine(sqlparser.Errormessage);
            }
        }