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.
Files changed (235) hide show
  1. {vastdb-2.0.3 → vastdb-2.0.7}/CHANGELOG.md +36 -0
  2. {vastdb-2.0.3 → vastdb-2.0.7}/PKG-INFO +1 -1
  3. {vastdb-2.0.3 → vastdb-2.0.7}/setup.py +1 -1
  4. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_adbc.py +14 -3
  5. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_internal.py +45 -20
  6. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/schema.py +5 -2
  7. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/session.py +4 -2
  8. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/table.py +13 -3
  9. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_adbc_integration.py +40 -0
  10. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_vector_search.py +1 -0
  11. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/transaction.py +2 -0
  12. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ObjectDetails.py +56 -1
  13. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/test_scale.py +2 -0
  14. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/PKG-INFO +1 -1
  15. {vastdb-2.0.3 → vastdb-2.0.7}/CONTRIBUTING.md +0 -0
  16. {vastdb-2.0.3 → vastdb-2.0.7}/LICENSE +0 -0
  17. {vastdb-2.0.3 → vastdb-2.0.7}/MANIFEST.in +0 -0
  18. {vastdb-2.0.3 → vastdb-2.0.7}/README.md +0 -0
  19. {vastdb-2.0.3 → vastdb-2.0.7}/requirements.txt +0 -0
  20. {vastdb-2.0.3 → vastdb-2.0.7}/setup.cfg +0 -0
  21. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/__init__.py +0 -0
  22. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_ibis_support.py +0 -0
  23. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/_table_interface.py +0 -0
  24. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/__init__.py +0 -0
  25. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/__init__.py +0 -0
  26. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/bench_repo/__init__.py +0 -0
  27. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/bench_repo/mega_combo.py +0 -0
  28. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/cli.py +0 -0
  29. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/__init__.py +0 -0
  30. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/constants.py +0 -0
  31. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/log_utils.py +0 -0
  32. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/types.py +0 -0
  33. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/common/utils.py +0 -0
  34. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/__init__.py +0 -0
  35. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/generate_secmaster.py +0 -0
  36. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/generate_stocks_dataset.py +0 -0
  37. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/schemas.py +0 -0
  38. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/dataset/secmaster.py +0 -0
  39. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/__init__.py +0 -0
  40. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/bench_spec.py +0 -0
  41. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/results_helpers.py +0 -0
  42. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/scenario.py +0 -0
  43. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/orchestrate/scenario_generator.py +0 -0
  44. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/__init__.py +0 -0
  45. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/arrow_common.py +0 -0
  46. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query.py +0 -0
  47. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query_pyarrow.py +0 -0
  48. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/query/query_vastdb.py +0 -0
  49. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/perf_bench/run.py +0 -0
  50. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/test_perf.py +0 -0
  51. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bench/test_sample.py +0 -0
  52. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/bucket.py +0 -0
  53. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/config.py +0 -0
  54. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/conftest.py +0 -0
  55. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/errors.py +0 -0
  56. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/features.py +0 -0
  57. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/table_metadata.py +0 -0
  58. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/__init__.py +0 -0
  59. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/metrics.py +0 -0
  60. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_duckdb.py +0 -0
  61. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_fixed_list.py +0 -0
  62. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_imports.py +0 -0
  63. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_nested.py +0 -0
  64. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_projections.py +0 -0
  65. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_sanity.py +0 -0
  66. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_schemas.py +0 -0
  67. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_table_in_tx.py +0 -0
  68. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_tables.py +0 -0
  69. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_util.py +0 -0
  70. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/test_vector_index.py +0 -0
  71. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/tests/util.py +0 -0
  72. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/util.py +0 -0
  73. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/__init__.py +0 -0
  74. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/__init__.py +0 -0
  75. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/__init__.py +0 -0
  76. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/__init__.py +0 -0
  77. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/__init__.py +0 -0
  78. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Aggregate.py +0 -0
  79. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySlice.py +0 -0
  80. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySubscript.py +0 -0
  81. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BinaryLiteral.py +0 -0
  82. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BooleanLiteral.py +0 -0
  83. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Bound.py +0 -0
  84. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Call.py +0 -0
  85. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CaseFragment.py +0 -0
  86. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Cast.py +0 -0
  87. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConcreteBoundImpl.py +0 -0
  88. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConditionalCase.py +0 -0
  89. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CurrentRow.py +0 -0
  90. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DateLiteral.py +0 -0
  91. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DecimalLiteral.py +0 -0
  92. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Deref.py +0 -0
  93. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DurationLiteral.py +0 -0
  94. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Expression.py +0 -0
  95. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ExpressionImpl.py +0 -0
  96. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldIndex.py +0 -0
  97. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldRef.py +0 -0
  98. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Filter.py +0 -0
  99. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FixedSizeBinaryLiteral.py +0 -0
  100. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float16Literal.py +0 -0
  101. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float32Literal.py +0 -0
  102. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float64Literal.py +0 -0
  103. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Following.py +0 -0
  104. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Frame.py +0 -0
  105. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Grouping.py +0 -0
  106. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int16Literal.py +0 -0
  107. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int32Literal.py +0 -0
  108. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int64Literal.py +0 -0
  109. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int8Literal.py +0 -0
  110. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteral.py +0 -0
  111. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralDaysMilliseconds.py +0 -0
  112. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralImpl.py +0 -0
  113. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralMonths.py +0 -0
  114. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Join.py +0 -0
  115. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/JoinKind.py +0 -0
  116. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/KeyValue.py +0 -0
  117. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Limit.py +0 -0
  118. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ListLiteral.py +0 -0
  119. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Literal.py +0 -0
  120. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralColumn.py +0 -0
  121. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralImpl.py +0 -0
  122. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralRelation.py +0 -0
  123. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapKey.py +0 -0
  124. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapLiteral.py +0 -0
  125. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/OrderBy.py +0 -0
  126. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Ordering.py +0 -0
  127. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Plan.py +0 -0
  128. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Preceding.py +0 -0
  129. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Project.py +0 -0
  130. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelId.py +0 -0
  131. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Relation.py +0 -0
  132. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelationImpl.py +0 -0
  133. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOpKind.py +0 -0
  134. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOperation.py +0 -0
  135. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SimpleCase.py +0 -0
  136. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SortKey.py +0 -0
  137. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Source.py +0 -0
  138. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StringLiteral.py +0 -0
  139. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructField.py +0 -0
  140. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructLiteral.py +0 -0
  141. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimeLiteral.py +0 -0
  142. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimestampLiteral.py +0 -0
  143. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt16Literal.py +0 -0
  144. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt32Literal.py +0 -0
  145. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt64Literal.py +0 -0
  146. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt8Literal.py +0 -0
  147. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Unbounded.py +0 -0
  148. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/WindowCall.py +0 -0
  149. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/computeir/flatbuf/__init__.py +0 -0
  150. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Binary.py +0 -0
  151. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Block.py +0 -0
  152. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompression.py +0 -0
  153. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompressionMethod.py +0 -0
  154. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Bool.py +0 -0
  155. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Buffer.py +0 -0
  156. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/CompressionType.py +0 -0
  157. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Date.py +0 -0
  158. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DateUnit.py +0 -0
  159. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Decimal.py +0 -0
  160. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryBatch.py +0 -0
  161. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryEncoding.py +0 -0
  162. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryKind.py +0 -0
  163. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Duration.py +0 -0
  164. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Endianness.py +0 -0
  165. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Feature.py +0 -0
  166. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Field.py +0 -0
  167. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FieldNode.py +0 -0
  168. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeBinary.py +0 -0
  169. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeList.py +0 -0
  170. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/FloatingPoint.py +0 -0
  171. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Footer.py +0 -0
  172. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Int.py +0 -0
  173. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Interval.py +0 -0
  174. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/IntervalUnit.py +0 -0
  175. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/KeyValue.py +0 -0
  176. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeBinary.py +0 -0
  177. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeList.py +0 -0
  178. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/LargeUtf8.py +0 -0
  179. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/List.py +0 -0
  180. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Map.py +0 -0
  181. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Message.py +0 -0
  182. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MessageHeader.py +0 -0
  183. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/MetadataVersion.py +0 -0
  184. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Null.py +0 -0
  185. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Precision.py +0 -0
  186. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/RecordBatch.py +0 -0
  187. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Schema.py +0 -0
  188. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixCompressedAxis.py +0 -0
  189. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixIndexCSX.py +0 -0
  190. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensor.py +0 -0
  191. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndex.py +0 -0
  192. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCOO.py +0 -0
  193. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCSF.py +0 -0
  194. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Struct_.py +0 -0
  195. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Tensor.py +0 -0
  196. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TensorDim.py +0 -0
  197. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Time.py +0 -0
  198. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/TimeUnit.py +0 -0
  199. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Timestamp.py +0 -0
  200. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Type.py +0 -0
  201. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Union.py +0 -0
  202. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/UnionMode.py +0 -0
  203. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/Utf8.py +0 -0
  204. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/org/apache/arrow/flatbuf/__init__.py +0 -0
  205. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterColumnRequest.py +0 -0
  206. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterProjectionTableRequest.py +0 -0
  207. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterSchemaRequest.py +0 -0
  208. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/AlterTableRequest.py +0 -0
  209. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/Column.py +0 -0
  210. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ColumnDetails.py +0 -0
  211. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ColumnType.py +0 -0
  212. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateProjectionRequest.py +0 -0
  213. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateSchemaRequest.py +0 -0
  214. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/CreateViewRequest.py +0 -0
  215. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/FilterString.py +0 -0
  216. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetProjectionTableStatsResponse.py +0 -0
  217. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetRowColumnSecurityResponse.py +0 -0
  218. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/GetTableStatsResponse.py +0 -0
  219. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ImportDataRequest.py +0 -0
  220. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/KeyName.py +0 -0
  221. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListProjectionsResponse.py +0 -0
  222. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListSchemasResponse.py +0 -0
  223. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListTablesResponse.py +0 -0
  224. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/ListViewsResponse.py +0 -0
  225. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/NameString.py +0 -0
  226. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/S3File.py +0 -0
  227. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/VectorIndexMetadata.py +0 -0
  228. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/VipRange.py +0 -0
  229. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_flatbuf/tabular/__init__.py +0 -0
  230. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/__init__.py +0 -0
  231. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb/vast_tests/test_ha.py +0 -0
  232. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/SOURCES.txt +0 -0
  233. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/dependency_links.txt +0 -0
  234. {vastdb-2.0.3 → vastdb-2.0.7}/vastdb.egg-info/requires.txt +0 -0
  235. {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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vastdb
3
- Version: 2.0.3
3
+ Version: 2.0.7
4
4
  Summary: VAST Data SDK
5
5
  Home-page: https://github.com/vast-data/vastdb_sdk
6
6
  Author: VAST DATA
@@ -29,7 +29,7 @@ setup(
29
29
  name='vastdb',
30
30
  python_requires='>=3.10.0',
31
31
  description='VAST Data SDK',
32
- version='2.0.3' + suffix,
32
+ version='2.0.7' + suffix,
33
33
  url='https://github.com/vast-data/vastdb_sdk',
34
34
  author='VAST DATA',
35
35
  author_email='hello@vastdata.com',
@@ -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, endpoint: str, access_key: str, secret_key: str, txid: int
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={TXID_OVERRIDE_PROPERTY: str(txid)},
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.is_float32(pa_type):
417
- impl_type, impl_class = LiteralImpl.Float32Literal, fb_float32_lit
418
- elif pa.types.is_float64(pa_type):
419
- impl_type, impl_class = LiteralImpl.Float64Literal, fb_float64_lit
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
- # Float16 is not supported by Vast.
422
- raise ValueError(f'unsupported floating point predicate type: {pa_type}, value={value}')
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 'tabular-list-count' in res_headers else schemas_length
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 'tabular-list-count' in res_headers else tables_length
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._is_sorted_table else INTERNAL_ROW_ID_FIELD
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
- def Start(builder): builder.StartObject(10)
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vastdb
3
- Version: 2.0.3
3
+ Version: 2.0.7
4
4
  Summary: VAST Data SDK
5
5
  Home-page: https://github.com/vast-data/vastdb_sdk
6
6
  Author: VAST DATA
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