aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-11-11 01:12:29 +0800
committerYuqian Yang <crupest@crupest.life>2024-12-19 21:42:01 +0800
commitf9aa02ec1a4c24e80a206857d4f68198bb027bb4 (patch)
tree5994f0a62733b13f9f330e3515260ae20dc4a0bd /dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons.Tests/Crud/SqlCompareHelper.cs
parent7b4d49e4bbdff6ddf1f8f7e937130e700024d5e9 (diff)
downloadcrupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.gz
crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.bz2
crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.zip
HALF WORK: 2024.12.19
Re-organize file structure.
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);
+ }
+}