Skip to content

Commit 429ec6e

Browse files
committed
fix: migrate to in-out table function
1 parent c74070b commit 429ec6e

File tree

3 files changed

+16
-21
lines changed

3 files changed

+16
-21
lines changed

src/functions/ipcalc.cpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ namespace duckdb
1818

1919
unique_ptr<FunctionData> IPCalcFunc::Bind (ClientContext &context, TableFunctionBindInput &input, vector<LogicalType> &return_types, vector<string> &names)
2020
{
21-
auto bind_data = make_uniq<IPCalcData> ();
22-
bind_data->ip = StringValue::Get (input.inputs[0]);
23-
2421
// 0. address
2522
return_types.emplace_back (LogicalType::VARCHAR);
2623
names.emplace_back ("address");
@@ -57,32 +54,29 @@ namespace duckdb
5754
return_types.emplace_back (LogicalType::VARCHAR);
5855
names.emplace_back ("ipClass");
5956

60-
return std::move (bind_data);
57+
return make_uniq<IPCalcData> ();
6158
}
6259

6360
unique_ptr<LocalTableFunctionState> IPCalcFunc::InitLocal (ExecutionContext &context, TableFunctionInitInput &input, GlobalTableFunctionState *global_state_p)
6461
{
6562
return make_uniq<IPCalcLocalState> ();
6663
}
6764

68-
unique_ptr<GlobalTableFunctionState> IPCalcFunc::InitGlobal (ClientContext &context, TableFunctionInitInput &input)
69-
{
70-
return nullptr;
71-
}
72-
73-
void IPCalcFunc::Scan (ClientContext &context, TableFunctionInput &data_p, DataChunk &output)
65+
OperatorResultType IPCalcFunc::Function (ExecutionContext &context, TableFunctionInput &data_p, DataChunk &input, DataChunk &output)
7466
{
7567
// Check done
7668
if (((IPCalcLocalState &)*data_p.local_state).done)
7769
{
78-
return;
70+
return OperatorResultType::NEED_MORE_INPUT;
7971
}
8072

81-
auto &data = data_p.bind_data->Cast<IPCalcData> ();
73+
auto &data = data_p.bind_data->Cast<IPCalcData> ();
74+
auto &local_state = (IPCalcLocalState &)*data_p.local_state;
75+
76+
auto ip = input.data[0].GetValue (0).GetValue<string> ();
8277

83-
IPInfo info = IPCalculator::calculate (data.ip);
78+
IPInfo info = IPCalculator::calculate (ip);
8479

85-
output.SetCardinality (1);
8680
output.data[0].SetValue (0, info.address);
8781
output.data[1].SetValue (0, info.netmask);
8882
output.data[2].SetValue (0, info.wildcard);
@@ -92,10 +86,12 @@ namespace duckdb
9286
output.data[6].SetValue (0, info.broadcast);
9387
output.data[7].SetValue (0, info.hostsPerNet);
9488
output.data[8].SetValue (0, info.ipClass);
89+
output.SetCardinality (1);
9590

9691
// Set done
97-
auto &local_state = (IPCalcLocalState &)*data_p.local_state;
98-
local_state.done = true;
92+
local_state.done = true;
93+
94+
return OperatorResultType::NEED_MORE_INPUT;
9995
}
10096
} // namespace netquack
10197
} // namespace duckdb

src/functions/ipcalc.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ namespace duckdb
1414
struct IPCalcFunc
1515
{
1616
static unique_ptr<FunctionData> Bind (ClientContext &context, TableFunctionBindInput &input, vector<LogicalType> &return_types, vector<string> &names);
17-
static void Scan (ClientContext &context, TableFunctionInput &data_p, DataChunk &output);
1817
static unique_ptr<LocalTableFunctionState> InitLocal (ExecutionContext &context, TableFunctionInitInput &input, GlobalTableFunctionState *global_state_p);
19-
static unique_ptr<GlobalTableFunctionState> InitGlobal (ClientContext &context, TableFunctionInitInput &input);
18+
static OperatorResultType Function (ExecutionContext &context, TableFunctionInput &data_p, DataChunk &input, DataChunk &output);
2019
};
2120
} // namespace netquack
2221
} // namespace duckdb

src/netquack_extension.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ namespace duckdb
110110
auto ipcalc_function = TableFunction (
111111
"ipcalc",
112112
{ LogicalType::VARCHAR },
113-
netquack::IPCalcFunc::Scan,
113+
nullptr,
114114
netquack::IPCalcFunc::Bind,
115-
netquack::IPCalcFunc::InitGlobal,
115+
nullptr,
116116
netquack::IPCalcFunc::InitLocal);
117-
ipcalc_function.projection_pushdown = true;
117+
ipcalc_function.in_out_function = netquack::IPCalcFunc::Function;
118118
ExtensionUtil::RegisterFunction (instance, ipcalc_function);
119119

120120
auto version_function = TableFunction (

0 commit comments

Comments
 (0)