Skip to content

Commit 11c6123

Browse files
author
Matheus Ribeiro
committed
Update version to 2.5.1 and enhance query handling
- Updated project version from 2.5.0 to 2.5.1. - Added `GetResultQueryWithBlocks` method in `QueryMetadata` for processing query strings with specified block names. - Introduced regex replacements in `TSqListener` to remove `EBLOCKFILTER` tags from `ResultQuery`. - Updated test cases in `FiltersTests` to reflect query structure changes and added assertions for the new method.
1 parent 3c41d03 commit 11c6123

4 files changed

Lines changed: 51 additions & 4 deletions

File tree

MetaSql.Parser.Core/MetaSql.Parser.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
<RepositoryUrl>https://github.com/mrsixx/MetaSql.Parser/</RepositoryUrl>
1111
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
1212
<PackageTags>parser;sql;metadata;ansi;metasql;grammar;customsql</PackageTags>
13-
<AssemblyVersion>2.5.0</AssemblyVersion>
14-
<FileVersion>2.5.0</FileVersion>
15-
<Version>2.5.0</Version>
13+
<AssemblyVersion>2.5.1</AssemblyVersion>
14+
<FileVersion>2.5.1</FileVersion>
15+
<Version>2.5.1</Version>
1616
</PropertyGroup>
1717

1818
<ItemGroup>

MetaSql.Parser.Core/QueryMetadata.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Runtime.Serialization;
55
using System.Text;
66
using MetaSql.Parser.Models;
7+
using System.Text.RegularExpressions;
78

89
namespace MetaSql.Parser
910
{
@@ -21,6 +22,36 @@ public class QueryMetadata
2122

2223
public List<QueryExecute> Executes { get; }
2324

25+
26+
/// <summary>
27+
/// Retorna a query com os blocos de filtros desejados.
28+
/// </summary>
29+
/// <param name="names"></param>
30+
/// <returns></returns>
31+
public string GetResultQueryWithBlocks(params string[] names)
32+
{
33+
string pattern = @"<(?<tag>\w+)>(?<content>.*?)</\k<tag>>";
34+
var regex = new Regex(pattern, RegexOptions.Singleline);
35+
36+
// Substitui cada bloco conforme a lógica
37+
return regex.Replace(ResultQuery, match =>
38+
{
39+
string tagName = match.Groups["tag"].Value;
40+
string content = match.Groups["content"].Value;
41+
42+
// Se o nome do filtro estiver na lista, mantém o conteúdo e remove as tags
43+
if (Array.Exists(names, name => name.Equals(tagName, StringComparison.OrdinalIgnoreCase)))
44+
{
45+
return content;
46+
}
47+
48+
// Caso contrário, remove o bloco inteiro
49+
return string.Empty;
50+
});
51+
}
52+
53+
54+
2455
public QueryMetadata()
2556
{
2657
Tables = new List<QueryTable>();

MetaSql.Parser.Core/TSqListener.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ public override void ExitSelect_statement([NotNull] TSqlParser.Select_statementC
9595
//remove efilters
9696
Metadata.ResultQuery = Regex.Replace(Metadata.ResultQuery, "(?<=EFILTER)(.*)(?=;)", String.Empty, RegexOptions.IgnoreCase);
9797
Metadata.ResultQuery = Regex.Replace(Metadata.ResultQuery, "EFILTER;", String.Empty, RegexOptions.IgnoreCase);
98+
Metadata.ResultQuery = Regex.Replace(Metadata.ResultQuery, "(?<=EBLOCKFILTER)(.*)(?=;)", String.Empty, RegexOptions.IgnoreCase);
99+
Metadata.ResultQuery = Regex.Replace(Metadata.ResultQuery, "EBLOCKFILTER;", String.Empty, RegexOptions.IgnoreCase);
98100

99101
//remove elookups
100102
Metadata.ResultQuery = Regex.Replace(Metadata.ResultQuery, "(?<=ELOOKUP)(.*)(?=;)", String.Empty, RegexOptions.IgnoreCase);

MetaSql.Parser.Tests/FiltersTests.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,10 +417,11 @@ and a.cgeraos <> -1
417417

418418

419419
var resultQuery =
420-
@"select extract(month from a.cdata) as mes, extract(year from a.cdata) as ano, extract(month from a.cdata) || '/' || extract(year from a.cdata) as data, sum(a.cpfinal) as total_venda from arqos a join vendedor v on (v.ccodigo = a.codvend1) where (1 = 1) and a.cdata BETWEEN DATEADD(YEAR, -2, CURRENT_DATE) AND CURRENT_DATE <filtroVendedor> AND v.ccodigo IN (&filtroVendedor) </filtroVendedor> and a.cgeraos <> -1 group by 1,2,3 order by 1,2";
420+
@"select extract(month from a.cdata) as mes, extract(year from a.cdata) as ano, extract(month from a.cdata) || '/' || extract(year from a.cdata) as data, sum(a.cpfinal) as total_venda from arqos a join vendedor v on (v.ccodigo = a.codvend1) where (1 = 1) and a.cdata BETWEEN DATEADD(YEAR, -2, CURRENT_DATE) AND CURRENT_DATE <filtroVendedor> AND v.ccodigo IN (@filtroVendedor) </filtroVendedor> and a.cgeraos <> -1 group by 1,2,3 order by 1,2";
421421

422422
var metadata = _queryParser.ExtractQueryMetadata(query);
423423

424+
Assert.Equal(resultQuery, metadata.ResultQuery);
424425
Assert.Single(metadata.Filters);
425426
Assert.Contains(metadata.Filters,
426427
filter => filter.Name == "filtroVendedor"
@@ -433,6 +434,19 @@ and a.cgeraos <> -1
433434
Block: true
434435
}
435436
&& defaultValue.Equals("a.codvend1"));
437+
438+
var resultQueryWithBlock =
439+
@"select extract(month from a.cdata) as mes, extract(year from a.cdata) as ano, extract(month from a.cdata) || '/' || extract(year from a.cdata) as data, sum(a.cpfinal) as total_venda from arqos a join vendedor v on (v.ccodigo = a.codvend1) where (1 = 1) and a.cdata BETWEEN DATEADD(YEAR, -2, CURRENT_DATE) AND CURRENT_DATE AND v.ccodigo IN (@filtroVendedor) and a.cgeraos <> -1 group by 1,2,3 order by 1,2";
440+
resultQuery = metadata.GetResultQueryWithBlocks("filtroVendedor");
441+
442+
Assert.Equal(resultQuery, resultQueryWithBlock);
443+
var resultQueryWithoutBlock =
444+
@"select extract(month from a.cdata) as mes, extract(year from a.cdata) as ano, extract(month from a.cdata) || '/' || extract(year from a.cdata) as data, sum(a.cpfinal) as total_venda from arqos a join vendedor v on (v.ccodigo = a.codvend1) where (1 = 1) and a.cdata BETWEEN DATEADD(YEAR, -2, CURRENT_DATE) AND CURRENT_DATE and a.cgeraos <> -1 group by 1,2,3 order by 1,2";
445+
resultQuery = metadata.GetResultQueryWithBlocks();
446+
447+
Assert.Equal(resultQuery, resultQueryWithoutBlock);
448+
449+
436450
}
437451
}
438452
}

0 commit comments

Comments
 (0)