Skip to content

Commit 1bca646

Browse files
committed
index: add virtual methods for creating arrow streams
Currently, these methods are implemented only by memcs (available in EE only) so we don't really need to make them virtual. In future, however, we're planning to introduce a new column store engine, which will export the arrow API, too. NO_DOC=internal NO_TEST=internal NO_CHANGELOG=internal
1 parent 43d1ab8 commit 1bca646

File tree

10 files changed

+103
-1
lines changed

10 files changed

+103
-1
lines changed

src/box/index.cc

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,7 @@ generic_index_create_iterator(struct index *base, enum iterator_type type,
11581158
(void)key;
11591159
(void)part_count;
11601160
(void)pos;
1161-
diag_set(UnsupportedIndexFeature, base->def, "read view");
1161+
diag_set(UnsupportedIndexFeature, base->def, "iterator");
11621162
return NULL;
11631163
}
11641164

@@ -1218,6 +1218,41 @@ generic_index_read_view_create_iterator_with_offset(
12181218
return -1;
12191219
}
12201220

1221+
int
1222+
generic_index_create_arrow_stream(struct index *index,
1223+
uint32_t field_count, const uint32_t *fields,
1224+
const char *key, uint32_t part_count,
1225+
const struct arrow_options *options,
1226+
struct ArrowArrayStream *stream)
1227+
{
1228+
(void)field_count;
1229+
(void)fields;
1230+
(void)key;
1231+
(void)part_count;
1232+
(void)options;
1233+
(void)stream;
1234+
diag_set(UnsupportedIndexFeature, index->def, "arrow stream");
1235+
return -1;
1236+
}
1237+
1238+
int
1239+
generic_index_read_view_create_arrow_stream(
1240+
struct index_read_view *rv,
1241+
uint32_t field_count, const uint32_t *fields,
1242+
const char *key, uint32_t part_count,
1243+
const struct arrow_options *options,
1244+
struct ArrowArrayStream *stream)
1245+
{
1246+
(void)field_count;
1247+
(void)fields;
1248+
(void)key;
1249+
(void)part_count;
1250+
(void)options;
1251+
(void)stream;
1252+
diag_set(UnsupportedIndexFeature, rv->def, "arrow stream in read view");
1253+
return -1;
1254+
}
1255+
12211256
struct index_read_view *
12221257
generic_index_create_read_view(struct index *index)
12231258
{

src/box/index.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ struct index_read_view_iterator;
5252
struct index_def;
5353
struct key_def;
5454
struct info_handler;
55+
struct arrow_options;
56+
struct ArrowArrayStream;
5557

5658
typedef struct tuple box_tuple_t;
5759
typedef struct key_def box_key_def_t;
@@ -657,6 +659,12 @@ struct index_vtab {
657659
uint32_t part_count,
658660
const char *pos,
659661
uint32_t offset);
662+
/** Create an index Arrow stream. */
663+
int (*create_arrow_stream)(struct index *index,
664+
uint32_t field_count, const uint32_t *fields,
665+
const char *key, uint32_t part_count,
666+
const struct arrow_options *options,
667+
struct ArrowArrayStream *stream);
660668
/** Create an index read view. */
661669
struct index_read_view *(*create_read_view)(struct index *index);
662670
/** Introspection (index:stat()) */
@@ -777,6 +785,13 @@ struct index_read_view_vtab {
777785
const char *key, uint32_t part_count,
778786
const char *pos, uint32_t offset,
779787
struct index_read_view_iterator *it);
788+
/** Create an index read view Arrow stream. */
789+
int
790+
(*create_arrow_stream)(struct index_read_view *rv,
791+
uint32_t field_count, const uint32_t *fields,
792+
const char *key, uint32_t part_count,
793+
const struct arrow_options *options,
794+
struct ArrowArrayStream *stream);
780795
};
781796

782797
/**
@@ -1046,6 +1061,18 @@ index_create_iterator(struct index *index, enum iterator_type type,
10461061
return index->vtab->create_iterator(index, type, key, part_count, NULL);
10471062
}
10481063

1064+
static inline int
1065+
index_create_arrow_stream(struct index *index,
1066+
uint32_t field_count, const uint32_t *fields,
1067+
const char *key, uint32_t part_count,
1068+
const struct arrow_options *options,
1069+
struct ArrowArrayStream *stream)
1070+
{
1071+
return index->vtab->create_arrow_stream(index, field_count, fields,
1072+
key, part_count, options,
1073+
stream);
1074+
}
1075+
10491076
static inline struct index_read_view *
10501077
index_create_read_view(struct index *index)
10511078
{
@@ -1174,6 +1201,19 @@ index_read_view_iterator_position(struct index_read_view_iterator *iterator,
11741201
return iterator->base.position(iterator, pos, size);
11751202
}
11761203

1204+
static inline int
1205+
index_read_view_create_arrow_stream(
1206+
struct index_read_view *rv,
1207+
uint32_t field_count, const uint32_t *fields,
1208+
const char *key, uint32_t part_count,
1209+
const struct arrow_options *options,
1210+
struct ArrowArrayStream *stream)
1211+
{
1212+
return rv->vtab->create_arrow_stream(rv, field_count, fields,
1213+
key, part_count, options,
1214+
stream);
1215+
}
1216+
11771217
/*
11781218
* Virtual method stubs.
11791219
*/
@@ -1227,6 +1267,19 @@ generic_index_read_view_create_iterator_with_offset(
12271267
const char *key, uint32_t part_count,
12281268
const char *pos, uint32_t offset,
12291269
struct index_read_view_iterator *it);
1270+
int
1271+
generic_index_create_arrow_stream(struct index *index,
1272+
uint32_t field_count, const uint32_t *fields,
1273+
const char *key, uint32_t part_count,
1274+
const struct arrow_options *options,
1275+
struct ArrowArrayStream *stream);
1276+
int
1277+
generic_index_read_view_create_arrow_stream(
1278+
struct index_read_view *rv,
1279+
uint32_t field_count, const uint32_t *fields,
1280+
const char *key, uint32_t part_count,
1281+
const struct arrow_options *options,
1282+
struct ArrowArrayStream *stream);
12301283
int generic_index_build_next(struct index *, struct tuple *);
12311284
void generic_index_end_build(struct index *);
12321285
int

src/box/memtx_bitset.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ static const struct index_vtab memtx_bitset_index_vtab = {
525525
/* .create_iterator = */ memtx_bitset_index_create_iterator,
526526
/* .create_iterator_with_offset = */
527527
generic_index_create_iterator_with_offset,
528+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
528529
/* .create_read_view = */ generic_index_create_read_view,
529530
/* .stat = */ generic_index_stat,
530531
/* .compact = */ generic_index_compact,

src/box/memtx_hash.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,8 @@ memtx_hash_index_create_read_view(struct index *base)
632632
.create_iterator = hash_read_view_create_iterator,
633633
.create_iterator_with_offset =
634634
generic_index_read_view_create_iterator_with_offset,
635+
.create_arrow_stream =
636+
generic_index_read_view_create_arrow_stream,
635637
};
636638
struct memtx_hash_index *index = (struct memtx_hash_index *)base;
637639
struct hash_read_view *rv =
@@ -670,6 +672,7 @@ static const struct index_vtab memtx_hash_index_vtab = {
670672
/* .create_iterator = */ memtx_hash_index_create_iterator,
671673
/* .create_iterator_with_offset = */
672674
generic_index_create_iterator_with_offset,
675+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
673676
/* .create_read_view = */ memtx_hash_index_create_read_view,
674677
/* .stat = */ generic_index_stat,
675678
/* .compact = */ generic_index_compact,

src/box/memtx_rtree.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ static const struct index_vtab memtx_rtree_index_vtab = {
423423
/* .create_iterator = */ memtx_rtree_index_create_iterator,
424424
/* .create_iterator_with_offset = */
425425
generic_index_create_iterator_with_offset,
426+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
426427
/* .create_read_view = */ generic_index_create_read_view,
427428
/* .stat = */ generic_index_stat,
428429
/* .compact = */ generic_index_compact,

src/box/memtx_tree.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2455,6 +2455,8 @@ memtx_tree_index_create_read_view(struct index *base)
24552455
.create_iterator = tree_read_view_create_iterator<USE_HINT>,
24562456
.create_iterator_with_offset =
24572457
tree_read_view_create_iterator_with_offset<USE_HINT>,
2458+
.create_arrow_stream =
2459+
generic_index_read_view_create_arrow_stream,
24582460
};
24592461
struct memtx_tree_index<USE_HINT> *index =
24602462
(struct memtx_tree_index<USE_HINT> *)base;
@@ -2500,6 +2502,7 @@ static const struct index_vtab memtx_tree_disabled_index_vtab = {
25002502
/* .create_iterator = */ generic_index_create_iterator,
25012503
/* .create_iterator_with_offset = */
25022504
generic_index_create_iterator_with_offset,
2505+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
25032506
/* .create_read_view = */ generic_index_create_read_view,
25042507
/* .stat = */ generic_index_stat,
25052508
/* .compact = */ generic_index_compact,
@@ -2566,6 +2569,7 @@ get_memtx_tree_index_vtab(void)
25662569
memtx_tree_index_create_iterator<USE_HINT>,
25672570
/* .create_iterator_with_offset = */
25682571
memtx_tree_index_create_iterator_with_offset<USE_HINT>,
2572+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
25692573
/* .create_read_view = */
25702574
memtx_tree_index_create_read_view<USE_HINT>,
25712575
/* .stat = */ generic_index_stat,

src/box/sequence.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ sequence_data_read_view_create(struct index *index)
419419
.create_iterator = sequence_data_iterator_create,
420420
.create_iterator_with_offset =
421421
generic_index_read_view_create_iterator_with_offset,
422+
.create_arrow_stream =
423+
generic_index_read_view_create_arrow_stream,
422424
};
423425
struct sequence_data_read_view *rv = xmalloc(sizeof(*rv));
424426
index_read_view_create(&rv->base, &vtab, index->def);

src/box/session_settings.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ static const struct index_vtab session_settings_index_vtab = {
285285
/* .create_iterator = */ session_settings_index_create_iterator,
286286
/* .create_iterator_with_offset = */
287287
generic_index_create_iterator_with_offset,
288+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
288289
/* .create_read_view = */ generic_index_create_read_view,
289290
/* .stat = */ generic_index_stat,
290291
/* .compact = */ generic_index_compact,

src/box/sysview.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ static const struct index_vtab sysview_index_vtab = {
196196
/* .create_iterator = */ sysview_index_create_iterator,
197197
/* .create_iterator_with_offset = */
198198
generic_index_create_iterator_with_offset,
199+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
199200
/* .create_read_view = */ generic_index_create_read_view,
200201
/* .stat = */ generic_index_stat,
201202
/* .compact = */ generic_index_compact,

src/box/vinyl.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4840,6 +4840,7 @@ static const struct index_vtab vinyl_index_vtab = {
48404840
/* .create_iterator = */ vinyl_index_create_iterator,
48414841
/* .create_iterator_with_offset = */
48424842
generic_index_create_iterator_with_offset,
4843+
/* .create_arrow_stream = */ generic_index_create_arrow_stream,
48434844
/* .create_read_view = */ generic_index_create_read_view,
48444845
/* .stat = */ vinyl_index_stat,
48454846
/* .compact = */ vinyl_index_compact,

0 commit comments

Comments
 (0)