1515#include " function/table/bind_data.h"
1616#include " function/table/bind_input.h"
1717#include " function/table/table_function.h"
18+ #include " lance/lance.hpp"
1819#include " main/client_context.h"
1920#include " processor/execution_context.h"
2021
21- #include " lance/lance.hpp"
22-
2322namespace lbug {
2423namespace lance_extension {
2524
@@ -37,8 +36,7 @@ struct LanceVectorSearchBindData : TableFuncBindData {
3736 uint32_t nprobes;
3837
3938 LanceVectorSearchBindData (std::string path, std::string col, std::vector<float > query,
40- uint32_t k, std::string metric, uint32_t nprobes,
41- binder::expression_vector columns)
39+ uint32_t k, std::string metric, uint32_t nprobes, binder::expression_vector columns)
4240 : TableFuncBindData{std::move (columns)}, datasetPath{std::move (path)},
4341 columnName{std::move (col)}, queryVector{std::move (query)}, k{k},
4442 metric{std::move (metric)}, nprobes{nprobes} {}
@@ -57,7 +55,8 @@ struct LanceSearchSharedState : TableFuncSharedState {
5755 LanceSearchSharedState () { std::memset (&stream, 0 , sizeof (stream)); }
5856
5957 ~LanceSearchSharedState () override {
60- if (stream.release ) stream.release (&stream);
58+ if (stream.release )
59+ stream.release (&stream);
6160 }
6261};
6362
@@ -78,9 +77,8 @@ static std::unique_ptr<TableFuncBindData> bindVectorSearch(main::ClientContext*
7877 }
7978 auto k = static_cast <uint32_t >(input->getLiteralVal <int64_t >(3 ));
8079 std::string metric = (input->params .size () > 4 ) ? input->getLiteralVal <std::string>(4 ) : " l2" ;
81- uint32_t nprobes = (input->params .size () > 5 )
82- ? static_cast <uint32_t >(input->getLiteralVal <int64_t >(5 ))
83- : 1 ;
80+ uint32_t nprobes =
81+ (input->params .size () > 5 ) ? static_cast <uint32_t >(input->getLiteralVal <int64_t >(5 )) : 1 ;
8482
8583 // Open dataset to discover schema
8684 auto resolvedPath = VirtualFileSystem::resolvePath (context, datasetPath);
@@ -93,15 +91,17 @@ static std::unique_ptr<TableFuncBindData> bindVectorSearch(main::ClientContext*
9391 std::vector<LogicalType> returnTypes;
9492 std::vector<std::string> returnNames;
9593 for (int32_t i = 0 ; i < schema.n_children ; ++i) {
96- if (!schema.children [i] || !schema.children [i]->name ) continue ;
94+ if (!schema.children [i] || !schema.children [i]->name )
95+ continue ;
9796 returnNames.push_back (schema.children [i]->name );
9897 returnTypes.push_back (ArrowConverter::fromArrowSchema (schema.children [i]));
9998 }
10099 // Add the _distance column
101100 returnNames.push_back (" _distance" );
102101 returnTypes.push_back (LogicalType{LogicalTypeID::FLOAT });
103102
104- if (schema.release ) schema.release (&schema);
103+ if (schema.release )
104+ schema.release (&schema);
105105
106106 auto columns = input->binder ->createVariables (returnNames, returnTypes);
107107 return std::make_unique<LanceVectorSearchBindData>(std::move (resolvedPath),
@@ -122,11 +122,14 @@ static std::shared_ptr<TableFuncSharedState> initVectorSearchSharedState(
122122 auto scanner = dataset.scan ();
123123
124124 LanceMetricType metric = LANCE_METRIC_L2 ;
125- if (bindData->metric == " cosine" ) metric = LANCE_METRIC_COSINE ;
126- else if (bindData->metric == " dot" ) metric = LANCE_METRIC_DOT ;
125+ if (bindData->metric == " cosine" )
126+ metric = LANCE_METRIC_COSINE ;
127+ else if (bindData->metric == " dot" )
128+ metric = LANCE_METRIC_DOT ;
127129
128- scanner.nearest (bindData->columnName , bindData->queryVector .data (),
129- bindData->queryVector .size (), bindData->k )
130+ scanner
131+ .nearest (bindData->columnName , bindData->queryVector .data (),
132+ bindData->queryVector .size (), bindData->k )
130133 .nprobes (bindData->nprobes )
131134 .metric (metric);
132135
@@ -140,7 +143,8 @@ static std::shared_ptr<TableFuncSharedState> initVectorSearchSharedState(
140143
141144static offset_t vectorSearchTableFunc (const TableFuncInput& input, TableFuncOutput& output) {
142145 auto * sharedState = input.sharedState ->ptrCast <LanceSearchSharedState>();
143- if (sharedState->exhausted ) return 0 ;
146+ if (sharedState->exhausted )
147+ return 0 ;
144148
145149 ArrowArray batch;
146150 std::memset (&batch, 0 , sizeof (batch));
@@ -160,19 +164,23 @@ static offset_t vectorSearchTableFunc(const TableFuncInput& input, TableFuncOutp
160164
161165 // Copy each column from the batch to the output data chunk
162166 for (uint64_t col = 0 ; col < static_cast <uint64_t >(output.dataChunk .getNumValueVectors ()) &&
163- col < static_cast <uint64_t >(batch.n_children ) &&
164- col < static_cast <uint64_t >(schema.n_children );
167+ col < static_cast <uint64_t >(batch.n_children ) &&
168+ col < static_cast <uint64_t >(schema.n_children );
165169 ++col) {
166170 auto * childArr = batch.children [col];
167171 auto * childSchema = schema.children [col];
168- if (!childArr || !childSchema) continue ;
172+ if (!childArr || !childSchema)
173+ continue ;
169174 ArrowNullMaskTree nullMask (childSchema, childArr, childArr->offset , childArr->length );
170- ArrowConverter::fromArrowArray (childSchema, childArr, output.dataChunk .getValueVectorMutable (col),
171- &nullMask, static_cast <uint64_t >(childArr->offset ), 0 , batchLen);
175+ ArrowConverter::fromArrowArray (childSchema, childArr,
176+ output.dataChunk .getValueVectorMutable (col), &nullMask,
177+ static_cast <uint64_t >(childArr->offset ), 0 , batchLen);
172178 }
173179
174- if (schema.release ) schema.release (&schema);
175- if (batch.release ) batch.release (&batch);
180+ if (schema.release )
181+ schema.release (&schema);
182+ if (batch.release )
183+ batch.release (&batch);
176184 output.dataChunk .state ->getSelVectorUnsafe ().setSelSize (batchLen);
177185 return batchLen;
178186}
@@ -221,9 +229,8 @@ static std::unique_ptr<TableFuncBindData> bindFTS(main::ClientContext* context,
221229 if (input->params .size () > 2 ) {
222230 searchCols.push_back (input->getLiteralVal <std::string>(2 ));
223231 }
224- uint32_t maxFuzzy = (input->params .size () > 3 )
225- ? static_cast <uint32_t >(input->getLiteralVal <int64_t >(3 ))
226- : 0 ;
232+ uint32_t maxFuzzy =
233+ (input->params .size () > 3 ) ? static_cast <uint32_t >(input->getLiteralVal <int64_t >(3 )) : 0 ;
227234
228235 auto resolvedPath = VirtualFileSystem::resolvePath (context, datasetPath);
229236 try {
@@ -235,14 +242,16 @@ static std::unique_ptr<TableFuncBindData> bindFTS(main::ClientContext* context,
235242 std::vector<LogicalType> returnTypes;
236243 std::vector<std::string> returnNames;
237244 for (int32_t i = 0 ; i < schema.n_children ; ++i) {
238- if (!schema.children [i] || !schema.children [i]->name ) continue ;
245+ if (!schema.children [i] || !schema.children [i]->name )
246+ continue ;
239247 returnNames.push_back (schema.children [i]->name );
240248 returnTypes.push_back (ArrowConverter::fromArrowSchema (schema.children [i]));
241249 }
242250 returnNames.push_back (" _score" );
243251 returnTypes.push_back (LogicalType{LogicalTypeID::FLOAT });
244252
245- if (schema.release ) schema.release (&schema);
253+ if (schema.release )
254+ schema.release (&schema);
246255 auto columns = input->binder ->createVariables (returnNames, returnTypes);
247256 return std::make_unique<LanceFTSBindData>(std::move (resolvedPath), std::move (query),
248257 std::move (searchCols), maxFuzzy, std::move (columns));
@@ -268,8 +277,8 @@ static std::shared_ptr<TableFuncSharedState> initFTSSharedState(
268277
269278function_set LanceFTSFunction::getFunctionSet () {
270279 function_set functionSet;
271- auto func = std::make_unique<TableFunction>(
272- name, std::vector<LogicalTypeID>{LogicalTypeID::STRING , LogicalTypeID::STRING });
280+ auto func = std::make_unique<TableFunction>(name,
281+ std::vector<LogicalTypeID>{LogicalTypeID::STRING , LogicalTypeID::STRING });
273282 func->bindFunc = bindFTS;
274283 func->initSharedStateFunc = initFTSSharedState;
275284 func->initLocalStateFunc = TableFunction::initEmptyLocalState;
@@ -303,8 +312,8 @@ struct LanceHybridSearchBindData : TableFuncBindData {
303312static std::unique_ptr<TableFuncBindData> bindHybridSearch (main::ClientContext* context,
304313 const TableFuncBindInput* input) {
305314 if (input->params .size () < 5 ) {
306- throw RuntimeException (
307- " LANCE_HYBRID_SEARCH requires 5 arguments: dataset_path, column, query_vector, k, fts_query" );
315+ throw RuntimeException (" LANCE_HYBRID_SEARCH requires 5 arguments: dataset_path, column, "
316+ " query_vector, k, fts_query" );
308317 }
309318 auto datasetPath = input->getLiteralVal <std::string>(0 );
310319 auto columnName = input->getLiteralVal <std::string>(1 );
@@ -327,18 +336,19 @@ static std::unique_ptr<TableFuncBindData> bindHybridSearch(main::ClientContext*
327336 std::vector<LogicalType> returnTypes;
328337 std::vector<std::string> returnNames;
329338 for (int32_t i = 0 ; i < schema.n_children ; ++i) {
330- if (!schema.children [i] || !schema.children [i]->name ) continue ;
339+ if (!schema.children [i] || !schema.children [i]->name )
340+ continue ;
331341 returnNames.push_back (schema.children [i]->name );
332342 returnTypes.push_back (ArrowConverter::fromArrowSchema (schema.children [i]));
333343 }
334344 returnNames.push_back (" _score" );
335345 returnTypes.push_back (LogicalType{LogicalTypeID::FLOAT });
336346
337- if (schema.release ) schema.release (&schema);
347+ if (schema.release )
348+ schema.release (&schema);
338349 auto columns = input->binder ->createVariables (returnNames, returnTypes);
339350 return std::make_unique<LanceHybridSearchBindData>(std::move (resolvedPath),
340- std::move (columnName), std::move (queryVec), k, std::move (ftsQuery),
341- std::move (columns));
351+ std::move (columnName), std::move (queryVec), k, std::move (ftsQuery), std::move (columns));
342352 } catch (const lance::Error& e) {
343353 throw RuntimeException (std::string (" LANCE_HYBRID_SEARCH bind failed: " ) + e.what ());
344354 }
0 commit comments