@@ -206,6 +206,73 @@ public actor SparkConnectClient {
206206 }
207207 }
208208
209+ /// Create a ``ConfigRequest`` instance for `GetWithDefault` operation.
210+ /// - Parameter pairs: A key-value dictionary.
211+ /// - Returns: A `ConfigRequest` instance.
212+ func getConfigRequestGetWithDefault( _ pairs: [ String : String ] ) -> ConfigRequest {
213+ var request = ConfigRequest ( )
214+ request. operation = ConfigRequest . Operation ( )
215+ var getWithDefault = ConfigRequest . GetWithDefault ( )
216+ getWithDefault. pairs = pairs. toSparkConnectKeyValue
217+ request. operation. opType = . getWithDefault( getWithDefault)
218+ return request
219+ }
220+
221+ /// Returns the value of Spark runtime configuration property for the given key. If the key is
222+ /// not set yet, return the user given `value`. This is useful when its default value defined
223+ /// by Apache Spark is not the desired one.
224+ /// - Parameters:
225+ /// - key: A string for the configuration key.
226+ /// - value: A default value for the configuration.
227+ func getConfWithDefault( _ key: String , _ value: String ) async throws -> String {
228+ try await withGPRC { client in
229+ let service = SparkConnectService . Client ( wrapping: client)
230+ var request = getConfigRequestGetWithDefault ( [ key: value] )
231+ request. clientType = clientType
232+ request. userContext = userContext
233+ request. sessionID = self . sessionID!
234+ let response = try await service. config ( request)
235+ let result = if response. pairs [ 0 ] . hasValue {
236+ response. pairs [ 0 ] . value
237+ } else {
238+ value
239+ }
240+ return result
241+ }
242+ }
243+
244+ /// Create a ``ConfigRequest`` instance for `GetOption` operation.
245+ /// - Parameter keys: An array of keys to get.
246+ /// - Returns: A `ConfigRequest` instance.
247+ func getConfigRequestGetOption( _ keys: [ String ] ) -> ConfigRequest {
248+ var request = ConfigRequest ( )
249+ request. operation = ConfigRequest . Operation ( )
250+ var getOption = ConfigRequest . GetOption ( )
251+ getOption. keys = keys
252+ request. operation. opType = . getOption( getOption)
253+ return request
254+ }
255+
256+ /// Request the server to get a value of the given key.
257+ /// - Parameter key: A string for key to look up.
258+ /// - Returns: A string or nil for the value of the key.
259+ func getConfOption( _ key: String ) async throws -> String ? {
260+ try await withGPRC { client in
261+ let service = SparkConnectService . Client ( wrapping: client)
262+ var request = getConfigRequestGetOption ( [ key] )
263+ request. clientType = clientType
264+ request. userContext = userContext
265+ request. sessionID = self . sessionID!
266+ let response = try await service. config ( request)
267+ let result : String ? = if response. pairs [ 0 ] . hasValue {
268+ response. pairs [ 0 ] . value
269+ } else {
270+ nil
271+ }
272+ return result
273+ }
274+ }
275+
209276 /// Create a ``ConfigRequest`` for `GetAll` operation.
210277 /// - Returns: A `ConfigRequest` instance.
211278 func getConfigRequestGetAll( ) -> ConfigRequest {
@@ -234,6 +301,35 @@ public actor SparkConnectClient {
234301 }
235302 }
236303
304+ /// Create a ``ConfigRequest`` for `IsModifiable` operation.
305+ /// - Returns: A `ConfigRequest` instance.
306+ func getConfigRequestIsModifiable( _ keys: [ String ] ) -> ConfigRequest {
307+ var request = ConfigRequest ( )
308+ request. operation = ConfigRequest . Operation ( )
309+ var isModifiable = ConfigRequest . IsModifiable ( )
310+ isModifiable. keys = keys
311+ request. operation. opType = . isModifiable( isModifiable)
312+ return request
313+ }
314+
315+ /// Indicates whether the configuration property with the given key is modifiable in the current
316+ /// session.
317+ /// - Parameter key: A string for the configuration look-up.
318+ /// - Returns: `true` if the configuration property is modifiable. For static SQL, Spark Core, invalid
319+ /// (not existing) and other non-modifiable configuration properties, the returned value is
320+ /// `false`.
321+ func isModifiable( _ key: String ) async throws -> Bool {
322+ try await withGPRC { client in
323+ let service = SparkConnectService . Client ( wrapping: client)
324+ var request = getConfigRequestIsModifiable ( [ key] )
325+ request. clientType = clientType
326+ request. userContext = userContext
327+ request. sessionID = self . sessionID!
328+ let response = try await service. config ( request)
329+ return response. pairs [ 0 ] . value == " true "
330+ }
331+ }
332+
237333 func getLocalRelation( ) -> Plan {
238334 var localRelation = Spark_Connect_LocalRelation ( )
239335 localRelation. schema = " "
0 commit comments