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.
- {frogql-0.2.2 → frogql-0.2.3}/Cargo.lock +2 -2
- {frogql-0.2.2 → frogql-0.2.3}/PKG-INFO +1 -1
- {frogql-0.2.2 → frogql-0.2.3}/pyproject.toml +1 -1
- {frogql-0.2.2 → frogql-0.2.3}/python/Cargo.toml +1 -1
- {frogql-0.2.2 → frogql-0.2.3}/src/parser/grammar.rs +14 -6
- {frogql-0.2.2 → frogql-0.2.3}/tests/parse_and_run_test.rs +27 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/parser_test.rs +44 -0
- {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/ci.yml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/release-npm.yml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/.github/workflows/release.yml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/.gitignore +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/ARCHITECTURE.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/CLAUDE.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/Cargo.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/LICENSE +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/MANUAL.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/README.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/.gitignore +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/BENCHMARK_PLAN.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/INTERNAL_BENCHMARK.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/LDBC_BENCHMARK.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/LDBC_BENCH_PLAN.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/QUERIES.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/README.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/SURVEY.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/_lib/row_hash.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/compare_results.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/gqlite/run.sh +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/DIVERGENCES.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic11.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic2.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic5.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic6.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic8.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/ic9.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/requirements.txt +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/run.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/graphqlite/setup.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/install_python_deps.sh +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/DIVERGENCES.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/README.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic11.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic2.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic5.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic6.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic8.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/ic9.cypher +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/requirements.txt +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/run.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/kuzu/setup.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/cross-system/run_all.sh +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic1.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic10.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic11.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic12.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic13.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic14.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic2.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic3.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic4.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic5.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic6.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic7.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic8.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/ldbc-queries/ic9.toml +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/1-tree.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-3-lollipop.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-comb.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/2-tree.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-4-lollipop.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-clique.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-cycle.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/3-path.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-clique.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-cycle.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/queries/4-path.gql +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/csv_to_json.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/download_livejournal.sh +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/generate_queries.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/bench/scripts/run_bench.sh +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/data-import.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/data-modification.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/graph-types.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/JOIN_STRATEGY_NOTES.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/graph-type-catalog-plan.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/implemented-optimizations.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/iso-gql-gaps.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/possible-optimizations.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/rules.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/storage-architecture.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/internals/typechecker_migration.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/query-language.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/docs/secondary-indexes.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/address_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/bom.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/books_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/disney.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/disney_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_financial_management.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_financial_management_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_fraud_detection.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_fraud_detection_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_payment.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/financial_payment_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/fraud_detection.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/gameofthrones.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/grandstack.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/hockey.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/hockey_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_data_lineage.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_data_lineage_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_identity_and_access_management.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_identity_and_access_management_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_iot.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_iot_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_it_asset_management.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_it_asset_management_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_general_knowledge.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_general_knowledge_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_graph_geography.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/knowledge_graph_geography_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_bombill_of_materials.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_bombill_of_materials_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_production_process.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/manufacturing_production_process_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/moivelens.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/moivelens_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/movies.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/northwind.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/olympics_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/soccer_2016.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/soccer_2016_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_recommendation.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_recommendation_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_twitter.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/social_network_twitter_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/stackoverflow2.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/student_loan.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/student_loan_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/typecheck_demo.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/typecheck_repl_smoke.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/video_games_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/world.gdb +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/examples/world_queries.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/python/LICENSE +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/python/README.md +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/python/src/lib.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/scripts/convert_dev_datasets.py +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/bench_queries.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/bench_setup.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/convert_edgelist.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/frogql.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/internal_bench.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/ldbc_bench.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/bin/orderby_bench.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/elaborate/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/lib.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/model/csv_loader.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/model/graph.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/model/graph_access.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/model/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/model/value.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/existential.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/order_by_alias.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/pushdown.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/optimizer/unroll_repeat.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/pager/header.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/pager/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/pager/page.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/pager/pager.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/parser/lexer.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/parser/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/assignment.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/catalog.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/dm.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/engine.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/algorithm.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/iterator.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/pattern_extract.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/triple_index.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/ltj/veo.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/runtime/result.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/catalog_io.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/disk.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/disk_index.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/dump.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/io.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/lazy.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/overlay.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/record.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/secondary_index.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/secondary_index_io.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/store/string_table.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/descriptor.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/dm.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/expr.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/path_pattern.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/query.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/syntax/statement.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/checker.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/descriptor_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/format.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/inference.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/label_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/mod.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/path_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/property_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/simple_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/type_environment.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/validate.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/src/typing/variable_type.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/test_data/fraud.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/test_data/ltj_label_disjunction.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/test_data/movies.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/test_data/social-network.json +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/aggregates_proptest.proptest-regressions +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/aggregates_proptest.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/bench_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/coalesce_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/compile_diagnostics.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/count_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_default_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_delete_expr_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_label_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_persistence_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_remove_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_runtime_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_schema_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dm_set_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/dump_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/elaborate_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/exists_fold_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/exists_runtime_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/first_class_node_edge_values_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/float_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/graph_type_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/lattice_proptest.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/lazy_mut_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/list_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/ltj_label_disjunction_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/multi_match_proptest.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/multi_match_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/null_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/optional_match_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/order_by_optimization_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/order_by_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/parallel_edge_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/parser_dm_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/record_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/runtime_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/store_runtime_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/text2gql_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/typecheck_gaps_order_by_test.rs +0 -0
- {frogql-0.2.2 → frogql-0.2.3}/tests/typecheck_smoke.rs +0 -0
- {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.
|
|
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.
|
|
287
|
+
version = "0.2.3"
|
|
288
288
|
dependencies = [
|
|
289
289
|
"gqlrust",
|
|
290
290
|
"pyo3",
|
|
@@ -729,8 +729,11 @@ impl Parser {
|
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
// Try to parse element_pattern_filler:
|
|
733
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
{frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_identity_and_access_management.gdb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frogql-0.2.2 → frogql-0.2.3}/examples/information_technology_it_asset_management_queries.json
RENAMED
|
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
|