frogql 0.2.2__tar.gz → 0.2.3__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 (260) hide show
  1. {frogql-0.2.2 → frogql-0.2.3}/Cargo.lock +2 -2
  2. {frogql-0.2.2 → frogql-0.2.3}/PKG-INFO +1 -1
  3. {frogql-0.2.2 → frogql-0.2.3}/pyproject.toml +1 -1
  4. {frogql-0.2.2 → frogql-0.2.3}/python/Cargo.toml +1 -1
  5. {frogql-0.2.2 → frogql-0.2.3}/src/parser/grammar.rs +14 -6
  6. {frogql-0.2.2 → frogql-0.2.3}/tests/parse_and_run_test.rs +27 -0
  7. {frogql-0.2.2 → frogql-0.2.3}/tests/parser_test.rs +44 -0
  8. {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/ci.yml +0 -0
  9. {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/release-npm.yml +0 -0
  10. {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/release.yml +0 -0
  11. {frogql-0.2.2 → frogql-0.2.3}/.gitignore +0 -0
  12. {frogql-0.2.2 → frogql-0.2.3}/ARCHITECTURE.md +0 -0
  13. {frogql-0.2.2 → frogql-0.2.3}/CLAUDE.md +0 -0
  14. {frogql-0.2.2 → frogql-0.2.3}/Cargo.toml +0 -0
  15. {frogql-0.2.2 → frogql-0.2.3}/LICENSE +0 -0
  16. {frogql-0.2.2 → frogql-0.2.3}/MANUAL.md +0 -0
  17. {frogql-0.2.2 → frogql-0.2.3}/README.md +0 -0
  18. {frogql-0.2.2 → frogql-0.2.3}/bench/.gitignore +0 -0
  19. {frogql-0.2.2 → frogql-0.2.3}/bench/BENCHMARK_PLAN.md +0 -0
  20. {frogql-0.2.2 → frogql-0.2.3}/bench/INTERNAL_BENCHMARK.md +0 -0
  21. {frogql-0.2.2 → frogql-0.2.3}/bench/LDBC_BENCHMARK.md +0 -0
  22. {frogql-0.2.2 → frogql-0.2.3}/bench/LDBC_BENCH_PLAN.md +0 -0
  23. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/QUERIES.md +0 -0
  24. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/README.md +0 -0
  25. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/SURVEY.md +0 -0
  26. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/_lib/row_hash.py +0 -0
  27. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/compare_results.py +0 -0
  28. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/gqlite/run.sh +0 -0
  29. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/DIVERGENCES.md +0 -0
  30. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic11.cypher +0 -0
  31. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic2.cypher +0 -0
  32. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic5.cypher +0 -0
  33. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic6.cypher +0 -0
  34. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic8.cypher +0 -0
  35. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic9.cypher +0 -0
  36. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/requirements.txt +0 -0
  37. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/run.py +0 -0
  38. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/setup.py +0 -0
  39. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/install_python_deps.sh +0 -0
  40. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/DIVERGENCES.md +0 -0
  41. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/README.md +0 -0
  42. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic11.cypher +0 -0
  43. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic2.cypher +0 -0
  44. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic5.cypher +0 -0
  45. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic6.cypher +0 -0
  46. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic8.cypher +0 -0
  47. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic9.cypher +0 -0
  48. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/requirements.txt +0 -0
  49. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/run.py +0 -0
  50. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/setup.py +0 -0
  51. {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/run_all.sh +0 -0
  52. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic1.toml +0 -0
  53. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic10.toml +0 -0
  54. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic11.toml +0 -0
  55. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic12.toml +0 -0
  56. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic13.toml +0 -0
  57. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic14.toml +0 -0
  58. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic2.toml +0 -0
  59. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic3.toml +0 -0
  60. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic4.toml +0 -0
  61. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic5.toml +0 -0
  62. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic6.toml +0 -0
  63. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic7.toml +0 -0
  64. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic8.toml +0 -0
  65. {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic9.toml +0 -0
  66. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/1-tree.gql +0 -0
  67. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-3-lollipop.gql +0 -0
  68. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-comb.gql +0 -0
  69. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-tree.gql +0 -0
  70. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-4-lollipop.gql +0 -0
  71. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-clique.gql +0 -0
  72. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-cycle.gql +0 -0
  73. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-path.gql +0 -0
  74. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-clique.gql +0 -0
  75. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-cycle.gql +0 -0
  76. {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-path.gql +0 -0
  77. {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/csv_to_json.py +0 -0
  78. {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/download_livejournal.sh +0 -0
  79. {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/generate_queries.py +0 -0
  80. {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/run_bench.sh +0 -0
  81. {frogql-0.2.2 → frogql-0.2.3}/docs/data-import.md +0 -0
  82. {frogql-0.2.2 → frogql-0.2.3}/docs/data-modification.md +0 -0
  83. {frogql-0.2.2 → frogql-0.2.3}/docs/graph-types.md +0 -0
  84. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/JOIN_STRATEGY_NOTES.md +0 -0
  85. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/graph-type-catalog-plan.md +0 -0
  86. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/implemented-optimizations.md +0 -0
  87. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/iso-gql-gaps.md +0 -0
  88. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/possible-optimizations.md +0 -0
  89. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/rules.md +0 -0
  90. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/storage-architecture.md +0 -0
  91. {frogql-0.2.2 → frogql-0.2.3}/docs/internals/typechecker_migration.md +0 -0
  92. {frogql-0.2.2 → frogql-0.2.3}/docs/query-language.md +0 -0
  93. {frogql-0.2.2 → frogql-0.2.3}/docs/secondary-indexes.md +0 -0
  94. {frogql-0.2.2 → frogql-0.2.3}/examples/address_queries.json +0 -0
  95. {frogql-0.2.2 → frogql-0.2.3}/examples/bom.gdb +0 -0
  96. {frogql-0.2.2 → frogql-0.2.3}/examples/books_queries.json +0 -0
  97. {frogql-0.2.2 → frogql-0.2.3}/examples/disney.gdb +0 -0
  98. {frogql-0.2.2 → frogql-0.2.3}/examples/disney_queries.json +0 -0
  99. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_financial_management.gdb +0 -0
  100. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_financial_management_queries.json +0 -0
  101. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_fraud_detection.gdb +0 -0
  102. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_fraud_detection_queries.json +0 -0
  103. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_payment.gdb +0 -0
  104. {frogql-0.2.2 → frogql-0.2.3}/examples/financial_payment_queries.json +0 -0
  105. {frogql-0.2.2 → frogql-0.2.3}/examples/fraud_detection.gdb +0 -0
  106. {frogql-0.2.2 → frogql-0.2.3}/examples/gameofthrones.gdb +0 -0
  107. {frogql-0.2.2 → frogql-0.2.3}/examples/grandstack.gdb +0 -0
  108. {frogql-0.2.2 → frogql-0.2.3}/examples/hockey.gdb +0 -0
  109. {frogql-0.2.2 → frogql-0.2.3}/examples/hockey_queries.json +0 -0
  110. {frogql-0.2.2 → frogql-0.2.3}/examples/information_data_lineage.gdb +0 -0
  111. {frogql-0.2.2 → frogql-0.2.3}/examples/information_data_lineage_queries.json +0 -0
  112. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_identity_and_access_management.gdb +0 -0
  113. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_identity_and_access_management_queries.json +0 -0
  114. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_iot.gdb +0 -0
  115. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_iot_queries.json +0 -0
  116. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_it_asset_management.gdb +0 -0
  117. {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_it_asset_management_queries.json +0 -0
  118. {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_general_knowledge.gdb +0 -0
  119. {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_general_knowledge_queries.json +0 -0
  120. {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_graph_geography.gdb +0 -0
  121. {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_graph_geography_queries.json +0 -0
  122. {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_bombill_of_materials.gdb +0 -0
  123. {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_bombill_of_materials_queries.json +0 -0
  124. {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_production_process.gdb +0 -0
  125. {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_production_process_queries.json +0 -0
  126. {frogql-0.2.2 → frogql-0.2.3}/examples/moivelens.gdb +0 -0
  127. {frogql-0.2.2 → frogql-0.2.3}/examples/moivelens_queries.json +0 -0
  128. {frogql-0.2.2 → frogql-0.2.3}/examples/movies.gdb +0 -0
  129. {frogql-0.2.2 → frogql-0.2.3}/examples/northwind.gdb +0 -0
  130. {frogql-0.2.2 → frogql-0.2.3}/examples/olympics_queries.json +0 -0
  131. {frogql-0.2.2 → frogql-0.2.3}/examples/soccer_2016.gdb +0 -0
  132. {frogql-0.2.2 → frogql-0.2.3}/examples/soccer_2016_queries.json +0 -0
  133. {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_recommendation.gdb +0 -0
  134. {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_recommendation_queries.json +0 -0
  135. {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_twitter.gdb +0 -0
  136. {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_twitter_queries.json +0 -0
  137. {frogql-0.2.2 → frogql-0.2.3}/examples/stackoverflow2.gdb +0 -0
  138. {frogql-0.2.2 → frogql-0.2.3}/examples/student_loan.gdb +0 -0
  139. {frogql-0.2.2 → frogql-0.2.3}/examples/student_loan_queries.json +0 -0
  140. {frogql-0.2.2 → frogql-0.2.3}/examples/typecheck_demo.rs +0 -0
  141. {frogql-0.2.2 → frogql-0.2.3}/examples/typecheck_repl_smoke.rs +0 -0
  142. {frogql-0.2.2 → frogql-0.2.3}/examples/video_games_queries.json +0 -0
  143. {frogql-0.2.2 → frogql-0.2.3}/examples/world.gdb +0 -0
  144. {frogql-0.2.2 → frogql-0.2.3}/examples/world_queries.json +0 -0
  145. {frogql-0.2.2 → frogql-0.2.3}/python/LICENSE +0 -0
  146. {frogql-0.2.2 → frogql-0.2.3}/python/README.md +0 -0
  147. {frogql-0.2.2 → frogql-0.2.3}/python/src/lib.rs +0 -0
  148. {frogql-0.2.2 → frogql-0.2.3}/scripts/convert_dev_datasets.py +0 -0
  149. {frogql-0.2.2 → frogql-0.2.3}/src/bin/bench_queries.rs +0 -0
  150. {frogql-0.2.2 → frogql-0.2.3}/src/bin/bench_setup.rs +0 -0
  151. {frogql-0.2.2 → frogql-0.2.3}/src/bin/convert_edgelist.rs +0 -0
  152. {frogql-0.2.2 → frogql-0.2.3}/src/bin/frogql.rs +0 -0
  153. {frogql-0.2.2 → frogql-0.2.3}/src/bin/internal_bench.rs +0 -0
  154. {frogql-0.2.2 → frogql-0.2.3}/src/bin/ldbc_bench.rs +0 -0
  155. {frogql-0.2.2 → frogql-0.2.3}/src/bin/orderby_bench.rs +0 -0
  156. {frogql-0.2.2 → frogql-0.2.3}/src/elaborate/mod.rs +0 -0
  157. {frogql-0.2.2 → frogql-0.2.3}/src/lib.rs +0 -0
  158. {frogql-0.2.2 → frogql-0.2.3}/src/model/csv_loader.rs +0 -0
  159. {frogql-0.2.2 → frogql-0.2.3}/src/model/graph.rs +0 -0
  160. {frogql-0.2.2 → frogql-0.2.3}/src/model/graph_access.rs +0 -0
  161. {frogql-0.2.2 → frogql-0.2.3}/src/model/mod.rs +0 -0
  162. {frogql-0.2.2 → frogql-0.2.3}/src/model/value.rs +0 -0
  163. {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/existential.rs +0 -0
  164. {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/mod.rs +0 -0
  165. {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/order_by_alias.rs +0 -0
  166. {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/pushdown.rs +0 -0
  167. {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/unroll_repeat.rs +0 -0
  168. {frogql-0.2.2 → frogql-0.2.3}/src/pager/header.rs +0 -0
  169. {frogql-0.2.2 → frogql-0.2.3}/src/pager/mod.rs +0 -0
  170. {frogql-0.2.2 → frogql-0.2.3}/src/pager/page.rs +0 -0
  171. {frogql-0.2.2 → frogql-0.2.3}/src/pager/pager.rs +0 -0
  172. {frogql-0.2.2 → frogql-0.2.3}/src/parser/lexer.rs +0 -0
  173. {frogql-0.2.2 → frogql-0.2.3}/src/parser/mod.rs +0 -0
  174. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/assignment.rs +0 -0
  175. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/catalog.rs +0 -0
  176. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/dm.rs +0 -0
  177. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/engine.rs +0 -0
  178. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/algorithm.rs +0 -0
  179. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/iterator.rs +0 -0
  180. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/mod.rs +0 -0
  181. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/pattern_extract.rs +0 -0
  182. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/triple_index.rs +0 -0
  183. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/veo.rs +0 -0
  184. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/mod.rs +0 -0
  185. {frogql-0.2.2 → frogql-0.2.3}/src/runtime/result.rs +0 -0
  186. {frogql-0.2.2 → frogql-0.2.3}/src/store/catalog_io.rs +0 -0
  187. {frogql-0.2.2 → frogql-0.2.3}/src/store/disk.rs +0 -0
  188. {frogql-0.2.2 → frogql-0.2.3}/src/store/disk_index.rs +0 -0
  189. {frogql-0.2.2 → frogql-0.2.3}/src/store/dump.rs +0 -0
  190. {frogql-0.2.2 → frogql-0.2.3}/src/store/io.rs +0 -0
  191. {frogql-0.2.2 → frogql-0.2.3}/src/store/lazy.rs +0 -0
  192. {frogql-0.2.2 → frogql-0.2.3}/src/store/mod.rs +0 -0
  193. {frogql-0.2.2 → frogql-0.2.3}/src/store/overlay.rs +0 -0
  194. {frogql-0.2.2 → frogql-0.2.3}/src/store/record.rs +0 -0
  195. {frogql-0.2.2 → frogql-0.2.3}/src/store/secondary_index.rs +0 -0
  196. {frogql-0.2.2 → frogql-0.2.3}/src/store/secondary_index_io.rs +0 -0
  197. {frogql-0.2.2 → frogql-0.2.3}/src/store/string_table.rs +0 -0
  198. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/descriptor.rs +0 -0
  199. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/dm.rs +0 -0
  200. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/expr.rs +0 -0
  201. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/mod.rs +0 -0
  202. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/path_pattern.rs +0 -0
  203. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/query.rs +0 -0
  204. {frogql-0.2.2 → frogql-0.2.3}/src/syntax/statement.rs +0 -0
  205. {frogql-0.2.2 → frogql-0.2.3}/src/typing/checker.rs +0 -0
  206. {frogql-0.2.2 → frogql-0.2.3}/src/typing/descriptor_type.rs +0 -0
  207. {frogql-0.2.2 → frogql-0.2.3}/src/typing/format.rs +0 -0
  208. {frogql-0.2.2 → frogql-0.2.3}/src/typing/inference.rs +0 -0
  209. {frogql-0.2.2 → frogql-0.2.3}/src/typing/label_type.rs +0 -0
  210. {frogql-0.2.2 → frogql-0.2.3}/src/typing/mod.rs +0 -0
  211. {frogql-0.2.2 → frogql-0.2.3}/src/typing/path_type.rs +0 -0
  212. {frogql-0.2.2 → frogql-0.2.3}/src/typing/property_type.rs +0 -0
  213. {frogql-0.2.2 → frogql-0.2.3}/src/typing/simple_type.rs +0 -0
  214. {frogql-0.2.2 → frogql-0.2.3}/src/typing/type_environment.rs +0 -0
  215. {frogql-0.2.2 → frogql-0.2.3}/src/typing/validate.rs +0 -0
  216. {frogql-0.2.2 → frogql-0.2.3}/src/typing/variable_type.rs +0 -0
  217. {frogql-0.2.2 → frogql-0.2.3}/test_data/fraud.json +0 -0
  218. {frogql-0.2.2 → frogql-0.2.3}/test_data/ltj_label_disjunction.json +0 -0
  219. {frogql-0.2.2 → frogql-0.2.3}/test_data/movies.json +0 -0
  220. {frogql-0.2.2 → frogql-0.2.3}/test_data/social-network.json +0 -0
  221. {frogql-0.2.2 → frogql-0.2.3}/tests/aggregates_proptest.proptest-regressions +0 -0
  222. {frogql-0.2.2 → frogql-0.2.3}/tests/aggregates_proptest.rs +0 -0
  223. {frogql-0.2.2 → frogql-0.2.3}/tests/bench_test.rs +0 -0
  224. {frogql-0.2.2 → frogql-0.2.3}/tests/coalesce_test.rs +0 -0
  225. {frogql-0.2.2 → frogql-0.2.3}/tests/compile_diagnostics.rs +0 -0
  226. {frogql-0.2.2 → frogql-0.2.3}/tests/count_test.rs +0 -0
  227. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_default_test.rs +0 -0
  228. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_delete_expr_test.rs +0 -0
  229. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_label_test.rs +0 -0
  230. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_persistence_test.rs +0 -0
  231. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_remove_test.rs +0 -0
  232. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_runtime_test.rs +0 -0
  233. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_schema_test.rs +0 -0
  234. {frogql-0.2.2 → frogql-0.2.3}/tests/dm_set_test.rs +0 -0
  235. {frogql-0.2.2 → frogql-0.2.3}/tests/dump_test.rs +0 -0
  236. {frogql-0.2.2 → frogql-0.2.3}/tests/elaborate_test.rs +0 -0
  237. {frogql-0.2.2 → frogql-0.2.3}/tests/exists_fold_test.rs +0 -0
  238. {frogql-0.2.2 → frogql-0.2.3}/tests/exists_runtime_test.rs +0 -0
  239. {frogql-0.2.2 → frogql-0.2.3}/tests/first_class_node_edge_values_test.rs +0 -0
  240. {frogql-0.2.2 → frogql-0.2.3}/tests/float_test.rs +0 -0
  241. {frogql-0.2.2 → frogql-0.2.3}/tests/graph_type_test.rs +0 -0
  242. {frogql-0.2.2 → frogql-0.2.3}/tests/lattice_proptest.rs +0 -0
  243. {frogql-0.2.2 → frogql-0.2.3}/tests/lazy_mut_test.rs +0 -0
  244. {frogql-0.2.2 → frogql-0.2.3}/tests/list_test.rs +0 -0
  245. {frogql-0.2.2 → frogql-0.2.3}/tests/ltj_label_disjunction_test.rs +0 -0
  246. {frogql-0.2.2 → frogql-0.2.3}/tests/multi_match_proptest.rs +0 -0
  247. {frogql-0.2.2 → frogql-0.2.3}/tests/multi_match_test.rs +0 -0
  248. {frogql-0.2.2 → frogql-0.2.3}/tests/null_test.rs +0 -0
  249. {frogql-0.2.2 → frogql-0.2.3}/tests/optional_match_test.rs +0 -0
  250. {frogql-0.2.2 → frogql-0.2.3}/tests/order_by_optimization_test.rs +0 -0
  251. {frogql-0.2.2 → frogql-0.2.3}/tests/order_by_test.rs +0 -0
  252. {frogql-0.2.2 → frogql-0.2.3}/tests/parallel_edge_test.rs +0 -0
  253. {frogql-0.2.2 → frogql-0.2.3}/tests/parser_dm_test.rs +0 -0
  254. {frogql-0.2.2 → frogql-0.2.3}/tests/record_test.rs +0 -0
  255. {frogql-0.2.2 → frogql-0.2.3}/tests/runtime_test.rs +0 -0
  256. {frogql-0.2.2 → frogql-0.2.3}/tests/store_runtime_test.rs +0 -0
  257. {frogql-0.2.2 → frogql-0.2.3}/tests/text2gql_test.rs +0 -0
  258. {frogql-0.2.2 → frogql-0.2.3}/tests/typecheck_gaps_order_by_test.rs +0 -0
  259. {frogql-0.2.2 → frogql-0.2.3}/tests/typecheck_smoke.rs +0 -0
  260. {frogql-0.2.2 → frogql-0.2.3}/tests/typecheck_test.rs +0 -0
@@ -273,7 +273,7 @@ dependencies = [
273
273
 
274
274
  [[package]]
275
275
  name = "frogql-node"
276
- version = "0.2.2"
276
+ version = "0.2.3"
277
277
  dependencies = [
278
278
  "gqlrust",
279
279
  "napi",
@@ -284,7 +284,7 @@ dependencies = [
284
284
 
285
285
  [[package]]
286
286
  name = "frogql-py"
287
- version = "0.2.2"
287
+ version = "0.2.3"
288
288
  dependencies = [
289
289
  "gqlrust",
290
290
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frogql
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "frogql"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  description = "froGQL — embedded GQL graph database with ISO GQL path patterns (Rust core, Python bindings)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "frogql-py"
3
- version = "0.2.2"
3
+ version = "0.2.3"
4
4
  edition = "2021"
5
5
  readme = "README.md"
6
6
 
@@ -729,8 +729,11 @@ impl Parser {
729
729
  }
730
730
  }
731
731
 
732
- // Try to parse element_pattern_filler: variable? (":" type_schema)? (WHERE expr)?
733
- // Returns Ok((Descriptor, Option<Expr>)) on success.
732
+ // Try to parse element_pattern_filler:
733
+ // variable? (":" type_schema | "{" record_type)? (WHERE expr)?
734
+ // Per ISO/IEC 39075:2024 §16, `elementPropertySpecification` ({...}) is a
735
+ // sibling of `isLabelExpression`, so the colon is optional in front of
736
+ // the record. `({k: v})` and `(x {k: v})` are both valid node patterns.
734
737
  fn try_element_pattern_filler(&mut self) -> Result<(Descriptor, Option<Expr>), String> {
735
738
  let mut var: Option<String> = None;
736
739
  let mut dtype: Option<DescriptorType> = None;
@@ -742,7 +745,7 @@ impl Parser {
742
745
  let saved = self.pos;
743
746
  self.advance();
744
747
  match self.peek() {
745
- Token::Colon | Token::Where | Token::RParen => {
748
+ Token::Colon | Token::Where | Token::RParen | Token::LBrace => {
746
749
  var = Some(name);
747
750
  }
748
751
  _ => {
@@ -752,8 +755,10 @@ impl Parser {
752
755
  }
753
756
  }
754
757
 
755
- // Optional ": type_schema"
756
- if self.eat(&Token::Colon) {
758
+ // Optional ": type_schema" or bare "{ record_type }". The LBrace-first
759
+ // arm of `type_schema` defaults the label to Star, which matches the
760
+ // ISO semantics for an absent isLabelExpression.
761
+ if self.eat(&Token::Colon) || matches!(self.peek(), Token::LBrace) {
757
762
  let (dt, filters) = self.type_schema()?;
758
763
  dtype = Some(dt);
759
764
  value_filters = filters;
@@ -859,7 +864,10 @@ impl Parser {
859
864
  var = Some(name);
860
865
  }
861
866
 
862
- if self.eat(&Token::Colon) {
867
+ // Optional ": type_schema" or bare "{ record_type }" — same ISO §16
868
+ // shape as node fillers. `-[{since: 2020}]->` and
869
+ // `-[e {since: 2020}]->` are valid edge patterns.
870
+ if self.eat(&Token::Colon) || matches!(self.peek(), Token::LBrace) {
863
871
  let (dt, filters) = self.type_schema()?;
864
872
  dtype = Some(dt);
865
873
  value_filters = filters;
@@ -78,6 +78,33 @@ fn test_concat_selector() {
78
78
  assert_eq!(fraud_run("()(x:{isDummy bool})"), 1);
79
79
  }
80
80
 
81
+ // ISO §16 elementPropertySpecification without isLabelExpression.
82
+ // Same value-filter semantics as the colonised forms.
83
+
84
+ #[test]
85
+ fn test_node_bare_prop_spec_anonymous_runtime() {
86
+ // 1 node has isBlocked=true (p2 Mike).
87
+ assert_eq!(fraud_run("({isBlocked: true})"), 1);
88
+ // 4 nodes have isBlocked=false (a1, a2, p1, d1).
89
+ assert_eq!(fraud_run("({isBlocked: false})"), 4);
90
+ }
91
+
92
+ #[test]
93
+ fn test_node_bare_prop_spec_with_var_runtime() {
94
+ assert_eq!(fraud_run("(x {owner: 'Aretha'})"), 1);
95
+ }
96
+
97
+ #[test]
98
+ fn test_edge_bare_prop_spec_anonymous_runtime() {
99
+ // 2 transfers/edges with amount=2000000 (t4 Transfer, t5 Foo).
100
+ assert_eq!(fraud_run("()-[{amount: 2000000}]->()"), 2);
101
+ }
102
+
103
+ #[test]
104
+ fn test_edge_bare_prop_spec_with_var_runtime() {
105
+ assert_eq!(fraud_run("()-[e {amount: 2500000}]->()"), 1);
106
+ }
107
+
81
108
  #[test]
82
109
  fn test_union() {
83
110
  assert_eq!(fraud_run("(x: Dummy) | (y: Account)"), 5);
@@ -135,6 +135,50 @@ fn test_descriptor_value_filter_with_colon_still_works() {
135
135
  assert!(s.contains("\"age\""), "got: {s}");
136
136
  }
137
137
 
138
+ // ISO/IEC 39075:2024 §16: `elementPropertySpecification` is a sibling of
139
+ // `isLabelExpression` under `elementPatternFiller`, so the colon is
140
+ // optional in front of the `{...}` record.
141
+
142
+ #[test]
143
+ fn test_node_bare_property_spec_anonymous() {
144
+ // `({k: v})` — no variable, no colon, just a property spec. Label
145
+ // defaults to Star (any), value filter hoisted by elaboration.
146
+ let parsed = parse("({age: 30})").unwrap();
147
+ let s = format!("{parsed:?}");
148
+ assert!(s.contains("value_filters"), "got: {s}");
149
+ assert!(s.contains("\"age\""), "got: {s}");
150
+ assert!(s.contains("Star"), "got: {s}");
151
+ }
152
+
153
+ #[test]
154
+ fn test_node_bare_property_spec_with_var() {
155
+ // `(x {k: v})` — variable plus property spec, no colon.
156
+ let parsed = parse("(x {age: 30})").unwrap();
157
+ let s = format!("{parsed:?}");
158
+ assert!(s.contains("value_filters"), "got: {s}");
159
+ assert!(s.contains("\"x\""), "got: {s}");
160
+ assert!(s.contains("\"age\""), "got: {s}");
161
+ }
162
+
163
+ #[test]
164
+ fn test_edge_bare_property_spec_anonymous() {
165
+ // `-[{k: v}]->` — no variable, no colon, just a property spec.
166
+ let parsed = parse("-[{since: 2020}]->").unwrap();
167
+ let s = format!("{parsed:?}");
168
+ assert!(s.contains("value_filters"), "got: {s}");
169
+ assert!(s.contains("\"since\""), "got: {s}");
170
+ }
171
+
172
+ #[test]
173
+ fn test_edge_bare_property_spec_with_var() {
174
+ // `-[e {k: v}]->` — variable plus property spec, no colon.
175
+ let parsed = parse("-[e {since: 2020}]->").unwrap();
176
+ let s = format!("{parsed:?}");
177
+ assert!(s.contains("value_filters"), "got: {s}");
178
+ assert!(s.contains("\"e\""), "got: {s}");
179
+ assert!(s.contains("\"since\""), "got: {s}");
180
+ }
181
+
138
182
  #[test]
139
183
  fn test_typed_predicate_in_where_explicit() {
140
184
  // `TYPED` is the explicit type-predicate operator in expressions.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes