graphforge 0.3.6__tar.gz → 0.3.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (677) hide show
  1. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/changelog-check.yml +4 -0
  2. graphforge-0.3.8/.github/workflows/test.yml +416 -0
  3. {graphforge-0.3.6 → graphforge-0.3.8}/CHANGELOG.md +74 -0
  4. graphforge-0.3.8/PKG-INFO +382 -0
  5. graphforge-0.3.8/README.md +334 -0
  6. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/snap.md +1 -1
  7. graphforge-0.3.8/docs/development/parser-performance-analysis.md +139 -0
  8. graphforge-0.3.8/docs/getting-started/installation.md +43 -0
  9. graphforge-0.3.8/docs/getting-started/quickstart.md +112 -0
  10. {graphforge-0.3.6 → graphforge-0.3.8}/docs/getting-started/tutorial.md +3 -3
  11. graphforge-0.3.8/docs/guide/cypher-guide.md +840 -0
  12. graphforge-0.3.8/docs/index.md +83 -0
  13. graphforge-0.3.8/docs/reference/RELEASE_TRACKING.md +61 -0
  14. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/implementation-status/clauses.md +2 -0
  15. graphforge-0.3.8/docs/reference/implementation-status/functions.md +347 -0
  16. graphforge-0.3.8/docs/reference/opencypher-compatibility-matrix.md +469 -0
  17. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-compatibility.md +69 -161
  18. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-features/01-clauses.md +1 -1
  19. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-features/05-data-types.md +2 -2
  20. graphforge-0.3.8/docs/reference/tck-compliance.md +58 -0
  21. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/tck-inventory.md +1 -1
  22. {graphforge-0.3.6 → graphforge-0.3.8}/docs/use-cases/agent-grounding.md +2 -1
  23. graphforge-0.3.8/docs/use-cases/agent-tool-recall.md +467 -0
  24. graphforge-0.3.8/docs/use-cases/knowledge-graph-construction.md +524 -0
  25. graphforge-0.3.8/docs/use-cases/llm-workflows.md +589 -0
  26. graphforge-0.3.8/docs/use-cases/network-analysis.md +619 -0
  27. {graphforge-0.3.6 → graphforge-0.3.8}/mkdocs.yml +6 -0
  28. {graphforge-0.3.6 → graphforge-0.3.8}/pyproject.toml +15 -3
  29. graphforge-0.3.8/scripts/tck_perf_report.py +179 -0
  30. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/api.py +65 -11
  31. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/ast/__init__.py +2 -0
  32. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/ast/clause.py +40 -24
  33. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/ast/expression.py +46 -7
  34. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/executor/evaluator.py +1477 -202
  35. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/executor/executor.py +1452 -444
  36. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/join_reorder.py +22 -10
  37. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/predicate_utils.py +82 -1
  38. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/parser/cypher.lark +89 -42
  39. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/parser/parser.py +482 -83
  40. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/planner/operators.py +107 -14
  41. graphforge-0.3.8/src/graphforge/planner/planner.py +3267 -0
  42. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/planner/types.py +32 -1
  43. graphforge-0.3.8/src/graphforge/procedures/__init__.py +5 -0
  44. graphforge-0.3.8/src/graphforge/procedures/registry.py +142 -0
  45. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/storage/memory.py +114 -112
  46. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/storage/serialization.py +22 -6
  47. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/types/graph.py +68 -0
  48. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/types/values.py +422 -71
  49. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_end_to_end_workflows.py +2 -0
  50. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/executor/test_graph_functions.py +6 -6
  51. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_aggregation_edge_cases.py +110 -0
  52. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_arithmetic.py +7 -6
  53. graphforge-0.3.8/tests/integration/test_call_procedures.py +140 -0
  54. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_column_naming.py +6 -6
  55. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_complex_merge_patterns.py +6 -22
  56. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_create_edge_cases.py +10 -13
  57. graphforge-0.3.8/tests/integration/test_graph_element_comparison.py +123 -0
  58. graphforge-0.3.8/tests/integration/test_list_concatenation.py +110 -0
  59. graphforge-0.3.8/tests/integration/test_map_subscript.py +89 -0
  60. graphforge-0.3.8/tests/integration/test_math_functions_new.py +248 -0
  61. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_merge_edge_cases.py +34 -114
  62. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_merge_on_create_real.py +7 -15
  63. graphforge-0.3.8/tests/integration/test_mixed_type_sort.py +110 -0
  64. graphforge-0.3.8/tests/integration/test_nan_handling.py +194 -0
  65. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_null_handling.py +56 -10
  66. graphforge-0.3.8/tests/integration/test_operator_precedence.py +260 -0
  67. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_optional_match.py +9 -3
  68. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_path_binding_variable_length.py +8 -7
  69. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_pattern_predicates.py +2 -2
  70. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_power_operator.py +24 -24
  71. graphforge-0.3.8/tests/integration/test_properties_keys_functions.py +136 -0
  72. graphforge-0.3.8/tests/integration/test_relationship_uniqueness.py +147 -0
  73. graphforge-0.3.8/tests/integration/test_skip_limit_expressions.py +76 -0
  74. graphforge-0.3.8/tests/integration/test_startnode_endnode_functions.py +57 -0
  75. graphforge-0.3.8/tests/integration/test_temporal_select_into.py +392 -0
  76. graphforge-0.3.8/tests/integration/test_type_conversion_fixes.py +185 -0
  77. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_type_functions.py +30 -29
  78. graphforge-0.3.8/tests/integration/test_with_clause_positions.py +108 -0
  79. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/conftest.py +479 -94
  80. graphforge-0.3.8/tests/tck/tck_config.yaml +264 -0
  81. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_snap_datasets.py +5 -1
  82. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_arithmetic_evaluator.py +20 -9
  83. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_evaluator.py +51 -52
  84. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_executor_error_paths.py +5 -5
  85. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_expressions_match.py +31 -1
  86. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_graph_functions.py +6 -6
  87. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_map_property_access.py +13 -8
  88. graphforge-0.3.8/tests/unit/executor/test_optional_expand_bound_dst.py +188 -0
  89. graphforge-0.3.8/tests/unit/executor/test_parenthesized_expr_coverage.py +121 -0
  90. graphforge-0.3.8/tests/unit/executor/test_procedure_call_executor.py +143 -0
  91. graphforge-0.3.8/tests/unit/executor/test_properties_keys_errors.py +36 -0
  92. graphforge-0.3.8/tests/unit/executor/test_set_extensions.py +143 -0
  93. graphforge-0.3.8/tests/unit/executor/test_startnode_endnode_errors.py +53 -0
  94. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_string_matching_evaluator.py +22 -40
  95. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_temporal_truncate_arithmetic.py +1 -1
  96. graphforge-0.3.8/tests/unit/executor/test_type_conversion_complex.py +110 -0
  97. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_statistics.py +3 -3
  98. graphforge-0.3.8/tests/unit/parser/test_call_procedure_parser.py +84 -0
  99. graphforge-0.3.8/tests/unit/parser/test_float_literals.py +150 -0
  100. graphforge-0.3.8/tests/unit/parser/test_order_by_direction.py +62 -0
  101. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_parser.py +10 -6
  102. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_parser_caching.py +14 -4
  103. graphforge-0.3.8/tests/unit/parser/test_with_clause_positions.py +41 -0
  104. graphforge-0.3.8/tests/unit/planner/test_call_procedure_planner.py +101 -0
  105. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_operator_validation.py +8 -6
  106. graphforge-0.3.8/tests/unit/planner/test_planner_branch_coverage.py +682 -0
  107. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_planner_edge_cases.py +13 -9
  108. graphforge-0.3.8/tests/unit/planner/test_syntax_error_validation.py +252 -0
  109. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_type_tracking.py +7 -2
  110. graphforge-0.3.8/tests/unit/procedures/__init__.py +0 -0
  111. graphforge-0.3.8/tests/unit/procedures/test_registry.py +138 -0
  112. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/types/test_cypher_values_deep_equality.py +3 -4
  113. graphforge-0.3.8/tests/unit/types/test_extreme_temporal_values.py +554 -0
  114. graphforge-0.3.8/tests/unit/types/test_graph_element_edge_cases.py +257 -0
  115. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/types/test_temporal_values.py +2 -2
  116. {graphforge-0.3.6 → graphforge-0.3.8}/uv.lock +39 -15
  117. graphforge-0.3.6/.github/workflows/test.yml +0 -227
  118. graphforge-0.3.6/PKG-INFO +0 -1645
  119. graphforge-0.3.6/README.md +0 -1599
  120. graphforge-0.3.6/docs/getting-started/installation.md +0 -44
  121. graphforge-0.3.6/docs/getting-started/quickstart.md +0 -112
  122. graphforge-0.3.6/docs/guide/cypher-guide.md +0 -811
  123. graphforge-0.3.6/docs/index.md +0 -109
  124. graphforge-0.3.6/docs/reference/RELEASE_TRACKING.md +0 -279
  125. graphforge-0.3.6/docs/reference/implementation-status/functions.md +0 -451
  126. graphforge-0.3.6/docs/reference/opencypher-compatibility-matrix.md +0 -539
  127. graphforge-0.3.6/docs/reference/tck-compliance.md +0 -272
  128. graphforge-0.3.6/src/graphforge/planner/planner.py +0 -1092
  129. graphforge-0.3.6/tests/tck/tck_config.yaml +0 -137
  130. graphforge-0.3.6/tests/unit/executor/test_type_conversion_complex.py +0 -423
  131. graphforge-0.3.6/tests/unit/planner/test_planner_branch_coverage.py +0 -401
  132. graphforge-0.3.6/tests/unit/types/test_graph_element_edge_cases.py +0 -95
  133. {graphforge-0.3.6 → graphforge-0.3.8}/.codecov.yml +0 -0
  134. {graphforge-0.3.6 → graphforge-0.3.8}/.coderabbit.yaml +0 -0
  135. {graphforge-0.3.6 → graphforge-0.3.8}/.editorconfig +0 -0
  136. {graphforge-0.3.6 → graphforge-0.3.8}/.github/CODEOWNERS +0 -0
  137. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  138. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  139. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  140. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  141. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  142. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  143. {graphforge-0.3.6 → graphforge-0.3.8}/.github/ISSUE_WORKFLOW.md +0 -0
  144. {graphforge-0.3.6 → graphforge-0.3.8}/.github/SECURITY.md +0 -0
  145. {graphforge-0.3.6 → graphforge-0.3.8}/.github/dependabot.yml +0 -0
  146. {graphforge-0.3.6 → graphforge-0.3.8}/.github/pull_request_template.md +0 -0
  147. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/README.md +0 -0
  148. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/docs.yml +0 -0
  149. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/pr-labeler.yml +0 -0
  150. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/publish.yaml +0 -0
  151. {graphforge-0.3.6 → graphforge-0.3.8}/.github/workflows/release-tracking.yml +0 -0
  152. {graphforge-0.3.6 → graphforge-0.3.8}/.gitignore +0 -0
  153. {graphforge-0.3.6 → graphforge-0.3.8}/.pre-commit-config.yaml +0 -0
  154. {graphforge-0.3.6 → graphforge-0.3.8}/CHANGELOG_v0.3.0.md +0 -0
  155. {graphforge-0.3.6 → graphforge-0.3.8}/CLAUDE.md +0 -0
  156. {graphforge-0.3.6 → graphforge-0.3.8}/CODE_OF_CONDUCT.md +0 -0
  157. {graphforge-0.3.6 → graphforge-0.3.8}/CONTRIBUTING.md +0 -0
  158. {graphforge-0.3.6 → graphforge-0.3.8}/IMPLEMENTATION_PLAN.md +0 -0
  159. {graphforge-0.3.6 → graphforge-0.3.8}/LICENSE +0 -0
  160. {graphforge-0.3.6 → graphforge-0.3.8}/Makefile +0 -0
  161. {graphforge-0.3.6 → graphforge-0.3.8}/RELEASING.md +0 -0
  162. {graphforge-0.3.6 → graphforge-0.3.8}/coverage.json +0 -0
  163. {graphforge-0.3.6 → graphforge-0.3.8}/docs/architecture/ast-and-planning.md +0 -0
  164. {graphforge-0.3.6 → graphforge-0.3.8}/docs/architecture/execution-model.md +0 -0
  165. {graphforge-0.3.6 → graphforge-0.3.8}/docs/architecture/overview.md +0 -0
  166. {graphforge-0.3.6 → graphforge-0.3.8}/docs/architecture/storage-analysis.md +0 -0
  167. {graphforge-0.3.6 → graphforge-0.3.8}/docs/architecture/storage.md +0 -0
  168. {graphforge-0.3.6 → graphforge-0.3.8}/docs/community/code-of-conduct.md +0 -0
  169. {graphforge-0.3.6 → graphforge-0.3.8}/docs/community/security.md +0 -0
  170. {graphforge-0.3.6 → graphforge-0.3.8}/docs/cypher-guide.md +0 -0
  171. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/cypher-script-loading.md +0 -0
  172. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/ldbc.md +0 -0
  173. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/neo4j-examples.md +0 -0
  174. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/networkrepository.md +0 -0
  175. {graphforge-0.3.6 → graphforge-0.3.8}/docs/datasets/overview.md +0 -0
  176. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/QUICKSTART_V0.2.md +0 -0
  177. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/codecov-integration.md +0 -0
  178. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/contributing.md +0 -0
  179. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/documentation-update-summary.md +0 -0
  180. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/phase-1a-completion-report.md +0 -0
  181. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/release-process.md +0 -0
  182. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/release-strategy.md +0 -0
  183. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/requirements.md +0 -0
  184. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-cicd-infrastructure.md +0 -0
  185. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-documentation.md +0 -0
  186. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-regression-fix.md +0 -0
  187. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-with-clause.md +0 -0
  188. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-02-01-codecov-setup.md +0 -0
  189. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-2026-02-01-column-naming-investigation.md +0 -0
  190. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/session-summary.md +0 -0
  191. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/tck-session-2026-01-31-final.md +0 -0
  192. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/sessions/tck-session-2026-01-31.md +0 -0
  193. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/tck_baseline_analysis_v0.3.md +0 -0
  194. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/testing-setup-complete.md +0 -0
  195. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/testing.md +0 -0
  196. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/v0.2-plan-summary.md +0 -0
  197. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/v0.4-revised-plan.md +0 -0
  198. {graphforge-0.3.6 → graphforge-0.3.8}/docs/development/workflow.md +0 -0
  199. {graphforge-0.3.6 → graphforge-0.3.8}/docs/guide/graph-construction.md +0 -0
  200. {graphforge-0.3.6 → graphforge-0.3.8}/docs/guide/overview.md +0 -0
  201. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/INCOMPLETE_FEATURES_ISSUES.md +0 -0
  202. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/README.md +0 -0
  203. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/VALIDATION_REPORT.md +0 -0
  204. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/api.md +0 -0
  205. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/changelog.md +0 -0
  206. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/column-naming-behavior.md +0 -0
  207. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-aggregation-functions.md +0 -0
  208. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-graph-queries.md +0 -0
  209. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-graph-schema.md +0 -0
  210. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-mapping/clause-to-tck.md +0 -0
  211. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-mapping/function-to-tck.md +0 -0
  212. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-order-by.md +0 -0
  213. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/feature-return-aliasing.md +0 -0
  214. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/implementation-status/operators.md +0 -0
  215. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/implementation-status/patterns.md +0 -0
  216. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-features/02-functions.md +0 -0
  217. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-features/03-operators.md +0 -0
  218. {graphforge-0.3.6 → graphforge-0.3.8}/docs/reference/opencypher-features/04-patterns.md +0 -0
  219. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/implementation-summary.md +0 -0
  220. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/next-steps.md +0 -0
  221. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/phase-1-complete.md +0 -0
  222. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/phase-2-complete.md +0 -0
  223. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/phase-3-complete.md +0 -0
  224. {graphforge-0.3.6 → graphforge-0.3.8}/docs/releases/roadmap.md +0 -0
  225. {graphforge-0.3.6 → graphforge-0.3.8}/docs/stylesheets/extra.css +0 -0
  226. {graphforge-0.3.6 → graphforge-0.3.8}/examples/01_social_network.py +0 -0
  227. {graphforge-0.3.6 → graphforge-0.3.8}/examples/02_knowledge_graph.py +0 -0
  228. {graphforge-0.3.6 → graphforge-0.3.8}/examples/03_data_lineage.py +0 -0
  229. {graphforge-0.3.6 → graphforge-0.3.8}/examples/04_citation_network.py +0 -0
  230. {graphforge-0.3.6 → graphforge-0.3.8}/examples/05_migration_from_networkx.py +0 -0
  231. {graphforge-0.3.6 → graphforge-0.3.8}/examples/agent_grounding/ecommerce_agent.ipynb +0 -0
  232. {graphforge-0.3.6 → graphforge-0.3.8}/examples/basic_graph.py +0 -0
  233. {graphforge-0.3.6 → graphforge-0.3.8}/examples/basic_usage.py +0 -0
  234. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/build_feature_graph.py +0 -0
  235. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/bump_version.py +0 -0
  236. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/check_release_needed.py +0 -0
  237. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/inventory_tck.py +0 -0
  238. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/pre-push-check.sh +0 -0
  239. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/tck_metrics.py +0 -0
  240. {graphforge-0.3.6 → graphforge-0.3.8}/scripts/validate_datasets.py +0 -0
  241. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/__init__.py +0 -0
  242. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/ast/pattern.py +0 -0
  243. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/ast/query.py +0 -0
  244. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/__init__.py +0 -0
  245. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/base.py +0 -0
  246. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/data/__init__.py +0 -0
  247. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/data/networkrepository.json +0 -0
  248. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/data/snap.json +0 -0
  249. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/exporters/__init__.py +0 -0
  250. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/exporters/json_graph.py +0 -0
  251. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/formats/__init__.py +0 -0
  252. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/formats/json_graph.py +0 -0
  253. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/__init__.py +0 -0
  254. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/compression.py +0 -0
  255. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/csv.py +0 -0
  256. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/cypher.py +0 -0
  257. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/graphml.py +0 -0
  258. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/json_graph.py +0 -0
  259. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/ldbc.py +0 -0
  260. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/loaders/ldbc_schema.py +0 -0
  261. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/registry.py +0 -0
  262. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/__init__.py +0 -0
  263. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/graphml.py +0 -0
  264. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/json_graph.py +0 -0
  265. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/ldbc.py +0 -0
  266. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/networkrepository.py +0 -0
  267. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/datasets/sources/snap.py +0 -0
  268. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/executor/__init__.py +0 -0
  269. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/__init__.py +0 -0
  270. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/cost_model.py +0 -0
  271. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/optimizer.py +0 -0
  272. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/optimizer/statistics.py +0 -0
  273. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/parser/__init__.py +0 -0
  274. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/planner/__init__.py +0 -0
  275. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/storage/__init__.py +0 -0
  276. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/storage/pydantic_serialization.py +0 -0
  277. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/storage/sqlite_backend.py +0 -0
  278. {graphforge-0.3.6 → graphforge-0.3.8}/src/graphforge/types/__init__.py +0 -0
  279. {graphforge-0.3.6 → graphforge-0.3.8}/tests/README.md +0 -0
  280. {graphforge-0.3.6 → graphforge-0.3.8}/tests/__init__.py +0 -0
  281. {graphforge-0.3.6 → graphforge-0.3.8}/tests/conftest.py +0 -0
  282. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/__init__.py +0 -0
  283. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/conftest.py +0 -0
  284. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_compression.py +0 -0
  285. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_cypher_loader_docs.py +0 -0
  286. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_graphml_loader.py +0 -0
  287. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_exporter.py +0 -0
  288. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_loader.py +0 -0
  289. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_roundtrip.py +0 -0
  290. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_ldbc_loader.py +0 -0
  291. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/datasets/test_networkrepository_loader.py +0 -0
  292. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_aggregation_functions_advanced.py +0 -0
  293. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_anonymous_relationships.py +0 -0
  294. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_builder_api.py +0 -0
  295. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_call_subqueries.py +0 -0
  296. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_case_expressions.py +0 -0
  297. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_collect.py +0 -0
  298. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_compact_iso8601.py +0 -0
  299. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_complex_where_predicates.py +0 -0
  300. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_create_clause.py +0 -0
  301. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_delete_null.py +0 -0
  302. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_detach_delete.py +0 -0
  303. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_distinct_clause.py +0 -0
  304. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_e2e_queries.py +0 -0
  305. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_executor_edge_cases.py +0 -0
  306. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_exists_is_empty.py +0 -0
  307. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_hex_octal_literals.py +0 -0
  308. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_iana_timezones.py +0 -0
  309. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_id_function.py +0 -0
  310. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_issues_271_274.py +0 -0
  311. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_label_disjunction.py +0 -0
  312. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_label_predicate.py +0 -0
  313. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_list_comprehension.py +0 -0
  314. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_list_functions.py +0 -0
  315. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_list_operations.py +0 -0
  316. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_list_path_overloading.py +0 -0
  317. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_list_subscript.py +0 -0
  318. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_logical_operators.py +0 -0
  319. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_match_create.py +0 -0
  320. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_math_functions.py +0 -0
  321. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_math_functions_extended.py +0 -0
  322. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_merge_on_match_real.py +0 -0
  323. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_optimizer_aggregate_pushdown.py +0 -0
  324. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_optimizer_integration.py +0 -0
  325. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_optimizer_redundant_elimination.py +0 -0
  326. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_optional_match_delete.py +0 -0
  327. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_path_binding.py +0 -0
  328. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_path_functions.py +0 -0
  329. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_pattern_comprehension.py +0 -0
  330. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_persistence.py +0 -0
  331. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_predicate_functions.py +0 -0
  332. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_relationship_directions.py +0 -0
  333. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_remove_clause.py +0 -0
  334. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_set_delete_merge.py +0 -0
  335. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_size_function.py +0 -0
  336. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_snap_dataset_loading.py +0 -0
  337. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_sort_after_aggregation.py +0 -0
  338. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_spatial_api.py +0 -0
  339. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_sqlite_persistence.py +0 -0
  340. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_string_functions.py +0 -0
  341. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_string_functions_new.py +0 -0
  342. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_string_matching.py +0 -0
  343. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_subquery_expressions.py +0 -0
  344. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_temporal_map_constructors.py +0 -0
  345. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_temporal_queries.py +0 -0
  346. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_transactions.py +0 -0
  347. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_union.py +0 -0
  348. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_unwind.py +0 -0
  349. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_variable_length_paths.py +0 -0
  350. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_wildcard_execution.py +0 -0
  351. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_with_aggregation_real.py +0 -0
  352. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_with_clause.py +0 -0
  353. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_with_clause_modifiers.py +0 -0
  354. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_with_distinct_skip_limit.py +0 -0
  355. {graphforge-0.3.6 → graphforge-0.3.8}/tests/integration/test_xor_operator.py +0 -0
  356. {graphforge-0.3.6 → graphforge-0.3.8}/tests/property/__init__.py +0 -0
  357. {graphforge-0.3.6 → graphforge-0.3.8}/tests/property/strategies.py +0 -0
  358. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/__init__.py +0 -0
  359. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/coverage_matrix.json +0 -0
  360. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/download_tck.py +0 -0
  361. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/Aggregation1_BasicAggregation.feature +0 -0
  362. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/Match1_SimpleMatches.feature +0 -0
  363. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call1.feature +0 -0
  364. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call2.feature +0 -0
  365. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call3.feature +0 -0
  366. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call4.feature +0 -0
  367. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call5.feature +0 -0
  368. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call6.feature +0 -0
  369. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create1.feature +0 -0
  370. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create2.feature +0 -0
  371. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create3.feature +0 -0
  372. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create4.feature +0 -0
  373. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create5.feature +0 -0
  374. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create6.feature +0 -0
  375. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete1.feature +0 -0
  376. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete2.feature +0 -0
  377. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete3.feature +0 -0
  378. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete4.feature +0 -0
  379. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete5.feature +0 -0
  380. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete6.feature +0 -0
  381. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match1.feature +0 -0
  382. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match2.feature +0 -0
  383. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match3.feature +0 -0
  384. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match4.feature +0 -0
  385. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match5.feature +0 -0
  386. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match6.feature +0 -0
  387. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match7.feature +0 -0
  388. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match8.feature +0 -0
  389. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match9.feature +0 -0
  390. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere1.feature +0 -0
  391. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere2.feature +0 -0
  392. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere3.feature +0 -0
  393. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere4.feature +0 -0
  394. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere5.feature +0 -0
  395. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere6.feature +0 -0
  396. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge1.feature +0 -0
  397. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge2.feature +0 -0
  398. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge3.feature +0 -0
  399. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge4.feature +0 -0
  400. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge5.feature +0 -0
  401. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge6.feature +0 -0
  402. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge7.feature +0 -0
  403. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge8.feature +0 -0
  404. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge9.feature +0 -0
  405. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove1.feature +0 -0
  406. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove2.feature +0 -0
  407. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove3.feature +0 -0
  408. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return1.feature +0 -0
  409. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return2.feature +0 -0
  410. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return3.feature +0 -0
  411. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return4.feature +0 -0
  412. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return5.feature +0 -0
  413. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return6.feature +0 -0
  414. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return7.feature +0 -0
  415. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return8.feature +0 -0
  416. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy1.feature +0 -0
  417. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy2.feature +0 -0
  418. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy3.feature +0 -0
  419. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy4.feature +0 -0
  420. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy5.feature +0 -0
  421. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy6.feature +0 -0
  422. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit1.feature +0 -0
  423. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit2.feature +0 -0
  424. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit3.feature +0 -0
  425. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set1.feature +0 -0
  426. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set2.feature +0 -0
  427. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set3.feature +0 -0
  428. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set4.feature +0 -0
  429. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set5.feature +0 -0
  430. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set6.feature +0 -0
  431. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union1.feature +0 -0
  432. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union2.feature +0 -0
  433. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union3.feature +0 -0
  434. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/unwind/Unwind1.feature +0 -0
  435. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With1.feature +0 -0
  436. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With2.feature +0 -0
  437. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With3.feature +0 -0
  438. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With4.feature +0 -0
  439. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With5.feature +0 -0
  440. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With6.feature +0 -0
  441. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With7.feature +0 -0
  442. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy1.feature +0 -0
  443. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy2.feature +0 -0
  444. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy3.feature +0 -0
  445. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy4.feature +0 -0
  446. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit1.feature +0 -0
  447. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit2.feature +0 -0
  448. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit3.feature +0 -0
  449. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere1.feature +0 -0
  450. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere2.feature +0 -0
  451. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere3.feature +0 -0
  452. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere4.feature +0 -0
  453. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere5.feature +0 -0
  454. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere6.feature +0 -0
  455. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere7.feature +0 -0
  456. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation1.feature +0 -0
  457. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation2.feature +0 -0
  458. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation3.feature +0 -0
  459. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation4.feature +0 -0
  460. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation5.feature +0 -0
  461. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation6.feature +0 -0
  462. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation7.feature +0 -0
  463. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation8.feature +0 -0
  464. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean1.feature +0 -0
  465. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean2.feature +0 -0
  466. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean3.feature +0 -0
  467. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean4.feature +0 -0
  468. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean5.feature +0 -0
  469. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison1.feature +0 -0
  470. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison2.feature +0 -0
  471. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison3.feature +0 -0
  472. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison4.feature +0 -0
  473. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/conditional/Conditional1.feature +0 -0
  474. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/conditional/Conditional2.feature +0 -0
  475. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery1.feature +0 -0
  476. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery2.feature +0 -0
  477. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery3.feature +0 -0
  478. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph1.feature +0 -0
  479. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph2.feature +0 -0
  480. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph3.feature +0 -0
  481. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph4.feature +0 -0
  482. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph5.feature +0 -0
  483. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph6.feature +0 -0
  484. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph7.feature +0 -0
  485. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph8.feature +0 -0
  486. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph9.feature +0 -0
  487. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List1.feature +0 -0
  488. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List10.feature +0 -0
  489. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List11.feature +0 -0
  490. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List12.feature +0 -0
  491. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List2.feature +0 -0
  492. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List3.feature +0 -0
  493. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List4.feature +0 -0
  494. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List5.feature +0 -0
  495. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List6.feature +0 -0
  496. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List7.feature +0 -0
  497. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List8.feature +0 -0
  498. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List9.feature +0 -0
  499. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals1.feature +0 -0
  500. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals2.feature +0 -0
  501. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals3.feature +0 -0
  502. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals4.feature +0 -0
  503. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals5.feature +0 -0
  504. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals6.feature +0 -0
  505. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals7.feature +0 -0
  506. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals8.feature +0 -0
  507. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map1.feature +0 -0
  508. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map2.feature +0 -0
  509. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map3.feature +0 -0
  510. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical1.feature +0 -0
  511. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical10.feature +0 -0
  512. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical11.feature +0 -0
  513. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical12.feature +0 -0
  514. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical13.feature +0 -0
  515. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical14.feature +0 -0
  516. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical15.feature +0 -0
  517. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical16.feature +0 -0
  518. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical17.feature +0 -0
  519. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical2.feature +0 -0
  520. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical3.feature +0 -0
  521. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical4.feature +0 -0
  522. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical5.feature +0 -0
  523. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical6.feature +0 -0
  524. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical7.feature +0 -0
  525. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical8.feature +0 -0
  526. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical9.feature +0 -0
  527. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null1.feature +0 -0
  528. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null2.feature +0 -0
  529. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null3.feature +0 -0
  530. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path1.feature +0 -0
  531. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path2.feature +0 -0
  532. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path3.feature +0 -0
  533. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/pattern/Pattern1.feature +0 -0
  534. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/pattern/Pattern2.feature +0 -0
  535. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence1.feature +0 -0
  536. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence2.feature +0 -0
  537. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence3.feature +0 -0
  538. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence4.feature +0 -0
  539. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier1.feature +0 -0
  540. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier10.feature +0 -0
  541. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier11.feature +0 -0
  542. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier12.feature +0 -0
  543. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier2.feature +0 -0
  544. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier3.feature +0 -0
  545. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier4.feature +0 -0
  546. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier5.feature +0 -0
  547. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier6.feature +0 -0
  548. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier7.feature +0 -0
  549. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier8.feature +0 -0
  550. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier9.feature +0 -0
  551. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String1.feature +0 -0
  552. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String10.feature +0 -0
  553. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String11.feature +0 -0
  554. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String12.feature +0 -0
  555. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String13.feature +0 -0
  556. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String14.feature +0 -0
  557. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String2.feature +0 -0
  558. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String3.feature +0 -0
  559. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String4.feature +0 -0
  560. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String5.feature +0 -0
  561. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String6.feature +0 -0
  562. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String7.feature +0 -0
  563. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String8.feature +0 -0
  564. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String9.feature +0 -0
  565. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal1.feature +0 -0
  566. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal10.feature +0 -0
  567. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal2.feature +0 -0
  568. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal3.feature +0 -0
  569. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal4.feature +0 -0
  570. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal5.feature +0 -0
  571. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal6.feature +0 -0
  572. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal7.feature +0 -0
  573. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal8.feature +0 -0
  574. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal9.feature +0 -0
  575. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion1.feature +0 -0
  576. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion2.feature +0 -0
  577. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion3.feature +0 -0
  578. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion4.feature +0 -0
  579. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion5.feature +0 -0
  580. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion6.feature +0 -0
  581. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/useCases/countingSubgraphMatches/CountingSubgraphMatches1.feature +0 -0
  582. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/features/official/useCases/triadicSelection/TriadicSelection1.feature +0 -0
  583. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-1/binary-tree-1.cypher +0 -0
  584. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-1/binary-tree-1.json +0 -0
  585. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-2/binary-tree-2.cypher +0 -0
  586. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-2/binary-tree-2.json +0 -0
  587. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/graphs/named-graphs.adoc +0 -0
  588. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/tck_markers.py +0 -0
  589. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/test_features.py +0 -0
  590. {graphforge-0.3.6 → graphforge-0.3.8}/tests/tck/test_tck_compliance.py +0 -0
  591. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/__init__.py +0 -0
  592. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/api/__init__.py +0 -0
  593. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/api/test_clear.py +0 -0
  594. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/api/test_clone.py +0 -0
  595. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/api/test_cypher_value_conversion.py +0 -0
  596. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/ast/__init__.py +0 -0
  597. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/ast/test_ast_nodes.py +0 -0
  598. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/__init__.py +0 -0
  599. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_csv_loader.py +0 -0
  600. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_cypher_loader.py +0 -0
  601. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_graphml_loader.py +0 -0
  602. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_exporter.py +0 -0
  603. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_format.py +0 -0
  604. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_loader.py +0 -0
  605. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_ldbc_schema.py +0 -0
  606. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_networkrepository.py +0 -0
  607. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_registry.py +0 -0
  608. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/datasets/test_sources_registration.py +0 -0
  609. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/__init__.py +0 -0
  610. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_aggregation_errors.py +0 -0
  611. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_aggregation_functions_advanced.py +0 -0
  612. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_evaluator_additional_coverage.py +0 -0
  613. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_evaluator_error_paths.py +0 -0
  614. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_expression_matching.py +0 -0
  615. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_id_function.py +0 -0
  616. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_in_operator.py +0 -0
  617. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_list_functions.py +0 -0
  618. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_list_functions_errors.py +0 -0
  619. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_merge_on_create.py +0 -0
  620. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_merge_on_match.py +0 -0
  621. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_multihop_create.py +0 -0
  622. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_optional_scan_coverage.py +0 -0
  623. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_path_functions.py +0 -0
  624. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_sort_edge_cases.py +0 -0
  625. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_spatial_functions.py +0 -0
  626. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_string_functions_new.py +0 -0
  627. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_subquery_planner_check.py +0 -0
  628. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_temporal_functions.py +0 -0
  629. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_three_valued_logic.py +0 -0
  630. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_undirected_relationship_bugs.py +0 -0
  631. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/executor/test_with_aggregation.py +0 -0
  632. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/__init__.py +0 -0
  633. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_aggregate_pushdown.py +0 -0
  634. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_cost_model.py +0 -0
  635. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_filter_pushdown.py +0 -0
  636. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_join_reorder.py +0 -0
  637. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_optimizer_reuse.py +0 -0
  638. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_predicate_reorder.py +0 -0
  639. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_predicate_utils.py +0 -0
  640. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/optimizer/test_redundant_elimination.py +0 -0
  641. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/__init__.py +0 -0
  642. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_arithmetic_parser.py +0 -0
  643. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_case_parser.py +0 -0
  644. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_collect_parser.py +0 -0
  645. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_delete_parser.py +0 -0
  646. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_grammar.py +0 -0
  647. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_hex_octal_literals.py +0 -0
  648. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_label_predicate_parser.py +0 -0
  649. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_merge_on_create.py +0 -0
  650. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_merge_on_match.py +0 -0
  651. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_optional_match_delete.py +0 -0
  652. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_path_binding.py +0 -0
  653. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_pattern_predicates.py +0 -0
  654. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_remove_parser.py +0 -0
  655. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_string_matching_parser.py +0 -0
  656. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_wildcard_parsing.py +0 -0
  657. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/parser/test_with_at_query_start.py +0 -0
  658. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/__init__.py +0 -0
  659. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_expand_multi_hop_operator.py +0 -0
  660. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_operators.py +0 -0
  661. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_planner_comprehensive.py +0 -0
  662. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_remove_planner.py +0 -0
  663. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/planner/test_with_validation.py +0 -0
  664. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/__init__.py +0 -0
  665. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_graph_edge_cases.py +0 -0
  666. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_memory_store.py +0 -0
  667. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_pydantic_serialization.py +0 -0
  668. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_serialization_edge_cases.py +0 -0
  669. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_spatial_serialization.py +0 -0
  670. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_sqlite_backend_adjacency.py +0 -0
  671. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/storage/test_temporal_serialization.py +0 -0
  672. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/test_graph_elements.py +0 -0
  673. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/test_iana_timezone_construction.py +0 -0
  674. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/test_values.py +0 -0
  675. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/types/test_cypher_values_edge_cases.py +0 -0
  676. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/types/test_path_values.py +0 -0
  677. {graphforge-0.3.6 → graphforge-0.3.8}/tests/unit/types/test_spatial_values.py +0 -0
@@ -5,6 +5,10 @@ on:
5
5
  branches: [main]
6
6
  types: [opened, synchronize, reopened, labeled, unlabeled]
7
7
 
8
+ permissions:
9
+ contents: read
10
+ pull-requests: write
11
+
8
12
  jobs:
9
13
  check-changelog:
10
14
  name: Verify CHANGELOG Updated
@@ -0,0 +1,416 @@
1
+ name: Test Suite
2
+
3
+ on:
4
+ push:
5
+ branches: ["main", "develop"]
6
+ pull_request:
7
+ branches: ["main"]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ name: Test Python ${{ matrix.python-version }} on ${{ matrix.os }}
15
+ runs-on: ${{ matrix.os }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ os: [ubuntu-latest, macos-latest, windows-latest]
20
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
21
+
22
+ steps:
23
+ - name: Checkout code
24
+ uses: actions/checkout@v6
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v7
28
+ with:
29
+ enable-cache: true
30
+
31
+ - name: Set up Python ${{ matrix.python-version }}
32
+ uses: actions/setup-python@v6
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Install dependencies
37
+ run: uv sync --all-extras
38
+
39
+ - name: Download SNAP ego-facebook dataset
40
+ run: |
41
+ mkdir -p ~/.graphforge/datasets
42
+ curl -L -o ~/.graphforge/datasets/snap-ego-facebook.txt.gz https://snap.stanford.edu/data/facebook_combined.txt.gz
43
+ shell: bash
44
+
45
+ - name: Run unit tests
46
+ run: uv run pytest tests/unit -n auto --junitxml=test-results-unit.xml
47
+
48
+ - name: Run integration tests
49
+ run: uv run pytest tests/integration -n auto -m "not snap" --junitxml=test-results-integration.xml
50
+
51
+ - name: Upload test results to Codecov
52
+ uses: codecov/codecov-action@v5
53
+ if: always()
54
+ with:
55
+ token: ${{ secrets.CODECOV_TOKEN }}
56
+ files: test-results-unit.xml,test-results-integration.xml
57
+ flags: ${{ matrix.os }}-py${{ matrix.python-version }}
58
+ report_type: test_results
59
+ fail_ci_if_error: false
60
+
61
+ lint:
62
+ name: Lint and Format Check
63
+ runs-on: ubuntu-latest
64
+
65
+ steps:
66
+ - name: Checkout code
67
+ uses: actions/checkout@v6
68
+
69
+ - name: Install uv
70
+ uses: astral-sh/setup-uv@v7
71
+
72
+ - name: Set up Python
73
+ uses: actions/setup-python@v6
74
+ with:
75
+ python-version: "3.12"
76
+
77
+ - name: Install dependencies
78
+ run: uv sync --all-extras
79
+
80
+ - name: Check code formatting
81
+ run: uv run ruff format --check .
82
+
83
+ - name: Lint code
84
+ run: uv run ruff check .
85
+
86
+ type-check:
87
+ name: Type Checking (mypy)
88
+ runs-on: ubuntu-latest
89
+
90
+ steps:
91
+ - name: Checkout code
92
+ uses: actions/checkout@v6
93
+
94
+ - name: Install uv
95
+ uses: astral-sh/setup-uv@v7
96
+
97
+ - name: Set up Python
98
+ uses: actions/setup-python@v6
99
+ with:
100
+ python-version: "3.12"
101
+
102
+ - name: Install dependencies
103
+ run: uv sync --all-extras
104
+
105
+ - name: Run mypy type checker
106
+ run: uv run mypy src/graphforge --strict-optional --show-error-codes
107
+
108
+ security:
109
+ name: Security Scanning
110
+ runs-on: ubuntu-latest
111
+
112
+ steps:
113
+ - name: Checkout code
114
+ uses: actions/checkout@v6
115
+
116
+ - name: Install uv
117
+ uses: astral-sh/setup-uv@v7
118
+
119
+ - name: Set up Python
120
+ uses: actions/setup-python@v6
121
+ with:
122
+ python-version: "3.12"
123
+
124
+ - name: Install dependencies
125
+ run: uv sync --all-extras
126
+
127
+ - name: Run bandit security scanner
128
+ run: uv run bandit -c pyproject.toml -r src/
129
+
130
+ tck-regression:
131
+ name: TCK Shard ${{ matrix.group }}/4
132
+ runs-on: ubuntu-latest
133
+ strategy:
134
+ fail-fast: false
135
+ matrix:
136
+ group: [1, 2, 3, 4]
137
+
138
+ steps:
139
+ - name: Checkout code
140
+ uses: actions/checkout@v6
141
+
142
+ - name: Install uv
143
+ uses: astral-sh/setup-uv@v7
144
+
145
+ - name: Set up Python
146
+ uses: actions/setup-python@v6
147
+ with:
148
+ python-version: "3.12"
149
+
150
+ - name: Install dependencies
151
+ run: uv sync --all-extras
152
+
153
+ - name: Restore test durations cache
154
+ uses: actions/cache/restore@v4
155
+ with:
156
+ path: .test_durations
157
+ key: tck-durations-${{ github.ref }}
158
+ restore-keys: tck-durations-
159
+
160
+ - name: Run TCK shard ${{ matrix.group }}/4
161
+ id: tck_tests
162
+ continue-on-error: true
163
+ run: |
164
+ uv run pytest tests/tck/ -n auto \
165
+ --splits 4 --group ${{ matrix.group }} \
166
+ --splitting-algorithm duration_based_chunks \
167
+ --store-durations --durations-path=.test_durations_${{ matrix.group }} \
168
+ --junitxml=test-results-tck-${{ matrix.group }}.xml
169
+
170
+ - name: Upload shard results artifact
171
+ uses: actions/upload-artifact@v4
172
+ if: always()
173
+ with:
174
+ name: tck-shard-${{ matrix.group }}
175
+ path: |
176
+ test-results-tck-${{ matrix.group }}.xml
177
+ .test_durations_${{ matrix.group }}
178
+
179
+ tck-report:
180
+ name: TCK OpenCypher Compliance
181
+ runs-on: ubuntu-latest
182
+ needs: tck-regression
183
+ if: always()
184
+ permissions:
185
+ contents: read
186
+ actions: write
187
+
188
+ steps:
189
+ - name: Checkout code
190
+ uses: actions/checkout@v6
191
+
192
+ - name: Install uv
193
+ uses: astral-sh/setup-uv@v7
194
+
195
+ - name: Set up Python
196
+ uses: actions/setup-python@v6
197
+ with:
198
+ python-version: "3.12"
199
+
200
+ - name: Install dependencies
201
+ run: uv sync --all-extras
202
+
203
+ - name: Download all shard results
204
+ uses: actions/download-artifact@v4
205
+ with:
206
+ pattern: tck-shard-*
207
+ merge-multiple: true
208
+ path: tck-results/
209
+
210
+ - name: Merge JUnit XML results
211
+ run: |
212
+ uv run python3 -c "
213
+ import glob, sys
214
+ from xml.etree import ElementTree as ET
215
+
216
+ files = sorted(glob.glob('tck-results/test-results-tck-*.xml'))
217
+ if not files:
218
+ print('No shard result files found')
219
+ sys.exit(1)
220
+
221
+ root = ET.parse(files[0]).getroot()
222
+ suite = root if root.tag == 'testsuite' else root.find('testsuite')
223
+
224
+ for f in files[1:]:
225
+ tree = ET.parse(f).getroot()
226
+ src = tree if tree.tag == 'testsuite' else tree.find('testsuite')
227
+ for tc in src.findall('testcase'):
228
+ suite.append(tc)
229
+
230
+ tests = len(suite.findall('testcase'))
231
+ failures = len(suite.findall('.//failure'))
232
+ errors = len(suite.findall('.//error'))
233
+ suite.set('tests', str(tests))
234
+ suite.set('failures', str(failures))
235
+ suite.set('errors', str(errors))
236
+
237
+ ET.ElementTree(root).write('test-results-tck.xml', xml_declaration=True, encoding='utf-8')
238
+ print(f'Merged {len(files)} shards: {tests} tests, {failures} failures')
239
+ "
240
+
241
+ - name: Merge test durations for future balancing
242
+ run: |
243
+ uv run python3 -c "
244
+ import glob, json
245
+ files = glob.glob('tck-results/.test_durations_*')
246
+ merged = {}
247
+ for f in files:
248
+ with open(f) as fh:
249
+ merged.update(json.load(fh))
250
+ with open('.test_durations', 'w') as fh:
251
+ json.dump(merged, fh)
252
+ print(f'Merged durations for {len(merged)} tests from {len(files)} shards')
253
+ " || echo "No duration files found, skipping merge"
254
+
255
+ - name: Save test durations cache
256
+ uses: actions/cache/save@v4
257
+ if: always()
258
+ with:
259
+ path: .test_durations
260
+ key: tck-durations-${{ github.ref }}-${{ github.run_id }}
261
+
262
+ - name: Report TCK compliance metrics
263
+ if: always()
264
+ run: uv run python3 scripts/tck_metrics.py test-results-tck.xml
265
+
266
+ - name: Report TCK performance metrics
267
+ if: always()
268
+ run: uv run python3 scripts/tck_perf_report.py test-results-tck.xml --threshold 5
269
+
270
+ - name: Upload TCK results to Codecov
271
+ uses: codecov/codecov-action@v5
272
+ if: always()
273
+ with:
274
+ token: ${{ secrets.CODECOV_TOKEN }}
275
+ files: test-results-tck.xml
276
+ flags: tck-compliance
277
+ report_type: test_results
278
+ fail_ci_if_error: false
279
+
280
+ - name: Upload merged TCK results artifact
281
+ uses: actions/upload-artifact@v4
282
+ if: always()
283
+ with:
284
+ name: tck-test-results
285
+ path: test-results-tck.xml
286
+
287
+ coverage-shard:
288
+ name: Coverage Shard ${{ matrix.group }}/4
289
+ runs-on: ubuntu-latest
290
+ strategy:
291
+ fail-fast: false
292
+ matrix:
293
+ group: [1, 2, 3, 4]
294
+
295
+ steps:
296
+ - name: Checkout code
297
+ uses: actions/checkout@v6
298
+
299
+ - name: Install uv
300
+ uses: astral-sh/setup-uv@v7
301
+
302
+ - name: Set up Python
303
+ uses: actions/setup-python@v6
304
+ with:
305
+ python-version: "3.12"
306
+
307
+ - name: Install dependencies
308
+ run: uv sync --all-extras
309
+
310
+ - name: Download SNAP ego-facebook dataset
311
+ run: |
312
+ mkdir -p ~/.graphforge/datasets
313
+ curl -L -o ~/.graphforge/datasets/snap-ego-facebook.txt.gz https://snap.stanford.edu/data/facebook_combined.txt.gz
314
+ shell: bash
315
+
316
+ - name: Run tests with coverage (shard ${{ matrix.group }}/4)
317
+ run: |
318
+ uv run pytest tests/unit tests/integration \
319
+ --splits 4 --group ${{ matrix.group }} \
320
+ --splitting-algorithm duration_based_chunks \
321
+ -n auto \
322
+ -m "not snap" \
323
+ --cov=src --cov-branch \
324
+ --cov-report=xml:coverage-${{ matrix.group }}.xml \
325
+ --junitxml=test-results-cov-${{ matrix.group }}.xml
326
+
327
+ - name: Upload coverage shard artifact
328
+ uses: actions/upload-artifact@v4
329
+ if: always()
330
+ with:
331
+ name: coverage-shard-${{ matrix.group }}
332
+ path: |
333
+ coverage-${{ matrix.group }}.xml
334
+ test-results-cov-${{ matrix.group }}.xml
335
+
336
+ coverage:
337
+ name: Coverage Report
338
+ runs-on: ubuntu-latest
339
+ needs: coverage-shard
340
+ if: always()
341
+
342
+ steps:
343
+ - name: Checkout code
344
+ uses: actions/checkout@v6
345
+
346
+ - name: Install uv
347
+ uses: astral-sh/setup-uv@v7
348
+
349
+ - name: Set up Python
350
+ uses: actions/setup-python@v6
351
+ with:
352
+ python-version: "3.12"
353
+
354
+ - name: Install dependencies
355
+ run: uv sync --all-extras
356
+
357
+ - name: Download all coverage shards
358
+ uses: actions/download-artifact@v4
359
+ with:
360
+ pattern: coverage-shard-*
361
+ merge-multiple: true
362
+ path: cov-results/
363
+
364
+ - name: Merge coverage reports
365
+ run: |
366
+ uv run python3 -c "
367
+ import glob, sys
368
+ from xml.etree import ElementTree as ET
369
+
370
+ files = sorted(glob.glob('cov-results/coverage-*.xml'))
371
+ if not files:
372
+ print('No coverage files found')
373
+ sys.exit(1)
374
+
375
+ base = ET.parse(files[0])
376
+ base_root = base.getroot()
377
+ base_packages = base_root.find('packages')
378
+
379
+ for f in files[1:]:
380
+ tree = ET.parse(f).getroot()
381
+ for pkg in tree.findall('.//package'):
382
+ base_packages.append(pkg)
383
+
384
+ base.write('coverage.xml', xml_declaration=True, encoding='utf-8')
385
+ print(f'Merged {len(files)} coverage shards')
386
+ "
387
+
388
+ - name: Check coverage threshold
389
+ run: |
390
+ uv run coverage combine cov-results/.coverage* 2>/dev/null || true
391
+ uv run coverage report --fail-under=85 || echo "Coverage below 85% - expected during initial development"
392
+
393
+ - name: Upload coverage to Codecov
394
+ uses: codecov/codecov-action@v5
395
+ with:
396
+ token: ${{ secrets.CODECOV_TOKEN }}
397
+ files: ./coverage.xml
398
+ flags: full-coverage
399
+ name: codecov-full
400
+ fail_ci_if_error: false
401
+
402
+ - name: Upload test results to Codecov
403
+ uses: codecov/codecov-action@v5
404
+ if: always()
405
+ with:
406
+ token: ${{ secrets.CODECOV_TOKEN }}
407
+ files: cov-results/test-results-cov-*.xml
408
+ flags: full-suite
409
+ report_type: test_results
410
+ fail_ci_if_error: false
411
+
412
+ - name: Upload coverage artifacts
413
+ uses: actions/upload-artifact@v4
414
+ with:
415
+ name: coverage-report
416
+ path: coverage.xml
@@ -5,6 +5,80 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.3.8] - 2026-05-02
11
+
12
+ ### Fixed - TCK Feature Completeness (3885/3885 passing)
13
+ - **Nanosecond precision in temporal types** — `CypherDateTime` and `CypherTime` now store a `_ns_residue` (0–999) for sub-microsecond precision; `_components` tuple extended to 8 elements with nanoseconds; construction, accessors, arithmetic, comparison, and serialization all updated (#224)
14
+ - **Statement clock caching** — `now()`, `datetime()`, `date()`, `time()` (without arguments) now return consistent values within a single query by caching the start time via `time.time_ns()` (#224)
15
+ - **Extreme year support** — dates/datetimes outside Python's 1–9999 range now handled via `_WideDate` / `_WideDateTime` classes; durations too large for `timedelta` use `_BigDuration`; Julian Day Number arithmetic for cross-extreme-year duration computation (#224)
16
+ - **IANA timezone name preservation** — `CypherDateTime` stores the IANA zone name (e.g. `Europe/Stockholm`) separately; `.timezone` accessor returns the zone name rather than the numeric offset; `utcoffset()` now receives a concrete datetime for DST-aware lookup (#224)
17
+ - **Aggregate detection in QuantifierExpression** — `ALL(ok IN collect(...) WHERE ok)` patterns now correctly detected as aggregate-containing; planner emits `Aggregate` instead of `Project` (#224)
18
+ - **OPTIONAL MATCH multi-WHERE placement** — multiple `WHERE` clauses no longer overwrite each other; multi-hop OPTIONAL MATCH WHERE is emitted after all hops so all variables are bound (#224)
19
+ - **`coalesce()` type inference** — return type is inferred from argument types so `MATCH (x)` after `WITH coalesce(a, b) AS x` accepts node-typed variables (#224)
20
+ - **Non-deterministic aggregate arguments** — `count(rand())` and similar expressions now raise `AmbiguousAggregationExpression` per the openCypher spec (#224)
21
+ - **Temporal accessor for extreme-year datetimes** — `year`, `month`, `day`, `hour`, `minute`, `second` accessors work on `_WideDateTime`-backed `CypherDateTime` values (#224)
22
+ - **All 23 xfail markers removed** — previously marked as expected failures; all were fixable (#224)
23
+
24
+ ### Added
25
+ - **75-test unit coverage for extreme temporal classes** — `tests/unit/types/test_extreme_temporal_values.py` covers `_WideDate`, `_WideDateTime`, `_BigDuration`, extreme-year construction/accessors, IANA timezone preservation, and large duration handling
26
+
27
+ ### Fixed
28
+ - **WITH clause WHERE filtering and variable scoping** (#362) — `WITH n WHERE n.age > 30` now correctly filters post-projection; chained WITH propagates bindings properly
29
+ - **Triadic OPTIONAL MATCH semantics** (#302 partial) — `OPTIONAL MATCH (a)-[r]->(b)` with pre-bound `b` now correctly filters to only edges reaching that specific destination (LEFT JOIN semantics)
30
+ - **Relationship type disjunction without colon prefix** (#363) — `[:KNOWS|FOLLOWS]` (pipe without colon on subsequent types) now parses correctly
31
+ - **Multi-CREATE variable scoping** (#364 partial) — variables created in one CREATE clause are now visible in subsequent CREATE clauses within the same query
32
+
33
+ ### Performance
34
+ - **O(n²) → O(1) graph statistics updates** (#366) — `_update_statistics_after_add_edge` no longer scans all edges on every insert; replaced with incremental `_unique_sources_by_type` tracking. Eliminated 2,000+ Pydantic `model_copy()` calls per 1,000-node graph by switching to mutable counters with lazy `GraphStatistics` construction
35
+ - **Parser fast path for long CREATE sequences** (#366) — queries with many consecutive CREATE clauses (e.g. the TCK movie graph with 971 CREATEs) are pre-split into batches of 5 before Earley parsing, reducing wall-clock time from 27 minutes to ~26 seconds. See docs/development/parser-performance-analysis.md for full analysis and the LALR(1) migration plan (issue #365)
36
+
37
+ ### CI
38
+ - **TCK sharding across 4 parallel runners** — TCK tests now split using `pytest-split` with duration-based balancing (~4x faster CI)
39
+ - **Coverage sharding** — coverage collection also split across 4 shards and merged in report job
40
+ - **Python 3.14 experimental matrix** — added as non-blocking `continue-on-error` entries
41
+ - **TCK performance reporting** — new `scripts/tck_perf_report.py` runs after each TCK run, reporting tests over 5s and tracking use-case tests (movie graph, school graph) for performance regression detection
42
+
43
+ ### TCK Coverage
44
+ - **3,885 / 3,885 passing (100%)** — first release with zero TCK failures and zero expected failures
45
+
46
+ ## [0.3.7] - 2026-04-07
47
+
48
+ ### Added - Functions
49
+ - **Math functions: e, pi, exp, log, log10, trig, degrees, radians, timestamp** (#326) — full set of mathematical and trigonometric functions per openCypher spec
50
+ - **`startNode()` and `endNode()` graph functions** (#318) — extract the start/end node from a relationship
51
+ - **`properties()` and `keys()` graph functions** (#316) — inspect node/relationship property maps and key sets
52
+ - **List concatenation `+` operator** (#315) — `[1,2] + [3,4]` → `[1,2,3,4]`
53
+ - **Map subscript access `m['key']`** (#314) — dynamic map property lookup
54
+ - **Exponent float notation and leading-dot floats** (#311) — `1.5e3`, `.5` now parsed correctly
55
+
56
+ ### Fixed - Sorting & Aggregation
57
+ - **ORDER BY mixed-type sort ordering** (#320) — values of different Cypher types now sort in the correct openCypher type hierarchy order
58
+ - **Aggregation in composite expressions and ORDER BY** (#329) — `count(n) + 1`, `ORDER BY count(n)` and similar patterns now evaluate correctly
59
+ - **Validate ORDER BY aggregation expressions at compile time** (#331) — non-aggregated variables in aggregating ORDER BY now raise a clear error
60
+ - **Detect non-projected ORDER BY aggregates at compile time** (#332) — aggregates in ORDER BY that aren't in the projection are caught early
61
+
62
+ ### Fixed - Expression Evaluation
63
+ - **Operator precedence, null propagation, and type coercion** (#321) — `NOT`, `AND`, `OR` precedence; null propagation in arithmetic; integer/float coercion edge cases
64
+ - **Type conversion TypeError/null per openCypher spec** (#327) — `toInteger()`, `toFloat()`, `toString()` now return `null` on unconvertible input per spec
65
+ - **List equality with null uses three-valued logic** (#330) — `[1, null] = [1, null]` now correctly returns `null`
66
+ - **NaN handling in comparisons, arithmetic, and sort** (#323) — NaN propagation and sort position per openCypher spec
67
+ - **SKIP/LIMIT accept expression values** (#319) — `SKIP toInteger(n.offset)` and similar dynamic skip/limit values now work
68
+
69
+ ### Fixed - Parser & Clause Gaps
70
+ - **WITH keyword position gaps** (#310) — `WITH` is now accepted after `SET`, `REMOVE`, `DELETE`, and in chained multi-part queries
71
+ - **ASCENDING/DESCENDING keywords** (#312) — `ORDER BY n.name ASCENDING` / `DESCENDING` now parse correctly; removed stale xfail markers (#325)
72
+ - **`NodeRef`/`EdgeRef` comparison methods** (#313) — nodes and relationships are now sortable and comparable by identity
73
+
74
+ ### Fixed - Graph Semantics
75
+ - **Relationship uniqueness in MATCH patterns** (#333) — runtime enforcement that the same physical edge cannot fill two relationship variables in one MATCH pattern; extended to anonymous multi-hop rels and path-variable (`ExpandMultiHop`) patterns
76
+ - **Temporal select-into constructors** (#334) — cross-type temporal projection (`date({date: other})`, `localdatetime({datetime: dt})`, etc.) with component overrides; null propagation, hour-overflow normalization, and timezone conversion all correct
77
+
78
+ ### TCK Coverage
79
+ - **3,235 / 3,885 passing (83.3%)** (up from ~2,507 at v0.3.6) — +728 net new passing scenarios
80
+ - Theme: ORDER BY correctness, aggregation, operator precedence, graph semantics, temporal completeness
81
+
8
82
  ## [0.3.6] - 2026-02-28
9
83
 
10
84
  ### Fixed - TCK Harness Correctness