vastdb 2.0.2__py3-none-any.whl → 2.0.5__py3-none-any.whl
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/_adbc.py +205 -0
- vastdb/_internal.py +106 -17
- vastdb/_table_interface.py +20 -3
- vastdb/conftest.py +23 -1
- vastdb/errors.py +5 -0
- vastdb/schema.py +19 -2
- vastdb/session.py +14 -5
- vastdb/table.py +57 -22
- vastdb/table_metadata.py +58 -34
- vastdb/tests/test_adbc_integration.py +129 -0
- vastdb/tests/test_tables.py +35 -1
- vastdb/tests/test_vector_index.py +162 -0
- vastdb/tests/test_vector_search.py +211 -0
- vastdb/tests/util.py +3 -2
- vastdb/transaction.py +32 -0
- vastdb/vast_flatbuf/tabular/GetTableStatsResponse.py +51 -59
- vastdb/vast_flatbuf/tabular/ObjectDetails.py +36 -59
- vastdb/vast_flatbuf/tabular/VectorIndexMetadata.py +67 -0
- vastdb/vast_flatbuf/tabular/VipRange.py +19 -12
- {vastdb-2.0.2.dist-info → vastdb-2.0.5.dist-info}/METADATA +2 -1
- {vastdb-2.0.2.dist-info → vastdb-2.0.5.dist-info}/RECORD +24 -19
- {vastdb-2.0.2.dist-info → vastdb-2.0.5.dist-info}/WHEEL +0 -0
- {vastdb-2.0.2.dist-info → vastdb-2.0.5.dist-info}/licenses/LICENSE +0 -0
- {vastdb-2.0.2.dist-info → vastdb-2.0.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
import pyarrow as pa
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from vastdb._adbc import _ibis_to_qe_predicates
|
|
8
|
+
from vastdb._internal import VectorIndex, VectorIndexSpec
|
|
9
|
+
from vastdb._table_interface import IbisPredicate
|
|
10
|
+
from vastdb.conftest import SessionFactory
|
|
11
|
+
from vastdb.table_metadata import TableMetadata, TableRef, TableType
|
|
12
|
+
|
|
13
|
+
DIM = 8
|
|
14
|
+
TEST_DISTANCE_FUNC = 'array_distance'
|
|
15
|
+
TEST_DISTANCE_METRIC = 'l2sq'
|
|
16
|
+
|
|
17
|
+
VectorColumnArrowType = pa.list_(
|
|
18
|
+
pa.field(name='item', type=pa.float32(), nullable=False), DIM)
|
|
19
|
+
|
|
20
|
+
query_vector: np.ndarray = np.ones(DIM)
|
|
21
|
+
first_closest_vector = (query_vector * 1.1).tolist()
|
|
22
|
+
second_closest_vector = (query_vector * 1.2).tolist()
|
|
23
|
+
third_closest_vector = (query_vector * 1.3).tolist()
|
|
24
|
+
fourth_closest_vector = (query_vector * 1.4).tolist()
|
|
25
|
+
fifth_closest_vector = (query_vector * 1.5).tolist()
|
|
26
|
+
furthest_vector = (np.ones(DIM) * 5).tolist()
|
|
27
|
+
|
|
28
|
+
vector_column_name = 'vector_col'
|
|
29
|
+
|
|
30
|
+
data = [
|
|
31
|
+
{
|
|
32
|
+
"id": 0,
|
|
33
|
+
"n1": 1,
|
|
34
|
+
"n2": 100,
|
|
35
|
+
vector_column_name: first_closest_vector,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": 1,
|
|
39
|
+
"n1": 2,
|
|
40
|
+
"n2": 100,
|
|
41
|
+
vector_column_name: second_closest_vector,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": 2,
|
|
45
|
+
"n1": 3,
|
|
46
|
+
"n2": 200,
|
|
47
|
+
vector_column_name: third_closest_vector,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": 3,
|
|
51
|
+
"n1": 4,
|
|
52
|
+
"n2": 200,
|
|
53
|
+
vector_column_name: fourth_closest_vector,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": 4,
|
|
57
|
+
"n1": 5,
|
|
58
|
+
"n2": 200,
|
|
59
|
+
vector_column_name: fifth_closest_vector,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": 5,
|
|
63
|
+
"n1": 6,
|
|
64
|
+
"n2": 200,
|
|
65
|
+
vector_column_name: furthest_vector,
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def into_arrow_arrays(data: list[dict]) -> list[list]:
|
|
72
|
+
agg = defaultdict(list)
|
|
73
|
+
for d in data:
|
|
74
|
+
for k, v in d.items():
|
|
75
|
+
agg[k].append(v)
|
|
76
|
+
|
|
77
|
+
return [v for v in agg.values()]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_sanity(session_factory: SessionFactory, clean_bucket_name: str):
|
|
81
|
+
session = session_factory(with_adbc=True)
|
|
82
|
+
|
|
83
|
+
arrow_schema = pa.schema([('id', pa.int32()), ('n1', pa.int32(
|
|
84
|
+
)), ('n2', pa.int32()), (vector_column_name, VectorColumnArrowType),])
|
|
85
|
+
|
|
86
|
+
limit = 3
|
|
87
|
+
|
|
88
|
+
ref = TableRef(clean_bucket_name, 's', 't')
|
|
89
|
+
table_md = TableMetadata(ref,
|
|
90
|
+
arrow_schema,
|
|
91
|
+
TableType.Regular,
|
|
92
|
+
vector_index=VectorIndex(vector_column_name,
|
|
93
|
+
TEST_DISTANCE_METRIC,
|
|
94
|
+
TEST_DISTANCE_FUNC))
|
|
95
|
+
data_table = pa.table(schema=arrow_schema, data=into_arrow_arrays(data))
|
|
96
|
+
|
|
97
|
+
with session.transaction() as tx:
|
|
98
|
+
table = tx.bucket(clean_bucket_name).create_schema(
|
|
99
|
+
's').create_table('t', arrow_schema)
|
|
100
|
+
table.insert(data_table)
|
|
101
|
+
|
|
102
|
+
# TODO merge in same tx
|
|
103
|
+
with session.transaction() as tx:
|
|
104
|
+
table = tx.table_from_metadata(table_md)
|
|
105
|
+
|
|
106
|
+
reader = table.vector_search(vec=query_vector.tolist(),
|
|
107
|
+
columns=['id', 'n1', 'n2'],
|
|
108
|
+
limit=limit)
|
|
109
|
+
|
|
110
|
+
result_table = reader.read_all()
|
|
111
|
+
|
|
112
|
+
assert set([v.as_py() for v in result_table['n1']]) == {1, 2, 3}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def test_with_predicates(session_factory: SessionFactory, clean_bucket_name: str):
|
|
116
|
+
session = session_factory(with_adbc=True)
|
|
117
|
+
|
|
118
|
+
vector_column_name = 'vector_column'
|
|
119
|
+
arrow_schema = pa.schema([('id', pa.int32()), ('n1', pa.int32(
|
|
120
|
+
)), ('n2', pa.int32()), (vector_column_name, VectorColumnArrowType),])
|
|
121
|
+
limit = 3
|
|
122
|
+
|
|
123
|
+
ref = TableRef(clean_bucket_name, 's', 't')
|
|
124
|
+
table_md = TableMetadata(ref, arrow_schema, TableType.Regular,
|
|
125
|
+
vector_index=VectorIndex(vector_column_name,
|
|
126
|
+
TEST_DISTANCE_METRIC,
|
|
127
|
+
TEST_DISTANCE_FUNC))
|
|
128
|
+
data_table = pa.table(schema=arrow_schema, data=into_arrow_arrays(data))
|
|
129
|
+
|
|
130
|
+
with session.transaction() as tx:
|
|
131
|
+
table = tx.bucket(clean_bucket_name).create_schema(
|
|
132
|
+
's').create_table('t', arrow_schema)
|
|
133
|
+
table.insert(data_table)
|
|
134
|
+
|
|
135
|
+
with session.transaction() as tx:
|
|
136
|
+
table = tx.table_from_metadata(table_md)
|
|
137
|
+
|
|
138
|
+
pred = table_md.ibis_table['n2'] == 200
|
|
139
|
+
reader = table.vector_search(vec=query_vector.tolist(),
|
|
140
|
+
columns=['id', 'n1', 'n2'],
|
|
141
|
+
limit=limit,
|
|
142
|
+
predicate=pred)
|
|
143
|
+
|
|
144
|
+
result_table = reader.read_all()
|
|
145
|
+
|
|
146
|
+
assert set([v.as_py() for v in result_table['n1']]) == {3, 4, 5}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
arrow_schema = pa.schema([('id', pa.int32()), ('n1', pa.int32(
|
|
150
|
+
)), ('n2', pa.int32()), (vector_column_name, VectorColumnArrowType),])
|
|
151
|
+
|
|
152
|
+
ref = TableRef('b', 's', 't')
|
|
153
|
+
table_md = TableMetadata(ref, arrow_schema, TableType.Regular)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@pytest.mark.parametrize('ibis_predicate, expected', [
|
|
157
|
+
((table_md.ibis_table['n1'] == 1) & (table_md.ibis_table['n2'] == 2),
|
|
158
|
+
'("n1" = 1) AND ("n2" = 2)'),
|
|
159
|
+
((table_md.ibis_table['n1'] == 1),
|
|
160
|
+
'"n1" = 1')
|
|
161
|
+
])
|
|
162
|
+
def test_ibis_to_query_engine_predicates(ibis_predicate: IbisPredicate, expected: str):
|
|
163
|
+
assert _ibis_to_qe_predicates(ibis_predicate) == expected
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
@pytest.mark.skip(reason="see https://vastdata.atlassian.net/browse/ORION-307908")
|
|
167
|
+
def test_with_predicates_get_vector_index_properties_from_server(
|
|
168
|
+
session_factory: SessionFactory,
|
|
169
|
+
clean_bucket_name: str
|
|
170
|
+
):
|
|
171
|
+
session = session_factory(with_adbc=True)
|
|
172
|
+
|
|
173
|
+
vector_column_name = 'vector_column'
|
|
174
|
+
vector_index_distance_metric = 'l2sq'
|
|
175
|
+
vector_index_sql_distance_function = "array_distance"
|
|
176
|
+
|
|
177
|
+
arrow_schema = pa.schema([('id', pa.int32()), ('n1', pa.int32(
|
|
178
|
+
)), ('n2', pa.int32()), (vector_column_name, VectorColumnArrowType),])
|
|
179
|
+
limit = 3
|
|
180
|
+
|
|
181
|
+
ref = TableRef(clean_bucket_name, 's', 't')
|
|
182
|
+
table_md = TableMetadata(ref, arrow_schema, TableType.Regular)
|
|
183
|
+
data_table = pa.table(schema=arrow_schema, data=into_arrow_arrays(data))
|
|
184
|
+
|
|
185
|
+
with session.transaction() as tx:
|
|
186
|
+
table = (tx.bucket(clean_bucket_name)
|
|
187
|
+
.create_schema('s')
|
|
188
|
+
.create_table('t',
|
|
189
|
+
arrow_schema,
|
|
190
|
+
vector_index=VectorIndexSpec(vector_column_name,
|
|
191
|
+
vector_index_distance_metric)))
|
|
192
|
+
table.insert(data_table)
|
|
193
|
+
|
|
194
|
+
with session.transaction() as tx:
|
|
195
|
+
table = tx.table_from_metadata(table_md)
|
|
196
|
+
|
|
197
|
+
table.reload_stats()
|
|
198
|
+
assert table.vector_index == VectorIndex(
|
|
199
|
+
column=vector_column_name,
|
|
200
|
+
distance_metric=vector_index_distance_metric,
|
|
201
|
+
sql_distance_function=vector_index_sql_distance_function)
|
|
202
|
+
|
|
203
|
+
pred = table_md.ibis_table['n2'] == 200
|
|
204
|
+
reader = table.vector_search(vec=query_vector.tolist(),
|
|
205
|
+
columns=['id', 'n1', 'n2'],
|
|
206
|
+
limit=limit,
|
|
207
|
+
predicate=pred)
|
|
208
|
+
|
|
209
|
+
result_table = reader.read_all()
|
|
210
|
+
|
|
211
|
+
assert set([v.as_py() for v in result_table['n1']]) == {3, 4, 5}
|
vastdb/tests/util.py
CHANGED
|
@@ -25,11 +25,12 @@ def assert_row_ids_ascending_on_first_insertion_to_table(row_ids, expected_num_r
|
|
|
25
25
|
@contextmanager
|
|
26
26
|
def prepare_data(session: Session,
|
|
27
27
|
clean_bucket_name: str, schema_name: str, table_name: str,
|
|
28
|
-
arrow_table: pa.Table, sorting_key: List[str] = []
|
|
28
|
+
arrow_table: pa.Table, sorting_key: List[str] = [],
|
|
29
|
+
insert_by_columns: bool = True) -> Iterator[Table]:
|
|
29
30
|
with session.transaction() as tx:
|
|
30
31
|
s = tx.bucket(clean_bucket_name).create_schema(schema_name)
|
|
31
32
|
t = s.create_table(table_name, arrow_table.schema, sorting_key=sorting_key)
|
|
32
|
-
row_ids_array = t.insert(arrow_table)
|
|
33
|
+
row_ids_array = t.insert(arrow_table, by_columns=insert_by_columns)
|
|
33
34
|
row_ids = row_ids_array.to_pylist()
|
|
34
35
|
assert_row_ids_ascending_on_first_insertion_to_table(row_ids, arrow_table.num_rows, t.sorted_table)
|
|
35
36
|
yield t
|
vastdb/transaction.py
CHANGED
|
@@ -11,6 +11,7 @@ from copy import deepcopy
|
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from typing import TYPE_CHECKING, Iterable, Optional
|
|
13
13
|
|
|
14
|
+
from vastdb._adbc import AdbcConnection, AdbcDriver
|
|
14
15
|
from vastdb._table_interface import ITable
|
|
15
16
|
from vastdb.table import TableInTransaction
|
|
16
17
|
from vastdb.table_metadata import TableMetadata
|
|
@@ -39,17 +40,37 @@ class TransactionNotActiveError(Exception):
|
|
|
39
40
|
pass
|
|
40
41
|
|
|
41
42
|
|
|
43
|
+
class NoAdbcConnectionError(Exception):
|
|
44
|
+
"""No Adbc Connection Error."""
|
|
45
|
+
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
|
|
42
49
|
@dataclass
|
|
43
50
|
class Transaction:
|
|
44
51
|
"""A holder of a single VAST transaction."""
|
|
45
52
|
|
|
46
53
|
_rpc: "session.Session"
|
|
47
54
|
txid: Optional[int] = None
|
|
55
|
+
_adbc_driver: Optional[AdbcDriver] = None
|
|
56
|
+
_adbc_conn: Optional[AdbcConnection] = None
|
|
57
|
+
_end_user: Optional[str] = None
|
|
48
58
|
|
|
49
59
|
def __enter__(self):
|
|
50
60
|
"""Create a transaction and store its ID."""
|
|
51
61
|
response = self._rpc.api.begin_transaction()
|
|
52
62
|
self.txid = int(response.headers['tabular-txid'])
|
|
63
|
+
|
|
64
|
+
if self._adbc_driver is not None:
|
|
65
|
+
self._adbc_conn = AdbcConnection(
|
|
66
|
+
self._adbc_driver,
|
|
67
|
+
self._rpc.endpoint,
|
|
68
|
+
self._rpc.access,
|
|
69
|
+
self._rpc.secret,
|
|
70
|
+
self.txid,
|
|
71
|
+
self._end_user
|
|
72
|
+
)
|
|
73
|
+
|
|
53
74
|
log.debug("opened txid=%016x", self.txid)
|
|
54
75
|
return self
|
|
55
76
|
|
|
@@ -57,6 +78,10 @@ class Transaction:
|
|
|
57
78
|
"""On success, the transaction is committed. Otherwise, it is rolled back."""
|
|
58
79
|
txid = self.txid
|
|
59
80
|
self.txid = None
|
|
81
|
+
if self._adbc_conn is not None:
|
|
82
|
+
self.adbc_conn.close()
|
|
83
|
+
self._adbc_conn = None
|
|
84
|
+
|
|
60
85
|
if (exc_type, exc_value, exc_traceback) == (None, None, None):
|
|
61
86
|
log.debug("committing txid=%016x", txid)
|
|
62
87
|
self._rpc.api.commit_transaction(txid)
|
|
@@ -110,3 +135,10 @@ class Transaction:
|
|
|
110
135
|
def table_from_metadata(self, metadata: TableMetadata) -> ITable:
|
|
111
136
|
"""Create Table from TableMetadata."""
|
|
112
137
|
return TableInTransaction(deepcopy(metadata), tx=self)
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def adbc_conn(self) -> AdbcConnection:
|
|
141
|
+
"""ADBC connection in transaction."""
|
|
142
|
+
if self._adbc_conn is None:
|
|
143
|
+
raise NoAdbcConnectionError("Adbc Driver may not have been supplied")
|
|
144
|
+
return self._adbc_conn
|
|
@@ -105,74 +105,66 @@ class GetTableStatsResponse(object):
|
|
|
105
105
|
return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos)
|
|
106
106
|
return 0
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
# GetTableStatsResponse
|
|
109
|
+
def VectorIndexMetadata(self):
|
|
110
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
|
|
111
|
+
if o != 0:
|
|
112
|
+
x = self._tab.Indirect(o + self._tab.Pos)
|
|
113
|
+
from vastdb.vast_flatbuf.tabular.VectorIndexMetadata import VectorIndexMetadata
|
|
114
|
+
obj = VectorIndexMetadata()
|
|
115
|
+
obj.Init(self._tab.Bytes, x)
|
|
116
|
+
return obj
|
|
117
|
+
return None
|
|
113
118
|
|
|
119
|
+
def Start(builder): builder.StartObject(10)
|
|
120
|
+
def GetTableStatsResponseStart(builder):
|
|
121
|
+
"""This method is deprecated. Please switch to Start."""
|
|
122
|
+
return Start(builder)
|
|
123
|
+
def AddNumRows(builder, numRows): builder.PrependInt64Slot(0, numRows, 0)
|
|
114
124
|
def GetTableStatsResponseAddNumRows(builder, numRows):
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
def
|
|
118
|
-
GetTableStatsResponseAddNumRows(builder, numRows)
|
|
119
|
-
|
|
125
|
+
"""This method is deprecated. Please switch to AddNumRows."""
|
|
126
|
+
return AddNumRows(builder, numRows)
|
|
127
|
+
def AddSizeInBytes(builder, sizeInBytes): builder.PrependInt64Slot(1, sizeInBytes, 0)
|
|
120
128
|
def GetTableStatsResponseAddSizeInBytes(builder, sizeInBytes):
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
def
|
|
124
|
-
GetTableStatsResponseAddSizeInBytes(builder, sizeInBytes)
|
|
125
|
-
|
|
129
|
+
"""This method is deprecated. Please switch to AddSizeInBytes."""
|
|
130
|
+
return AddSizeInBytes(builder, sizeInBytes)
|
|
131
|
+
def AddIsExternalRowidAlloc(builder, isExternalRowidAlloc): builder.PrependBoolSlot(2, isExternalRowidAlloc, 0)
|
|
126
132
|
def GetTableStatsResponseAddIsExternalRowidAlloc(builder, isExternalRowidAlloc):
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
def
|
|
130
|
-
GetTableStatsResponseAddIsExternalRowidAlloc(builder, isExternalRowidAlloc)
|
|
131
|
-
|
|
133
|
+
"""This method is deprecated. Please switch to AddIsExternalRowidAlloc."""
|
|
134
|
+
return AddIsExternalRowidAlloc(builder, isExternalRowidAlloc)
|
|
135
|
+
def AddAddressType(builder, addressType): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(addressType), 0)
|
|
132
136
|
def GetTableStatsResponseAddAddressType(builder, addressType):
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def
|
|
136
|
-
GetTableStatsResponseAddAddressType(builder, addressType)
|
|
137
|
-
|
|
137
|
+
"""This method is deprecated. Please switch to AddAddressType."""
|
|
138
|
+
return AddAddressType(builder, addressType)
|
|
139
|
+
def AddVips(builder, vips): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(vips), 0)
|
|
138
140
|
def GetTableStatsResponseAddVips(builder, vips):
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
def
|
|
142
|
-
GetTableStatsResponseAddVips(builder, vips)
|
|
143
|
-
|
|
141
|
+
"""This method is deprecated. Please switch to AddVips."""
|
|
142
|
+
return AddVips(builder, vips)
|
|
143
|
+
def StartVipsVector(builder, numElems): return builder.StartVector(4, numElems, 4)
|
|
144
144
|
def GetTableStatsResponseStartVipsVector(builder, numElems):
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
def
|
|
148
|
-
return GetTableStatsResponseStartVipsVector(builder, numElems)
|
|
149
|
-
|
|
145
|
+
"""This method is deprecated. Please switch to Start."""
|
|
146
|
+
return StartVipsVector(builder, numElems)
|
|
147
|
+
def AddSortingKeyEnabled(builder, sortingKeyEnabled): builder.PrependBoolSlot(5, sortingKeyEnabled, 0)
|
|
150
148
|
def GetTableStatsResponseAddSortingKeyEnabled(builder, sortingKeyEnabled):
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
def
|
|
154
|
-
GetTableStatsResponseAddSortingKeyEnabled(builder, sortingKeyEnabled)
|
|
155
|
-
|
|
149
|
+
"""This method is deprecated. Please switch to AddSortingKeyEnabled."""
|
|
150
|
+
return AddSortingKeyEnabled(builder, sortingKeyEnabled)
|
|
151
|
+
def AddSortingScore(builder, sortingScore): builder.PrependInt64Slot(6, sortingScore, 0)
|
|
156
152
|
def GetTableStatsResponseAddSortingScore(builder, sortingScore):
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
def
|
|
160
|
-
GetTableStatsResponseAddSortingScore(builder, sortingScore)
|
|
161
|
-
|
|
153
|
+
"""This method is deprecated. Please switch to AddSortingScore."""
|
|
154
|
+
return AddSortingScore(builder, sortingScore)
|
|
155
|
+
def AddWriteAmplification(builder, writeAmplification): builder.PrependInt64Slot(7, writeAmplification, 0)
|
|
162
156
|
def GetTableStatsResponseAddWriteAmplification(builder, writeAmplification):
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def
|
|
166
|
-
GetTableStatsResponseAddWriteAmplification(builder, writeAmplification)
|
|
167
|
-
|
|
157
|
+
"""This method is deprecated. Please switch to AddWriteAmplification."""
|
|
158
|
+
return AddWriteAmplification(builder, writeAmplification)
|
|
159
|
+
def AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount): builder.PrependInt64Slot(8, acummulativeRowInseritionCount, 0)
|
|
168
160
|
def GetTableStatsResponseAddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount):
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
def
|
|
172
|
-
|
|
173
|
-
|
|
161
|
+
"""This method is deprecated. Please switch to AddAcummulativeRowInseritionCount."""
|
|
162
|
+
return AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount)
|
|
163
|
+
def AddVectorIndexMetadata(builder, vectorIndexMetadata): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(vectorIndexMetadata), 0)
|
|
164
|
+
def GetTableStatsResponseAddVectorIndexMetadata(builder, vectorIndexMetadata):
|
|
165
|
+
"""This method is deprecated. Please switch to AddVectorIndexMetadata."""
|
|
166
|
+
return AddVectorIndexMetadata(builder, vectorIndexMetadata)
|
|
167
|
+
def End(builder): return builder.EndObject()
|
|
174
168
|
def GetTableStatsResponseEnd(builder):
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def End(builder):
|
|
178
|
-
return GetTableStatsResponseEnd(builder)
|
|
169
|
+
"""This method is deprecated. Please switch to End."""
|
|
170
|
+
return End(builder)
|
|
@@ -95,74 +95,51 @@ 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
99
|
def ObjectDetailsStart(builder):
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def
|
|
102
|
-
ObjectDetailsStart(builder)
|
|
103
|
-
|
|
100
|
+
"""This method is deprecated. Please switch to Start."""
|
|
101
|
+
return Start(builder)
|
|
102
|
+
def AddName(builder, name): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0)
|
|
104
103
|
def ObjectDetailsAddName(builder, name):
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def
|
|
108
|
-
ObjectDetailsAddName(builder, name)
|
|
109
|
-
|
|
104
|
+
"""This method is deprecated. Please switch to AddName."""
|
|
105
|
+
return AddName(builder, name)
|
|
106
|
+
def AddProperties(builder, properties): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(properties), 0)
|
|
110
107
|
def ObjectDetailsAddProperties(builder, properties):
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def
|
|
114
|
-
ObjectDetailsAddProperties(builder, properties)
|
|
115
|
-
|
|
108
|
+
"""This method is deprecated. Please switch to AddProperties."""
|
|
109
|
+
return AddProperties(builder, properties)
|
|
110
|
+
def AddHandle(builder, handle): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(handle), 0)
|
|
116
111
|
def ObjectDetailsAddHandle(builder, handle):
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def
|
|
120
|
-
ObjectDetailsAddHandle(builder, handle)
|
|
121
|
-
|
|
112
|
+
"""This method is deprecated. Please switch to AddHandle."""
|
|
113
|
+
return AddHandle(builder, handle)
|
|
114
|
+
def AddNumRows(builder, numRows): builder.PrependUint64Slot(3, numRows, 0)
|
|
122
115
|
def ObjectDetailsAddNumRows(builder, numRows):
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
def
|
|
126
|
-
ObjectDetailsAddNumRows(builder, numRows)
|
|
127
|
-
|
|
116
|
+
"""This method is deprecated. Please switch to AddNumRows."""
|
|
117
|
+
return AddNumRows(builder, numRows)
|
|
118
|
+
def AddSizeInBytes(builder, sizeInBytes): builder.PrependUint64Slot(4, sizeInBytes, 0)
|
|
128
119
|
def ObjectDetailsAddSizeInBytes(builder, sizeInBytes):
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
def
|
|
132
|
-
ObjectDetailsAddSizeInBytes(builder, sizeInBytes)
|
|
133
|
-
|
|
120
|
+
"""This method is deprecated. Please switch to AddSizeInBytes."""
|
|
121
|
+
return AddSizeInBytes(builder, sizeInBytes)
|
|
122
|
+
def AddNumPartitions(builder, numPartitions): builder.PrependUint64Slot(5, numPartitions, 0)
|
|
134
123
|
def ObjectDetailsAddNumPartitions(builder, numPartitions):
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def
|
|
138
|
-
ObjectDetailsAddNumPartitions(builder, numPartitions)
|
|
139
|
-
|
|
124
|
+
"""This method is deprecated. Please switch to AddNumPartitions."""
|
|
125
|
+
return AddNumPartitions(builder, numPartitions)
|
|
126
|
+
def AddSortingKeyEnabled(builder, sortingKeyEnabled): builder.PrependBoolSlot(6, sortingKeyEnabled, 0)
|
|
140
127
|
def ObjectDetailsAddSortingKeyEnabled(builder, sortingKeyEnabled):
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def
|
|
144
|
-
ObjectDetailsAddSortingKeyEnabled(builder, sortingKeyEnabled)
|
|
145
|
-
|
|
128
|
+
"""This method is deprecated. Please switch to AddSortingKeyEnabled."""
|
|
129
|
+
return AddSortingKeyEnabled(builder, sortingKeyEnabled)
|
|
130
|
+
def AddSortingScore(builder, sortingScore): builder.PrependInt64Slot(7, sortingScore, 0)
|
|
146
131
|
def ObjectDetailsAddSortingScore(builder, sortingScore):
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
def
|
|
150
|
-
ObjectDetailsAddSortingScore(builder, sortingScore)
|
|
151
|
-
|
|
132
|
+
"""This method is deprecated. Please switch to AddSortingScore."""
|
|
133
|
+
return AddSortingScore(builder, sortingScore)
|
|
134
|
+
def AddWriteAmplification(builder, writeAmplification): builder.PrependInt64Slot(8, writeAmplification, 0)
|
|
152
135
|
def ObjectDetailsAddWriteAmplification(builder, writeAmplification):
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
def
|
|
156
|
-
ObjectDetailsAddWriteAmplification(builder, writeAmplification)
|
|
157
|
-
|
|
136
|
+
"""This method is deprecated. Please switch to AddWriteAmplification."""
|
|
137
|
+
return AddWriteAmplification(builder, writeAmplification)
|
|
138
|
+
def AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount): builder.PrependInt64Slot(9, acummulativeRowInseritionCount, 0)
|
|
158
139
|
def ObjectDetailsAddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount):
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def
|
|
162
|
-
ObjectDetailsAddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount)
|
|
163
|
-
|
|
140
|
+
"""This method is deprecated. Please switch to AddAcummulativeRowInseritionCount."""
|
|
141
|
+
return AddAcummulativeRowInseritionCount(builder, acummulativeRowInseritionCount)
|
|
142
|
+
def End(builder): return builder.EndObject()
|
|
164
143
|
def ObjectDetailsEnd(builder):
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def End(builder):
|
|
168
|
-
return ObjectDetailsEnd(builder)
|
|
144
|
+
"""This method is deprecated. Please switch to End."""
|
|
145
|
+
return End(builder)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# automatically generated by the FlatBuffers compiler, do not modify
|
|
2
|
+
|
|
3
|
+
# namespace: tabular
|
|
4
|
+
|
|
5
|
+
import flatbuffers
|
|
6
|
+
from flatbuffers.compat import import_numpy
|
|
7
|
+
np = import_numpy()
|
|
8
|
+
|
|
9
|
+
class VectorIndexMetadata(object):
|
|
10
|
+
__slots__ = ['_tab']
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
def GetRootAs(cls, buf, offset=0):
|
|
14
|
+
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
|
|
15
|
+
x = VectorIndexMetadata()
|
|
16
|
+
x.Init(buf, n + offset)
|
|
17
|
+
return x
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def GetRootAsVectorIndexMetadata(cls, buf, offset=0):
|
|
21
|
+
"""This method is deprecated. Please switch to GetRootAs."""
|
|
22
|
+
return cls.GetRootAs(buf, offset)
|
|
23
|
+
# VectorIndexMetadata
|
|
24
|
+
def Init(self, buf, pos):
|
|
25
|
+
self._tab = flatbuffers.table.Table(buf, pos)
|
|
26
|
+
|
|
27
|
+
# VectorIndexMetadata
|
|
28
|
+
def ColumnName(self):
|
|
29
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
30
|
+
if o != 0:
|
|
31
|
+
return self._tab.String(o + self._tab.Pos)
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
# VectorIndexMetadata
|
|
35
|
+
def DistanceMetric(self):
|
|
36
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
|
|
37
|
+
if o != 0:
|
|
38
|
+
return self._tab.String(o + self._tab.Pos)
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
# VectorIndexMetadata
|
|
42
|
+
def SqlFunctionName(self):
|
|
43
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
|
|
44
|
+
if o != 0:
|
|
45
|
+
return self._tab.String(o + self._tab.Pos)
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
def Start(builder): builder.StartObject(3)
|
|
49
|
+
def VectorIndexMetadataStart(builder):
|
|
50
|
+
"""This method is deprecated. Please switch to Start."""
|
|
51
|
+
return Start(builder)
|
|
52
|
+
def AddColumnName(builder, columnName): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(columnName), 0)
|
|
53
|
+
def VectorIndexMetadataAddColumnName(builder, columnName):
|
|
54
|
+
"""This method is deprecated. Please switch to AddColumnName."""
|
|
55
|
+
return AddColumnName(builder, columnName)
|
|
56
|
+
def AddDistanceMetric(builder, distanceMetric): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(distanceMetric), 0)
|
|
57
|
+
def VectorIndexMetadataAddDistanceMetric(builder, distanceMetric):
|
|
58
|
+
"""This method is deprecated. Please switch to AddDistanceMetric."""
|
|
59
|
+
return AddDistanceMetric(builder, distanceMetric)
|
|
60
|
+
def AddSqlFunctionName(builder, sqlFunctionName): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(sqlFunctionName), 0)
|
|
61
|
+
def VectorIndexMetadataAddSqlFunctionName(builder, sqlFunctionName):
|
|
62
|
+
"""This method is deprecated. Please switch to AddSqlFunctionName."""
|
|
63
|
+
return AddSqlFunctionName(builder, sqlFunctionName)
|
|
64
|
+
def End(builder): return builder.EndObject()
|
|
65
|
+
def VectorIndexMetadataEnd(builder):
|
|
66
|
+
"""This method is deprecated. Please switch to End."""
|
|
67
|
+
return End(builder)
|
|
@@ -38,19 +38,26 @@ class VipRange(object):
|
|
|
38
38
|
return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
|
|
39
39
|
return 0
|
|
40
40
|
|
|
41
|
-
def Start(builder): builder.StartObject(2)
|
|
42
41
|
def VipRangeStart(builder):
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def
|
|
42
|
+
builder.StartObject(2)
|
|
43
|
+
|
|
44
|
+
def Start(builder):
|
|
45
|
+
VipRangeStart(builder)
|
|
46
|
+
|
|
46
47
|
def VipRangeAddStartAddress(builder, startAddress):
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def
|
|
48
|
+
builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(startAddress), 0)
|
|
49
|
+
|
|
50
|
+
def AddStartAddress(builder, startAddress):
|
|
51
|
+
VipRangeAddStartAddress(builder, startAddress)
|
|
52
|
+
|
|
50
53
|
def VipRangeAddAddressCount(builder, addressCount):
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def
|
|
54
|
+
builder.PrependUint16Slot(1, addressCount, 0)
|
|
55
|
+
|
|
56
|
+
def AddAddressCount(builder, addressCount):
|
|
57
|
+
VipRangeAddAddressCount(builder, addressCount)
|
|
58
|
+
|
|
54
59
|
def VipRangeEnd(builder):
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
return builder.EndObject()
|
|
61
|
+
|
|
62
|
+
def End(builder):
|
|
63
|
+
return VipRangeEnd(builder)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vastdb
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.5
|
|
4
4
|
Summary: VAST Data SDK
|
|
5
5
|
Home-page: https://github.com/vast-data/vastdb_sdk
|
|
6
6
|
Author: VAST DATA
|
|
@@ -29,6 +29,7 @@ Requires-Dist: numpy
|
|
|
29
29
|
Requires-Dist: requests
|
|
30
30
|
Requires-Dist: xmltodict
|
|
31
31
|
Requires-Dist: backoff==2.2.1
|
|
32
|
+
Requires-Dist: adbc_driver_manager
|
|
32
33
|
Dynamic: author
|
|
33
34
|
Dynamic: author-email
|
|
34
35
|
Dynamic: classifier
|