iris-vector-graph 1.76.0__tar.gz → 1.78.0__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.
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/PKG-INFO +1 -1
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/translator.py +170 -61
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/pyproject.toml +1 -1
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/.gitignore +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/LICENSE +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/README.md +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/demo_biomedical.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/demo_fraud_detection.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/demo_fraud_detection_sql.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/demo_utils.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/demo_working_system.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/loaders.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/resolver.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/types.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical_legacy/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical_legacy/legacy_wrapper.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/fraud/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/fraud/loaders.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/fraud/resolver.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/fraud/types.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/graphQL.http +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/hybrid_vector_graph_query.cypher +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/rest.http +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/BM25Index.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Edge.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/EdgeScan.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/GraphIndex.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/IVFIndex.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Loader.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/MCPService.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Meta.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/NKGAccel.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/PLAIDSearch.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/PageRank.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/PyOps.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Service.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Snapshot.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/Traversal.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/IVG/Percentile.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/PageRankEmbedded.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/User.Exec.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/bolt_server.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/bulk_loader.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/capabilities.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/ast.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/lexer.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/parser.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher_api.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/embedded.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/engine.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/fusion.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/constants.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/engine.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/pooling.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/resolvers.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/gql/schema.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/models.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/operators.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/py.typed +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/schema.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/security.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/status.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/text_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/utils.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/vector_utils.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/fhir_bridges.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/fraud_sample_data.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/globals_schema.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/graph_path_globals.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/graph_walk_tvf.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/000_base_schema_iris.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/001_add_nodepk_table.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/001_rollback_nodepk.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/002_add_fk_constraints.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/operators.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/operators_fixed.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/procedures/kg_PageRank.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/rdf_reifications.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/schema.sql +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/TESTING.md +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmark_parser.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/benchmark_neo4j.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/bfs_benchmark.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/establish_baseline.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/graph_gen.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/iris_baseline_run.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/iris_os_run.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/load_neo4j.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/synthetic_baseline.csv +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/conftest.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_cypher_api.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_cypher_api_errors.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_graphql_schema.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_ppr_api.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/curl_suite.sh +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/conftest.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_biomedical_demo.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_biomedical_ui.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_cypher_sprints_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_fhir_bridges_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_fraud_demo.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_fraud_ui.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_gql_autogen_startup.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_gql_node_queries.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_gql_semantic_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_gql_traversal.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_graph_kernels_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_hla_kg_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_multi_query_engine_platform.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_named_paths_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_nkg_index_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_operator_wiring_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_plaid_search_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_ppr_cls_fast_path.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_ppr_guided_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_procedure_installation.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_reification_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_schema_procedures_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_subgraph_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_subquery_call_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/e2e/test_vecindex_e2e.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/conftest.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/gql/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/gql/test_graphql_mutations.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/gql/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/gql/test_graphql_vector_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_bidirectional_ppr.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cls_layer.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_advanced.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_enhancements.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_multi_type.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_rd.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_rel_vars.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_single_type.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_untyped.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_embeddings_api.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_fastapi_graphql.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_fhir_bridges_integration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_named_paths_integration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_constraints.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_graph_analytics.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_migration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_performance.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_nodepk_production_scale.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_objectscript_classes.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_pagerank_sql_optimization.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_reification_integration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_schema_migration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_stored_procedure_install.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/integration/test_subquery_call_integration.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/performance/conftest.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/performance/scale_benchmark.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/performance/test_ppr_stress.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/performance/test_stress_v1_5.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/run_all_tests.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_iris_rest_api.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_networkx_loader.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_performance_benchmarks.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_pyops_vector_conversion.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_python_operators.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_python_sdk.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_schema_validation.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_sql_queries.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/python/test_vector_functions.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/cypher/__init__.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/cypher/test_lexer.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/cypher/test_lexer_advanced.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/cypher/test_parser.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/cypher/test_parser_advanced.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_batch_mutations.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_bfs_arno.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_bm25_index.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_bolt_server.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cls_deployment.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_benchmark.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_benchmark_scale.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_case_when.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_e2e_new_features.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_functions.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_parser.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_posos_bugs.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_procedures.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_translator.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_union_exists.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_var_length.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_edge_embeddings.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_edgeprop_ndjson.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_embedded.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_engine_dimension_fix.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_engine_embeddings.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_engine_status.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_fhir_bridges.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_get_nodes.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_graph_kernels.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_graphql_dataloader.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_ingest_formats.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_ivf_index.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_named_graphs.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_named_paths.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_operators_wiring.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_plaid_search.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_ppr_guided_subgraph.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_reification.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_schema_init.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_schema_procedures.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_shortest_path.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_snapshot.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_sql_splitter.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_sql_table_bridge.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_subgraph.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_subquery_call.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_temporal_cypher.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_temporal_edges.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_unified_edge_store.py +0 -0
- {iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/unit/test_weighted_shortest_path.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris-vector-graph
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.78.0
|
|
4
4
|
Summary: Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs
|
|
5
5
|
Project-URL: Homepage, https://github.com/intersystems-community/iris-vector-graph
|
|
6
6
|
Project-URL: Documentation, https://github.com/intersystems-community/iris-vector-graph/tree/main/docs
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/translator.py
RENAMED
|
@@ -1643,9 +1643,13 @@ def translate_match_clause(match_clause, context, metadata):
|
|
|
1643
1643
|
for pattern in match_clause.patterns:
|
|
1644
1644
|
if not pattern.nodes:
|
|
1645
1645
|
continue
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1646
|
+
first_node = pattern.nodes[0]
|
|
1647
|
+
if first_node.variable or first_node.labels or first_node.properties:
|
|
1648
|
+
translate_node_pattern(
|
|
1649
|
+
first_node, context, metadata, optional=match_clause.optional
|
|
1650
|
+
)
|
|
1651
|
+
else:
|
|
1652
|
+
_ = context.next_alias("n")
|
|
1649
1653
|
for i, rel in enumerate(pattern.relationships):
|
|
1650
1654
|
translate_relationship_pattern(
|
|
1651
1655
|
rel,
|
|
@@ -1655,9 +1659,11 @@ def translate_match_clause(match_clause, context, metadata):
|
|
|
1655
1659
|
metadata,
|
|
1656
1660
|
optional=match_clause.optional,
|
|
1657
1661
|
)
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1662
|
+
last_node = pattern.nodes[i + 1]
|
|
1663
|
+
if last_node.variable or last_node.labels or last_node.properties:
|
|
1664
|
+
translate_node_pattern(
|
|
1665
|
+
last_node, context, metadata, optional=match_clause.optional
|
|
1666
|
+
)
|
|
1661
1667
|
|
|
1662
1668
|
for np in match_clause.named_paths:
|
|
1663
1669
|
context.named_paths[np.variable] = np
|
|
@@ -1680,13 +1686,8 @@ def translate_subquery_call(
|
|
|
1680
1686
|
is_correlated = len(subquery.import_variables) > 0
|
|
1681
1687
|
|
|
1682
1688
|
if is_correlated:
|
|
1683
|
-
if not inner.return_clause
|
|
1684
|
-
raise ValueError(
|
|
1685
|
-
"Correlated subquery Phase 1 requires exactly one RETURN column (scalar)"
|
|
1686
|
-
)
|
|
1687
|
-
|
|
1688
|
-
ret_item = inner.return_clause.items[0]
|
|
1689
|
-
alias = ret_item.alias or "sub_result"
|
|
1689
|
+
if not inner.return_clause:
|
|
1690
|
+
raise ValueError("Correlated subquery requires a RETURN clause")
|
|
1690
1691
|
|
|
1691
1692
|
child_ctx = TranslationContext()
|
|
1692
1693
|
child_ctx.input_params = context.input_params
|
|
@@ -1706,49 +1707,132 @@ def translate_subquery_call(
|
|
|
1706
1707
|
elif isinstance(clause, ast.WhereClause):
|
|
1707
1708
|
translate_where_clause(clause, child_ctx)
|
|
1708
1709
|
|
|
1709
|
-
|
|
1710
|
-
|
|
1710
|
+
num_return_cols = len(inner.return_clause.items)
|
|
1711
|
+
is_single_scalar = (
|
|
1712
|
+
num_return_cols == 1
|
|
1713
|
+
and isinstance(
|
|
1714
|
+
inner.return_clause.items[0].expression,
|
|
1715
|
+
(ast.AggregationFunction,),
|
|
1716
|
+
)
|
|
1711
1717
|
)
|
|
1712
1718
|
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
elif child_ctx.join_clauses:
|
|
1719
|
-
first_join = (
|
|
1720
|
-
child_ctx.join_clauses[0]
|
|
1721
|
-
.replace("JOIN ", "", 1)
|
|
1722
|
-
.replace("CROSS JOIN ", "", 1)
|
|
1719
|
+
if is_single_scalar:
|
|
1720
|
+
ret_item = inner.return_clause.items[0]
|
|
1721
|
+
alias = ret_item.alias or "sub_result"
|
|
1722
|
+
inner_expr = translate_expression(
|
|
1723
|
+
ret_item.expression, child_ctx, segment="select"
|
|
1723
1724
|
)
|
|
1724
|
-
|
|
1725
|
-
if
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1725
|
+
inner_sql_parts = [f"SELECT {inner_expr}"]
|
|
1726
|
+
if child_ctx.from_clauses:
|
|
1727
|
+
inner_sql_parts.append(f"FROM {', '.join(child_ctx.from_clauses)}")
|
|
1728
|
+
if child_ctx.join_clauses:
|
|
1729
|
+
inner_sql_parts.extend(child_ctx.join_clauses)
|
|
1730
|
+
elif child_ctx.join_clauses:
|
|
1731
|
+
first_join = (
|
|
1732
|
+
child_ctx.join_clauses[0]
|
|
1733
|
+
.replace("JOIN ", "", 1)
|
|
1734
|
+
.replace("CROSS JOIN ", "", 1)
|
|
1735
|
+
)
|
|
1736
|
+
on_idx = first_join.find(" ON ")
|
|
1737
|
+
if on_idx > 0:
|
|
1738
|
+
from_part = first_join[:on_idx]
|
|
1739
|
+
on_part = first_join[on_idx + 4 :]
|
|
1740
|
+
inner_sql_parts.append(f"FROM {from_part}")
|
|
1741
|
+
if child_ctx.join_clauses[1:]:
|
|
1742
|
+
inner_sql_parts.extend(child_ctx.join_clauses[1:])
|
|
1743
|
+
if child_ctx.where_conditions:
|
|
1744
|
+
child_ctx.where_conditions.insert(0, on_part)
|
|
1745
|
+
else:
|
|
1746
|
+
child_ctx.where_conditions.append(on_part)
|
|
1733
1747
|
else:
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
context.
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1748
|
+
inner_sql_parts.append(f"FROM {first_join}")
|
|
1749
|
+
if child_ctx.join_clauses[1:]:
|
|
1750
|
+
inner_sql_parts.extend(child_ctx.join_clauses[1:])
|
|
1751
|
+
if child_ctx.where_conditions:
|
|
1752
|
+
inner_sql_parts.append(f"WHERE {' AND '.join(child_ctx.where_conditions)}")
|
|
1753
|
+
scalar_sql = "\n".join(inner_sql_parts)
|
|
1754
|
+
all_params = (
|
|
1755
|
+
child_ctx.select_params + child_ctx.join_params + child_ctx.where_params
|
|
1756
|
+
)
|
|
1757
|
+
for p in all_params:
|
|
1758
|
+
context.select_params.append(p)
|
|
1759
|
+
context.select_items.append(f"COALESCE(({scalar_sql}), 0) AS {alias}")
|
|
1760
|
+
context.scalar_variables.add(alias)
|
|
1761
|
+
context.variable_aliases[alias] = "scalar"
|
|
1762
|
+
else:
|
|
1763
|
+
child_ctx_lateral = TranslationContext()
|
|
1764
|
+
child_ctx_lateral.input_params = context.input_params
|
|
1765
|
+
child_ctx_lateral._alias_counter = context._alias_counter
|
|
1766
|
+
for var in subquery.import_variables:
|
|
1767
|
+
child_ctx_lateral.variable_aliases[var] = context.variable_aliases[var]
|
|
1768
|
+
|
|
1769
|
+
def _inline_val(v):
|
|
1770
|
+
if isinstance(v, str): return f"'{v.replace(chr(39), chr(39)+chr(39))}'"
|
|
1771
|
+
if isinstance(v, bool): return "1" if v else "0"
|
|
1772
|
+
if v is None: return "NULL"
|
|
1773
|
+
return str(v)
|
|
1774
|
+
|
|
1775
|
+
def _inline_join_param(val):
|
|
1776
|
+
return _inline_val(val)
|
|
1777
|
+
def _inline_where_param(val):
|
|
1778
|
+
return _inline_val(val)
|
|
1779
|
+
def _inline_select_param(val):
|
|
1780
|
+
return _inline_val(val)
|
|
1781
|
+
|
|
1782
|
+
child_ctx_lateral.add_join_param = _inline_join_param
|
|
1783
|
+
child_ctx_lateral.add_where_param = _inline_where_param
|
|
1784
|
+
child_ctx_lateral.add_select_param = _inline_select_param
|
|
1785
|
+
|
|
1786
|
+
for part in inner.query_parts:
|
|
1787
|
+
for clause in part.clauses:
|
|
1788
|
+
if isinstance(clause, ast.MatchClause):
|
|
1789
|
+
translate_match_clause(clause, child_ctx_lateral, metadata)
|
|
1790
|
+
elif isinstance(clause, ast.WhereClause):
|
|
1791
|
+
translate_where_clause(clause, child_ctx_lateral)
|
|
1792
|
+
translate_return_clause(inner.return_clause, child_ctx_lateral)
|
|
1793
|
+
if not child_ctx_lateral.from_clauses and child_ctx_lateral.join_clauses:
|
|
1794
|
+
first_jc = child_ctx_lateral.join_clauses[0]
|
|
1795
|
+
for prefix in ("CROSS JOIN ", "LEFT OUTER JOIN ", "JOIN "):
|
|
1796
|
+
if first_jc.startswith(prefix):
|
|
1797
|
+
rest = first_jc[len(prefix):]
|
|
1798
|
+
on_idx = rest.find(" ON ")
|
|
1799
|
+
if on_idx > 0:
|
|
1800
|
+
table_part = rest[:on_idx]
|
|
1801
|
+
cond_part = rest[on_idx + 4:]
|
|
1802
|
+
child_ctx_lateral.from_clauses.append(table_part)
|
|
1803
|
+
if cond_part.strip() and cond_part.strip() != "1=1":
|
|
1804
|
+
child_ctx_lateral.where_conditions.insert(0, cond_part)
|
|
1805
|
+
child_ctx_lateral.join_clauses = child_ctx_lateral.join_clauses[1:]
|
|
1806
|
+
else:
|
|
1807
|
+
child_ctx_lateral.from_clauses.append(rest)
|
|
1808
|
+
child_ctx_lateral.join_clauses = child_ctx_lateral.join_clauses[1:]
|
|
1809
|
+
break
|
|
1810
|
+
inner_sql_parts_lat = [
|
|
1811
|
+
f"SELECT {'DISTINCT ' if inner.return_clause.distinct else ''}{', '.join(child_ctx_lateral.select_items)}"
|
|
1812
|
+
]
|
|
1813
|
+
if child_ctx_lateral.from_clauses:
|
|
1814
|
+
inner_sql_parts_lat.append(f"FROM {', '.join(child_ctx_lateral.from_clauses)}")
|
|
1815
|
+
if child_ctx_lateral.join_clauses:
|
|
1816
|
+
inner_sql_parts_lat.extend(child_ctx_lateral.join_clauses)
|
|
1817
|
+
if child_ctx_lateral.where_conditions:
|
|
1818
|
+
inner_sql_parts_lat.append(f"WHERE {' AND '.join(child_ctx_lateral.where_conditions)}")
|
|
1819
|
+
inner_sql = "\n".join(inner_sql_parts_lat)
|
|
1820
|
+
lat_alias = context.next_alias("lat")
|
|
1821
|
+
context.join_clauses.append(
|
|
1822
|
+
f"CROSS JOIN LATERAL (\n{inner_sql}\n) {lat_alias}"
|
|
1823
|
+
)
|
|
1824
|
+
for item in inner.return_clause.items:
|
|
1825
|
+
col_alias = item.alias
|
|
1826
|
+
if col_alias is None:
|
|
1827
|
+
if isinstance(item.expression, ast.Variable):
|
|
1828
|
+
col_alias = item.expression.name
|
|
1829
|
+
elif isinstance(item.expression, ast.PropertyReference):
|
|
1830
|
+
col_alias = f"{item.expression.variable}_{item.expression.property_name}"
|
|
1831
|
+
else:
|
|
1832
|
+
col_alias = f"col_{len(context.scalar_variables)}"
|
|
1833
|
+
if col_alias:
|
|
1834
|
+
context.variable_aliases[col_alias] = lat_alias
|
|
1835
|
+
context.scalar_variables.add(col_alias)
|
|
1752
1836
|
else:
|
|
1753
1837
|
child_ctx = TranslationContext()
|
|
1754
1838
|
child_ctx.input_params = context.input_params
|
|
@@ -1908,7 +1992,14 @@ def translate_relationship_pattern(
|
|
|
1908
1992
|
else:
|
|
1909
1993
|
context.join_clauses.append(f"JOIN {_table('nodes')} {target_alias} ON 1=1")
|
|
1910
1994
|
return
|
|
1911
|
-
|
|
1995
|
+
is_anon_source = (
|
|
1996
|
+
source_node.variable is None
|
|
1997
|
+
and not source_node.labels
|
|
1998
|
+
and not source_node.properties
|
|
1999
|
+
)
|
|
2000
|
+
if is_anon_source:
|
|
2001
|
+
source_alias = context.next_alias("n")
|
|
2002
|
+
elif source_node.variable is None:
|
|
1912
2003
|
source_alias = context.next_alias("n")
|
|
1913
2004
|
joined = any(
|
|
1914
2005
|
source_alias in fc for fc in context.from_clauses + context.join_clauses
|
|
@@ -2060,10 +2151,16 @@ def translate_relationship_pattern(
|
|
|
2060
2151
|
jt = "LEFT OUTER JOIN" if optional else "JOIN"
|
|
2061
2152
|
|
|
2062
2153
|
if rel.direction == ast.Direction.OUTGOING:
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2154
|
+
if is_anon_source:
|
|
2155
|
+
edge_cond, target_on = (
|
|
2156
|
+
f"1=1",
|
|
2157
|
+
f"{target_alias}.{t_col} = {edge_alias}.o_id",
|
|
2158
|
+
)
|
|
2159
|
+
else:
|
|
2160
|
+
edge_cond, target_on = (
|
|
2161
|
+
f"{edge_alias}.s = {source_alias}.{s_col}",
|
|
2162
|
+
f"{target_alias}.{t_col} = {edge_alias}.o_id",
|
|
2163
|
+
)
|
|
2067
2164
|
elif rel.direction == ast.Direction.INCOMING:
|
|
2068
2165
|
edge_cond, target_on = (
|
|
2069
2166
|
f"{edge_alias}.o_id = {source_alias}.{s_col}",
|
|
@@ -2140,7 +2237,7 @@ def translate_relationship_pattern(
|
|
|
2140
2237
|
and not source_alias.startswith("VecSearch")
|
|
2141
2238
|
)
|
|
2142
2239
|
|
|
2143
|
-
if use_edgescan:
|
|
2240
|
+
if use_edgescan and not is_anon_source:
|
|
2144
2241
|
pred_sql = f"'{rel.types[0]}'" if len(rel.types) == 1 else "NULL"
|
|
2145
2242
|
src_id_val = source_node.properties.get("id") if source_node else None
|
|
2146
2243
|
if src_id_val is not None:
|
|
@@ -2179,9 +2276,21 @@ def translate_relationship_pattern(
|
|
|
2179
2276
|
f"{jt} {_table('rdf_edges')} {edge_alias} ON {edge_cond}"
|
|
2180
2277
|
)
|
|
2181
2278
|
else:
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2279
|
+
if is_anon_source:
|
|
2280
|
+
actual_cond = edge_cond.lstrip("1=1").lstrip(" AND ").strip() if edge_cond.startswith("1=1") else edge_cond
|
|
2281
|
+
if not context.from_clauses:
|
|
2282
|
+
context.from_clauses.append(f"{_table('rdf_edges')} {edge_alias}")
|
|
2283
|
+
if actual_cond:
|
|
2284
|
+
context.where_conditions.append(actual_cond)
|
|
2285
|
+
else:
|
|
2286
|
+
full_cond = actual_cond if actual_cond else "1=1"
|
|
2287
|
+
context.join_clauses.append(
|
|
2288
|
+
f"{jt} {_table('rdf_edges')} {edge_alias} ON {full_cond}"
|
|
2289
|
+
)
|
|
2290
|
+
else:
|
|
2291
|
+
context.join_clauses.append(
|
|
2292
|
+
f"{jt} {_table('rdf_edges')} {edge_alias} ON {edge_cond}"
|
|
2293
|
+
)
|
|
2185
2294
|
|
|
2186
2295
|
if is_new_target and not target_alias.startswith("Stage"):
|
|
2187
2296
|
context.join_clauses.append(
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "iris-vector-graph"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.78.0"
|
|
8
8
|
description = "Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/__init__.py
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/loaders.py
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical/resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/domains/biomedical_legacy/__init__.py
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/examples/hybrid_vector_graph_query.cypher
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_src/src/Graph/KG/TemporalIndex.cls
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/iris_vector_graph/cypher/algorithms/paths.py
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/000_base_schema_iris.sql
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/001_add_nodepk_table.sql
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/001_rollback_nodepk.sql
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/sql/migrations/002_add_fk_constraints.sql
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
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/establish_baseline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/benchmarks/synthetic_baseline.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_cypher_api_errors.py
RENAMED
|
File without changes
|
{iris_vector_graph-1.76.0 → iris_vector_graph-1.78.0}/tests/contract/test_graphql_queries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|