aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs')
-rw-r--r--dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs85
1 files changed, 85 insertions, 0 deletions
diff --git a/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs
new file mode 100644
index 0000000..72b6218
--- /dev/null
+++ b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs
@@ -0,0 +1,85 @@
+using System.Text;
+
+namespace CrupestApi.Commons.Crud.Tests;
+
+public class SqlCompareHelper
+{
+ private static List<char> SymbolTokens = new List<char>() { '(', ')', ';' };
+
+ public static List<string> SqlExtractWords(string? sql, bool toLower = true)
+ {
+ var result = new List<string>();
+
+ if (string.IsNullOrEmpty(sql))
+ {
+ return result;
+ }
+
+ var current = 0;
+
+ StringBuilder? wordBuilder = null;
+
+ while (current < sql.Length)
+ {
+ if (char.IsWhiteSpace(sql[current]))
+ {
+ if (wordBuilder is not null)
+ {
+ result.Add(wordBuilder.ToString());
+ wordBuilder = null;
+ }
+ }
+ else if (SymbolTokens.Contains(sql[current]))
+ {
+ if (wordBuilder is not null)
+ {
+ result.Add(wordBuilder.ToString());
+ wordBuilder = null;
+ }
+ result.Add(sql[current].ToString());
+ }
+ else
+ {
+ if (wordBuilder is not null)
+ {
+ wordBuilder.Append(sql[current]);
+ }
+ else
+ {
+ wordBuilder = new StringBuilder();
+ wordBuilder.Append(sql[current]);
+ }
+ }
+ current++;
+ }
+
+ if (wordBuilder is not null)
+ {
+ result.Add(wordBuilder.ToString());
+ }
+
+ if (toLower)
+ {
+ for (int i = 0; i < result.Count; i++)
+ {
+ result[i] = result[i].ToLower();
+ }
+ }
+
+ return result;
+ }
+
+ public static bool SqlEqual(string left, string right)
+ {
+ return SqlExtractWords(left) == SqlExtractWords(right);
+ }
+
+ [Fact]
+ public void TestSqlExtractWords()
+ {
+ var sql = "SELECT * FROM TableName WHERE (id = @abcd);";
+ var words = SqlExtractWords(sql);
+
+ Assert.Equal(new List<string> { "select", "*", "from", "tablename", "where", "(", "id", "=", "@abcd", ")", ";" }, words);
+ }
+}