Skip to content

410 [SPARQL] Reject non-boolean expressions in FILTER and HAVING#455

Open
MaillPierre wants to merge 8 commits into
feature/corese-nextfrom
feature/410-sparql-reject-non-boolean-expressions-in-filter-and-having
Open

410 [SPARQL] Reject non-boolean expressions in FILTER and HAVING#455
MaillPierre wants to merge 8 commits into
feature/corese-nextfrom
feature/410-sparql-reject-non-boolean-expressions-in-filter-and-having

Conversation

@MaillPierre
Copy link
Copy Markdown
Contributor

Adds a visitor design pattern to ASTs to facilitate validation of rules that ned to explore recursively the patterns.

Check that the arguments of a a filter are either a boolean expression or a literal expresion that is not datetime related or numeric, or a function call, or a variable or a literal.

@MaillPierre MaillPierre self-assigned this Jun 1, 2026
@MaillPierre MaillPierre added the Refactoring Issue created during the 2025 refactoring effort label Jun 1, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

Overall Project 47.89% -0.07% 🍏
Files changed 75.76% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
FilterArgumentsValidationRule.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
DayAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
AbstractUnlimitedArgumentsFunctionAst.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
FilterAst.java 100% 🍏
ServiceAst.java 100% 🍏
OptionalAst.java 100% 🍏
TriplePatternAst.java 100% 🍏
BgpAst.java 100% 🍏
DescribeQueryAst.java 100% 🍏
MinusAst.java 100% 🍏
UnionAst.java 100% 🍏
BindAst.java 100% 🍏
AskQueryAst.java 97.26% 🍏
HavingAst.java 97.14% 🍏
GroupByAst.java 96.67% 🍏
ConstructTemplateAst.java 96.15% 🍏
AbstractAstVisitor.java 95% -5% 🍏
InAst.java 94.87% -5.13% 🍏
NotInAst.java 94.87% -5.13% 🍏
IfAst.java 93.33% -6.67% 🍏
DatasetClauseAst.java 92.98% 🍏
QueryPrologueAst.java 92.93% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
SparqlQuerySemanticValidator.java 90.74% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
VariableScopeAnalyzer.java 89.76% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
IriAst.java 85% -15%
AndAst.java 81.82% -18.18%
OrAst.java 81.82% -18.18%
AbstractUnaryConstraintAst.java 81.08% 🍏
ProjectionAst.java 79.66% 🍏
BinaryRegexAst.java 79.55% -4.55%
BnodeAst.java 78.57% -4.76% 🍏
StrUuidAst.java 77.78% -22.22% 🍏
UuidAst.java 77.78% -22.22% 🍏
LiteralAst.java 74.19% -25.81%
AggregateAst.java 73.33% -4.44% 🍏
SameTermAst.java 69.57% -8.7%
OrderConditionAst.java 67.74% 🍏
StrBeforeAst.java 66.67% -33.33%
StrStartsAst.java 66.67% -33.33%
SecondsAst.java 66.67% -33.33%
LcaseAst.java 66.67% -33.33%
AbsAst.java 66.67% -33.33%
IsLiteralAst.java 66.67% -33.33%
CoalesceAst.java 66.67% -33.33% 🍏
Sha1Ast.java 66.67% -33.33%
Sha384Ast.java 66.67% -33.33%
UnaryMinusAst.java 66.67% -33.33%
Sha256Ast.java 66.67% -33.33%
EncodeForUriAst.java 66.67% -33.33%
StrLangAst.java 66.67% -33.33%
StrAfterAst.java 66.67% -33.33%
IsIriAst.java 66.67% -33.33%
HoursAst.java 66.67% -33.33%
LangMatchesAst.java 66.67% -33.33%
FloorAst.java 66.67% -33.33%
MonthAst.java 66.67% -33.33%
LangAst.java 66.67% -33.33%
StrEndsAst.java 66.67% -33.33%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.java 66.67% -33.33%
BooleanNotAst.java 66.67% -33.33%
IsBlankAst.java 66.67% -33.33%
Md5Ast.java 66.67% -33.33%
CeilAst.java 66.67% -33.33%
UcaseAst.java 66.67% -33.33%
MinutesAst.java 66.67% -33.33%
ContainsAst.java 66.67% -33.33%
YearAst.java 66.67% -33.33%
BoundAst.java 66.67% -33.33%
ConcatAst.java 66.67% -33.33% 🍏
RoundAst.java 66.67% -33.33%
StrDtAst.java 66.67% -33.33%
UnaryPlusAst.java 66.67% -33.33%
Sha512Ast.java 66.67% -33.33%
SolutionModifierAst.java 63.86% 🍏
ConstructQueryAst.java 62.89% 🍏
ASTQuery.java 62.06% 🍏
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
FunctionCallAst.java 50% -9.62% 🍏
StrLenAst.java 40% -60%
AddAst.java 36.36% -18.18%
GreaterOrEqualThanAst.java 36.36% -18.18%
DifferentAst.java 36.36% -18.18%
MultiplyAst.java 36.36% -18.18%
LowerOrEqualThanAst.java 36.36% -18.18%
GreaterThanAst.java 36.36% -18.18%
DivideAst.java 36.36% -18.18%
LowerThanAst.java 36.36% -18.18%
EqualsAst.java 36.36% -18.18%
SubtractAst.java 36.36% -18.18%
SparqlAstToExpression.java 7.93% -13.49%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

Test Results

  416 files  + 1    416 suites  +1   22s ⏱️ -1s
2 290 tests +11  2 290 ✅ +11  0 💤 ±0  0 ❌ ±0 
2 304 runs  +11  2 304 ✅ +11  0 💤 ±0  0 ❌ ±0 

Results for commit 124ec86. ± Comparison against base commit ebf04e3.

♻️ This comment has been updated with latest results.

@MaillPierre MaillPierre linked an issue Jun 1, 2026 that may be closed by this pull request
@MaillPierre MaillPierre marked this pull request as ready for review June 1, 2026 14:20
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

Overall Project 47.9% -0.07% 🍏
Files changed 75.98% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
IfAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
DayAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
AbstractUnlimitedArgumentsFunctionAst.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
FilterAst.java 100% 🍏
ServiceAst.java 100% 🍏
OptionalAst.java 100% 🍏
TriplePatternAst.java 100% 🍏
BgpAst.java 100% 🍏
DescribeQueryAst.java 100% 🍏
MinusAst.java 100% 🍏
UnionAst.java 100% 🍏
BindAst.java 100% 🍏
AskQueryAst.java 97.26% 🍏
HavingAst.java 97.14% 🍏
GroupByAst.java 96.67% 🍏
ConstructTemplateAst.java 96.15% 🍏
AbstractAstVisitor.java 95% -5% 🍏
InAst.java 94.87% -5.13% 🍏
NotInAst.java 94.87% -5.13% 🍏
DatasetClauseAst.java 92.98% 🍏
QueryPrologueAst.java 92.93% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
FilterArgumentsValidationRule.java 90.85% -9.15% 🍏
SparqlQuerySemanticValidator.java 90.74% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
VariableScopeAnalyzer.java 89.76% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
IriAst.java 85% -15%
AndAst.java 81.82% -18.18%
OrAst.java 81.82% -18.18%
AbstractUnaryConstraintAst.java 81.08% 🍏
ProjectionAst.java 79.66% 🍏
BinaryRegexAst.java 79.55% -4.55%
BnodeAst.java 78.57% -4.76% 🍏
StrUuidAst.java 77.78% -22.22% 🍏
UuidAst.java 77.78% -22.22% 🍏
LiteralAst.java 74.19% -25.81%
AggregateAst.java 73.33% -4.44% 🍏
SameTermAst.java 69.57% -8.7%
OrderConditionAst.java 67.74% 🍏
StrBeforeAst.java 66.67% -33.33%
StrStartsAst.java 66.67% -33.33%
SecondsAst.java 66.67% -33.33%
LcaseAst.java 66.67% -33.33%
AbsAst.java 66.67% -33.33%
IsLiteralAst.java 66.67% -33.33%
CoalesceAst.java 66.67% -33.33% 🍏
Sha1Ast.java 66.67% -33.33%
Sha384Ast.java 66.67% -33.33%
UnaryMinusAst.java 66.67% -33.33%
Sha256Ast.java 66.67% -33.33%
EncodeForUriAst.java 66.67% -33.33%
StrLangAst.java 66.67% -33.33%
StrAfterAst.java 66.67% -33.33%
IsIriAst.java 66.67% -33.33%
HoursAst.java 66.67% -33.33%
LangMatchesAst.java 66.67% -33.33%
FloorAst.java 66.67% -33.33%
MonthAst.java 66.67% -33.33%
LangAst.java 66.67% -33.33%
StrEndsAst.java 66.67% -33.33%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.java 66.67% -33.33%
BooleanNotAst.java 66.67% -33.33%
IsBlankAst.java 66.67% -33.33%
Md5Ast.java 66.67% -33.33%
CeilAst.java 66.67% -33.33%
UcaseAst.java 66.67% -33.33%
MinutesAst.java 66.67% -33.33%
ContainsAst.java 66.67% -33.33%
YearAst.java 66.67% -33.33%
BoundAst.java 66.67% -33.33%
ConcatAst.java 66.67% -33.33% 🍏
RoundAst.java 66.67% -33.33%
StrDtAst.java 66.67% -33.33%
UnaryPlusAst.java 66.67% -33.33%
Sha512Ast.java 66.67% -33.33%
SolutionModifierAst.java 63.86% 🍏
ConstructQueryAst.java 62.89% 🍏
ASTQuery.java 62.06% 🍏
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
FunctionCallAst.java 50% -9.62% 🍏
StrLenAst.java 40% -60%
AddAst.java 36.36% -18.18%
GreaterOrEqualThanAst.java 36.36% -18.18%
DifferentAst.java 36.36% -18.18%
MultiplyAst.java 36.36% -18.18%
LowerOrEqualThanAst.java 36.36% -18.18%
GreaterThanAst.java 36.36% -18.18%
DivideAst.java 36.36% -18.18%
LowerThanAst.java 36.36% -18.18%
EqualsAst.java 36.36% -18.18%
SubtractAst.java 36.36% -18.18%
SparqlAstToExpression.java 7.93% -13.49%

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the “next” SPARQL parser/AST with a visitor-based traversal API to support semantic validation, and introduces a new validation rule intended to reject non-boolean expressions used in FILTER (and per title/description, HAVING). It also updates a broad set of AST nodes and tests to align with the new visitor API and with renamed unary-argument accessors.

Changes:

  • Introduces VisitableAst / AstVisitor (+ default AbstractAstVisitor) and implements accept() traversal across the next-query AST hierarchy.
  • Adds and wires FilterArgumentsValidationRule into SparqlQuerySemanticValidator, plus new/updated tests around invalid FILTER(...) forms.
  • Normalizes unary-argument accessors (getArgument()argument()) and updates bridge + parser tests accordingly; renames legacy ASTVisitableAstVisitable.

Reviewed changes

Copilot reviewed 133 out of 133 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserValidationTest.java Adds semantic validation tests for rejecting non-boolean FILTER expressions.
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserUcaseTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserStrUuidTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserNumericFunctionsTest.java Adjusts FILTER tests to use boolean comparisons and updates unary accessors.
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserLcaseTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserIriTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserHashFunctionsTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserFilterTest.java Updates unary-argument accessors and adjusts numeric/unary FILTER cases to be boolean.
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserEncodeForUriTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserDateTimeFunctionsTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCoalesceTest.java Adjusts COALESCE FILTER tests to be boolean comparisons; updates assertions accordingly.
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserBnodeTest.java Updates unary-argument accessor usage (argument()).
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserAggregateTest.java Adds helper doc comment for aggregate extraction in tests.
src/main/java/fr/inria/corese/core/sparql/triple/parser/TopExp.java Renames legacy visitable interface usage to AstVisitable.
src/main/java/fr/inria/corese/core/sparql/triple/parser/ASTQuery.java Renames legacy visitable interface usage to AstVisitable.
src/main/java/fr/inria/corese/core/sparql/triple/api/AstVisitable.java Renames legacy interface ASTVisitableAstVisitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/SparqlAstToExpression.java Updates unary-argument accessors used when converting AST to Corese expressions.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/VarAst.java Adds visitor support and getName() implementation for variables.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ValuesAst.java Makes VALUES visitable and adds traversal over mappings.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ValueMappingAst.java Makes value mappings visitable and adds traversal over map entries.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/UnionAst.java Adds visitor traversal for UNION patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/TriplePatternAst.java Makes triple patterns visitable and adds subject/predicate/object traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/TermAst.java Extends VisitableAst and introduces required getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/SubQueryAst.java Adds visitor traversal for subqueries.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/SolutionModifierAst.java Makes modifiers visitable and adds traversal over GROUP BY / ORDER BY / HAVING.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ServiceAst.java Adds visitor traversal for SERVICE patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/SelectQueryAst.java Adds visitor traversal for SELECT queries across major components.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/QueryPrologueAst.java Makes prologue visitable and traverses prefixes/base.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/QueryAst.java Makes queries visitable (extends VisitableAst).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ProjectionAst.java Makes projection visitable and traverses projected variables.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/PrefixDeclarationAst.java Makes prefix declarations visitable and traverses namespace IRI.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/PatternAst.java Makes patterns visitable (extends VisitableAst) and standardizes accept.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/OrderConditionAst.java Makes ORDER BY conditions visitable and traverses expression.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/OptionalAst.java Adds visitor traversal for OPTIONAL patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/MinusAst.java Adds visitor traversal for MINUS patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/LiteralAst.java Adds visitor support and getName() implementation for literals.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/IriAst.java Adds visitor support and getName() implementation for IRIs.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/HavingAst.java Makes HAVING visitable and traverses conditions.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/GroupGraphPatternAst.java Adds visitor traversal over group graph patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/GroupByAst.java Makes GROUP BY visitable and traverses expressions.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/FilterAst.java Adds visitor traversal for FILTER patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/DescribeQueryAst.java Adds visitor traversal for DESCRIBE queries.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/DatasetClauseAst.java Makes dataset clause visitable and traverses graph IRIs.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstructTemplateAst.java Makes construct templates visitable and traverses template triples.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstructQueryAst.java Adds visitor traversal for CONSTRUCT queries.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstraintAst.java Extends visitability for constraint nodes.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/YearAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UuidAst.java Adds getName() and visitor support.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UnlimitedArgumentsFunctionAst.java Introduces marker interface for variadic functions.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UnaryPlusAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UnaryMinusAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UnaryConstraintAst.java Renames unary accessor to argument().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UcaseAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/TzAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/TrinaryRegexAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/TimezoneAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/SubtractAst.java Adds getName() (currently used for diagnostics).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/SubstrAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrUuidAst.java Adds getName() and visitor support.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrStartsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrLenAst.java Refactors STRLEN to unary base class and adds getName().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrLangAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrEndsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrDtAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrBeforeAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/StrAfterAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/Sha512Ast.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/Sha384Ast.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/Sha256Ast.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/Sha1Ast.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/SecondsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/SameTermAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/RoundAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/ReplaceAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/RandAst.java Adds getName() and visitor support.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/OrAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/NowAst.java Adds getName() and visitor support.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/NotInAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/NotExistsAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/MultiplyAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/MonthAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/MinutesAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/Md5Ast.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/LowerThanAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/LowerOrEqualThanAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/LcaseAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/LangMatchesAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/LangAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/IsLiteralAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/IsIriAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/IsBlankAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/IriFunctionAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/InAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/IfAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/HoursAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/GreaterThanAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/GreaterOrEqualThanAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/FunctionCallAst.java Adds getName() and visitor traversal for IRI-based function calls.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/FloorAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/ExistsAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/EqualsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/EncodeForUriAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/DivideAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/DifferentAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/DayAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/DatatypeAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/ContainsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/ConcatAst.java Refactors CONCAT into variadic base class and adds getName().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/CoalesceAst.java Refactors COALESCE into variadic base class and adds getName().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/CeilAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/BoundAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/BooleanNotAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/BnodeAst.java Adds getName() and visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/BinaryRegexAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AndAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AddAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractUnlimitedArgumentsFunctionAst.java Adds shared variadic function base with visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractUnaryConstraintAst.java Adds visitor traversal and renames unary accessor to argument().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractBinaryFunctionAst.java Makes binary-function base abstract.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractBinaryConstraintAst.java Adds visitor traversal for binary constraints.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbsAst.java Adds getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/validator/SparqlQuerySemanticValidator.java Wires new filter validation rule into semantic validator pipeline.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/VisitableAst.java Introduces base interface for visitor-enabled AST nodes.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/VariableScopeAnalyzer.java Updates unary/variadic AST handling for variable scope analysis.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/AstVisitor.java Introduces AST visitor interface for semantic traversals.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/AbstractAstVisitor.java Provides default no-op visitor implementation.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/FilterArgumentsValidationRule.java Adds rule to validate FILTER argument types (and intended HAVING).
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/AbstractSemanticValidationRule.java Adds reusable incorrect-type diagnostic builder.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Overall Project 47.9% -0.08% 🍏
Files changed 74.03% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
IfAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
DayAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
FilterAst.java 100% 🍏
ServiceAst.java 100% 🍏
OptionalAst.java 100% 🍏
TriplePatternAst.java 100% 🍏
BgpAst.java 100% 🍏
DescribeQueryAst.java 100% 🍏
MinusAst.java 100% 🍏
UnionAst.java 100% 🍏
BindAst.java 100% 🍏
AskQueryAst.java 97.26% 🍏
AbstractUnlimitedArgumentsFunctionAst.java 97.14% -2.86% 🍏
HavingAst.java 97.14% 🍏
GroupByAst.java 96.67% 🍏
ConstructTemplateAst.java 96.15% 🍏
InAst.java 94.87% -5.13% 🍏
NotInAst.java 94.87% -5.13% 🍏
DatasetClauseAst.java 92.98% 🍏
QueryPrologueAst.java 92.93% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
SparqlQuerySemanticValidator.java 90.74% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
AbstractAstVisitor.java 90% -10% 🍏
VariableScopeAnalyzer.java 89.76% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
FilterArgumentsValidationRule.java 86.11% -13.89% 🍏
IriAst.java 85% -15%
AndAst.java 81.82% -18.18%
OrAst.java 81.82% -18.18%
ProjectionAst.java 79.66% 🍏
BinaryRegexAst.java 79.55% -4.55%
BnodeAst.java 78.57% -4.76% 🍏
StrUuidAst.java 77.78% -22.22% 🍏
UuidAst.java 77.78% -22.22% 🍏
AggregateAst.java 73.33% -4.44% 🍏
AbstractUnaryConstraintAst.java 72.73% -11.36% 🍏
SameTermAst.java 69.57% -8.7%
OrderConditionAst.java 67.74% 🍏
StrBeforeAst.java 66.67% -33.33%
StrStartsAst.java 66.67% -33.33%
SecondsAst.java 66.67% -33.33%
LcaseAst.java 66.67% -33.33%
AbsAst.java 66.67% -33.33%
IsLiteralAst.java 66.67% -33.33%
CoalesceAst.java 66.67% -33.33% 🍏
Sha1Ast.java 66.67% -33.33%
Sha384Ast.java 66.67% -33.33%
UnaryMinusAst.java 66.67% -33.33%
Sha256Ast.java 66.67% -33.33%
EncodeForUriAst.java 66.67% -33.33%
StrLangAst.java 66.67% -33.33%
StrAfterAst.java 66.67% -33.33%
IsIriAst.java 66.67% -33.33%
HoursAst.java 66.67% -33.33%
LangMatchesAst.java 66.67% -33.33%
FloorAst.java 66.67% -33.33%
MonthAst.java 66.67% -33.33%
LangAst.java 66.67% -33.33%
StrEndsAst.java 66.67% -33.33%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.java 66.67% -33.33%
BooleanNotAst.java 66.67% -33.33%
IsBlankAst.java 66.67% -33.33%
Md5Ast.java 66.67% -33.33%
CeilAst.java 66.67% -33.33%
UcaseAst.java 66.67% -33.33%
MinutesAst.java 66.67% -33.33%
ContainsAst.java 66.67% -33.33%
YearAst.java 66.67% -33.33%
BoundAst.java 66.67% -33.33%
ConcatAst.java 66.67% -33.33% 🍏
RoundAst.java 66.67% -33.33%
StrDtAst.java 66.67% -33.33%
UnaryPlusAst.java 66.67% -33.33%
Sha512Ast.java 66.67% -33.33%
SolutionModifierAst.java 63.86% 🍏
ConstructQueryAst.java 62.89% 🍏
ASTQuery.java 62.06% 🍏
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
FunctionCallAst.java 50% -9.62% 🍏
LiteralAst.java 44.23% -55.77%
StrLenAst.java 40% -60%
AddAst.java 36.36% -18.18%
GreaterOrEqualThanAst.java 36.36% -18.18%
DifferentAst.java 36.36% -18.18%
MultiplyAst.java 36.36% -18.18%
LowerOrEqualThanAst.java 36.36% -18.18%
GreaterThanAst.java 36.36% -18.18%
DivideAst.java 36.36% -18.18%
LowerThanAst.java 36.36% -18.18%
EqualsAst.java 36.36% -18.18%
SubtractAst.java 36.36% -18.18%
SparqlAstToExpression.java 7.93% -13.49%

MaillPierre and others added 8 commits June 3, 2026 15:22
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@MaillPierre MaillPierre force-pushed the feature/410-sparql-reject-non-boolean-expressions-in-filter-and-having branch from 6890f72 to 124ec86 Compare June 3, 2026 13:49
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

Overall Project 48.15% -0.08% 🍏
Files changed 75.04% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
IfAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
DayAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
FilterAst.java 100% 🍏
ServiceAst.java 100% 🍏
OptionalAst.java 100% 🍏
TriplePatternAst.java 100% 🍏
BgpAst.java 100% 🍏
DescribeQueryAst.java 100% 🍏
MinusAst.java 100% 🍏
UnionAst.java 100% 🍏
BindAst.java 100% 🍏
AskQueryAst.java 97.26% 🍏
AbstractUnlimitedArgumentsFunctionAst.java 97.14% -2.86% 🍏
HavingAst.java 97.14% 🍏
GroupByAst.java 96.67% 🍏
ConstructTemplateAst.java 96.15% 🍏
InAst.java 94.87% -5.13% 🍏
NotInAst.java 94.87% -5.13% 🍏
DatasetClauseAst.java 92.98% 🍏
QueryPrologueAst.java 92.93% 🍏
GraphRefAst.java 92.75% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
AbstractAstVisitor.java 90.91% -9.09% 🍏
SparqlQuerySemanticValidator.java 90.74% 🍏
VariableScopeAnalyzer.java 90.03% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
FilterArgumentsValidationRule.java 86.11% -13.89% 🍏
IriAst.java 85% -15%
AndAst.java 81.82% -18.18%
OrAst.java 81.82% -18.18%
UpdateRequestAst.java 80.95% 🍏
ProjectionAst.java 79.66% 🍏
BinaryRegexAst.java 79.55% -4.55%
BnodeAst.java 78.57% -4.76% 🍏
StrUuidAst.java 77.78% -22.22% 🍏
UuidAst.java 77.78% -22.22% 🍏
ClearRequestAst.java 77.27% 🍏
AggregateAst.java 73.33% -4.44% 🍏
AbstractUnaryConstraintAst.java 72.73% -11.36% 🍏
LoadRequestAst.java 72.5% 🍏
SameTermAst.java 69.57% -8.7%
OrderConditionAst.java 67.74% 🍏
StrBeforeAst.java 66.67% -33.33%
StrStartsAst.java 66.67% -33.33%
SecondsAst.java 66.67% -33.33%
LcaseAst.java 66.67% -33.33%
AbsAst.java 66.67% -33.33%
IsLiteralAst.java 66.67% -33.33%
CoalesceAst.java 66.67% -33.33% 🍏
Sha1Ast.java 66.67% -33.33%
Sha384Ast.java 66.67% -33.33%
UnaryMinusAst.java 66.67% -33.33%
Sha256Ast.java 66.67% -33.33%
EncodeForUriAst.java 66.67% -33.33%
StrLangAst.java 66.67% -33.33%
StrAfterAst.java 66.67% -33.33%
IsIriAst.java 66.67% -33.33%
HoursAst.java 66.67% -33.33%
LangMatchesAst.java 66.67% -33.33%
FloorAst.java 66.67% -33.33%
MonthAst.java 66.67% -33.33%
LangAst.java 66.67% -33.33%
StrEndsAst.java 66.67% -33.33%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.java 66.67% -33.33%
BooleanNotAst.java 66.67% -33.33%
IsBlankAst.java 66.67% -33.33%
Md5Ast.java 66.67% -33.33%
CeilAst.java 66.67% -33.33%
UcaseAst.java 66.67% -33.33%
MinutesAst.java 66.67% -33.33%
ContainsAst.java 66.67% -33.33%
YearAst.java 66.67% -33.33%
BoundAst.java 66.67% -33.33%
ConcatAst.java 66.67% -33.33% 🍏
RoundAst.java 66.67% -33.33%
StrDtAst.java 66.67% -33.33%
UnaryPlusAst.java 66.67% -33.33%
Sha512Ast.java 66.67% -33.33%
SolutionModifierAst.java 63.86% 🍏
ConstructQueryAst.java 62.89% 🍏
ASTQuery.java 62.06% 🍏
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
FunctionCallAst.java 50% -9.62% 🍏
LiteralAst.java 44.23% -55.77%
StrLenAst.java 40% -60%
AddAst.java 36.36% -18.18%
GreaterOrEqualThanAst.java 36.36% -18.18%
DifferentAst.java 36.36% -18.18%
MultiplyAst.java 36.36% -18.18%
LowerOrEqualThanAst.java 36.36% -18.18%
GreaterThanAst.java 36.36% -18.18%
DivideAst.java 36.36% -18.18%
LowerThanAst.java 36.36% -18.18%
EqualsAst.java 36.36% -18.18%
SubtractAst.java 36.36% -18.18%
SparqlAstToExpression.java 7.93% -13.49%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Refactoring Issue created during the 2025 refactoring effort

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SPARQL] Reject non-boolean expressions in FILTER and HAVING

2 participants