Добавьте файлы проекта.
This commit is contained in:
44
SQLLinter/Infrastructure/Parser/SqlStreamReaderBuilder.cs
Normal file
44
SQLLinter/Infrastructure/Parser/SqlStreamReaderBuilder.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using SQLLinter.Infrastructure.Interfaces;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SQLLinter.Infrastructure.Parser;
|
||||
|
||||
public class SqlStreamReaderBuilder : ISqlStreamReaderBuilder
|
||||
{
|
||||
private static readonly Regex _placeholderRegex = new Regex(@"\$\((?<placeholder>[^)]+)\)", RegexOptions.Compiled);
|
||||
|
||||
public StreamReader CreateReader(Stream sqlFileStream)
|
||||
{
|
||||
var sqlText = new StreamReader(sqlFileStream);
|
||||
sqlFileStream.Seek(0, SeekOrigin.Begin);
|
||||
var sql = ReplaceSqlPlaceholders(sqlText.ReadToEnd());
|
||||
return new StreamReader(new MemoryStream(sqlText.CurrentEncoding.GetBytes(sql)));
|
||||
}
|
||||
|
||||
private string ReplaceSqlPlaceholders(string sql)
|
||||
{
|
||||
var matches = _placeholderRegex.Matches(sql);
|
||||
|
||||
if (matches.Count == 0)
|
||||
{
|
||||
return sql;
|
||||
}
|
||||
|
||||
var newSql = new StringBuilder();
|
||||
var i = 0;
|
||||
|
||||
foreach (Match match in matches)
|
||||
{
|
||||
var placeholder = match.Groups["placeholder"].Value;
|
||||
var replacement = match.Value;
|
||||
newSql.Append(sql.Substring(i, match.Index - i));
|
||||
newSql.Append(replacement);
|
||||
i = match.Index + match.Length;
|
||||
}
|
||||
|
||||
newSql.Append(sql.Substring(i));
|
||||
|
||||
return newSql.ToString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user