@@ -199,11 +199,7 @@ pub fn logical_plan_to_bytes(plan: &LogicalPlan) -> Result<Bytes> {
199
199
#[ cfg( feature = "json" ) ]
200
200
pub fn logical_plan_to_json ( plan : & LogicalPlan ) -> Result < String > {
201
201
let extension_codec = DefaultLogicalExtensionCodec { } ;
202
- let protobuf =
203
- protobuf:: LogicalPlanNode :: try_from_logical_plan ( plan, & extension_codec)
204
- . map_err ( |e| plan_datafusion_err ! ( "Error serializing plan: {e}" ) ) ?;
205
- serde_json:: to_string ( & protobuf)
206
- . map_err ( |e| plan_datafusion_err ! ( "Error serializing plan: {e}" ) )
202
+ logical_plan_to_json_with_extension_codec ( plan, & extension_codec)
207
203
}
208
204
209
205
/// Serialize a LogicalPlan as bytes, using the provided extension codec
@@ -220,13 +216,24 @@ pub fn logical_plan_to_bytes_with_extension_codec(
220
216
Ok ( buffer. into ( ) )
221
217
}
222
218
219
+ /// Serialize a LogicalPlan as JSON using the provided extension codec
220
+ #[ cfg( feature = "json" ) ]
221
+ pub fn logical_plan_to_json_with_extension_codec (
222
+ plan : & LogicalPlan ,
223
+ extension_codec : & dyn LogicalExtensionCodec ,
224
+ ) -> Result < String > {
225
+ let protobuf =
226
+ protobuf:: LogicalPlanNode :: try_from_logical_plan ( plan, extension_codec)
227
+ . map_err ( |e| plan_datafusion_err ! ( "Error serializing plan: {e}" ) ) ?;
228
+ serde_json:: to_string ( & protobuf)
229
+ . map_err ( |e| plan_datafusion_err ! ( "Error serializing plan: {e}" ) )
230
+ }
231
+
223
232
/// Deserialize a LogicalPlan from JSON
224
233
#[ cfg( feature = "json" ) ]
225
234
pub fn logical_plan_from_json ( json : & str , ctx : & SessionContext ) -> Result < LogicalPlan > {
226
- let back: protobuf:: LogicalPlanNode = serde_json:: from_str ( json)
227
- . map_err ( |e| plan_datafusion_err ! ( "Error serializing plan: {e}" ) ) ?;
228
235
let extension_codec = DefaultLogicalExtensionCodec { } ;
229
- back . try_into_logical_plan ( ctx, & extension_codec)
236
+ logical_plan_from_json_with_extension_codec ( json , ctx, & extension_codec)
230
237
}
231
238
232
239
/// Deserialize a LogicalPlan from bytes
@@ -249,6 +256,18 @@ pub fn logical_plan_from_bytes_with_extension_codec(
249
256
protobuf. try_into_logical_plan ( ctx, extension_codec)
250
257
}
251
258
259
+ /// Deserialize a LogicalPlan from JSON
260
+ #[ cfg( feature = "json" ) ]
261
+ pub fn logical_plan_from_json_with_extension_codec (
262
+ json : & str ,
263
+ ctx : & SessionContext ,
264
+ extension_codec : & dyn LogicalExtensionCodec ,
265
+ ) -> Result < LogicalPlan > {
266
+ let back: protobuf:: LogicalPlanNode = serde_json:: from_str ( json)
267
+ . map_err ( |e| plan_datafusion_err ! ( "Error deserializing plan: {e}" ) ) ?;
268
+ back. try_into_logical_plan ( ctx, extension_codec)
269
+ }
270
+
252
271
/// Serialize a PhysicalPlan as bytes
253
272
pub fn physical_plan_to_bytes ( plan : Arc < dyn ExecutionPlan > ) -> Result < Bytes > {
254
273
let extension_codec = DefaultPhysicalExtensionCodec { } ;
0 commit comments