@@ -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
0 commit comments