/// <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); } } }
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); }
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)); }
/// <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); } }