hyperstreamdb 0.5.4__tar.gz → 0.5.5__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.
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/Cargo.lock +1 -1
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/Cargo.toml +1 -1
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/PKG-INFO +20 -4
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/README.md +19 -3
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/spark-hyperstream/pom.xml +107 -7
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister +1 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/DefaultSource.scala +46 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamMergeBuilder.scala +17 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamPositionDeltaWrite.scala +27 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamPositionDeltaWriterFactory.scala +78 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamRowLevelOperation.scala +37 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamScanBuilder.scala +44 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamTable.scala +53 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamWriteBuilder.scala +16 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/jni/HyperStreamJNIBridge.scala +41 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-3/com/hyperstreamdb/spark/HyperStreamCatalog.scala +38 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-3/com/hyperstreamdb/spark/procedures/AddIndexProcedure.scala +40 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-3/com/hyperstreamdb/spark/procedures/BuildIndexProcedure.scala +36 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-3/com/hyperstreamdb/spark/procedures/SetPrimaryKeyProcedure.scala +39 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-4/com/hyperstreamdb/spark/HyperStreamCatalog.scala +49 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-4/com/hyperstreamdb/spark/procedures/AddIndexProcedure.scala +33 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-4/com/hyperstreamdb/spark/procedures/BuildIndexProcedure.scala +31 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/main/spark-4/com/hyperstreamdb/spark/procedures/SetPrimaryKeyProcedure.scala +31 -0
- hyperstreamdb-0.5.5/spark-hyperstream/src/test/scala/com/hyperstreamdb/spark/SparkMergeIntegrationTest.scala +101 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/ffi.rs +196 -1
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBConnectorFactory.java +9 -3
- hyperstreamdb-0.5.5/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBJNIBridge.java +24 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPageSource.java +7 -1
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPageSourceProvider.java +6 -1
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBSplitManager.java +10 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/test/java/com/hyperstreamdb/trino/TrinoConnectorTest.java +2 -2
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/DefaultSource.java +0 -30
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartition.java +0 -21
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartitionReader.java +0 -102
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartitionReaderFactory.java +0 -35
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamScanBuilder.java +0 -98
- hyperstreamdb-0.5.4/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamTable.java +0 -43
- hyperstreamdb-0.5.4/spark-hyperstream/src/test/java/com/hyperstreamdb/spark/SparkConnectorTest.java +0 -209
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.cargo/audit.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.env.example +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.gitattributes +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.gitignore +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.hypothesis/constants/32b327793848e7d8 +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.hypothesis/constants/67b0a8ccf18bf5d2 +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.hypothesis/constants/84828557b4ee7be4 +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.instructions.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.ipynb_checkpoints/Untitled-checkpoint.ipynb +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.qwen/settings.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/.qwen/settings.json.orig +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/ADMIN_CLI.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/CHANGELOG.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/CNAME +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/CONTRIBUTING.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/Dockerfile +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/ELASTICSEARCH_INTEGRATION_PLAN.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/GETTING_STARTED.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/HyperStreamDB.png +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/LICENSE-APACHE +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/LICENSE-MIT +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/ROADMAP.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/RUN_COMPLIANCE_TESTS.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/SECURITY.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/STEERING.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/THIRDPARTY_NOTICES.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/Untitled.ipynb +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benches/bench_table.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benches/performance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/BENCHMARK_REPORT.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/benchmark_charts.png +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/benchmark_results.csv +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/concurrent_queries_20260409_214245.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/concurrent_queries_20260409_214245.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_search_comparison_20260409_222607.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_search_comparison_20260409_222607.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_214355.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_214355.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_220418.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_220418.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_222053.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_222053.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_225907.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/filtered_vector_search_20260409_225907.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260409_222303.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260409_222303.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260620_173334.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260620_173334.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260620_192646.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260620_192646.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260623_173013.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/full_scan_baseline_20260623_173013.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260409_222302.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260409_222302.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260620_173332.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260620_173332.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260620_192645.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260620_192645.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260623_173011.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/high_selectivity_filter_20260623_173011.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/ingestion_comparison_20260409_222516.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/ingestion_comparison_20260409_222516.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_214428.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_214428.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_220450.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_220450.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_222131.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_222131.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_225938.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_225938.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_231713.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260409_231713.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260620_173300.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260620_173300.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260620_192611.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260620_192611.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260623_172935.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/multi_filter_vector_20260623_172935.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260620_173332.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260620_173332.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260620_192644.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260620_192644.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260623_173011.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/point_lookup_20260623_173011.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_214501.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_214501.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_220524.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_220524.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_222204.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_222204.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_230010.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260409_230010.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260620_173303.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260620_173303.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260620_192614.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260620_192614.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260623_172938.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/post_vs_pre_filter_20260623_172938.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/query_comparison_20260409_222541.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/query_comparison_20260409_222541.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260409_222302.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260409_222302.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260620_173333.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260620_173333.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260620_192646.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260620_192646.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260623_173012.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/range_query_20260623_173012.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/search_filtered_high_selectivity_20260409_214144.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/search_filtered_high_selectivity_20260409_214144.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/search_unfiltered_20260409_214028.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/benchmark_results/search_unfiltered_20260409_214028.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/book.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/build-connectors.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/build.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/check_iceberg_compliance.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/clippy.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/clippy_output.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/deny.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docker-compose-hive.yml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docker-compose-minio-nessie.yml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docker-compose.production.yml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docker-compose.yml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/.nojekyll +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/BENCHMARKING.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/COMPREHENSIVE_GUIDE.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/CONCURRENCY.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/CONFIGURATION.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/DORIS_OPTIMIZATION_PATTERNS.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/GPU_SETUP_GUIDE.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/ICEBERG_V2_V3_API.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/INSTALLATION.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/PGVECTOR_SQL_GUIDE.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/PYTHON_VECTOR_API.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/VECTOR_CONFIGURATION.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/api_reference.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/architecture.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/catalog_usage.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/index.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/integrations/README.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/integrations/java_jni.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/integrations/python.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/integrations/spark.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/integrations/trino.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/monitoring.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/requirements.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/_static/HyperStreamDB.png +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/api/python.rst +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/api/rust.rst +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/conf.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/index.rst +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/source/roadmap.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/docs/task_status.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/fix_deprecated.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/hive-config/hive-site.xml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/marketing_site/index.html +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/marketing_site/styles.css +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/proptest-regressions/core/index/gpu.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/proptest-regressions/core/sql/vector_literal.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/proptest-regressions/core/sql/vector_udf.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/pyproject.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/python/hyperstreamdb/__init__.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/python/hyperstreamdb/embeddings.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/recovered_plan.txt +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/rust-toolchain.toml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/fix_nb.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/split_table.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/update_cache.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/update_reader.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/update_schema_patch.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/scripts/update_schema_patch2.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/spark-hyperstream/.bloop/bloop.settings.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/spark-hyperstream/.bloop/spark-hyperstream-test.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/spark-hyperstream/.bloop/spark-hyperstream.json +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/gateway.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/hdb.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/hyperstreamdb-admin.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/iceberg_rest.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/probe_datafusion.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/setup_test_data.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/bin/verify_layered_indexing.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/cache.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/config.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/glue.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/hive.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/jdbc.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/nessie.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/rest.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/catalog/unity.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/clustering.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/compaction.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/embeddings.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/error.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/delete.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/iceberg_delete.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/manifest.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/schema.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/transform.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/types.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/value.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/iceberg/writer.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/build_inverted.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/build_vector.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/cosine_distance.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/hamming_distance.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/inner_product.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/jaccard_distance.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/kmeans_assignment.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/l1_distance.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/cuda/l2_distance.cu +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/distance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/gpu.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_ivf.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/annhdf5.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/api.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/dist.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/flatten.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/hnsw.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/hnswio.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/libext.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/prelude.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/hnsw_rs/test.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/ivf.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/memory.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/cosine_distance.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/hamming_distance.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/inner_product.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/jaccard_distance.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/kmeans_assignment.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/l1_distance.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/mps/l2_distance.metal +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/cosine_distance.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/hamming_distance.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/inner_product.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/jaccard_distance.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/kmeans_assignment.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/l1_distance.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/opencl/l2_distance.cl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/pq.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/tokenizer.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/turboquant.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/index/wgpu_kernel.wgsl +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/license.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/lock.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/maintenance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/manager/commit.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/manager/load.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/manager/partition.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/manager/schema.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/manager.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/manifest/types.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/merge.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/metadata.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/nessie.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/planner/filter.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/planner/pruning.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/planner/vector_search.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/planner.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/puffin.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/query.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/reader/delete.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/reader/filter.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/reader/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/reader/scan.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/search/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/search/rrf.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/segment.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/literal/binary.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/literal/dense.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/literal/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/literal/sparse.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/config.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/index_join.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/vector_search/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/vector_search/plan_detection.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/vector_search/plan_rewriter.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer/vector_search/sort_expr_parser.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/optimizer.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/pgvector_rewriter.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/physical_plan/index_join.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/physical_plan/vector_merge.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/physical_plan/vector_scan.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/physical_plan.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/session.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/udf/aggregate.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/udf/distance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/udf/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/udf/sparse.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/udf/transform.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_literal.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_operators.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf/aggregate.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf/distance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf/sparse.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf/transform.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/sql/vector_udf.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/storage.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/builder.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/fluent.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/index_config.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/primary_key.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/read.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/schema.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/state.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/stats.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/table/write.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/telemetry.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/core/wal.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/enterprise/continuous_indexing.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/enterprise/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/index.rs.old +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/lib.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/glue.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/hive.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/jdbc.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/nessie.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/rest.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/catalog/unity.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/helpers.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/manifest.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/schema.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/session.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/stats.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python/table.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python_binding.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python_distance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/python_gpu_context.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/telemetry/metrics.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/telemetry/mod.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/src/telemetry/tracing.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/all_types_index_test.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/bin/generate_iceberg_manifests.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/bin/verify_iceberg_read_check.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/check_mmh3.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/data/download_nyc_taxi.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/data/generate_embeddings.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/data/generate_wikipedia.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/data/start_nessie.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/datafusion_rust_test.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/debug_murmur3.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/fuzz_murmur3.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/gpu_test_helpers.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/integration_test_hnsw_ivf_native.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/performance/README.md +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/prototype_merge.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/python/verify_docstrings.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/python/verify_fluent_api.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/python/verify_unified_ingest.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/schema_evolution_test.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/stability.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_admin_cli.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_all_algos.py +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_catalog_commit.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_compliance.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_delete_correctness.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_python_delete.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_rest.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_rest_create.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_rest_delete.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_rest_remove_index.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_iceberg_rest_update.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_metadata_creation.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_mor_reads.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_mor_writes.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_partition_transforms.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_partitioned_writes.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_puffin_index.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_rest_updates.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/tests/verify_schema_compat.rs +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/.DS_Store +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/glue_catalog.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/hyperstreamdb.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/iceberg.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/iceberg_hive.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/memory.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/catalog/postgres.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/config.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/entrypoint.sh +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/jvm.config +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config/node.properties +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-config.zip +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/pom.xml +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBColumnHandle.java +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBMetadata.java +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPlugin.java +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBSplit.java +0 -0
- {hyperstreamdb-0.5.4 → hyperstreamdb-0.5.5}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBTableHandle.java +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hyperstreamdb
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.5
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Programming Language :: Rust
|
|
@@ -486,11 +486,15 @@ s3://bucket/table/
|
|
|
486
486
|
## 🔌 Connectors
|
|
487
487
|
|
|
488
488
|
### Spark
|
|
489
|
+
The Spark connector supports **Spark 3.5, 4.0, and 4.1** via a shared JNI FFI bridge. It intercepts row-level operations (like `MERGE INTO`) to take advantage of HyperStreamDB's fast indexing and supports configuring GPU backends.
|
|
490
|
+
|
|
489
491
|
```scala
|
|
490
492
|
// Read
|
|
491
493
|
val df = spark.read
|
|
492
494
|
.format("hyperstream")
|
|
493
495
|
.option("path", "s3://bucket/table")
|
|
496
|
+
// Optionally configure the GPU device (cuda, mps, intel, rocm, auto, or cpu)
|
|
497
|
+
.option("hyperstream.gpu_device", "cuda")
|
|
494
498
|
.load()
|
|
495
499
|
|
|
496
500
|
// Write
|
|
@@ -500,10 +504,23 @@ df.write
|
|
|
500
504
|
.save()
|
|
501
505
|
```
|
|
502
506
|
|
|
507
|
+
You can also globally configure the GPU for Spark stored procedures (e.g. index building):
|
|
508
|
+
```scala
|
|
509
|
+
spark.conf.set("spark.hyperstream.gpu.device", "cuda")
|
|
510
|
+
```
|
|
511
|
+
|
|
503
512
|
### Trino
|
|
513
|
+
The Trino connector intercepts reads to natively push down scalar and vector filtering to the HyperStreamDB core, drastically reducing IO.
|
|
514
|
+
|
|
504
515
|
```sql
|
|
505
516
|
SELECT * FROM hyperstream.default.my_table
|
|
506
|
-
WHERE id > 100; -- Uses scalar index
|
|
517
|
+
WHERE id > 100; -- Uses scalar index natively via JNI pushdown
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
You can configure the GPU backend for Trino globally or per-catalog using the properties file (e.g. `etc/catalog/hyperstream.properties`):
|
|
521
|
+
```properties
|
|
522
|
+
connector.name=hyperstreamdb
|
|
523
|
+
hyperstream.gpu-device=cuda
|
|
507
524
|
```
|
|
508
525
|
|
|
509
526
|
### Python (Direct)
|
|
@@ -614,8 +631,7 @@ hyperstreamdb/
|
|
|
614
631
|
- [x] Multi-backend GPU support (CUDA, ROCm, Metal, XPU)
|
|
615
632
|
- [x] Sparse and binary vector operations
|
|
616
633
|
|
|
617
|
-
|
|
618
|
-
- [ ] Spark/Trino connectors
|
|
634
|
+
- [x] Spark/Trino connectors (JNI Bridge & Native GPU support)
|
|
619
635
|
- [ ] Elasticsearch-like REST Search API (`hyperstreamdb-search` add-on)
|
|
620
636
|
|
|
621
637
|
### 📋 Planned
|
|
@@ -447,11 +447,15 @@ s3://bucket/table/
|
|
|
447
447
|
## 🔌 Connectors
|
|
448
448
|
|
|
449
449
|
### Spark
|
|
450
|
+
The Spark connector supports **Spark 3.5, 4.0, and 4.1** via a shared JNI FFI bridge. It intercepts row-level operations (like `MERGE INTO`) to take advantage of HyperStreamDB's fast indexing and supports configuring GPU backends.
|
|
451
|
+
|
|
450
452
|
```scala
|
|
451
453
|
// Read
|
|
452
454
|
val df = spark.read
|
|
453
455
|
.format("hyperstream")
|
|
454
456
|
.option("path", "s3://bucket/table")
|
|
457
|
+
// Optionally configure the GPU device (cuda, mps, intel, rocm, auto, or cpu)
|
|
458
|
+
.option("hyperstream.gpu_device", "cuda")
|
|
455
459
|
.load()
|
|
456
460
|
|
|
457
461
|
// Write
|
|
@@ -461,10 +465,23 @@ df.write
|
|
|
461
465
|
.save()
|
|
462
466
|
```
|
|
463
467
|
|
|
468
|
+
You can also globally configure the GPU for Spark stored procedures (e.g. index building):
|
|
469
|
+
```scala
|
|
470
|
+
spark.conf.set("spark.hyperstream.gpu.device", "cuda")
|
|
471
|
+
```
|
|
472
|
+
|
|
464
473
|
### Trino
|
|
474
|
+
The Trino connector intercepts reads to natively push down scalar and vector filtering to the HyperStreamDB core, drastically reducing IO.
|
|
475
|
+
|
|
465
476
|
```sql
|
|
466
477
|
SELECT * FROM hyperstream.default.my_table
|
|
467
|
-
WHERE id > 100; -- Uses scalar index
|
|
478
|
+
WHERE id > 100; -- Uses scalar index natively via JNI pushdown
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
You can configure the GPU backend for Trino globally or per-catalog using the properties file (e.g. `etc/catalog/hyperstream.properties`):
|
|
482
|
+
```properties
|
|
483
|
+
connector.name=hyperstreamdb
|
|
484
|
+
hyperstream.gpu-device=cuda
|
|
468
485
|
```
|
|
469
486
|
|
|
470
487
|
### Python (Direct)
|
|
@@ -575,8 +592,7 @@ hyperstreamdb/
|
|
|
575
592
|
- [x] Multi-backend GPU support (CUDA, ROCm, Metal, XPU)
|
|
576
593
|
- [x] Sparse and binary vector operations
|
|
577
594
|
|
|
578
|
-
|
|
579
|
-
- [ ] Spark/Trino connectors
|
|
595
|
+
- [x] Spark/Trino connectors (JNI Bridge & Native GPU support)
|
|
580
596
|
- [ ] Elasticsearch-like REST Search API (`hyperstreamdb-search` add-on)
|
|
581
597
|
|
|
582
598
|
### 📋 Planned
|
|
@@ -26,24 +26,55 @@
|
|
|
26
26
|
</properties>
|
|
27
27
|
|
|
28
28
|
<profiles>
|
|
29
|
+
<profile>
|
|
30
|
+
<id>spark-4.1</id>
|
|
31
|
+
<properties>
|
|
32
|
+
<spark.version>4.1.2</spark.version>
|
|
33
|
+
<spark.major.version>4</spark.major.version>
|
|
34
|
+
<iceberg.spark.version>4.1_2.13</iceberg.spark.version>
|
|
35
|
+
<iceberg.version>1.11.0</iceberg.version>
|
|
36
|
+
</properties>
|
|
37
|
+
</profile>
|
|
29
38
|
<profile>
|
|
30
39
|
<id>spark-4.0</id>
|
|
31
40
|
<activation>
|
|
32
41
|
<activeByDefault>true</activeByDefault>
|
|
33
42
|
</activation>
|
|
34
43
|
<properties>
|
|
35
|
-
<spark.version>4.0.
|
|
44
|
+
<spark.version>4.0.1</spark.version>
|
|
45
|
+
<spark.major.version>4</spark.major.version>
|
|
46
|
+
<iceberg.spark.version>4.0_2.13</iceberg.spark.version>
|
|
47
|
+
<iceberg.version>1.11.0</iceberg.version>
|
|
36
48
|
</properties>
|
|
37
49
|
</profile>
|
|
38
50
|
<profile>
|
|
39
51
|
<id>spark-3.5</id>
|
|
40
52
|
<properties>
|
|
41
53
|
<spark.version>3.5.1</spark.version>
|
|
54
|
+
<spark.major.version>3</spark.major.version>
|
|
55
|
+
<iceberg.spark.version>3.5_2.12</iceberg.spark.version>
|
|
56
|
+
<iceberg.version>1.5.2</iceberg.version>
|
|
57
|
+
<scala.binary.version>2.12</scala.binary.version>
|
|
42
58
|
</properties>
|
|
43
59
|
</profile>
|
|
44
60
|
</profiles>
|
|
45
61
|
|
|
46
62
|
<dependencies>
|
|
63
|
+
<!-- Scala Library -->
|
|
64
|
+
<dependency>
|
|
65
|
+
<groupId>org.scala-lang</groupId>
|
|
66
|
+
<artifactId>scala-library</artifactId>
|
|
67
|
+
<version>${scala.binary.version}.18</version>
|
|
68
|
+
<scope>provided</scope>
|
|
69
|
+
</dependency>
|
|
70
|
+
|
|
71
|
+
<!-- Iceberg Spark Runtime -->
|
|
72
|
+
<dependency>
|
|
73
|
+
<groupId>org.apache.iceberg</groupId>
|
|
74
|
+
<artifactId>iceberg-spark-runtime-${iceberg.spark.version}</artifactId>
|
|
75
|
+
<version>${iceberg.version}</version>
|
|
76
|
+
<scope>provided</scope>
|
|
77
|
+
</dependency>
|
|
47
78
|
<!-- Spark Core (Provided) -->
|
|
48
79
|
<dependency>
|
|
49
80
|
<groupId>org.apache.spark</groupId>
|
|
@@ -76,12 +107,6 @@
|
|
|
76
107
|
<version>5.13.0</version>
|
|
77
108
|
</dependency>
|
|
78
109
|
|
|
79
|
-
<!-- Jackson for JSON processing -->
|
|
80
|
-
<dependency>
|
|
81
|
-
<groupId>com.fasterxml.jackson.core</groupId>
|
|
82
|
-
<artifactId>jackson-databind</artifactId>
|
|
83
|
-
<version>2.15.2</version>
|
|
84
|
-
</dependency>
|
|
85
110
|
|
|
86
111
|
<!-- Testing -->
|
|
87
112
|
<dependency>
|
|
@@ -90,16 +115,75 @@
|
|
|
90
115
|
<version>4.13.2</version>
|
|
91
116
|
<scope>test</scope>
|
|
92
117
|
</dependency>
|
|
118
|
+
<dependency>
|
|
119
|
+
<groupId>org.scalatest</groupId>
|
|
120
|
+
<artifactId>scalatest_${scala.binary.version}</artifactId>
|
|
121
|
+
<version>3.2.19</version>
|
|
122
|
+
<scope>test</scope>
|
|
123
|
+
</dependency>
|
|
124
|
+
<dependency>
|
|
125
|
+
<groupId>org.apache.hadoop</groupId>
|
|
126
|
+
<artifactId>hadoop-client</artifactId>
|
|
127
|
+
<version>3.3.6</version>
|
|
128
|
+
<scope>test</scope>
|
|
129
|
+
</dependency>
|
|
130
|
+
<dependency>
|
|
131
|
+
<groupId>org.apache.hive</groupId>
|
|
132
|
+
<artifactId>hive-exec</artifactId>
|
|
133
|
+
<version>3.1.3</version>
|
|
134
|
+
<scope>test</scope>
|
|
135
|
+
<exclusions>
|
|
136
|
+
<exclusion>
|
|
137
|
+
<groupId>org.pentaho</groupId>
|
|
138
|
+
<artifactId>pentaho-aggdesigner-algorithm</artifactId>
|
|
139
|
+
</exclusion>
|
|
140
|
+
</exclusions>
|
|
141
|
+
</dependency>
|
|
93
142
|
</dependencies>
|
|
94
143
|
|
|
95
144
|
<build>
|
|
96
145
|
<plugins>
|
|
146
|
+
<plugin>
|
|
147
|
+
<groupId>org.codehaus.mojo</groupId>
|
|
148
|
+
<artifactId>build-helper-maven-plugin</artifactId>
|
|
149
|
+
<version>3.5.0</version>
|
|
150
|
+
<executions>
|
|
151
|
+
<execution>
|
|
152
|
+
<id>add-source</id>
|
|
153
|
+
<phase>generate-sources</phase>
|
|
154
|
+
<goals>
|
|
155
|
+
<goal>add-source</goal>
|
|
156
|
+
</goals>
|
|
157
|
+
<configuration>
|
|
158
|
+
<sources>
|
|
159
|
+
<source>src/main/spark-${spark.major.version}</source>
|
|
160
|
+
</sources>
|
|
161
|
+
</configuration>
|
|
162
|
+
</execution>
|
|
163
|
+
</executions>
|
|
164
|
+
</plugin>
|
|
97
165
|
<plugin>
|
|
98
166
|
<groupId>org.apache.maven.plugins</groupId>
|
|
99
167
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
100
168
|
<version>3.2.5</version>
|
|
101
169
|
<configuration>
|
|
102
170
|
<useSystemClassLoader>false</useSystemClassLoader>
|
|
171
|
+
<argLine>
|
|
172
|
+
--add-opens=java.base/java.lang=ALL-UNNAMED
|
|
173
|
+
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
|
|
174
|
+
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
|
|
175
|
+
--add-opens=java.base/java.io=ALL-UNNAMED
|
|
176
|
+
--add-opens=java.base/java.net=ALL-UNNAMED
|
|
177
|
+
--add-opens=java.base/java.nio=ALL-UNNAMED
|
|
178
|
+
--add-opens=java.base/java.util=ALL-UNNAMED
|
|
179
|
+
--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
|
|
180
|
+
--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED
|
|
181
|
+
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
|
|
182
|
+
--add-opens=java.base/sun.nio.cs=ALL-UNNAMED
|
|
183
|
+
--add-opens=java.base/sun.security.action=ALL-UNNAMED
|
|
184
|
+
--add-opens=java.base/sun.util.calendar=ALL-UNNAMED
|
|
185
|
+
--add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED
|
|
186
|
+
</argLine>
|
|
103
187
|
</configuration>
|
|
104
188
|
</plugin>
|
|
105
189
|
<plugin>
|
|
@@ -137,6 +221,22 @@
|
|
|
137
221
|
</execution>
|
|
138
222
|
</executions>
|
|
139
223
|
</plugin>
|
|
224
|
+
<plugin>
|
|
225
|
+
<groupId>net.alchim31.maven</groupId>
|
|
226
|
+
<artifactId>scala-maven-plugin</artifactId>
|
|
227
|
+
<version>4.8.1</version>
|
|
228
|
+
<executions>
|
|
229
|
+
<execution>
|
|
230
|
+
<goals>
|
|
231
|
+
<goal>compile</goal>
|
|
232
|
+
<goal>testCompile</goal>
|
|
233
|
+
</goals>
|
|
234
|
+
</execution>
|
|
235
|
+
</executions>
|
|
236
|
+
<configuration>
|
|
237
|
+
<scalaVersion>${scala.binary.version}.18</scalaVersion>
|
|
238
|
+
</configuration>
|
|
239
|
+
</plugin>
|
|
140
240
|
</plugins>
|
|
141
241
|
</build>
|
|
142
242
|
</project>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
com.hyperstreamdb.spark.DefaultSource
|
hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/DefaultSource.scala
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.catalog.{Table, TableProvider}
|
|
4
|
+
import org.apache.spark.sql.connector.expressions.Transform
|
|
5
|
+
import org.apache.spark.sql.types.StructType
|
|
6
|
+
import org.apache.spark.sql.util.CaseInsensitiveStringMap
|
|
7
|
+
import org.apache.iceberg.spark.source.IcebergSource
|
|
8
|
+
import java.util.Map
|
|
9
|
+
|
|
10
|
+
import org.apache.spark.sql.sources.DataSourceRegister
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The entry point for the HyperStreamDB Spark Connector.
|
|
14
|
+
* This wraps the official Iceberg source but injects our custom Table implementation
|
|
15
|
+
* to intercept MERGE INTO and other operations.
|
|
16
|
+
*/
|
|
17
|
+
class DefaultSource extends TableProvider with DataSourceRegister {
|
|
18
|
+
|
|
19
|
+
override def shortName(): String = "hyperstream"
|
|
20
|
+
|
|
21
|
+
// We delegate basic metadata/table resolution to the official IcebergSource
|
|
22
|
+
private lazy val icebergSource = new IcebergSource()
|
|
23
|
+
|
|
24
|
+
override def inferSchema(options: CaseInsensitiveStringMap): StructType = {
|
|
25
|
+
// Delegate to Iceberg to read the schema from the manifest
|
|
26
|
+
icebergSource.inferSchema(options)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override def getTable(
|
|
30
|
+
schema: StructType,
|
|
31
|
+
partitioning: Array[Transform],
|
|
32
|
+
properties: Map[String, String]
|
|
33
|
+
): Table = {
|
|
34
|
+
// Get the underlying Iceberg Table
|
|
35
|
+
val icebergTable = icebergSource.getTable(schema, partitioning, properties)
|
|
36
|
+
|
|
37
|
+
val gpuDevice = properties.getOrDefault("hyperstream.gpu_device", "auto")
|
|
38
|
+
|
|
39
|
+
// Wrap it in our HyperStreamTable to intercept operations
|
|
40
|
+
new HyperStreamTable(icebergTable, schema, properties, gpuDevice)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override def supportsExternalMetadata(): Boolean = {
|
|
44
|
+
true
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.write.{RowLevelOperation, RowLevelOperationBuilder, RowLevelOperationInfo, LogicalWriteInfo}
|
|
4
|
+
|
|
5
|
+
class HyperStreamMergeBuilder(
|
|
6
|
+
table: HyperStreamTable,
|
|
7
|
+
info: RowLevelOperationInfo,
|
|
8
|
+
gpuDevice: String
|
|
9
|
+
) extends RowLevelOperationBuilder {
|
|
10
|
+
|
|
11
|
+
override def build(): RowLevelOperation = {
|
|
12
|
+
// We return our custom RowLevelOperation that handles Merge-on-Read
|
|
13
|
+
new HyperStreamRowLevelOperation(table, info, gpuDevice)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.write.{LogicalWriteInfo, RowLevelOperationInfo, DataWriterFactory, PhysicalWriteInfo, WriterCommitMessage, DeltaWrite, DeltaBatchWrite, DeltaWriterFactory, DeltaWriter}
|
|
4
|
+
|
|
5
|
+
class HyperStreamPositionDeltaWrite(
|
|
6
|
+
table: HyperStreamTable,
|
|
7
|
+
info: LogicalWriteInfo,
|
|
8
|
+
gpuDevice: String
|
|
9
|
+
) extends DeltaWrite {
|
|
10
|
+
|
|
11
|
+
override def toBatch(): DeltaBatchWrite = new HyperStreamDeltaBatchWrite(table, gpuDevice)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class HyperStreamDeltaBatchWrite(table: HyperStreamTable, gpuDevice: String) extends DeltaBatchWrite {
|
|
15
|
+
override def createBatchWriterFactory(physicalInfo: PhysicalWriteInfo): DeltaWriterFactory = {
|
|
16
|
+
// Return a factory that creates our custom JNI Position Delta Writers
|
|
17
|
+
new HyperStreamPositionDeltaWriterFactory(table.name(), gpuDevice)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override def commit(messages: Array[WriterCommitMessage]): Unit = {
|
|
21
|
+
// Commit manifest updates
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override def abort(messages: Array[WriterCommitMessage]): Unit = {
|
|
25
|
+
// Cleanup any orphaned delete files if the job aborts
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.write.{DeltaWriter, DeltaWriterFactory}
|
|
4
|
+
import org.apache.spark.sql.catalyst.InternalRow
|
|
5
|
+
import org.apache.spark.sql.connector.write.WriterCommitMessage
|
|
6
|
+
|
|
7
|
+
// We will use Jackson (available in Spark) to serialize JSON
|
|
8
|
+
import com.fasterxml.jackson.databind.ObjectMapper
|
|
9
|
+
|
|
10
|
+
class HyperStreamPositionDeltaWriterFactory(tableName: String, gpuDevice: String) extends DeltaWriterFactory {
|
|
11
|
+
override def createWriter(partitionId: Int, taskId: Long): DeltaWriter[InternalRow] = {
|
|
12
|
+
new HyperStreamDeltaWriter(tableName, gpuDevice)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
class HyperStreamDeltaCommitMessage(val status: String) extends WriterCommitMessage
|
|
17
|
+
|
|
18
|
+
class HyperStreamDeltaWriter(tableName: String, gpuDevice: String) extends DeltaWriter[InternalRow] {
|
|
19
|
+
|
|
20
|
+
// Accumulate deletes: Map[FilePath, ArrayBuffer[RowPosition]]
|
|
21
|
+
private val deletes = scala.collection.mutable.Map.empty[String, scala.collection.mutable.ArrayBuffer[Long]]
|
|
22
|
+
|
|
23
|
+
override def delete(metadata: InternalRow, id: InternalRow): Unit = {
|
|
24
|
+
// Spark passes _file as UTF8String at index 0, _pos as Long at index 1
|
|
25
|
+
val file = metadata.getUTF8String(0).toString
|
|
26
|
+
val pos = metadata.getLong(1)
|
|
27
|
+
deletes.getOrElseUpdate(file, scala.collection.mutable.ArrayBuffer.empty[Long]) += pos
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override def update(metadata: InternalRow, id: InternalRow, row: InternalRow): Unit = {
|
|
31
|
+
// For MERGE/UPDATE, the old record is deleted via position
|
|
32
|
+
val file = metadata.getUTF8String(0).toString
|
|
33
|
+
val pos = metadata.getLong(1)
|
|
34
|
+
deletes.getOrElseUpdate(file, scala.collection.mutable.ArrayBuffer.empty[Long]) += pos
|
|
35
|
+
|
|
36
|
+
// The new record 'row' needs to be inserted.
|
|
37
|
+
// In a full implementation, we'd also buffer `row` to write as a new Parquet file.
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
override def insert(row: InternalRow): Unit = {
|
|
41
|
+
// In a full implementation, we'd buffer `row` to write as a new Parquet file.
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override def commit(): WriterCommitMessage = {
|
|
45
|
+
if (deletes.nonEmpty) {
|
|
46
|
+
// Serialize deletes to JSON
|
|
47
|
+
val mapper = new ObjectMapper()
|
|
48
|
+
|
|
49
|
+
// Convert Scala Map to Java Map for Jackson
|
|
50
|
+
val javaMap = new java.util.HashMap[String, java.util.List[Long]]()
|
|
51
|
+
deletes.foreach { case (k, v) =>
|
|
52
|
+
val list = new java.util.ArrayList[Long]()
|
|
53
|
+
v.foreach(list.add)
|
|
54
|
+
javaMap.put(k, list)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
val jsonStr = mapper.writeValueAsString(javaMap)
|
|
58
|
+
|
|
59
|
+
// Call Rust Core
|
|
60
|
+
val jniBridge = com.hyperstreamdb.spark.jni.HyperStreamJNIBridge.getInstance()
|
|
61
|
+
jniBridge.setGpuContext(gpuDevice)
|
|
62
|
+
val success = jniBridge.commitPositionDeletes(tableName.split("\\.").last, jsonStr)
|
|
63
|
+
// For now, print what would happen
|
|
64
|
+
println(s"HyperStreamDB: Committing position deletes to Rust Core for $tableName")
|
|
65
|
+
println(s"HyperStreamDB: Payload -> $jsonStr")
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
new HyperStreamDeltaCommitMessage("success")
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override def abort(): Unit = {
|
|
72
|
+
deletes.clear()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
override def close(): Unit = {
|
|
76
|
+
deletes.clear()
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.read.ScanBuilder
|
|
4
|
+
import org.apache.spark.sql.connector.write.{RowLevelOperation, RowLevelOperationInfo, LogicalWriteInfo, WriteBuilder}
|
|
5
|
+
import org.apache.spark.sql.connector.expressions.{NamedReference, Expressions}
|
|
6
|
+
import org.apache.spark.sql.connector.expressions.filter.Predicate
|
|
7
|
+
import org.apache.spark.sql.util.CaseInsensitiveStringMap
|
|
8
|
+
|
|
9
|
+
class HyperStreamRowLevelOperation(
|
|
10
|
+
table: HyperStreamTable,
|
|
11
|
+
info: RowLevelOperationInfo,
|
|
12
|
+
gpuDevice: String
|
|
13
|
+
) extends RowLevelOperation {
|
|
14
|
+
|
|
15
|
+
override def command(): RowLevelOperation.Command = info.command()
|
|
16
|
+
|
|
17
|
+
override def description(): String = s"HyperStream RowLevelOperation: ${info.command()}"
|
|
18
|
+
|
|
19
|
+
override def newScanBuilder(options: CaseInsensitiveStringMap): ScanBuilder = {
|
|
20
|
+
// Return a custom ScanBuilder that supports Runtime Filtering!
|
|
21
|
+
// This allows us to intercept the dynamically broadcasted keys from the MERGE source.
|
|
22
|
+
new HyperStreamScanBuilder(table, options)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
override def newWriteBuilder(writeInfo: LogicalWriteInfo): WriteBuilder = {
|
|
26
|
+
// Return a WriteBuilder that writes Position Deletes instead of Copy-on-Write
|
|
27
|
+
new HyperStreamWriteBuilder(table, writeInfo, gpuDevice)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override def requiredMetadataAttributes(): Array[NamedReference] = {
|
|
31
|
+
// Request Iceberg's implicit metadata columns for position deletes
|
|
32
|
+
Array(
|
|
33
|
+
Expressions.column("_file"),
|
|
34
|
+
Expressions.column("_pos")
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.read.{Scan, ScanBuilder, SupportsRuntimeFiltering}
|
|
4
|
+
import org.apache.spark.sql.connector.expressions.NamedReference
|
|
5
|
+
import org.apache.spark.sql.connector.expressions.filter.Predicate
|
|
6
|
+
import org.apache.spark.sql.sources.Filter
|
|
7
|
+
import org.apache.spark.sql.util.CaseInsensitiveStringMap
|
|
8
|
+
|
|
9
|
+
class HyperStreamScanBuilder(
|
|
10
|
+
table: HyperStreamTable,
|
|
11
|
+
options: CaseInsensitiveStringMap
|
|
12
|
+
) extends ScanBuilder {
|
|
13
|
+
|
|
14
|
+
override def build(): Scan = {
|
|
15
|
+
val delegateBuilder = table.delegate.asInstanceOf[org.apache.spark.sql.connector.catalog.SupportsRead].newScanBuilder(options)
|
|
16
|
+
new HyperStreamScan(delegateBuilder.build(), table)
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class HyperStreamScan(val delegate: Scan, val table: HyperStreamTable) extends Scan with SupportsRuntimeFiltering {
|
|
21
|
+
|
|
22
|
+
private var dynamicFilters: Array[Filter] = Array.empty
|
|
23
|
+
|
|
24
|
+
override def readSchema(): org.apache.spark.sql.types.StructType = delegate.readSchema()
|
|
25
|
+
|
|
26
|
+
override def toBatch() = delegate.toBatch()
|
|
27
|
+
// TODO: we should intercept toBatch to use our filters
|
|
28
|
+
|
|
29
|
+
override def filterAttributes(): Array[NamedReference] = {
|
|
30
|
+
// We advertise all columns for runtime filtering so Spark gives us the broadcast keys
|
|
31
|
+
Array.empty // TODO: Return the primary key columns here to receive DynamicFilters
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override def filter(filters: Array[Filter]): Unit = {
|
|
35
|
+
this.dynamicFilters = filters
|
|
36
|
+
// MAGIC HAPPENS HERE:
|
|
37
|
+
// Extract the primary keys from 'filters' (usually an IN filter)
|
|
38
|
+
// Send them to Rust Core via JNI:
|
|
39
|
+
val jniBridge = com.hyperstreamdb.spark.jni.HyperStreamJNIBridge.getInstance()
|
|
40
|
+
jniBridge.setGpuContext(table.gpuDevice)
|
|
41
|
+
val fileBitmaps = jniBridge.queryIndexIn(delegate.asInstanceOf[org.apache.spark.sql.connector.read.Scan].getClass.getSimpleName, "pk", "[]") // Placeholder for JSON extraction
|
|
42
|
+
// Then we can configure the Iceberg delegateBuilder with these exact file/bitmap constraints!
|
|
43
|
+
}
|
|
44
|
+
}
|
hyperstreamdb-0.5.5/spark-hyperstream/src/main/scala/com/hyperstreamdb/spark/HyperStreamTable.scala
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.catalog.{SupportsRead, SupportsRowLevelOperations, Table, TableCapability}
|
|
4
|
+
import org.apache.spark.sql.connector.read.ScanBuilder
|
|
5
|
+
import org.apache.spark.sql.connector.write.{LogicalWriteInfo, RowLevelOperationBuilder, WriteBuilder}
|
|
6
|
+
import org.apache.spark.sql.connector.write.RowLevelOperationInfo
|
|
7
|
+
import org.apache.spark.sql.types.StructType
|
|
8
|
+
import org.apache.spark.sql.util.CaseInsensitiveStringMap
|
|
9
|
+
import java.util.{Set => JSet}
|
|
10
|
+
import scala.collection.JavaConverters._
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* HyperStreamTable wraps the official Iceberg SparkTable.
|
|
14
|
+
* It intercepts operations where HyperStreamDB's indexes can be used (like MERGE),
|
|
15
|
+
* and delegates everything else back to Iceberg.
|
|
16
|
+
*/
|
|
17
|
+
class HyperStreamTable(
|
|
18
|
+
val delegate: Table,
|
|
19
|
+
val tableSchema: StructType,
|
|
20
|
+
override val properties: java.util.Map[String, String],
|
|
21
|
+
val gpuDevice: String
|
|
22
|
+
) extends Table with SupportsRead with SupportsRowLevelOperations {
|
|
23
|
+
|
|
24
|
+
override def name(): String = delegate.name()
|
|
25
|
+
|
|
26
|
+
override def schema(): StructType = delegate.schema()
|
|
27
|
+
|
|
28
|
+
override def capabilities(): JSet[TableCapability] = {
|
|
29
|
+
// We add our row-level operation capabilities on top of the delegate's capabilities
|
|
30
|
+
val caps = new java.util.HashSet[TableCapability](delegate.capabilities())
|
|
31
|
+
caps.add(TableCapability.BATCH_READ)
|
|
32
|
+
caps.add(TableCapability.BATCH_WRITE)
|
|
33
|
+
caps.add(TableCapability.ACCEPT_ANY_SCHEMA)
|
|
34
|
+
caps
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
override def newScanBuilder(options: CaseInsensitiveStringMap): ScanBuilder = {
|
|
38
|
+
// If it's a simple read, we could just delegate, but we might want to intercept
|
|
39
|
+
// to use our indexes for standard SELECT queries with WHERE clauses too!
|
|
40
|
+
// For now, we delegate to Iceberg. In the future, return HyperStreamScanBuilder.
|
|
41
|
+
delegate match {
|
|
42
|
+
case r: SupportsRead => r.newScanBuilder(options)
|
|
43
|
+
case _ => throw new UnsupportedOperationException("Underlying table does not support read")
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
override def newRowLevelOperationBuilder(info: RowLevelOperationInfo): RowLevelOperationBuilder = {
|
|
48
|
+
// This is where the magic happens!
|
|
49
|
+
// When Spark executes MERGE INTO, UPDATE, or DELETE, it calls this method.
|
|
50
|
+
// We return our custom builder that enforces Merge-on-Read and uses our indexes.
|
|
51
|
+
new HyperStreamMergeBuilder(this, info, gpuDevice)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark
|
|
2
|
+
|
|
3
|
+
import org.apache.spark.sql.connector.write.{LogicalWriteInfo, Write, WriteBuilder}
|
|
4
|
+
|
|
5
|
+
class HyperStreamWriteBuilder(
|
|
6
|
+
table: HyperStreamTable,
|
|
7
|
+
info: LogicalWriteInfo,
|
|
8
|
+
gpuDevice: String
|
|
9
|
+
) extends WriteBuilder {
|
|
10
|
+
|
|
11
|
+
override def build(): Write = {
|
|
12
|
+
// This Write implementation will provide factories for PositionDeltaWriter
|
|
13
|
+
// to emit `.del` position deletes using HyperStreamDB's native writers.
|
|
14
|
+
new HyperStreamPositionDeltaWrite(table, info, gpuDevice)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.hyperstreamdb.spark.jni
|
|
2
|
+
|
|
3
|
+
import org.slf4j.LoggerFactory
|
|
4
|
+
|
|
5
|
+
class HyperStreamJNIBridge private () {
|
|
6
|
+
|
|
7
|
+
@native def addIndex(table: String, column: String, indexType: String): Boolean
|
|
8
|
+
@native def buildIndex(table: String, segmentId: String): Boolean
|
|
9
|
+
@native def setPrimaryKey(table: String, columns: String): Boolean
|
|
10
|
+
@native def queryIndexIn(table: String, column: String, valuesJson: String): String
|
|
11
|
+
@native def commitPositionDeletes(table: String, deletesJson: String): Boolean
|
|
12
|
+
@native def setGpuContext(deviceType: String): Boolean
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
object HyperStreamJNIBridge {
|
|
17
|
+
private val logger = LoggerFactory.getLogger(classOf[HyperStreamJNIBridge])
|
|
18
|
+
private var instance: HyperStreamJNIBridge = _
|
|
19
|
+
private var loaded = false
|
|
20
|
+
|
|
21
|
+
def getInstance(): HyperStreamJNIBridge = {
|
|
22
|
+
if (instance == null) {
|
|
23
|
+
synchronized {
|
|
24
|
+
if (instance == null) {
|
|
25
|
+
try {
|
|
26
|
+
System.loadLibrary("hyperstreamdb")
|
|
27
|
+
loaded = true
|
|
28
|
+
logger.info("Successfully loaded native HyperStreamDB library.")
|
|
29
|
+
} catch {
|
|
30
|
+
case e: UnsatisfiedLinkError =>
|
|
31
|
+
logger.warn(s"Failed to load native HyperStreamDB library: ${e.getMessage}. Using fallback/mock implementation for testing.")
|
|
32
|
+
}
|
|
33
|
+
instance = new HyperStreamJNIBridge()
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
instance
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
def isLoaded: Boolean = loaded
|
|
41
|
+
}
|