@@ -438,4 +438,46 @@ public actor SparkConnectClient {
438438 public func clearTags( ) {
439439 tags. removeAll ( )
440440 }
441+
442+ /// Parse a DDL string to ``Spark_Connect_DataType`` instance.
443+ /// - Parameter ddlString: A string to parse.
444+ /// - Returns: A ``Spark_Connect_DataType`` instance.
445+ func ddlParse( _ ddlString: String ) async throws -> Spark_Connect_DataType {
446+ try await withGRPCClient (
447+ transport: . http2NIOPosix(
448+ target: . dns( host: self . host, port: self . port) ,
449+ transportSecurity: . plaintext
450+ )
451+ ) { client in
452+ let service = SparkConnectService . Client ( wrapping: client)
453+ let request = analyze ( self . sessionID!, {
454+ var ddlParse = AnalyzePlanRequest . DDLParse ( )
455+ ddlParse. ddlString = ddlString
456+ return OneOf_Analyze . ddlParse ( ddlParse)
457+ } )
458+ let response = try await service. analyzePlan ( request)
459+ return response. ddlParse. parsed
460+ }
461+ }
462+
463+ /// Convert an JSON string to a DDL string.
464+ /// - Parameter jsonString: A JSON string.
465+ /// - Returns: A DDL string.
466+ func jsonToDdl( _ jsonString: String ) async throws -> String {
467+ try await withGRPCClient (
468+ transport: . http2NIOPosix(
469+ target: . dns( host: self . host, port: self . port) ,
470+ transportSecurity: . plaintext
471+ )
472+ ) { client in
473+ let service = SparkConnectService . Client ( wrapping: client)
474+ let request = analyze ( self . sessionID!, {
475+ var jsonToDDL = AnalyzePlanRequest . JsonToDDL ( )
476+ jsonToDDL. jsonString = jsonString
477+ return OneOf_Analyze . jsonToDdl ( jsonToDDL)
478+ } )
479+ let response = try await service. analyzePlan ( request)
480+ return response. jsonToDdl. ddlString
481+ }
482+ }
441483}
0 commit comments