vastdb 2.0.5__tar.gz → 2.0.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vastdb-2.0.5 → vastdb-2.0.8}/CHANGELOG.md +29 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/PKG-INFO +2 -1
- {vastdb-2.0.5 → vastdb-2.0.8}/requirements.txt +1 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/setup.py +1 -1
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/_internal.py +40 -15
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/schema.py +15 -4
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/table.py +11 -1
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/table_metadata.py +7 -7
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_tables.py +63 -0
- vastdb-2.0.8/vastdb/tests/test_vector_index.py +324 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ObjectDetails.py +56 -1
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_tests/test_scale.py +2 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb.egg-info/PKG-INFO +2 -1
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb.egg-info/requires.txt +1 -0
- vastdb-2.0.5/vastdb/tests/test_vector_index.py +0 -162
- {vastdb-2.0.5 → vastdb-2.0.8}/CONTRIBUTING.md +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/LICENSE +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/MANIFEST.in +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/README.md +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/setup.cfg +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/_adbc.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/_ibis_support.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/_table_interface.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/bench_repo/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/bench_repo/mega_combo.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/cli.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/common/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/common/constants.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/common/log_utils.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/common/types.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/common/utils.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/dataset/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/dataset/generate_secmaster.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/dataset/generate_stocks_dataset.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/dataset/schemas.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/dataset/secmaster.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/orchestrate/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/orchestrate/bench_spec.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/orchestrate/results_helpers.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/orchestrate/scenario.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/orchestrate/scenario_generator.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/query/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/query/arrow_common.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/query/query.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/query/query_pyarrow.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/query/query_vastdb.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/perf_bench/run.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/test_perf.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bench/test_sample.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/bucket.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/config.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/conftest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/errors.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/features.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/session.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/metrics.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_adbc_integration.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_duckdb.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_fixed_list.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_imports.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_nested.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_projections.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_sanity.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_schemas.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_table_in_tx.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_util.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/test_vector_search.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/tests/util.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/transaction.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/util.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Aggregate.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySlice.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySubscript.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BinaryLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BooleanLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Bound.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Call.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CaseFragment.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Cast.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConcreteBoundImpl.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConditionalCase.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CurrentRow.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DateLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DecimalLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Deref.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DurationLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Expression.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ExpressionImpl.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldIndex.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldRef.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Filter.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FixedSizeBinaryLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float16Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float32Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float64Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Following.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Frame.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Grouping.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int16Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int32Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int64Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int8Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralDaysMilliseconds.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralImpl.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralMonths.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Join.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/JoinKind.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/KeyValue.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Limit.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ListLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralColumn.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralImpl.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralRelation.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapKey.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/OrderBy.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Ordering.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Plan.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Preceding.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Project.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelId.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Relation.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelationImpl.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOpKind.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOperation.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SimpleCase.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SortKey.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Source.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StringLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructField.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimeLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimestampLiteral.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt16Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt32Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt64Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt8Literal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Unbounded.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/WindowCall.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Binary.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Block.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompression.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompressionMethod.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Bool.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Buffer.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/CompressionType.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Date.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DateUnit.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Decimal.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryBatch.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryEncoding.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryKind.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Duration.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Endianness.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Feature.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Field.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FieldNode.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeBinary.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeList.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FloatingPoint.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Footer.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Int.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Interval.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/IntervalUnit.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/KeyValue.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeBinary.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeList.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeUtf8.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/List.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Map.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Message.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MessageHeader.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MetadataVersion.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Null.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Precision.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/RecordBatch.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Schema.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixCompressedAxis.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixIndexCSX.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensor.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndex.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCOO.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCSF.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Struct_.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Tensor.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TensorDim.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Time.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TimeUnit.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Timestamp.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Type.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Union.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/UnionMode.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Utf8.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/AlterColumnRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/AlterProjectionTableRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/AlterSchemaRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/AlterTableRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/Column.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ColumnDetails.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ColumnType.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/CreateProjectionRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/CreateSchemaRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/CreateViewRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/FilterString.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/GetProjectionTableStatsResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/GetRowColumnSecurityResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/GetTableStatsResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ImportDataRequest.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/KeyName.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ListProjectionsResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ListSchemasResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ListTablesResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/ListViewsResponse.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/NameString.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/S3File.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/VectorIndexMetadata.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/VipRange.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_flatbuf/tabular/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_tests/__init__.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb/vast_tests/test_ha.py +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb.egg-info/SOURCES.txt +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb.egg-info/dependency_links.txt +0 -0
- {vastdb-2.0.5 → vastdb-2.0.8}/vastdb.egg-info/top_level.txt +0 -0
|
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
6
6
|
|
|
7
|
+
## [2.0.8] (2026-01-21)
|
|
8
|
+
[2.0.8]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.7...v2.0.8
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- populate _metadata._vector_index from list_tables response.
|
|
12
|
+
|
|
13
|
+
## [2.0.7] (2026-01-19)
|
|
14
|
+
[2.0.7]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.5...v2.0.6
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- Vector Index table support (ORION-276190):
|
|
18
|
+
- `sorting_key_enabled` field in `TableInfo` is now exclusive to Elysium tables (no longer `true` for vector index tables)
|
|
19
|
+
- Vector index tables are now classified as `TableType.Regular` instead of `TableType.Elysium`
|
|
20
|
+
- Requires VAST Cluster with ORION-276190 support
|
|
21
|
+
- Vector Index metadata fields in `TableInfo` (conditioned on `include_vector_index_metadata`):
|
|
22
|
+
- `vector_index_enabled`: boolean flag indicating vector index presence
|
|
23
|
+
- `vector_index_column_name`: name of the column with vector index
|
|
24
|
+
- `vector_index_distance_metric`: distance metric used (L2, COSINE, etc.)
|
|
25
|
+
- `vector_index_sql_function_name`: SQL function name for distance calculation (e.g., "array_distance")
|
|
26
|
+
|
|
27
|
+
## [2.0.6] (2026-01-19)
|
|
28
|
+
[2.0.6]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.5...v2.0.6
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- Float16 (half-precision floating point) type support
|
|
32
|
+
- Schema serialization for float16 columns with precision.half
|
|
33
|
+
- Predicate literal handling for float16 values
|
|
34
|
+
- Fixes 'unsupported column type halffloat' error when creating tables with float16 columns
|
|
35
|
+
|
|
7
36
|
## [2.0.5] (2025-01-08)
|
|
8
37
|
[2.0.4]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.4...v2.0.5
|
|
9
38
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vastdb
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.8
|
|
4
4
|
Summary: VAST Data SDK
|
|
5
5
|
Home-page: https://github.com/vast-data/vastdb_sdk
|
|
6
6
|
Author: VAST DATA
|
|
@@ -20,6 +20,7 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
Requires-Dist: aws-requests-auth
|
|
22
22
|
Requires-Dist: ibis-framework~=10.1
|
|
23
|
+
Requires-Dist: sqlglot<28.7,>=23.4
|
|
23
24
|
Requires-Dist: pyarrow~=18.0
|
|
24
25
|
Requires-Dist: pyarrow-hotfix==0.7
|
|
25
26
|
Requires-Dist: flatbuffers
|
|
@@ -47,6 +47,7 @@ import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.DecimalLiteral as
|
|
|
47
47
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.Expression as fb_expression
|
|
48
48
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.FieldIndex as fb_field_index
|
|
49
49
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.FieldRef as fb_field_ref
|
|
50
|
+
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.Float16Literal as fb_float16_lit
|
|
50
51
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.Float32Literal as fb_float32_lit
|
|
51
52
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.Float64Literal as fb_float64_lit
|
|
52
53
|
import vastdb.vast_flatbuf.org.apache.arrow.computeir.flatbuf.Int8Literal as fb_int8_lit
|
|
@@ -411,15 +412,19 @@ class Predicate:
|
|
|
411
412
|
|
|
412
413
|
if pa.types.is_floating(pa_type):
|
|
413
414
|
impl_type, impl_class = None, None
|
|
414
|
-
value = float(value)
|
|
415
415
|
|
|
416
|
-
if pa.types.
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
impl_type, impl_class = LiteralImpl.
|
|
416
|
+
if pa.types.is_float16(pa_type):
|
|
417
|
+
import numpy as np
|
|
418
|
+
value = np.float16(value).view(np.uint16).item()
|
|
419
|
+
impl_type, impl_class = LiteralImpl.Float16Literal, fb_float16_lit
|
|
420
420
|
else:
|
|
421
|
-
|
|
422
|
-
|
|
421
|
+
value = float(value)
|
|
422
|
+
if pa.types.is_float32(pa_type):
|
|
423
|
+
impl_type, impl_class = LiteralImpl.Float32Literal, fb_float32_lit
|
|
424
|
+
elif pa.types.is_float64(pa_type):
|
|
425
|
+
impl_type, impl_class = LiteralImpl.Float64Literal, fb_float64_lit
|
|
426
|
+
else:
|
|
427
|
+
raise ValueError(f'unsupported floating point predicate type: {pa_type}, value={value}')
|
|
423
428
|
|
|
424
429
|
impl_class.Start(self.builder)
|
|
425
430
|
impl_class.AddValue(self.builder, value)
|
|
@@ -783,7 +788,7 @@ def _decode_table_props(s):
|
|
|
783
788
|
return {y: _prop_coding[x][1](z) for x, y, z in triplets if z != ''}
|
|
784
789
|
|
|
785
790
|
|
|
786
|
-
TableInfo = namedtuple('TableInfo', 'name properties handle num_rows size_in_bytes num_partitions sorting_key_enabled sorting_score write_amplification acummulative_row_insertion_count sorting_done')
|
|
791
|
+
TableInfo = namedtuple('TableInfo', 'name properties handle num_rows size_in_bytes num_partitions sorting_key_enabled sorting_score write_amplification acummulative_row_insertion_count sorting_done vector_index_enabled vector_index_column_name vector_index_distance_metric vector_index_sql_function_name')
|
|
787
792
|
|
|
788
793
|
|
|
789
794
|
def _parse_table_info(obj, parse_properties):
|
|
@@ -801,8 +806,15 @@ def _parse_table_info(obj, parse_properties):
|
|
|
801
806
|
|
|
802
807
|
sorting_score = sorting_score_raw & ((1 << 63) - 1)
|
|
803
808
|
sorting_done = bool(sorting_score_raw >> 63)
|
|
809
|
+
|
|
810
|
+
vector_index_enabled = obj.VectorIndexEnabled() if hasattr(obj, 'VectorIndexEnabled') else False
|
|
811
|
+
vector_index_column_name = obj.VectorIndexColumnName().decode() if hasattr(obj, 'VectorIndexColumnName') and obj.VectorIndexColumnName() else ""
|
|
812
|
+
vector_index_distance_metric = obj.VectorIndexDistanceMetric().decode() if hasattr(obj, 'VectorIndexDistanceMetric') and obj.VectorIndexDistanceMetric() else ""
|
|
813
|
+
vector_index_sql_function_name = obj.VectorIndexSqlFunctionName().decode() if hasattr(obj, 'VectorIndexSqlFunctionName') and obj.VectorIndexSqlFunctionName() else ""
|
|
814
|
+
|
|
804
815
|
return TableInfo(name, properties, handle, num_rows, used_bytes, num_partitions, sorting_key_enabled,
|
|
805
|
-
sorting_score, write_amplification, acummulative_row_insertion_count, sorting_done
|
|
816
|
+
sorting_score, write_amplification, acummulative_row_insertion_count, sorting_done,
|
|
817
|
+
vector_index_enabled, vector_index_column_name, vector_index_distance_metric, vector_index_sql_function_name)
|
|
806
818
|
|
|
807
819
|
|
|
808
820
|
@dataclass
|
|
@@ -1384,20 +1396,24 @@ class VastdbApi:
|
|
|
1384
1396
|
parse_properties=_decode_table_props, max_keys=max_keys,
|
|
1385
1397
|
next_key=next_key, name_prefix=name_prefix, exact_match=exact_match,
|
|
1386
1398
|
expected_retvals=expected_retvals,
|
|
1387
|
-
include_list_stats=include_list_stats, count_only=count_only
|
|
1399
|
+
include_list_stats=include_list_stats, count_only=count_only,
|
|
1400
|
+
include_vector_index_metadata=False)
|
|
1388
1401
|
|
|
1389
1402
|
def list_tables(self, bucket, schema, txid=0, client_tags=[], max_keys=1000, next_key=0, name_prefix="",
|
|
1390
|
-
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False
|
|
1403
|
+
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False,
|
|
1404
|
+
include_vector_index_metadata=False):
|
|
1391
1405
|
def parse_properties(x):
|
|
1392
1406
|
return x
|
|
1393
1407
|
return self._list_tables_internal(bucket=bucket, schema=schema, txid=txid, client_tags=client_tags,
|
|
1394
1408
|
parse_properties=parse_properties, max_keys=max_keys, next_key=next_key,
|
|
1395
1409
|
name_prefix=name_prefix, exact_match=exact_match,
|
|
1396
1410
|
expected_retvals=expected_retvals,
|
|
1397
|
-
include_list_stats=include_list_stats, count_only=count_only
|
|
1411
|
+
include_list_stats=include_list_stats, count_only=count_only,
|
|
1412
|
+
include_vector_index_metadata=include_vector_index_metadata)
|
|
1398
1413
|
|
|
1399
1414
|
def _list_tables_raw(self, bucket, schema, txid=0, client_tags=[], max_keys=1000, next_key=0, name_prefix="",
|
|
1400
|
-
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False
|
|
1415
|
+
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False,
|
|
1416
|
+
include_vector_index_metadata=False):
|
|
1401
1417
|
"""
|
|
1402
1418
|
GET /mybucket/schema_path?table HTTP/1.1
|
|
1403
1419
|
tabular-txid: TransactionId
|
|
@@ -1416,6 +1432,7 @@ class VastdbApi:
|
|
|
1416
1432
|
|
|
1417
1433
|
headers['tabular-list-count-only'] = str(count_only)
|
|
1418
1434
|
headers['tabular-include-list-stats'] = str(include_list_stats)
|
|
1435
|
+
headers['tabular-include-vector-index-meta-data'] = str(include_vector_index_metadata).lower()
|
|
1419
1436
|
|
|
1420
1437
|
res = self._request(
|
|
1421
1438
|
method="GET",
|
|
@@ -1431,11 +1448,13 @@ class VastdbApi:
|
|
|
1431
1448
|
return lists, next_key, is_truncated, count
|
|
1432
1449
|
|
|
1433
1450
|
def _list_tables_internal(self, bucket, schema, parse_properties, txid=0, client_tags=[], max_keys=1000, next_key=0, name_prefix="",
|
|
1434
|
-
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False
|
|
1451
|
+
exact_match=False, expected_retvals=[], include_list_stats=False, count_only=False,
|
|
1452
|
+
include_vector_index_metadata=False):
|
|
1435
1453
|
tables = []
|
|
1436
1454
|
lists, next_key, is_truncated, count = self._list_tables_raw(bucket, schema, txid=txid, client_tags=client_tags, max_keys=max_keys,
|
|
1437
1455
|
next_key=next_key, name_prefix=name_prefix, exact_match=exact_match, expected_retvals=expected_retvals,
|
|
1438
|
-
include_list_stats=include_list_stats, count_only=count_only
|
|
1456
|
+
include_list_stats=include_list_stats, count_only=count_only,
|
|
1457
|
+
include_vector_index_metadata=include_vector_index_metadata)
|
|
1439
1458
|
bucket_name = lists.BucketName().decode()
|
|
1440
1459
|
schema_name = lists.SchemaName().decode()
|
|
1441
1460
|
if not bucket.startswith(bucket_name): # ignore snapshot name
|
|
@@ -2283,6 +2302,12 @@ def get_field_type(builder: flatbuffers.Builder, field: pa.Field):
|
|
|
2283
2302
|
fb_int.AddIsSigned(builder, False)
|
|
2284
2303
|
field_type = fb_int.End(builder)
|
|
2285
2304
|
|
|
2305
|
+
elif field.type.equals(pa.float16()):
|
|
2306
|
+
field_type_type = Type.FloatingPoint
|
|
2307
|
+
fb_floating_point.Start(builder)
|
|
2308
|
+
fb_floating_point.AddPrecision(builder, 0) # half
|
|
2309
|
+
field_type = fb_floating_point.End(builder)
|
|
2310
|
+
|
|
2286
2311
|
elif field.type.equals(pa.float32()):
|
|
2287
2312
|
field_type_type = Type.FloatingPoint
|
|
2288
2313
|
fb_floating_point.Start(builder)
|
|
@@ -14,7 +14,7 @@ from vastdb.table_metadata import TableMetadata, TableRef, TableType
|
|
|
14
14
|
|
|
15
15
|
from . import bucket, errors, schema, table
|
|
16
16
|
from ._ibis_support import validate_ibis_support_schema
|
|
17
|
-
from ._internal import VectorIndexSpec
|
|
17
|
+
from ._internal import VectorIndex, VectorIndexSpec
|
|
18
18
|
|
|
19
19
|
if TYPE_CHECKING:
|
|
20
20
|
from .table import Table
|
|
@@ -130,7 +130,7 @@ class Schema:
|
|
|
130
130
|
log.debug("Found table: %s", t[0])
|
|
131
131
|
return t[0]
|
|
132
132
|
|
|
133
|
-
def _iter_tables(self, table_name=None, page_size=1000):
|
|
133
|
+
def _iter_tables(self, table_name=None, page_size=1000, include_vector_index_metadata=False):
|
|
134
134
|
next_key = 0
|
|
135
135
|
name_prefix = table_name if table_name else ""
|
|
136
136
|
exact_match = bool(table_name)
|
|
@@ -138,7 +138,8 @@ class Schema:
|
|
|
138
138
|
_bucket_name, _schema_name, curr_tables, next_key, is_truncated, _ = \
|
|
139
139
|
self.tx._rpc.api.list_tables(
|
|
140
140
|
bucket=self.bucket.name, schema=self.name, next_key=next_key, max_keys=page_size, txid=self.tx.active_txid,
|
|
141
|
-
exact_match=exact_match, name_prefix=name_prefix, include_list_stats=exact_match
|
|
141
|
+
exact_match=exact_match, name_prefix=name_prefix, include_list_stats=exact_match,
|
|
142
|
+
include_vector_index_metadata=include_vector_index_metadata)
|
|
142
143
|
if not curr_tables:
|
|
143
144
|
break
|
|
144
145
|
yield from curr_tables
|
|
@@ -177,7 +178,17 @@ def _parse_table_info(table_info, schema: "schema.Schema"):
|
|
|
177
178
|
table=table_info.name)
|
|
178
179
|
|
|
179
180
|
table_type = TableType.Elysium if table_info.sorting_key_enabled else TableType.Regular
|
|
180
|
-
|
|
181
|
+
|
|
182
|
+
# populate vector_index from list_tables if vector index is enabled
|
|
183
|
+
vector_index = None
|
|
184
|
+
if table_info.vector_index_enabled:
|
|
185
|
+
vector_index = VectorIndex(
|
|
186
|
+
column=table_info.vector_index_column_name,
|
|
187
|
+
distance_metric=table_info.vector_index_distance_metric,
|
|
188
|
+
sql_distance_function=table_info.vector_index_sql_function_name
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
table_metadata = TableMetadata(ref, table_type=table_type, vector_index=vector_index)
|
|
181
192
|
|
|
182
193
|
return table.Table(handle=int(table_info.handle),
|
|
183
194
|
metadata=table_metadata,
|
|
@@ -226,7 +226,7 @@ class TableInTransaction(ITable):
|
|
|
226
226
|
|
|
227
227
|
@property
|
|
228
228
|
def _internal_rowid_field(self) -> pa.Field:
|
|
229
|
-
return INTERNAL_ROW_ID_SORTED_FIELD if self.
|
|
229
|
+
return INTERNAL_ROW_ID_SORTED_FIELD if self._uses_global_row_ids else INTERNAL_ROW_ID_FIELD
|
|
230
230
|
|
|
231
231
|
def sorted_columns(self) -> list[pa.Field]:
|
|
232
232
|
"""Return sorted columns' metadata."""
|
|
@@ -818,6 +818,16 @@ class TableInTransaction(ITable):
|
|
|
818
818
|
def _is_sorted_table(self) -> bool:
|
|
819
819
|
return self._metadata.table_type is TableType.Elysium
|
|
820
820
|
|
|
821
|
+
@property
|
|
822
|
+
def _uses_global_row_ids(self) -> bool:
|
|
823
|
+
"""Check if table uses global row IDs (decimal128: ehandle + row_id).
|
|
824
|
+
|
|
825
|
+
Both Elysium and Vector Index tables use global row IDs.
|
|
826
|
+
"""
|
|
827
|
+
# _vector_index is set from list_tables or synced from stats.vector_index by _parse_stats_vector_index()
|
|
828
|
+
has_vector_index = self._metadata._vector_index is not None
|
|
829
|
+
return self._is_sorted_table or has_vector_index
|
|
830
|
+
|
|
821
831
|
def vector_search(
|
|
822
832
|
self,
|
|
823
833
|
vec: list[float],
|
|
@@ -173,14 +173,14 @@ class TableMetadata:
|
|
|
173
173
|
self._parse_stats_vector_index()
|
|
174
174
|
|
|
175
175
|
def _parse_stats_vector_index(self):
|
|
176
|
-
|
|
176
|
+
if self._vector_index is not None and self._stats.vector_index != self._vector_index:
|
|
177
|
+
is_empty_placeholder = not self._vector_index.column and not self._vector_index.distance_metric
|
|
178
|
+
if not is_empty_placeholder:
|
|
179
|
+
raise ValueError(
|
|
180
|
+
f"Table has index {self._stats.vector_index}, but was initialized as {self._vector_index}"
|
|
181
|
+
)
|
|
177
182
|
|
|
178
|
-
|
|
179
|
-
raise ValueError(
|
|
180
|
-
f"Table has index {self._stats.vector_index}, but was initialized as {self._vector_index}"
|
|
181
|
-
)
|
|
182
|
-
else:
|
|
183
|
-
self._vector_index = self._stats.vector_index
|
|
183
|
+
self._vector_index = self._stats.vector_index
|
|
184
184
|
|
|
185
185
|
def _set_sorted_table(self, tx: "Transaction"):
|
|
186
186
|
self._table_type = TableType.Elysium
|
|
@@ -9,6 +9,7 @@ from contextlib import closing
|
|
|
9
9
|
from tempfile import NamedTemporaryFile
|
|
10
10
|
|
|
11
11
|
import ibis
|
|
12
|
+
import numpy as np
|
|
12
13
|
import pandas as pd
|
|
13
14
|
import pyarrow as pa
|
|
14
15
|
import pyarrow.compute as pc
|
|
@@ -390,6 +391,7 @@ def test_types(session, clean_bucket_name):
|
|
|
390
391
|
('a2', pa.int16()),
|
|
391
392
|
('a4', pa.int64()),
|
|
392
393
|
('b', pa.float32()),
|
|
394
|
+
('f16', pa.float16()),
|
|
393
395
|
('s', pa.string()),
|
|
394
396
|
('d', pa.decimal128(7, 3)),
|
|
395
397
|
('bin', pa.binary()),
|
|
@@ -410,6 +412,7 @@ def test_types(session, clean_bucket_name):
|
|
|
410
412
|
[1999, 2000, 2001],
|
|
411
413
|
[11122221, 222111122, 333333],
|
|
412
414
|
[0.5, 1.5, 2.5],
|
|
415
|
+
[np.float16(0.5), np.float16(1.5), np.float16(2.5)],
|
|
413
416
|
["a", "v", "s"],
|
|
414
417
|
[decimal.Decimal('110.52'), decimal.Decimal('231.15'), decimal.Decimal('3332.44')],
|
|
415
418
|
[b"\x01\x02", b"\x01\x05", b"\x01\x07"],
|
|
@@ -436,6 +439,13 @@ def test_types(session, clean_bucket_name):
|
|
|
436
439
|
assert select(t['a2'] == 2000) == expected.filter(pc.field('a2') == 2000)
|
|
437
440
|
assert select(t['a4'] == 222111122) == expected.filter(pc.field('a4') == 222111122)
|
|
438
441
|
assert select(t['b'] == 1.5) == expected.filter(pc.field('b') == 1.5)
|
|
442
|
+
|
|
443
|
+
# Test float16 predicate (PyArrow compute doesn't support float16, so validate manually)
|
|
444
|
+
f16_literal = np.float16(1.5)
|
|
445
|
+
result = select(t['f16'] == f16_literal)
|
|
446
|
+
assert len(result) == 1, f"Expected 1 row for f16==1.5, got {len(result)}"
|
|
447
|
+
assert np.float16(result.column('f16')[0].as_py()) == f16_literal
|
|
448
|
+
|
|
439
449
|
assert select(t['s'] == "v") == expected.filter(pc.field('s') == "v")
|
|
440
450
|
assert select(t['d'] == 231.15) == expected.filter(pc.field('d') == 231.15)
|
|
441
451
|
assert select(t['bin'] == b"\x01\x02") == expected.filter(pc.field('bin') == b"\x01\x02")
|
|
@@ -468,6 +478,59 @@ def test_types(session, clean_bucket_name):
|
|
|
468
478
|
assert select(t['ts9'] == ts_literal) == expected.filter(pc.field('ts9') == ts_literal)
|
|
469
479
|
|
|
470
480
|
|
|
481
|
+
@pytest.mark.parametrize("element_type,test_name", [
|
|
482
|
+
(pa.float32(), "float32"),
|
|
483
|
+
(pa.float16(), "float16"),
|
|
484
|
+
])
|
|
485
|
+
def test_vector_types(session, clean_bucket_name, element_type, test_name):
|
|
486
|
+
"""Test vector (fixed-size list) columns with different element types."""
|
|
487
|
+
vector_dim = 3
|
|
488
|
+
vec_type = pa.list_(pa.field('', element_type, False), vector_dim)
|
|
489
|
+
|
|
490
|
+
columns = pa.schema([
|
|
491
|
+
('id', pa.int32()),
|
|
492
|
+
('vector', vec_type),
|
|
493
|
+
])
|
|
494
|
+
|
|
495
|
+
# Create test data based on element type
|
|
496
|
+
if element_type == pa.float16():
|
|
497
|
+
test_vectors = [
|
|
498
|
+
[np.float16(1.0), np.float16(2.0), np.float16(3.0)],
|
|
499
|
+
[np.float16(4.5), np.float16(5.5), np.float16(6.5)],
|
|
500
|
+
[np.float16(-1.0), np.float16(0.0), np.float16(1.0)],
|
|
501
|
+
]
|
|
502
|
+
else: # float32
|
|
503
|
+
test_vectors = [
|
|
504
|
+
[1.0, 2.0, 3.0],
|
|
505
|
+
[4.5, 5.5, 6.5],
|
|
506
|
+
[-1.0, 0.0, 1.0],
|
|
507
|
+
]
|
|
508
|
+
|
|
509
|
+
expected = pa.table(schema=columns, data=[
|
|
510
|
+
[0, 1, 2],
|
|
511
|
+
test_vectors,
|
|
512
|
+
])
|
|
513
|
+
|
|
514
|
+
with prepare_data(session, clean_bucket_name, 's', 't', expected) as table:
|
|
515
|
+
# Read back and verify
|
|
516
|
+
actual = table.select().read_all()
|
|
517
|
+
assert actual.schema == columns
|
|
518
|
+
assert len(actual) == 3
|
|
519
|
+
|
|
520
|
+
# Verify vector data
|
|
521
|
+
actual_vectors = actual.column('vector').to_pylist()
|
|
522
|
+
for i, (actual_vec, expected_vec) in enumerate(zip(actual_vectors, test_vectors)):
|
|
523
|
+
assert len(actual_vec) == vector_dim, f"Wrong vector dimension at row {i}"
|
|
524
|
+
for j, (act, exp) in enumerate(zip(actual_vec, expected_vec)):
|
|
525
|
+
if element_type == pa.float16():
|
|
526
|
+
assert np.float16(act) == np.float16(exp), \
|
|
527
|
+
f"Mismatch at row {i}, element {j}: {act} != {exp}"
|
|
528
|
+
else:
|
|
529
|
+
assert act == exp, f"Mismatch at row {i}, element {j}: {act} != {exp}"
|
|
530
|
+
|
|
531
|
+
log.info(f"Vector type test ({test_name}) passed successfully")
|
|
532
|
+
|
|
533
|
+
|
|
471
534
|
@pytest.mark.parametrize("arrow_type,internal_support", [
|
|
472
535
|
# Types not supported by Vast.
|
|
473
536
|
(pa.null(), False),
|