12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- namespace TestConsoleApp
- {
- public class QueryParser
- {
-
- public List<string> Parse()
- {
- var totalQuery = File.ReadAllText(@"D:\testquery.txt");
- return _Parse(totalQuery);
-
- }
- List<string> _Parse(string actualQuery)
- {
- string columnString = GetColumnString(actualQuery);
- List<string> resultColumnlist = new List<string>();
- var commaSeperatedArray = columnString.Split(',');
-
- for (int i = 0; i < commaSeperatedArray.Length; i++)
- {
- var column = commaSeperatedArray[i];
- if (IsPredefinedFunction(column))
- {
- if (!IsPerfectPredefinedFunction(column))
- {
- column = MakeItPerfect(ref i, commaSeperatedArray, commaSeperatedArray[i]);
- }
- resultColumnlist.Add(column);
- }
- else
- {
- resultColumnlist.Add(column);
- }
- }
- return resultColumnlist;
- }
-
- string GetColumnString(string actualQuery)
- {
- actualQuery = actualQuery.Replace(System.Environment.NewLine, " ");
- var fromidex = actualQuery.ToLower().LastIndexOf("from ");
- var splitted = actualQuery.Substring(0, fromidex);
- splitted = splitted.TrimStart().Remove(0, "select".Length);
- return splitted;
- }
- bool IsPredefinedFunction(string name)
- {
- var _name = name.ToLower();
- bool result = false;
- foreach (var function in PredefinedFunctions())
- {
- if (_name.Contains(function.ToLower()))
- {
- result = true;
- break;
- }
- }
- return result;
- }
- string[] PredefinedFunctions()
- {
- return new string[] {
- "coalesce","concat","select","min","max","count"
- };
- }
- bool IsPerfectPredefinedFunction(string name)
- {
- var opencount = name.Count(c => c == '(');
- var closecount = name.Count(c => c == ')');
- return opencount == closecount;
- }
- string MakeItPerfect(ref int index, string[] colArray, string columnName)
- {
- index = index + 1;
- var column = columnName + "," + colArray[index];
- if (!IsPerfectPredefinedFunction(column))
- {
- column = MakeItPerfect(ref index, colArray, column);
- }
-
- return column;
- }
-
-
- }
- }
|