vastdb 2.0.3__tar.gz → 2.0.7__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.3 → vastdb-2.0.7}/CHANGELOG.md +36 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/PKG-INFO +1 -1
- {vastdb-2.0.3 → vastdb-2.0.7}/setup.py +1 -1
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_adbc.py +14 -3
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_internal.py +45 -20
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/schema.py +5 -2
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/session.py +4 -2
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/table.py +13 -3
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_adbc_integration.py +40 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_vector_search.py +1 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/transaction.py +2 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ObjectDetails.py +56 -1
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/test_scale.py +2 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/PKG-INFO +1 -1
- {vastdb-2.0.3 → vastdb-2.0.7}/CONTRIBUTING.md +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/LICENSE +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/MANIFEST.in +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/README.md +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/requirements.txt +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/setup.cfg +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_ibis_support.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_table_interface.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/bench_repo/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/bench_repo/mega_combo.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/cli.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/constants.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/log_utils.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/types.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/utils.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/generate_secmaster.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/generate_stocks_dataset.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/schemas.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/secmaster.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/bench_spec.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/results_helpers.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/scenario.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/scenario_generator.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/arrow_common.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query_pyarrow.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query_vastdb.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/run.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/test_perf.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/test_sample.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bucket.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/config.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/conftest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/errors.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/features.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/table_metadata.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/metrics.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_duckdb.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_fixed_list.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_imports.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_nested.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_projections.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_sanity.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_schemas.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_table_in_tx.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_tables.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_util.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_vector_index.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/util.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/util.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Aggregate.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySlice.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySubscript.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BinaryLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BooleanLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Bound.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Call.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CaseFragment.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Cast.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConcreteBoundImpl.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConditionalCase.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CurrentRow.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DateLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DecimalLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Deref.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DurationLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Expression.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ExpressionImpl.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldIndex.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldRef.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Filter.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FixedSizeBinaryLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float16Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float32Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float64Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Following.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Frame.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Grouping.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int16Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int32Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int64Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int8Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralDaysMilliseconds.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralImpl.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralMonths.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Join.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/JoinKind.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/KeyValue.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Limit.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ListLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralColumn.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralImpl.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralRelation.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapKey.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/OrderBy.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Ordering.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Plan.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Preceding.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Project.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelId.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Relation.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelationImpl.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOpKind.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOperation.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SimpleCase.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SortKey.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Source.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StringLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructField.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimeLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimestampLiteral.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt16Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt32Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt64Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt8Literal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Unbounded.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/WindowCall.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Binary.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Block.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompression.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompressionMethod.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Bool.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Buffer.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/CompressionType.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Date.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DateUnit.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Decimal.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryBatch.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryEncoding.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryKind.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Duration.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Endianness.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Feature.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Field.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FieldNode.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeBinary.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeList.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FloatingPoint.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Footer.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Int.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Interval.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/IntervalUnit.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/KeyValue.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeBinary.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeList.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeUtf8.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/List.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Map.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Message.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MessageHeader.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MetadataVersion.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Null.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Precision.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/RecordBatch.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Schema.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixCompressedAxis.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixIndexCSX.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensor.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndex.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCOO.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCSF.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Struct_.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Tensor.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TensorDim.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Time.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TimeUnit.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Timestamp.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Type.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Union.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/UnionMode.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Utf8.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterColumnRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterProjectionTableRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterSchemaRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterTableRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/Column.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ColumnDetails.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ColumnType.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateProjectionRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateSchemaRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateViewRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/FilterString.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetProjectionTableStatsResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetRowColumnSecurityResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetTableStatsResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ImportDataRequest.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/KeyName.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListProjectionsResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListSchemasResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListTablesResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListViewsResponse.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/NameString.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/S3File.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/VectorIndexMetadata.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/VipRange.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/__init__.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/test_ha.py +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/SOURCES.txt +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/dependency_links.txt +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/requires.txt +0 -0
- {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/top_level.txt +0 -0
|
@@ -4,6 +4,42 @@ 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.7] (2026-01-19)
|
|
8
|
+
[2.0.7]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.5...v2.0.6
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Vector Index table support (ORION-276190):
|
|
12
|
+
- `sorting_key_enabled` field in `TableInfo` is now exclusive to Elysium tables (no longer `true` for vector index tables)
|
|
13
|
+
- Vector index tables are now classified as `TableType.Regular` instead of `TableType.Elysium`
|
|
14
|
+
- Requires VAST Cluster with ORION-276190 support
|
|
15
|
+
- Vector Index metadata fields in `TableInfo` (conditioned on `include_vector_index_metadata`):
|
|
16
|
+
- `vector_index_enabled`: boolean flag indicating vector index presence
|
|
17
|
+
- `vector_index_column_name`: name of the column with vector index
|
|
18
|
+
- `vector_index_distance_metric`: distance metric used (L2, COSINE, etc.)
|
|
19
|
+
- `vector_index_sql_function_name`: SQL function name for distance calculation (e.g., "array_distance")
|
|
20
|
+
|
|
21
|
+
## [2.0.6] (2026-01-19)
|
|
22
|
+
[2.0.6]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.5...v2.0.6
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- Float16 (half-precision floating point) type support
|
|
26
|
+
- Schema serialization for float16 columns with precision.half
|
|
27
|
+
- Predicate literal handling for float16 values
|
|
28
|
+
- Fixes 'unsupported column type halffloat' error when creating tables with float16 columns
|
|
29
|
+
|
|
30
|
+
## [2.0.5] (2025-01-08)
|
|
31
|
+
[2.0.4]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.4...v2.0.5
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- end-user impersonation for adbc connection configurable via Session
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## [2.0.4] (2025-01-06)
|
|
38
|
+
[2.0.3]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.3...v2.0.4
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- Fix race condition in select (get data) mechanism
|
|
42
|
+
|
|
7
43
|
## [2.0.3] (2025-11-25)
|
|
8
44
|
[2.0.2]: https://github.com/vast-data/vastdb_sdk/compare/v2.0.2...v2.0.3
|
|
9
45
|
|
|
@@ -17,6 +17,7 @@ log = logging.getLogger(__name__)
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
TXID_OVERRIDE_PROPERTY: str = "vast.db.external_txid"
|
|
20
|
+
END_USER_PROPERTY: str = "vast.db.end_user"
|
|
20
21
|
VAST_DIST_ALIAS = "vast_pysdk_vector_dist"
|
|
21
22
|
DEFAULT_ADBC_DRIVER_CACHE_DIR: str = "~/.vast/adbc_drivers_cache"
|
|
22
23
|
DEFAULT_ADBC_DRIVER_CACHE_BY_URL_DIR: str = f"{DEFAULT_ADBC_DRIVER_CACHE_DIR}/by_url"
|
|
@@ -83,9 +84,18 @@ class AdbcDriver:
|
|
|
83
84
|
|
|
84
85
|
|
|
85
86
|
def _get_adbc_connection(
|
|
86
|
-
adbc_driver_path: str,
|
|
87
|
+
adbc_driver_path: str,
|
|
88
|
+
endpoint: str,
|
|
89
|
+
access_key: str,
|
|
90
|
+
secret_key: str,
|
|
91
|
+
txid: int,
|
|
92
|
+
end_user: Optional[str],
|
|
87
93
|
) -> Connection:
|
|
88
94
|
"""Get an adbc connection in transaction."""
|
|
95
|
+
conn_kwargs = {TXID_OVERRIDE_PROPERTY: str(txid)}
|
|
96
|
+
if end_user is not None:
|
|
97
|
+
conn_kwargs[END_USER_PROPERTY] = end_user
|
|
98
|
+
|
|
89
99
|
return connect(
|
|
90
100
|
driver=adbc_driver_path,
|
|
91
101
|
db_kwargs={
|
|
@@ -93,7 +103,7 @@ def _get_adbc_connection(
|
|
|
93
103
|
"vast.db.access_key": access_key,
|
|
94
104
|
"vast.db.secret_key": secret_key,
|
|
95
105
|
},
|
|
96
|
-
conn_kwargs=
|
|
106
|
+
conn_kwargs=conn_kwargs,
|
|
97
107
|
)
|
|
98
108
|
|
|
99
109
|
|
|
@@ -157,9 +167,10 @@ class AdbcConnection:
|
|
|
157
167
|
access_key: str,
|
|
158
168
|
secret_key: str,
|
|
159
169
|
txid: int,
|
|
170
|
+
end_user: Optional[str] = None,
|
|
160
171
|
):
|
|
161
172
|
self._adbc_conn = _get_adbc_connection(
|
|
162
|
-
adbc_driver.local_path, endpoint, access_key, secret_key, txid
|
|
173
|
+
adbc_driver.local_path, endpoint, access_key, secret_key, txid, end_user
|
|
163
174
|
)
|
|
164
175
|
|
|
165
176
|
self._cursor = self._adbc_conn.cursor()
|
|
@@ -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 None
|
|
812
|
+
vector_index_distance_metric = obj.VectorIndexDistanceMetric().decode() if hasattr(obj, 'VectorIndexDistanceMetric') and obj.VectorIndexDistanceMetric() else None
|
|
813
|
+
vector_index_sql_function_name = obj.VectorIndexSqlFunctionName().decode() if hasattr(obj, 'VectorIndexSqlFunctionName') and obj.VectorIndexSqlFunctionName() else None
|
|
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
|
|
@@ -1117,7 +1129,7 @@ class VastdbApi:
|
|
|
1117
1129
|
if not bucket.startswith(bucket_name):
|
|
1118
1130
|
raise ValueError(f'bucket: {bucket} did not start from {bucket_name}')
|
|
1119
1131
|
schemas_length = lists.SchemasLength()
|
|
1120
|
-
count = int(res_headers['tabular-list-count']) if
|
|
1132
|
+
count = int(res_headers['tabular-list-count']) if count_only else schemas_length
|
|
1121
1133
|
for i in range(schemas_length):
|
|
1122
1134
|
schema_obj = lists.Schemas(i)
|
|
1123
1135
|
name = schema_obj.Name().decode()
|
|
@@ -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",
|
|
@@ -1427,15 +1444,17 @@ class VastdbApi:
|
|
|
1427
1444
|
is_truncated = res_headers['tabular-is-truncated'] == 'true'
|
|
1428
1445
|
lists = list_tables.GetRootAs(res.content)
|
|
1429
1446
|
tables_length = lists.TablesLength()
|
|
1430
|
-
count = int(res_headers['tabular-list-count']) if
|
|
1447
|
+
count = int(res_headers['tabular-list-count']) if count_only else tables_length
|
|
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
|
|
@@ -1574,8 +1593,8 @@ class VastdbApi:
|
|
|
1574
1593
|
res_headers = res.headers
|
|
1575
1594
|
next_key = int(res_headers['tabular-next-key'])
|
|
1576
1595
|
is_truncated = res_headers['tabular-is-truncated'] == 'true'
|
|
1577
|
-
count = int(res_headers['tabular-list-count'])
|
|
1578
1596
|
columns = [] if count_only else pa.ipc.open_stream(res.content).schema
|
|
1597
|
+
count = int(res_headers['tabular-list-count']) if count_only else len(columns)
|
|
1579
1598
|
|
|
1580
1599
|
return columns, next_key, is_truncated, count
|
|
1581
1600
|
|
|
@@ -2044,7 +2063,6 @@ class VastdbApi:
|
|
|
2044
2063
|
res_headers = res.headers
|
|
2045
2064
|
next_key = int(res_headers['tabular-next-key'])
|
|
2046
2065
|
is_truncated = res_headers['tabular-is-truncated'] == 'true'
|
|
2047
|
-
count = int(res_headers['tabular-list-count'])
|
|
2048
2066
|
lists = list_projections.GetRootAs(res.content)
|
|
2049
2067
|
bucket_name = lists.BucketName().decode()
|
|
2050
2068
|
schema_name = lists.SchemaName().decode()
|
|
@@ -2052,6 +2070,7 @@ class VastdbApi:
|
|
|
2052
2070
|
if not bucket.startswith(bucket_name): # ignore snapshot name
|
|
2053
2071
|
raise ValueError(f'bucket: {bucket} did not start from {bucket_name}')
|
|
2054
2072
|
projections_length = lists.ProjectionsLength()
|
|
2073
|
+
count = int(res_headers['tabular-list-count']) if count_only else projections_length
|
|
2055
2074
|
for i in range(projections_length):
|
|
2056
2075
|
projections.append(_parse_table_info(lists.Projections(i), lambda x: x))
|
|
2057
2076
|
|
|
@@ -2092,10 +2111,10 @@ class VastdbApi:
|
|
|
2092
2111
|
res_headers = res.headers
|
|
2093
2112
|
next_key = int(res_headers['tabular-next-key'])
|
|
2094
2113
|
is_truncated = res_headers['tabular-is-truncated'] == 'true'
|
|
2095
|
-
count = int(res_headers['tabular-list-count'])
|
|
2096
2114
|
columns = [] if count_only else [[f.name, f.type, f.metadata] for f in
|
|
2097
2115
|
pa.ipc.open_stream(res.content).schema]
|
|
2098
2116
|
|
|
2117
|
+
count = int(res_headers['tabular-list-count']) if count_only else len(columns)
|
|
2099
2118
|
return columns, next_key, is_truncated, count
|
|
2100
2119
|
|
|
2101
2120
|
|
|
@@ -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)
|
|
@@ -89,6 +89,7 @@ class Schema:
|
|
|
89
89
|
See https://support.vastdata.com/s/article/UUID-48d0a8cf-5786-5ef3-3fa3-9c64e63a0967 for more details.
|
|
90
90
|
|
|
91
91
|
Args:
|
|
92
|
+
----
|
|
92
93
|
table_name: Name of the table to create
|
|
93
94
|
columns: PyArrow schema defining the table columns
|
|
94
95
|
fail_if_exists: Whether to fail if the table already exists
|
|
@@ -97,6 +98,7 @@ class Schema:
|
|
|
97
98
|
vector_index: Optional vector index.
|
|
98
99
|
|
|
99
100
|
Returns:
|
|
101
|
+
-------
|
|
100
102
|
The created table
|
|
101
103
|
|
|
102
104
|
"""
|
|
@@ -128,7 +130,7 @@ class Schema:
|
|
|
128
130
|
log.debug("Found table: %s", t[0])
|
|
129
131
|
return t[0]
|
|
130
132
|
|
|
131
|
-
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):
|
|
132
134
|
next_key = 0
|
|
133
135
|
name_prefix = table_name if table_name else ""
|
|
134
136
|
exact_match = bool(table_name)
|
|
@@ -136,7 +138,8 @@ class Schema:
|
|
|
136
138
|
_bucket_name, _schema_name, curr_tables, next_key, is_truncated, _ = \
|
|
137
139
|
self.tx._rpc.api.list_tables(
|
|
138
140
|
bucket=self.bucket.name, schema=self.name, next_key=next_key, max_keys=page_size, txid=self.tx.active_txid,
|
|
139
|
-
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)
|
|
140
143
|
if not curr_tables:
|
|
141
144
|
break
|
|
142
145
|
yield from curr_tables
|
|
@@ -25,7 +25,8 @@ class Session:
|
|
|
25
25
|
ssl_verify=True,
|
|
26
26
|
timeout=None,
|
|
27
27
|
backoff_config: Optional["BackoffConfig"] = None,
|
|
28
|
-
adbc_driver: Optional[AdbcDriver] = None
|
|
28
|
+
adbc_driver: Optional[AdbcDriver] = None,
|
|
29
|
+
end_user: Optional[str] = None):
|
|
29
30
|
"""Connect to a VAST Database endpoint, using specified credentials."""
|
|
30
31
|
from . import _internal, features
|
|
31
32
|
|
|
@@ -49,6 +50,7 @@ class Session:
|
|
|
49
50
|
backoff_config=backoff_config)
|
|
50
51
|
self.features = features.Features(self.api.vast_version)
|
|
51
52
|
self.adbc_driver: Optional[AdbcDriver] = adbc_driver
|
|
53
|
+
self._end_user = end_user
|
|
52
54
|
|
|
53
55
|
def __repr__(self):
|
|
54
56
|
"""Don't show the secret key."""
|
|
@@ -63,4 +65,4 @@ class Session:
|
|
|
63
65
|
tx.bucket("bucket").create_schema("schema")
|
|
64
66
|
"""
|
|
65
67
|
from . import transaction
|
|
66
|
-
return transaction.Transaction(self, _adbc_driver=self.adbc_driver)
|
|
68
|
+
return transaction.Transaction(self, _adbc_driver=self.adbc_driver, _end_user=self._end_user)
|
|
@@ -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."""
|
|
@@ -626,13 +626,12 @@ class TableInTransaction(ITable):
|
|
|
626
626
|
log.debug(
|
|
627
627
|
"one worker thread finished, remaining: %d", tasks_running)
|
|
628
628
|
|
|
629
|
-
# all host threads ended - wait for all futures to complete
|
|
630
|
-
propagate_first_exception(futures, block=True)
|
|
631
629
|
finally:
|
|
632
630
|
stop_event.set()
|
|
633
631
|
while tasks_running > 0:
|
|
634
632
|
if record_batches_queue.get() is None:
|
|
635
633
|
tasks_running -= 1
|
|
634
|
+
propagate_first_exception(futures, block=True)
|
|
636
635
|
|
|
637
636
|
return pa.RecordBatchReader.from_batches(query_data_request.response_schema, batches_iterator())
|
|
638
637
|
|
|
@@ -819,6 +818,17 @@ class TableInTransaction(ITable):
|
|
|
819
818
|
def _is_sorted_table(self) -> bool:
|
|
820
819
|
return self._metadata.table_type is TableType.Elysium
|
|
821
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
|
+
# check if table has vector index from loaded stats
|
|
828
|
+
has_vector_index = (self._metadata.stats is not None and
|
|
829
|
+
self._metadata.stats.vector_index is not None)
|
|
830
|
+
return self._is_sorted_table or has_vector_index
|
|
831
|
+
|
|
822
832
|
def vector_search(
|
|
823
833
|
self,
|
|
824
834
|
vec: list[float],
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from unittest.mock import MagicMock, patch
|
|
3
|
+
|
|
1
4
|
import pyarrow as pa
|
|
2
5
|
import pytest
|
|
3
6
|
|
|
7
|
+
from vastdb._adbc import END_USER_PROPERTY, AdbcDriver
|
|
8
|
+
from vastdb.session import Session
|
|
4
9
|
from vastdb.table_metadata import TableRef
|
|
5
10
|
from vastdb.transaction import NoAdbcConnectionError
|
|
6
11
|
|
|
@@ -87,3 +92,38 @@ def test_two_simulatnious_txs_with_adbc(session_factory, clean_bucket_name: str)
|
|
|
87
92
|
# expecting adbc execute to "see" table if it shares the transaction with the pysdk
|
|
88
93
|
tx.adbc_conn.cursor.execute(f"SELECT * FROM {table.ref.query_engine_full_path}")
|
|
89
94
|
assert tx.adbc_conn.cursor.fetchall() == [(1,), (2,), (3,), (4,), (5,)]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@pytest.mark.parametrize("end_user", [("mock-end-user",), (None,)])
|
|
98
|
+
def test_end_user_passed_to_adbc_connect(end_user: Optional[str]):
|
|
99
|
+
mock_driver = MagicMock(spec=AdbcDriver)
|
|
100
|
+
mock_driver.local_path = "/mock/driver/path"
|
|
101
|
+
|
|
102
|
+
with (
|
|
103
|
+
patch("vastdb._adbc.connect") as mock_connect,
|
|
104
|
+
patch("vastdb._internal.VastdbApi") as MockVastdbApi,
|
|
105
|
+
):
|
|
106
|
+
mock_api_instance = MockVastdbApi.return_value
|
|
107
|
+
mock_api_instance.begin_transaction.return_value.headers = {
|
|
108
|
+
"tabular-txid": "12345"
|
|
109
|
+
}
|
|
110
|
+
# A version that supports everything needed.
|
|
111
|
+
mock_api_instance.vast_version = (5, 4, 0, 0)
|
|
112
|
+
|
|
113
|
+
session = Session(
|
|
114
|
+
access="test_access",
|
|
115
|
+
secret="test_secret",
|
|
116
|
+
endpoint="http://localhost:9090",
|
|
117
|
+
adbc_driver=mock_driver,
|
|
118
|
+
end_user=end_user,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
with session.transaction():
|
|
122
|
+
# The ADBC connection is established when the transaction starts
|
|
123
|
+
pass
|
|
124
|
+
|
|
125
|
+
mock_connect.assert_called_once()
|
|
126
|
+
call_kwargs = mock_connect.call_args.kwargs
|
|
127
|
+
conn_kwargs = call_kwargs.get("conn_kwargs", {})
|
|
128
|
+
assert (end_user is None) ^ (END_USER_PROPERTY in conn_kwargs)
|
|
129
|
+
assert (end_user is None) ^ (conn_kwargs.get(END_USER_PROPERTY) == end_user)
|
|
@@ -163,6 +163,7 @@ def test_ibis_to_query_engine_predicates(ibis_predicate: IbisPredicate, expected
|
|
|
163
163
|
assert _ibis_to_qe_predicates(ibis_predicate) == expected
|
|
164
164
|
|
|
165
165
|
|
|
166
|
+
@pytest.mark.skip(reason="see https://vastdata.atlassian.net/browse/ORION-307908")
|
|
166
167
|
def test_with_predicates_get_vector_index_properties_from_server(
|
|
167
168
|
session_factory: SessionFactory,
|
|
168
169
|
clean_bucket_name: str
|
|
@@ -54,6 +54,7 @@ class Transaction:
|
|
|
54
54
|
txid: Optional[int] = None
|
|
55
55
|
_adbc_driver: Optional[AdbcDriver] = None
|
|
56
56
|
_adbc_conn: Optional[AdbcConnection] = None
|
|
57
|
+
_end_user: Optional[str] = None
|
|
57
58
|
|
|
58
59
|
def __enter__(self):
|
|
59
60
|
"""Create a transaction and store its ID."""
|
|
@@ -67,6 +68,7 @@ class Transaction:
|
|
|
67
68
|
self._rpc.access,
|
|
68
69
|
self._rpc.secret,
|
|
69
70
|
self.txid,
|
|
71
|
+
self._end_user
|
|
70
72
|
)
|
|
71
73
|
|
|
72
74
|
log.debug("opened txid=%016x", self.txid)
|
|
@@ -95,7 +95,42 @@ class ObjectDetails(object):
|
|
|
95
95
|
return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos)
|
|
96
96
|
return 0
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
# ObjectDetails
|
|
99
|
+
def PartitioningKeyEnabled(self):
|
|
100
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
|
|
101
|
+
if o != 0:
|
|
102
|
+
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
|
|
103
|
+
return False
|
|
104
|
+
|
|
105
|
+
# ObjectDetails
|
|
106
|
+
def VectorIndexEnabled(self):
|
|
107
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
|
|
108
|
+
if o != 0:
|
|
109
|
+
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
# ObjectDetails
|
|
113
|
+
def VectorIndexColumnName(self):
|
|
114
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
|
|
115
|
+
if o != 0:
|
|
116
|
+
return self._tab.String(o + self._tab.Pos)
|
|
117
|
+
return None
|
|
118
|
+
|
|
119
|
+
# ObjectDetails
|
|
120
|
+
def VectorIndexDistanceMetric(self):
|
|
121
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
|
|
122
|
+
if o != 0:
|
|
123
|
+
return self._tab.String(o + self._tab.Pos)
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
# ObjectDetails
|
|
127
|
+
def VectorIndexSqlFunctionName(self):
|
|
128
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
|
|
129
|
+
if o != 0:
|
|
130
|
+
return self._tab.String(o + self._tab.Pos)
|
|
131
|
+
return None
|
|
132
|
+
|
|
133
|
+
def Start(builder): builder.StartObject(15)
|
|
99
134
|
def ObjectDetailsStart(builder):
|
|
100
135
|
"""This method is deprecated. Please switch to Start."""
|
|
101
136
|
return Start(builder)
|
|
@@ -139,6 +174,26 @@ def AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount):
|
|
|
139
174
|
def ObjectDetailsAddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount):
|
|
140
175
|
"""This method is deprecated. Please switch to AddAcummulativeRowInseritionCount."""
|
|
141
176
|
return AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount)
|
|
177
|
+
def AddPartitioningKeyEnabled(builder, partitioningKeyEnabled): builder.PrependBoolSlot(10, partitioningKeyEnabled, 0)
|
|
178
|
+
def ObjectDetailsAddPartitioningKeyEnabled(builder, partitioningKeyEnabled):
|
|
179
|
+
"""This method is deprecated. Please switch to AddPartitioningKeyEnabled."""
|
|
180
|
+
return AddPartitioningKeyEnabled(builder, partitioningKeyEnabled)
|
|
181
|
+
def AddVectorIndexEnabled(builder, vectorIndexEnabled): builder.PrependBoolSlot(11, vectorIndexEnabled, 0)
|
|
182
|
+
def ObjectDetailsAddVectorIndexEnabled(builder, vectorIndexEnabled):
|
|
183
|
+
"""This method is deprecated. Please switch to AddVectorIndexEnabled."""
|
|
184
|
+
return AddVectorIndexEnabled(builder, vectorIndexEnabled)
|
|
185
|
+
def AddVectorIndexColumnName(builder, vectorIndexColumnName): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(vectorIndexColumnName), 0)
|
|
186
|
+
def ObjectDetailsAddVectorIndexColumnName(builder, vectorIndexColumnName):
|
|
187
|
+
"""This method is deprecated. Please switch to AddVectorIndexColumnName."""
|
|
188
|
+
return AddVectorIndexColumnName(builder, vectorIndexColumnName)
|
|
189
|
+
def AddVectorIndexDistanceMetric(builder, vectorIndexDistanceMetric): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(vectorIndexDistanceMetric), 0)
|
|
190
|
+
def ObjectDetailsAddVectorIndexDistanceMetric(builder, vectorIndexDistanceMetric):
|
|
191
|
+
"""This method is deprecated. Please switch to AddVectorIndexDistanceMetric."""
|
|
192
|
+
return AddVectorIndexDistanceMetric(builder, vectorIndexDistanceMetric)
|
|
193
|
+
def AddVectorIndexSqlFunctionName(builder, vectorIndexSqlFunctionName): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(vectorIndexSqlFunctionName), 0)
|
|
194
|
+
def ObjectDetailsAddVectorIndexSqlFunctionName(builder, vectorIndexSqlFunctionName):
|
|
195
|
+
"""This method is deprecated. Please switch to AddVectorIndexSqlFunctionName."""
|
|
196
|
+
return AddVectorIndexSqlFunctionName(builder, vectorIndexSqlFunctionName)
|
|
142
197
|
def End(builder): return builder.EndObject()
|
|
143
198
|
def ObjectDetailsEnd(builder):
|
|
144
199
|
"""This method is deprecated. Please switch to End."""
|
|
@@ -4,6 +4,7 @@ import time
|
|
|
4
4
|
from concurrent.futures import ThreadPoolExecutor
|
|
5
5
|
|
|
6
6
|
import pyarrow as pa
|
|
7
|
+
import pytest
|
|
7
8
|
|
|
8
9
|
from vastdb.table import QueryConfig
|
|
9
10
|
|
|
@@ -34,6 +35,7 @@ def test_concurrent_query(session, test_bucket_name, schema_name, table_name):
|
|
|
34
35
|
logger.info(f"finished running {amount_of_queries_in_parallel} queries")
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
@pytest.mark.skip(reason="see https://vastdata.atlassian.net/browse/ORION-319356")
|
|
37
39
|
def test_table_stats(session, test_bucket_name, schema_name, table_name):
|
|
38
40
|
"""
|
|
39
41
|
Testing stats integrity while altering table
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|