11// SPDX-License-Identifier: Apache-2.0
22// SPDX-FileCopyrightText: Copyright the Vortex contributors
3- #include " optimizer.hpp"
4- #include " table_function.hpp"
53#include " duckdb/catalog/catalog.hpp"
6- #include " duckdb/main/config.hpp"
7- #include " duckdb/main/capi/capi_internal.hpp"
84#include " duckdb/planner/operator/logical_projection.hpp"
5+ #include " scalar_fn_pushdown.hpp"
6+ #include " table_function.hpp"
97#include < optional>
108
119/* *
1513 * may produce conflicts (e.g. WHERE prefix("str", 'h')).
1614 */
1715
18- extern " C" duckdb_state duckdb_vx_optimizer_extension_register (duckdb_database ffi_db) {
19- D_ASSERT (ffi_db);
20- const DatabaseWrapper &wrapper = *reinterpret_cast <DatabaseWrapper *>(ffi_db);
21- DatabaseInstance &db = *wrapper.database ->instance ;
22- try {
23- DBConfig::GetConfig (db).GetCallbackManager ().Register (VortexOptimizerExtension ());
24- } catch (const std::exception &e) {
25- ErrorData data (e);
26- DUCKDB_LOG_ERROR (db, " Failed to create Vortex optimizer extension:\t " + data.Message ());
27- return DuckDBError;
28- }
29- return DuckDBSuccess;
30- }
31-
32- void VortexOptimizeFunction (OptimizerExtensionInput &input, LogicalOperatorPtr &plan) {
33- plan = TryPushdownScalarFunctions (input.context , std::move (plan));
34- }
35-
3616LogicalOperatorPtr TryPushdownScalarFunctions (ClientContext &context, LogicalOperatorPtr plan) {
3717 Analyses analyses;
3818 Projections projections;
@@ -48,8 +28,7 @@ LogicalOperatorPtr TryPushdownScalarFunctions(ClientContext &context, LogicalOpe
4828 if (expr == nullptr ) { // Conflict for column
4929 continue ;
5030 }
51- const TableColumnStorageIndex storage_index =
52- analysis.get .GetColumnIds ()[column_index].GetPrimaryIndex ();
31+ const TableColumnStorageIndex storage_index = analysis.StorageIndex (column_index);
5332 TableFunctionProjectionExpressionInput input {analysis.get , *expr, storage_index};
5433 if (projection_expression_pushdown (context, input)) {
5534 analysis.get .types [column_index] = expr->return_type ;
@@ -248,3 +227,7 @@ ScalarFnCollect::ScalarFnCollect(Analyses &analyses, const Projections &projecti
248227ScalarFnReplace::ScalarFnReplace (Analyses &analyses, const Projections &projections)
249228 : analyses(analyses), projections(projections) {
250229}
230+
231+ TableColumnStorageIndex GetAnalysis::StorageIndex (TableColumnScanIndex idx) const {
232+ return get.GetColumnIds ()[idx].GetPrimaryIndex ();
233+ }
0 commit comments