SqlAnalysis/SqlParser.cs
(开头部分) 22KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace SqlAnalysis
{
public class SqlParser : AnalysisTSQL
{
static Regex SpaceRegex = new Regex("[\\s\n\r\t]+", RegexOptions.Compiled);
static Regex Char1Regex = new Regex(@"(\s,\s|\s,|,\s)", RegexOptions.Compiled);
private string[] Sqls { get; set; }
public void Convert(string script)
{
// 合并连续空格
script = SpaceRegex.Replace(script, " ");
script = Char1Regex.Replace(script, ",");
// step 1 提取 '' 内容, 清洗 t-sql
script = this.MatchCharParameter(script);
// step 2 处理多段 sql, by chat ;
this.Sqls = this.SplitScript(script);
foreach (var sql in this.Sqls)
{
List<AnalysisOptions> list = new List<AnalysisOptions>();
// ()
var result = this.GroupBySqlItem(sql);
foreach (var item in result)
{
var options = new AnalysisOptions();
options.AliasTableMap = new Dictionary<string, string>();
var sqlFragment = item.Value.ToString();
sqlFragment = sqlFragment.Trim();
// 操作动机
switch (sqlFragment)
{
case var fragment when string.Compare(fragment, 0, "SELECT", 0, 6, true) == 0:
options.Action = SQLAction.SELECT;
break;
case var fragment when string.Compare(fragment, 0, "INSERT", 0, 6, true) == 0:
options.Action = SQLAction.INSERT;
break;
case var fragment when string.Compare(fragment, 0, "UPDATE", 0, 6, true) == 0:
options.Action = SQLAction.UPDATE;
break;
case var fragment when string.Compare(fragment, 0, "DELETE", 0, 6, true) == 0:
options.Action = SQLAction.DELETE;
break;
case var fragment when WhereCharMatchRegex.IsMatch(fragment):
options.Action = SQLAction.CONDITION;
后面还有 417 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。