From e0cb9aff7b7beb9175a79b3b52e1a1d8e5961cd9 Mon Sep 17 00:00:00 2001 From: Dongjoon Hyun Date: Mon, 26 May 2025 19:10:59 -0700 Subject: [PATCH] [SPARK-52318] Refactor `SparkConnectError` to simplify case names --- Sources/SparkConnect/DataFrame.swift | 2 +- Sources/SparkConnect/Extension.swift | 10 +++++----- Sources/SparkConnect/MergeIntoWriter.swift | 2 +- Sources/SparkConnect/ProtoUtils.swift | 4 ++-- Sources/SparkConnect/Row.swift | 2 +- Sources/SparkConnect/SparkConnectClient.swift | 4 ++-- Sources/SparkConnect/SparkConnectError.swift | 8 ++++---- Sources/SparkConnect/SparkFileUtils.swift | 2 +- Sources/SparkConnect/SparkSession.swift | 2 +- Sources/SparkConnect/StreamingQueryManager.swift | 4 ++-- Tests/SparkConnectTests/DataFrameReaderTests.swift | 4 ++-- Tests/SparkConnectTests/DataFrameTests.swift | 2 +- Tests/SparkConnectTests/RowTests.swift | 4 ++-- Tests/SparkConnectTests/SparkConnectClientTests.swift | 2 +- Tests/SparkConnectTests/SparkSessionTests.swift | 6 +++--- .../SparkConnectTests/StreamingQueryManagerTests.swift | 6 +++--- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Sources/SparkConnect/DataFrame.swift b/Sources/SparkConnect/DataFrame.swift index e52226a..393168e 100644 --- a/Sources/SparkConnect/DataFrame.swift +++ b/Sources/SparkConnect/DataFrame.swift @@ -258,7 +258,7 @@ public actor DataFrame: Sendable { // SQLSTATE: 0A000 // [UNSUPPORTED_CONNECT_FEATURE.RDD] // Feature is not supported in Spark Connect: Resilient Distributed Datasets (RDDs). - throw SparkConnectError.UnsupportedOperationException + throw SparkConnectError.UnsupportedOperation } /// Return an array of column name strings diff --git a/Sources/SparkConnect/Extension.swift b/Sources/SparkConnect/Extension.swift index 6586cd7..f7d869e 100644 --- a/Sources/SparkConnect/Extension.swift +++ b/Sources/SparkConnect/Extension.swift @@ -213,7 +213,7 @@ extension YearMonthInterval { case 0: "year" case 1: "month" default: - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType } } @@ -225,7 +225,7 @@ extension YearMonthInterval { } else if startFieldName < endFieldName { "interval \(startFieldName) to \(endFieldName)" } else { - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType } return interval } @@ -239,7 +239,7 @@ extension DayTimeInterval { case 2: "minute" case 3: "second" default: - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType } } @@ -251,7 +251,7 @@ extension DayTimeInterval { } else if startFieldName < endFieldName { "interval \(startFieldName) to \(endFieldName)" } else { - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType } return interval } @@ -325,7 +325,7 @@ extension DataType { case .unparsed: self.unparsed.dataTypeString default: - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType } } } diff --git a/Sources/SparkConnect/MergeIntoWriter.swift b/Sources/SparkConnect/MergeIntoWriter.swift index de15892..10f09f3 100644 --- a/Sources/SparkConnect/MergeIntoWriter.swift +++ b/Sources/SparkConnect/MergeIntoWriter.swift @@ -187,7 +187,7 @@ public actor MergeIntoWriter { && self.mergeIntoTableCommand.notMatchedActions.count == 0 && self.mergeIntoTableCommand.notMatchedBySourceActions.count == 0 { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } self.mergeIntoTableCommand.sourceTablePlan = await (self.df.getPlan() as! Plan).root self.mergeIntoTableCommand.withSchemaEvolution = self.schemaEvolution diff --git a/Sources/SparkConnect/ProtoUtils.swift b/Sources/SparkConnect/ProtoUtils.swift index 738213f..f0f137a 100644 --- a/Sources/SparkConnect/ProtoUtils.swift +++ b/Sources/SparkConnect/ProtoUtils.swift @@ -30,10 +30,10 @@ public enum ProtoUtils { // because the Spark Connect job tag is also used as part of SparkContext job tag. // See SparkContext.throwIfInvalidTag and ExecuteHolderSessionTag if tag.isEmpty { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } if tag.contains(SPARK_JOB_TAGS_SEP) { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } } } diff --git a/Sources/SparkConnect/Row.swift b/Sources/SparkConnect/Row.swift index 79ade14..249ccae 100644 --- a/Sources/SparkConnect/Row.swift +++ b/Sources/SparkConnect/Row.swift @@ -45,7 +45,7 @@ public struct Row: Sendable, Equatable { public func get(_ i: Int) throws -> Sendable { if i < 0 || i >= self.length { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } return values[i] } diff --git a/Sources/SparkConnect/SparkConnectClient.swift b/Sources/SparkConnect/SparkConnectClient.swift index f8a0073..93889ce 100644 --- a/Sources/SparkConnect/SparkConnectClient.swift +++ b/Sources/SparkConnect/SparkConnectClient.swift @@ -104,7 +104,7 @@ public actor SparkConnectClient { try await withGPRC { client in // To prevent server-side `INVALID_HANDLE.FORMAT (SQLSTATE: HY000)` exception. if UUID(uuidString: sessionID) == nil { - throw SparkConnectError.InvalidSessionIDException + throw SparkConnectError.InvalidSessionID } self.sessionID = sessionID @@ -787,7 +787,7 @@ public actor SparkConnectClient { } catch let error as RPCError where error.code == .internalError { switch error.message { case let m where m.contains("UNSUPPORTED_DATATYPE") || m.contains("INVALID_IDENTIFIER"): - throw SparkConnectError.InvalidTypeException + throw SparkConnectError.InvalidType default: throw error } diff --git a/Sources/SparkConnect/SparkConnectError.swift b/Sources/SparkConnect/SparkConnectError.swift index 4434b6d..cff40d7 100644 --- a/Sources/SparkConnect/SparkConnectError.swift +++ b/Sources/SparkConnect/SparkConnectError.swift @@ -19,8 +19,8 @@ /// A enum for ``SparkConnect`` package errors public enum SparkConnectError: Error { - case UnsupportedOperationException - case InvalidArgumentException - case InvalidSessionIDException - case InvalidTypeException + case InvalidArgument + case InvalidSessionID + case InvalidType + case UnsupportedOperation } diff --git a/Sources/SparkConnect/SparkFileUtils.swift b/Sources/SparkConnect/SparkFileUtils.swift index 1c7fa44..e5fe282 100644 --- a/Sources/SparkConnect/SparkFileUtils.swift +++ b/Sources/SparkConnect/SparkFileUtils.swift @@ -106,7 +106,7 @@ public enum SparkFileUtils { if fileManager.fileExists(atPath: url.path) { try fileManager.removeItem(at: url) } else { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } } } diff --git a/Sources/SparkConnect/SparkSession.swift b/Sources/SparkConnect/SparkSession.swift index ed25f5e..ed5bd38 100644 --- a/Sources/SparkConnect/SparkSession.swift +++ b/Sources/SparkConnect/SparkSession.swift @@ -83,7 +83,7 @@ public actor SparkSession { // SQLSTATE: 0A000 // [UNSUPPORTED_CONNECT_FEATURE.SESSION_SPARK_CONTEXT] // Feature is not supported in Spark Connect: Access to the SparkContext. - throw SparkConnectError.UnsupportedOperationException + throw SparkConnectError.UnsupportedOperation } } diff --git a/Sources/SparkConnect/StreamingQueryManager.swift b/Sources/SparkConnect/StreamingQueryManager.swift index b670aa3..37178bc 100644 --- a/Sources/SparkConnect/StreamingQueryManager.swift +++ b/Sources/SparkConnect/StreamingQueryManager.swift @@ -135,7 +135,7 @@ public actor StreamingQueryManager { let response = try await self.sparkSession.client.executeStreamingQueryManagerCommand(command) let query = response.first!.streamingQueryManagerCommandResult.query guard query.hasID else { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } return StreamingQuery( UUID(uuidString: query.id.id)!, @@ -154,7 +154,7 @@ public actor StreamingQueryManager { var awaitAnyTerminationCommand = StreamingQueryManagerCommand.AwaitAnyTerminationCommand() if let timeoutMs { guard timeoutMs > 0 else { - throw SparkConnectError.InvalidArgumentException + throw SparkConnectError.InvalidArgument } awaitAnyTerminationCommand.timeoutMs = timeoutMs } diff --git a/Tests/SparkConnectTests/DataFrameReaderTests.swift b/Tests/SparkConnectTests/DataFrameReaderTests.swift index 3c63116..0dfd04b 100644 --- a/Tests/SparkConnectTests/DataFrameReaderTests.swift +++ b/Tests/SparkConnectTests/DataFrameReaderTests.swift @@ -103,10 +103,10 @@ struct DataFrameReaderTests { @Test func invalidSchema() async throws { let spark = try await SparkSession.builder.getOrCreate() - await #expect(throws: SparkConnectError.InvalidTypeException) { + await #expect(throws: SparkConnectError.InvalidType) { try await spark.read.schema("invalid-name SHORT") } - await #expect(throws: SparkConnectError.InvalidTypeException) { + await #expect(throws: SparkConnectError.InvalidType) { try await spark.read.schema("age UNKNOWN_TYPE") } await spark.stop() diff --git a/Tests/SparkConnectTests/DataFrameTests.swift b/Tests/SparkConnectTests/DataFrameTests.swift index d85c607..15cc6d6 100644 --- a/Tests/SparkConnectTests/DataFrameTests.swift +++ b/Tests/SparkConnectTests/DataFrameTests.swift @@ -49,7 +49,7 @@ struct DataFrameTests { @Test func rdd() async throws { let spark = try await SparkSession.builder.getOrCreate() - await #expect(throws: SparkConnectError.UnsupportedOperationException) { + await #expect(throws: SparkConnectError.UnsupportedOperation) { try await spark.range(1).rdd() } await spark.stop() diff --git a/Tests/SparkConnectTests/RowTests.swift b/Tests/SparkConnectTests/RowTests.swift index 02da050..d44f4f2 100644 --- a/Tests/SparkConnectTests/RowTests.swift +++ b/Tests/SparkConnectTests/RowTests.swift @@ -28,7 +28,7 @@ struct RowTests { func empty() { #expect(Row.empty.size == 0) #expect(Row.empty.length == 0) - #expect(throws: SparkConnectError.InvalidArgumentException) { + #expect(throws: SparkConnectError.InvalidArgument) { try Row.empty.get(0) } } @@ -57,7 +57,7 @@ struct RowTests { #expect(try row.get(2) as! String == "a") #expect(try row.get(3) as! Bool == true) #expect(try row.get(4) as! Decimal == Decimal(1.2)) - #expect(throws: SparkConnectError.InvalidArgumentException) { + #expect(throws: SparkConnectError.InvalidArgument) { try Row.empty.get(-1) } } diff --git a/Tests/SparkConnectTests/SparkConnectClientTests.swift b/Tests/SparkConnectTests/SparkConnectClientTests.swift index d0c6db2..e47eab6 100644 --- a/Tests/SparkConnectTests/SparkConnectClientTests.swift +++ b/Tests/SparkConnectTests/SparkConnectClientTests.swift @@ -47,7 +47,7 @@ struct SparkConnectClientTests { @Test func connectWithInvalidUUID() async throws { let client = SparkConnectClient(remote: TEST_REMOTE) - try await #require(throws: SparkConnectError.InvalidSessionIDException) { + try await #require(throws: SparkConnectError.InvalidSessionID) { try await client.connect("not-a-uuid-format") } await client.stop() diff --git a/Tests/SparkConnectTests/SparkSessionTests.swift b/Tests/SparkConnectTests/SparkSessionTests.swift index 7404395..50eb95c 100644 --- a/Tests/SparkConnectTests/SparkSessionTests.swift +++ b/Tests/SparkConnectTests/SparkSessionTests.swift @@ -29,7 +29,7 @@ struct SparkSessionTests { func sparkContext() async throws { await SparkSession.builder.clear() let spark = try await SparkSession.builder.getOrCreate() - await #expect(throws: SparkConnectError.UnsupportedOperationException) { + await #expect(throws: SparkConnectError.UnsupportedOperation) { try await spark.sparkContext } await spark.stop() @@ -186,10 +186,10 @@ struct SparkSessionTests { func invalidTags() async throws { await SparkSession.builder.clear() let spark = try await SparkSession.builder.getOrCreate() - await #expect(throws: SparkConnectError.InvalidArgumentException) { + await #expect(throws: SparkConnectError.InvalidArgument) { try await spark.addTag("") } - await #expect(throws: SparkConnectError.InvalidArgumentException) { + await #expect(throws: SparkConnectError.InvalidArgument) { try await spark.addTag(",") } await spark.stop() diff --git a/Tests/SparkConnectTests/StreamingQueryManagerTests.swift b/Tests/SparkConnectTests/StreamingQueryManagerTests.swift index ada8517..e457b4a 100644 --- a/Tests/SparkConnectTests/StreamingQueryManagerTests.swift +++ b/Tests/SparkConnectTests/StreamingQueryManagerTests.swift @@ -35,10 +35,10 @@ struct StreamingQueryManagerTests { @Test func get() async throws { let spark = try await SparkSession.builder.getOrCreate() - await #expect(throws: SparkConnectError.InvalidArgumentException) { + await #expect(throws: SparkConnectError.InvalidArgument) { try await spark.streams.get(UUID()) } - await #expect(throws: SparkConnectError.InvalidArgumentException) { + await #expect(throws: SparkConnectError.InvalidArgument) { try await spark.streams.get(UUID().uuidString) } await spark.stop() @@ -48,7 +48,7 @@ struct StreamingQueryManagerTests { func awaitAnyTermination() async throws { let spark = try await SparkSession.builder.getOrCreate() try await spark.streams.awaitAnyTermination(1) - await #expect(throws: SparkConnectError.InvalidArgumentException) { + await #expect(throws: SparkConnectError.InvalidArgument) { try await spark.streams.awaitAnyTermination(-1) } await spark.stop()