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 算力,解读结果公开显示在下面。

还没有人解读过这个文件。