Skip to content

New batch of fixes for Opencypher TCK tests#3366

Merged
lvca merged 17 commits intomainfrom
opencypher-tck
Feb 7, 2026
Merged

New batch of fixes for Opencypher TCK tests#3366
lvca merged 17 commits intomainfrom
opencypher-tck

Conversation

@lvca
Copy link
Contributor

@lvca lvca commented Feb 7, 2026

No description provided.

lvca added 17 commits February 6, 2026 10:24
Reached much better compliance with the latest changes:

```
=======================================================
         OpenCypher TCK Compliance Report
=======================================================
Total scenarios:  3897
Passed:           1908 (48%)
Failed:           1939 (49%)
Skipped:          50 (1%)
-------------------------------------------------------
By category:
  clauses/call                               2/ 52 passed (3%)
  clauses/create                            64/ 78 passed (82%)
  clauses/delete                            24/ 41 passed (58%)
  clauses/match                            292/381 passed (76%)
  clauses/match-where                       25/ 34 passed (73%)
  clauses/merge                             47/ 75 passed (62%)
  clauses/remove                            29/ 33 passed (87%)
  clauses/return                            35/ 63 passed (55%)
  clauses/return-orderby                    23/ 35 passed (65%)
  clauses/return-skip-limit                 26/ 31 passed (83%)
  clauses/set                               30/ 53 passed (56%)
  clauses/union                              8/ 12 passed (66%)
  clauses/unwind                            10/ 14 passed (71%)
  clauses/with                              14/ 29 passed (48%)
  clauses/with-orderBy                     124/292 passed (42%)
  clauses/with-skip-limit                    7/  9 passed (77%)
  clauses/with-where                        10/ 19 passed (52%)
  expressions/aggregation                   23/ 35 passed (65%)
  expressions/boolean                      150/150 passed (100%)
  expressions/comparison                    36/ 72 passed (50%)
  expressions/conditional                   13/ 13 passed (100%)
  expressions/existentialSubqueries          4/ 10 passed (40%)
  expressions/graph                         32/ 61 passed (52%)
  expressions/list                         120/185 passed (64%)
  expressions/literals                     120/131 passed (91%)
  expressions/map                           28/ 44 passed (63%)
  expressions/mathematical                   3/  6 passed (50%)
  expressions/null                          44/ 44 passed (100%)
  expressions/path                           0/  7 passed (0%)
  expressions/pattern                       19/ 50 passed (38%)
  expressions/precedence                    20/121 passed (16%)
  expressions/quantifier                   478/604 passed (79%)
  expressions/string                        22/ 32 passed (68%)
  expressions/temporal                       0/1004 passed (0%)
  expressions/typeConversion                19/ 47 passed (40%)
  useCases/countingSubgraphMatches           6/ 11 passed (54%)
  useCases/triadicSelection                  1/ 19 passed (5%)
=======================================================
```
@lvca lvca self-assigned this Feb 7, 2026
@lvca lvca added this to the 26.2.1 milestone Feb 7, 2026
@lvca lvca marked this pull request as ready for review February 7, 2026 17:36
@lvca lvca merged commit 935cb85 into main Feb 7, 2026
8 of 10 checks passed
@lvca lvca deleted the opencypher-tck branch February 7, 2026 17:36
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @lvca, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request delivers a significant batch of fixes and improvements aimed at enhancing the OpenCypher implementation's adherence to the TCK specification. The changes span across various core components, including expression evaluation, temporal data handling, query clause processing, and semantic validation. The primary goal is to ensure more accurate and compliant behavior for a wider range of Cypher queries, particularly those involving complex data types, arithmetic operations, and data manipulation statements.

Highlights

  • Enhanced Cypher TCK Compliance: Multiple fixes and enhancements have been implemented to improve compliance with the OpenCypher Technology Compatibility Kit (TCK). This includes refined temporal arithmetic, accurate list comparison logic, correct three-valued logic for string matching, and strict type validation for functions like toBoolean() and list indexing.
  • Expanded SET Clause Functionality: The SET clause now fully supports property assignment (SET n.prop = value), map replacement (SET n = {map}), map merging (SET n += {map}), and label assignment (SET n:Label). Label changes are handled by migrating vertex data to a new composite type if necessary.
  • Improved Temporal Type Handling: Temporal calculations, especially for durations (durationInMonths, durationInDays, durationInSeconds, durationBetween), have been made more robust. This includes better handling of mixed temporal types, DST-aware comparisons, and precise nanosecond calculations using a new TemporalUtil.computeNanos helper.
  • New Aggregation Functions: Two new aggregation functions, percentileDisc() and percentileCont(), have been added to compute discrete and continuous percentiles, respectively.
  • Refined Query Optimizer Logic: The query execution plan now intelligently bypasses the optimizer when WITH clauses precede MATCH clauses, ensuring correct variable scoping and execution order for complex queries.
  • Richer Semantic Validation: New semantic validation checks have been introduced for UNION queries (ensuring consistent return columns and preventing mixing UNION and UNION ALL), duplicate column aliases in RETURN and WITH clauses, and enforcing aliases for non-variable expressions in WITH clauses when aggregations are present.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • engine/src/main/java/com/arcadedb/query/opencypher/Labels.java
    • Corrected getLabels to return an empty list for unlabeled nodes and filter out base types from supertypes.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/ArithmeticExpression.java
    • Made evaluateTemporalArithmetic static and public for external evaluation.
    • Adjusted DIVIDE and MODULO operations to align with IEEE 754 and Cypher's behavior for zero divisors.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/ComparisonExpression.java
    • Implemented lexicographic comparison for lists, including null propagation and length-based comparison.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/FunctionCallExpression.java
    • Preserved original function name case for getText() method.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/InExpression.java
    • Improved handling of right-hand side of IN expressions, supporting single list variables and list literals.
    • Added deep comparison for lists in valuesEqual method.
    • Introduced type validation for the right-hand side of IN expressions.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/ListIndexExpression.java
    • Added strict type validation for list indices, throwing IllegalArgumentException for non-integer types.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/PropertyAccessExpression.java
    • Introduced convertFromStorage to automatically convert stored temporal values back to Cypher temporal objects.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/SetClause.java
    • Refactored SetItem to support different SET clause types: PROPERTY, REPLACE_MAP, MERGE_MAP, and LABELS.
  • engine/src/main/java/com/arcadedb/query/opencypher/ast/StringMatchExpression.java
    • Implemented three-valued logic for string matching, returning null for null or non-string operands.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/CypherExecutionPlan.java
    • Added hasWithPrecedingMatch check to bypass the optimizer when WITH clauses precede MATCH.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/CypherFunctionFactory.java
    • Moved substring to Cypher-specific functions and implemented its logic.
    • Added percentileDisc and percentileCont aggregation functions.
    • Enhanced properties() function to handle Result objects.
    • Added argument validation for range() function to ensure integer and non-null inputs.
    • Updated temporal function map applications to use TemporalUtil.computeNanos.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/ExpressionEvaluator.java
    • Delegated temporal arithmetic evaluation to ArithmeticExpression and applied consistent DIVIDE/MODULO behavior.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/steps/CreateStep.java
    • Modified createProperties to not store null property values.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/steps/MergeStep.java
    • Refactored applySetClause to handle new SetType enum, supporting all SET clause variations including label changes.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/steps/OrderByStep.java
    • Enhanced compareValues for sorting, including NaN handling, deep list comparison, boolean comparison, and type ranking.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/steps/SetStep.java
    • Refactored applySetOperations into dedicated methods for property, map, and label updates, supporting vertex migration for label changes.
  • engine/src/main/java/com/arcadedb/query/opencypher/parser/CypherASTBuilder.java
    • Updated visitSetClause to parse and build AST nodes for all new SET clause types.
  • engine/src/main/java/com/arcadedb/query/opencypher/parser/CypherSemanticValidator.java
    • Added validateUnion for UNION query consistency checks.
    • Improved validateVariableScope for WITH, SET, and DELETE clauses.
    • Introduced validateColumnNames for duplicate alias detection.
    • Added validateExpressionAliases to enforce aliasing for non-variable expressions in WITH clauses.
    • Added checkAggregationInOrderBy to validate aggregation functions in ORDER BY clauses.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/CypherDateTime.java
    • Updated temporal constructors from map to use TemporalUtil.computeNanos.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/CypherDuration.java
    • Improved toString() for negative durations and refined appendSecondsWithFraction.
    • Enhanced durationInMonths and durationInDays to adjust for time-of-day in calculations.
    • Improved durationInSeconds and durationBetween for mixed temporal types and DST-aware calculations.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/CypherLocalDateTime.java
    • Updated temporal constructors from map to use TemporalUtil.computeNanos.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/CypherLocalTime.java
    • Updated temporal constructors from map to use TemporalUtil.computeNanos.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/CypherTime.java
    • Defaulted now() and parse() to ZoneOffset.UTC for deterministic behavior.
    • Updated temporal constructors from map to use TemporalUtil.computeNanos.
  • engine/src/main/java/com/arcadedb/query/opencypher/temporal/TemporalUtil.java
    • Added computeNanos for consistent nanosecond calculation from map fields.
    • Extended extractTime to handle more temporal types.
    • Introduced resolveDateTime, toZonedDateTime, getReferenceDate, toInstant for robust temporal conversions.
  • engine/src/test/java/com/arcadedb/query/opencypher/OpenCypherAdvancedFunctionTest.java
    • Updated toBooleanFunctionWithNumber test to assert TypeError for numeric input.
  • engine/src/test/java/com/arcadedb/query/opencypher/OpenCypherExpressionTest.java
    • Updated tests for arithmeticDivision and combinedMapWithArithmetic to expect Long results for integer division.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@mergify
Copy link
Contributor

mergify bot commented Feb 7, 2026

🧪 CI Insights

Here's what we observed from your CI run for 900a178.

🟢 All jobs passed!

But CI Insights is watching 👀

@claude
Copy link

claude bot commented Feb 7, 2026

Code Review: OpenCypher TCK Test Fixes

This PR implements important fixes for OpenCypher TCK test compliance. I've reviewed the changes and have the following feedback:

✅ Strengths

  1. Comprehensive OpenCypher Compliance: The changes systematically address OpenCypher specification issues, particularly around:

    • Null handling (three-valued logic)
    • Temporal type operations
    • List comparison semantics
    • Type checking for list indexing
  2. Well-Documented Changes: Code includes clear comments explaining Cypher-specific behaviors (e.g., null propagation, list ordering)

  3. Good Refactoring: Making evaluateTemporalArithmetic static and public (ArithmeticExpression.java:69) allows reuse by ExpressionEvaluator

  4. Proper Null Safety: Changes to Labels.java:116-117 correctly handle unlabeled vertices by returning empty list

🔍 Issues & Suggestions

Critical

  1. List Comparison Performance (ComparisonExpression.java:181-215):

    • Creates new ComparisonExpression objects recursively for each list element
    • Creates temporary LiteralExpression wrappers unnecessarily
    • Recommendation: Extract comparison logic into a helper method that operates directly on values without creating expression objects
    private Object compareListsLexicographic(List<?> l1, List<?> l2, Operator op) {
      // Direct value comparison without expression object creation
    }
  2. Division by Zero Handling (ArithmeticExpression.java:56-57):

    • Integer division by zero will throw ArithmeticException (not caught)
    • Only handles double division (which returns Infinity/NaN per IEEE 754)
    • Recommendation: Add explicit integer division by zero check or ensure operands are always doubles
  3. String Parsing Heuristics (PropertyAccessExpression.java:95-122):

    • String parsing heuristic str.charAt(2) == ':' at line 105 may match non-time strings
    • No length validation before charAt(5) check
    • Recommendation: More robust validation or use try-catch more defensively

Moderate

  1. Type Validation Inconsistency (ListIndexExpression.java:314-334):

    • Boolean type check at line 323 returns null instead of throwing error (inconsistent with Float at line 322)
    • Recommendation: Throw error for Boolean type consistently
  2. Transaction Management (SetStep.java:111-140):

    • Transaction logic checks wasInTransaction but doesn't handle nested transactions explicitly
    • If outer transaction fails, inner commit would still execute
    • Recommendation: Consider documenting transaction semantics or adding guard
  3. Original Function Name Storage (FunctionCallExpression.java:232):

    • Stores originalFunctionName for getText() but this doubles memory for every function call
    • Recommendation: Only store if different from lowercase version

Minor

  1. Temporal Util Complexity (TemporalUtil.java):

    • durationBetween method (lines 280-339) is quite complex with normalization logic
    • Could benefit from breaking into smaller helper methods
    • Recommendation: Extract normalization logic into separate method
  2. Magic Numbers (TemporalUtil.java:329):

    • Uses magic number 29 for day borrowing (line 329: days += 29)
    • Comment says "30 days, subtract 1" but unclear why not use calculated value
    • Recommendation: Add clearer comment or use constant
  3. Ordering Operators Logic (ComparisonExpression.java:202-208):

    • LESS_THAN_OR_EQUAL and GREATER_THAN_OR_EQUAL use same logic as LESS_THAN/GREATER_THAN in element-differs case
    • Appears correct but could be clearer
    • Recommendation: Add comment explaining that when elements differ, <= and < give same result

🧪 Testing Recommendations

  1. Add test case: Integer division by zero (currently not handled)
  2. Add test case: List comparison with deeply nested null values
  3. Add test case: PropertyAccessExpression with malformed time strings
  4. Add test case: Concurrent SET operations with nested transactions
  5. Performance test: Large list comparisons to validate acceptable performance

📝 Code Style

  • Code follows project conventions (no curly braces for single statements, final keyword usage)
  • Proper use of switch expressions (Java 17+ feature)
  • Good adherence to CLAUDE.md guidelines

✏️ Nitpicks

  • ArithmeticExpression.java:56: Comment could mention integer vs float division behavior
  • OrderByStep.java:89: Pulling Integer.MAX_VALUE records materializes entire result set - consider documenting memory implications
  • Consider adding @throws JavaDoc for new IllegalArgumentException cases

🎯 Recommendation

Approve with minor revisions. The critical issues should be addressed before merge:

  1. Fix list comparison performance (issue build support #1)
  2. Handle integer division by zero (issue Bump gremlin.version from 3.4.10 to 3.5.1 #2)
  3. Improve string parsing robustness (issue Bump slf4j-simple.version from 1.7.31 to 1.7.32 #3)

The other issues are improvements that could be addressed in follow-up work.


Review generated following ArcadeDB project guidelines from CLAUDE.md

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a substantial number of fixes and improvements to the OpenCypher engine, aimed at increasing compliance with the TCK tests. The changes are wide-ranging, including:

  • Enhanced SET clause functionality to support map replacement/merging and label setting.
  • Implementation of lexicographical list comparison.
  • Addition of new functions like substring, percentileDisc, and percentileCont.
  • Numerous correctness fixes for temporal type handling, arithmetic operations, and semantic validation.

The code quality is generally high, and the changes significantly improve the engine's capabilities. I've provided a few suggestions for refactoring to improve efficiency and reduce code duplication. Overall, this is a great contribution.

Comment on lines +185 to +209
for (int i = 0; i < minSize; i++) {
final Object elemCmp = new ComparisonExpression(
new LiteralExpression(leftList.get(i), ""), Operator.EQUALS,
new LiteralExpression(rightList.get(i), ""))
.evaluateTernary(null, null);
if (elemCmp == null)
return null; // null element makes ordering undefined
if (Boolean.TRUE.equals(elemCmp))
continue; // elements are equal, compare next
// Elements differ: check less than
final Object ltResult = new ComparisonExpression(
new LiteralExpression(leftList.get(i), ""), Operator.LESS_THAN,
new LiteralExpression(rightList.get(i), ""))
.evaluateTernary(null, null);
if (ltResult == null)
return null;
final boolean isLess = Boolean.TRUE.equals(ltResult);
return switch (operator) {
case LESS_THAN -> isLess;
case GREATER_THAN -> !isLess;
case LESS_THAN_OR_EQUAL -> isLess;
case GREATER_THAN_OR_EQUAL -> !isLess;
default -> null;
};
}
Copy link
Contributor

Choose a reason for hiding this comment

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

high

The implementation for lexicographical list comparison creates new ComparisonExpression and LiteralExpression objects within a loop for each element comparison. This is inefficient and can lead to significant overhead and performance degradation, especially for large lists.

To improve performance, this logic should be refactored to avoid unnecessary object instantiation. Consider extracting the comparison logic into a helper method that can be called directly with the list elements, or by making the compareValuesTernary method accessible for recursive calls without creating new ComparisonExpression instances.

Comment on lines 127 to 134
final List<String> labels = new ArrayList<>(superTypes.size());
for (final DocumentType superType : superTypes)
labels.add(superType.getName());
for (final DocumentType superType : superTypes) {
final String name = superType.getName();
if (!"Vertex".equals(name) && !"V".equals(name))
labels.add(name);
}
Collections.sort(labels);
return labels;
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

This block of code for filtering and sorting labels can be made more concise and expressive by using Java Streams. This would improve readability and align with modern Java practices.

Suggested change
final List<String> labels = new ArrayList<>(superTypes.size());
for (final DocumentType superType : superTypes)
labels.add(superType.getName());
for (final DocumentType superType : superTypes) {
final String name = superType.getName();
if (!"Vertex".equals(name) && !"V".equals(name))
labels.add(name);
}
Collections.sort(labels);
return labels;
// Multi-label vertex - supertypes are the labels, filter out base types
return superTypes.stream()
.map(DocumentType::getName)
.filter(name -> !"Vertex".equals(name) && !"V".equals(name))
.sorted()
.collect(java.util.stream.Collectors.toList());

*
* @param result the result containing variables to update
*/
private void applySetOperations(final Result result) {
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The logic for applying SET operations in this class, particularly in applySetOperations and its helper methods (applyPropertySet, applyReplaceMap, applyMergeMap, applyLabels), is very similar to the logic found in MergeStep.applySetClause. This code duplication can make future maintenance more difficult, as changes would need to be applied in both places.

Consider refactoring this common logic into a shared utility class or methods within the package to reduce duplication and improve maintainability.

@codacy-production
Copy link

Coverage summary from Codacy

See diff coverage on Codacy

Coverage variation Diff coverage
Report missing for 918725f1 26.21%
Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (918725f) Report Missing Report Missing Report Missing
Head commit (900a178) 109526 63266 57.76%

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#3366) 725 190 26.21%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

See your quality gate settings    Change summary preferences

Footnotes

  1. Codacy didn't receive coverage data for the commit, or there was an error processing the received data. Check your integration for errors and validate that your coverage setup is correct.

@codecov
Copy link

codecov bot commented Feb 7, 2026

Codecov Report

❌ Patch coverage is 18.48276% with 591 lines in your changes missing coverage. Please review.
✅ Project coverage is 60.49%. Comparing base (960fa7f) to head (900a178).
⚠️ Report is 10 commits behind head on main.

Files with missing lines Patch % Lines
...cadedb/query/opencypher/temporal/TemporalUtil.java 0.00% 133 Missing ⚠️
...ery/opencypher/executor/CypherFunctionFactory.java 3.40% 82 Missing and 3 partials ⚠️
...adedb/query/opencypher/executor/steps/SetStep.java 20.00% 70 Missing and 6 partials ⚠️
...edb/query/opencypher/executor/steps/MergeStep.java 13.33% 48 Missing and 4 partials ⚠️
...b/query/opencypher/executor/steps/OrderByStep.java 10.00% 27 Missing and 9 partials ⚠️
...ery/opencypher/parser/CypherSemanticValidator.java 60.97% 20 Missing and 12 partials ⚠️
...edb/query/opencypher/ast/ComparisonExpression.java 0.00% 30 Missing ⚠️
...dedb/query/opencypher/parser/CypherASTBuilder.java 0.00% 28 Missing and 1 partial ⚠️
...edb/query/opencypher/ast/ArithmeticExpression.java 4.00% 22 Missing and 2 partials ⚠️
...om/arcadedb/query/opencypher/ast/InExpression.java 30.00% 11 Missing and 3 partials ⚠️
... and 13 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3366      +/-   ##
==========================================
- Coverage   61.28%   60.49%   -0.80%     
==========================================
  Files        1157     1164       +7     
  Lines       78083    79962    +1879     
  Branches    15444    16034     +590     
==========================================
+ Hits        47855    48370     +515     
- Misses      23398    24682    +1284     
- Partials     6830     6910      +80     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

robfrank pushed a commit that referenced this pull request Feb 17, 2026
* test: including official opencypher tck

* fix: fixed many issues with opencypher from TCK tests

* fix: fixed broken tests from OpenCyphr TCK

* fix: more opencypher issues from tck tests

* fix: opencypher tck more tests pass now

Reached much better compliance with the latest changes:

```
=======================================================
         OpenCypher TCK Compliance Report
=======================================================
Total scenarios:  3897
Passed:           1908 (48%)
Failed:           1939 (49%)
Skipped:          50 (1%)
-------------------------------------------------------
By category:
  clauses/call                               2/ 52 passed (3%)
  clauses/create                            64/ 78 passed (82%)
  clauses/delete                            24/ 41 passed (58%)
  clauses/match                            292/381 passed (76%)
  clauses/match-where                       25/ 34 passed (73%)
  clauses/merge                             47/ 75 passed (62%)
  clauses/remove                            29/ 33 passed (87%)
  clauses/return                            35/ 63 passed (55%)
  clauses/return-orderby                    23/ 35 passed (65%)
  clauses/return-skip-limit                 26/ 31 passed (83%)
  clauses/set                               30/ 53 passed (56%)
  clauses/union                              8/ 12 passed (66%)
  clauses/unwind                            10/ 14 passed (71%)
  clauses/with                              14/ 29 passed (48%)
  clauses/with-orderBy                     124/292 passed (42%)
  clauses/with-skip-limit                    7/  9 passed (77%)
  clauses/with-where                        10/ 19 passed (52%)
  expressions/aggregation                   23/ 35 passed (65%)
  expressions/boolean                      150/150 passed (100%)
  expressions/comparison                    36/ 72 passed (50%)
  expressions/conditional                   13/ 13 passed (100%)
  expressions/existentialSubqueries          4/ 10 passed (40%)
  expressions/graph                         32/ 61 passed (52%)
  expressions/list                         120/185 passed (64%)
  expressions/literals                     120/131 passed (91%)
  expressions/map                           28/ 44 passed (63%)
  expressions/mathematical                   3/  6 passed (50%)
  expressions/null                          44/ 44 passed (100%)
  expressions/path                           0/  7 passed (0%)
  expressions/pattern                       19/ 50 passed (38%)
  expressions/precedence                    20/121 passed (16%)
  expressions/quantifier                   478/604 passed (79%)
  expressions/string                        22/ 32 passed (68%)
  expressions/temporal                       0/1004 passed (0%)
  expressions/typeConversion                19/ 47 passed (40%)
  useCases/countingSubgraphMatches           6/ 11 passed (54%)
  useCases/triadicSelection                  1/ 19 passed (5%)
=======================================================
```

* fix: opencypher implemented missing temporal functions + precedence

Issue #3357 and #3355

* fix: opencypher implemented more missing functions

Issue #3357 and #3355

* fix: opencypher more code fixed thank to the tck

(cherry picked from commit 935cb85)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant