Skip to content

412 [SPARQL] Validate operand types in expressions#457

Draft
MaillPierre wants to merge 17 commits into
feature/corese-nextfrom
feature/412-sparql-validate-operand-types-in-expressions
Draft

412 [SPARQL] Validate operand types in expressions#457
MaillPierre wants to merge 17 commits into
feature/corese-nextfrom
feature/412-sparql-validate-operand-types-in-expressions

Conversation

@MaillPierre
Copy link
Copy Markdown
Contributor

Adds checks on functions that will only accept numerics an booleans. Other types can be assumed to be string if reduced to their lexical values.
The argument count is already check during the parsing step.

@MaillPierre MaillPierre self-assigned this Jun 4, 2026
@MaillPierre MaillPierre added the Refactoring Issue created during the 2025 refactoring effort label Jun 4, 2026
@MaillPierre MaillPierre linked an issue Jun 4, 2026 that may be closed by this pull request
@MaillPierre MaillPierre requested a review from Copilot June 4, 2026 09:06
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 4, 2026

Overall Project 48.23% -0.08% 🍏
Files changed 82.82% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
OperandArgumentIRITypeValidationRule.java 100% 🍏
OperandArgumentBooleanTypeValidationRule.java 100% 🍏
AndAst.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
IfAst.java 100% 🍏
OrAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
StrEndsAst.java 100% 🍏
DayAst.java 100% 🍏
BooleanNotAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
AbstractAstVisitor.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
IriAst.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% 🍏
SparqlQuerySemanticValidator.java 92.06% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
SemanticValidationUtils.java 91.1% -8.9% 🍏
VariableScopeAnalyzer.java 90.03% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
OperandArgumentNumericTypeValidationRule.java 89.6% -10.4% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
FilterArgumentsValidationRule.java 87.06% -12.94% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
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%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.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% 🍏
LiteralAst.java 61.54% -38.46%
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
AddAst.java 54.55% 🍏
GreaterOrEqualThanAst.java 54.55% 🍏
MultiplyAst.java 54.55% 🍏
LowerOrEqualThanAst.java 54.55% 🍏
GreaterThanAst.java 54.55% 🍏
DivideAst.java 54.55% 🍏
LowerThanAst.java 54.55% 🍏
SubtractAst.java 54.55% 🍏
FunctionCallAst.java 50% -9.62% 🍏
StrLenAst.java 40% -60%
DifferentAst.java 36.36% -18.18%
EqualsAst.java 36.36% -18.18%
SparqlAstToExpression.java 7.93% -13.49%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 4, 2026

Test Results

  418 files  + 3    418 suites  +3   19s ⏱️ -4s
2 313 tests +34  2 313 ✅ +34  0 💤 ±0  0 ❌ ±0 
2 327 runs  +34  2 327 ✅ +34  0 💤 ±0  0 ❌ ±0 

Results for commit c86b1f6. ± Comparison against base commit ebf04e3.

♻️ This comment has been updated with latest results.

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 query” SPARQL semantic validation layer to validate operand/result types in expressions (notably FILTER/HAVING boolean contexts, numeric-only operators/functions, boolean-only operators, and disallowing IRI ordering comparisons), and introduces/expands an AST visitor pattern (VisitableAst + AstVisitor) to traverse query ASTs consistently for these validations.

Changes:

  • Add new semantic validation rules for FILTER/HAVING boolean resolvability and for numeric/boolean/IRI operand-type constraints.
  • Refactor/standardize AST traversal by adding accept(AstVisitor) across many AST nodes and adding getName() to TermAst for diagnostics.
  • Update and expand parser validation tests to cover new type-validation behavior and updated unary argument accessors.

Reviewed changes

Copilot reviewed 143 out of 143 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserValidationTest.java Adds extensive negative/positive tests for FILTER + operand type validation.
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 numeric function parsing tests to keep FILTER boolean-valid (comparison wrapping).
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 accessor usage and adjusts comparison tests to avoid IRI ordering comparisons.
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()) and relies on new getName/visitor.
src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCoalesceTest.java Updates COALESCE tests to keep FILTER boolean-valid (comparison wrapping).
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 small clarifying helper doc for aggregate extraction in tests.
src/test/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/SemanticValidationUtilsTest.java New unit tests for semantic type-check helpers (boolean/numeric/IRI/unknown).
src/main/java/fr/inria/corese/core/sparql/triple/parser/TopExp.java Renames legacy visitor interface usage to AstVisitable.
src/main/java/fr/inria/corese/core/sparql/triple/parser/ASTQuery.java Renames legacy visitor interface usage to AstVisitable.
src/main/java/fr/inria/corese/core/sparql/triple/api/AstVisitable.java Renames interface from ASTVisitable to AstVisitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/SparqlAstToExpression.java Updates unary constraint accessor from getArgument() to argument().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/VarAst.java Adds getName() and visitor accept(...).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ValuesAst.java Implements visitor traversal for VALUES.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ValueMappingAst.java Implements visitor traversal for VALUES mappings.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/UpdateRequestUnitAst.java Makes update units visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/UpdateRequestAst.java Adds visitor entry point for update requests.
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 traversable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/TermAst.java Adds getName() and makes terms visitable for diagnostics/validation traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/SubQueryAst.java Adds visitor traversal for subqueries in patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/SolutionModifierAst.java Adds visitor traversal for ORDER/GROUP/HAVING etc.
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 query AST.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/QueryPrologueAst.java Makes prologue visitable (prefix/base traversal).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/QueryAst.java Makes QueryAst visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ProjectionAst.java Makes projection visitable (variable traversal).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/PrefixDeclarationAst.java Makes prefix declarations visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/PatternAst.java Makes patterns visitable; adds visitor accept contract.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/OrderConditionAst.java Makes ORDER conditions visitable.
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/LoadRequestAst.java Adds visitor traversal for LOAD update operation.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/LiteralAst.java Adds getName() and visitor accept(...).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/IriAst.java Adds getName() and visitor accept(...).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/HavingAst.java Makes HAVING visitable (condition traversal).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/GroupGraphPatternAst.java Adds visitor traversal for group graph patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/GroupByAst.java Makes GROUP BY visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/GraphRefAst.java Makes graph refs visitable (update/Dataset traversal).
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 query AST.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/DatasetClauseAst.java Makes dataset clause visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstructTemplateAst.java Makes construct template visitable.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstructQueryAst.java Adds visitor traversal for CONSTRUCT query AST.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/ConstraintAst.java Makes constraints explicitly visitable (aligned with TermAst changes).
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 accept(...).
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/UnlimitedArgumentsFunctionAst.java New interface for n-ary functions (arguments list).
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() 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 accept(...).
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 into unary constraint 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 traversal.
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 traversal.
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.
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 to unlimited-args base and adds getName().
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/CoalesceAst.java Refactors COALESCE to unlimited-args base 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 New shared base implementing visitor traversal for unlimited-args functions.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractUnaryConstraintAst.java Adds single-arg ctor, renames accessor, and adds visitor traversal.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/constraint/AbstractBinaryFunctionAst.java Makes binary function base abstract (prevents direct instantiation).
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/sparql/ast/ClearRequestAst.java Adds visitor traversal for CLEAR update operation.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/BindAst.java Adds visitor traversal for BIND patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/BgpAst.java Adds visitor traversal for BGP patterns.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/AskQueryAst.java Adds visitor traversal for ASK query AST.
src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/AggregateAst.java Adds visitor traversal and getName() for diagnostics.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/validator/SparqlQuerySemanticValidator.java Registers new semantic validation rules into the default validator pipeline.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/VisitableAst.java New shared interface to unify accept(AstVisitor) across AST nodes.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/VariableScopeAnalyzer.java Updates traversal for renamed unary accessor and unlimited-args functions.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/SemanticValidationUtils.java New helper utilities for “potential boolean/numeric/IRI/unknown” type checks.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/AstVisitor.java New visitor API for semantic traversal.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/support/AbstractAstVisitor.java Default no-op visitor implementation for selective overrides.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/OperandArgumentNumericTypeValidationRule.java New rule to enforce numeric-only operands/functions.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/OperandArgumentIRITypeValidationRule.java New rule to disallow IRI ordering comparisons.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/OperandArgumentBooleanTypeValidationRule.java New rule to enforce boolean-only operands.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/FilterArgumentsValidationRule.java New rule to enforce FILTER/HAVING boolean-resolvable expressions.
src/main/java/fr/inria/corese/core/next/query/impl/parser/semantic/rule/AbstractSemanticValidationRule.java Adds shared diagnostic constructors for scope and type errors.

💡 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 4, 2026

Overall Project 48.23% -0.08% 🍏
Files changed 82.85% 🍏

File Coverage
AbstractSemanticValidationRule.java 100% 🍏
OperandArgumentIRITypeValidationRule.java 100% 🍏
OperandArgumentBooleanTypeValidationRule.java 100% 🍏
AndAst.java 100% 🍏
AbstractBinaryFunctionAst.java 100% 🍏
IfAst.java 100% 🍏
OrAst.java 100% 🍏
RandAst.java 100% 🍏
NowAst.java 100% 🍏
DatatypeAst.java 100% 🍏
StrEndsAst.java 100% 🍏
DayAst.java 100% 🍏
BooleanNotAst.java 100% 🍏
AbstractBinaryConstraintAst.java 100% 🍏
AbstractAstVisitor.java 100% 🍏
GroupGraphPatternAst.java 100% 🍏
IriAst.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% 🍏
SparqlQuerySemanticValidator.java 92.06% 🍏
ReplaceAst.java 91.15% -1.77% 🍏
SemanticValidationUtils.java 91.1% -8.9% 🍏
VariableScopeAnalyzer.java 90.03% 🍏
NotExistsAst.java 90% -10% 🍏
ExistsAst.java 90% -10% 🍏
OperandArgumentNumericTypeValidationRule.java 89.6% -10.4% 🍏
PrefixDeclarationAst.java 88.37% 🍏
SubstrAst.java 88.16% -2.63% 🍏
TrinaryRegexAst.java 87.84% -2.7% 🍏
ValuesAst.java 87.5% 🍏
ValueMappingAst.java 87.5% 🍏
FilterArgumentsValidationRule.java 87.06% -12.94% 🍏
SelectQueryAst.java 87% 🍏
VarAst.java 86.96% -13.04%
UpdateRequestAst.java 82.22% 🍏
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%
TzAst.java 66.67% -33.33%
IriFunctionAst.java 66.67% -33.33%
TimezoneAst.java 66.67% -33.33%
StrAst.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% 🍏
LiteralAst.java 61.54% -38.46%
SubQueryAst.java 59.38% 🍏
TopExp.java 55.56% 🍏
AddAst.java 54.55% 🍏
GreaterOrEqualThanAst.java 54.55% 🍏
MultiplyAst.java 54.55% 🍏
LowerOrEqualThanAst.java 54.55% 🍏
GreaterThanAst.java 54.55% 🍏
DivideAst.java 54.55% 🍏
LowerThanAst.java 54.55% 🍏
SubtractAst.java 54.55% 🍏
FunctionCallAst.java 50% -9.62% 🍏
StrLenAst.java 40% -60%
DifferentAst.java 36.36% -18.18%
EqualsAst.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] Validate operand types in expressions

2 participants