Ejemplo n.º 1
0
 /// <summary>
 /// disable a type of sql statement that allowed to be executed in database.
 /// </summary>
 /// <param name="sqltype"> </param>
 public virtual void disableStatement(ESqlStatementType sqltype)
 {
     for (int i = this.enabledStatements.Count - 1; i >= 0; i--)
     {
         if (this.enabledStatements[i] == sqltype)
         {
             this.enabledStatements.RemoveAt(i);
         }
     }
 }
Ejemplo n.º 2
0
        private bool isAllowedStatement(ESqlStatementType pType)
        {
            bool ret = false;

            for (int i = 0; i < this.enabledStatements.Count; i++)
            {
                if (this.enabledStatements[i] == pType)
                {
                    ret = true;
                    break;
                }
            }
            return(ret);
        }
        private StatementQueryCommandType Convert(ESqlStatementType source)
        {
            switch (source)
            {
            case ESqlStatementType.sstselect:
                return(StatementQueryCommandType.Select);

            case ESqlStatementType.sstupdate:
                return(StatementQueryCommandType.Update);

            case ESqlStatementType.sstinsert:
            case ESqlStatementType.sstmssqlbulkinsert:
                return(StatementQueryCommandType.Insert);

            case ESqlStatementType.sstdelete:
                return(StatementQueryCommandType.Delete);
            }
            return(StatementQueryCommandType.Unknown);
        }
Ejemplo n.º 4
0
 internal virtual bool supportedSqlType(ESqlStatementType sqlStatementType)
 {
     return((sqlStatementType == ESqlStatementType.sstselect) || (sqlStatementType == ESqlStatementType.sstdelete) || (sqlStatementType == ESqlStatementType.sstupdate) || (sqlStatementType == ESqlStatementType.sstinsert) || (sqlStatementType == ESqlStatementType.sstmerge) || (sqlStatementType == ESqlStatementType.sstcreatetable) || (sqlStatementType == ESqlStatementType.sstcreateview) || (sqlStatementType == ESqlStatementType.sstdropindex) || (sqlStatementType == ESqlStatementType.sstUseDatabase) || (sqlStatementType == ESqlStatementType.sstmssqlcreatefunction) || (sqlStatementType == ESqlStatementType.sstmssqlif));
 }
Ejemplo n.º 5
0
 /// <summary>
 /// add a type of sql statement that allowed to be executed in database.
 /// </summary>
 /// <param name="sqltype"> </param>
 public virtual void enableStatement(ESqlStatementType sqltype)
 {
     this.enabledStatements.Add(sqltype);
 }
        //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);
            }
        }