You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by do...@apache.org on 2025/07/17 17:22:31 UTC

(spark-connect-swift) branch main updated: [SPARK-52847] Add `ConstraintTests`

This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/spark-connect-swift.git


The following commit(s) were added to refs/heads/main by this push:
     new ffdb2ea  [SPARK-52847] Add `ConstraintTests`
ffdb2ea is described below

commit ffdb2ea997122b2e81707887ecd252531860a624
Author: Dongjoon Hyun <do...@apache.org>
AuthorDate: Thu Jul 17 10:22:23 2025 -0700

    [SPARK-52847] Add `ConstraintTests`
    
    ### What changes were proposed in this pull request?
    
    This PR aims to add `ConstraintTests`.
    
    ### Why are the changes needed?
    
    To be ready for SPARK-51207 (SPIP: Constraints in DSv2) of Apache Spark 4.1.
    - https://github.com/apache/spark/pull/50496
    
    ### Does this PR introduce _any_ user-facing change?
    
    No. This is a test suite addition.
    
    ### How was this patch tested?
    
    Pass the CIs.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    No.
    
    Closes #215 from dongjoon-hyun/SPARK-52847.
    
    Authored-by: Dongjoon Hyun <do...@apache.org>
    Signed-off-by: Dongjoon Hyun <do...@apache.org>
---
 Tests/SparkConnectTests/ConstraintTests.swift | 85 +++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/Tests/SparkConnectTests/ConstraintTests.swift b/Tests/SparkConnectTests/ConstraintTests.swift
new file mode 100644
index 0000000..05568d9
--- /dev/null
+++ b/Tests/SparkConnectTests/ConstraintTests.swift
@@ -0,0 +1,85 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+import Foundation
+import SparkConnect
+import Testing
+
+/// A test suite for new syntaxes from SPARK-51207 (SPIP: Constraints in DSv2)
+/// For now, only syntax test is here because Apache Spark 4.1 and the corresponding Apache Iceberg is not released yet.
+@Suite(.serialized)
+struct ConstraintTests {
+
+  @Test
+  func primary_key() async throws {
+    let spark = try await SparkSession.builder.getOrCreate()
+    if await spark.version.starts(with: "4.1") {
+      let tableName = "TABLE_" + UUID().uuidString.replacingOccurrences(of: "-", with: "")
+      try await SQLHelper.withTable(spark, tableName)({
+        try await spark.sql("CREATE TABLE \(tableName)(a INT, PRIMARY KEY(a)) USING ORC").count()
+        try await spark.sql("INSERT INTO \(tableName) VALUES (1), (2)").count()
+      })
+    }
+    await spark.stop()
+  }
+
+  @Test
+  func foreign_key() async throws {
+    let spark = try await SparkSession.builder.getOrCreate()
+    if await spark.version.starts(with: "4.1") {
+      let tableName1 = "TABLE_" + UUID().uuidString.replacingOccurrences(of: "-", with: "")
+      let tableName2 = "TABLE_" + UUID().uuidString.replacingOccurrences(of: "-", with: "")
+      try await SQLHelper.withTable(spark, tableName1, tableName2)({
+        try await spark.sql("CREATE TABLE \(tableName1)(id INT) USING ORC").count()
+        try await spark.sql(
+          "CREATE TABLE \(tableName2)(fk INT, FOREIGN KEY(fk) REFERENCES \(tableName2)(id)) USING ORC"
+        ).count()
+      })
+    }
+    await spark.stop()
+  }
+
+  @Test
+  func unique() async throws {
+    let spark = try await SparkSession.builder.getOrCreate()
+    if await spark.version.starts(with: "4.1") {
+      let tableName = "TABLE_" + UUID().uuidString.replacingOccurrences(of: "-", with: "")
+      try await SQLHelper.withTable(spark, tableName)({
+        try await spark.sql("CREATE TABLE \(tableName)(a INT UNIQUE) USING ORC").count()
+        try await spark.sql("INSERT INTO \(tableName) VALUES (1), (2)").count()
+      })
+    }
+    await spark.stop()
+  }
+
+  @Test
+  func check() async throws {
+    let spark = try await SparkSession.builder.getOrCreate()
+    if await spark.version.starts(with: "4.1") {
+      let tableName = "TABLE_" + UUID().uuidString.replacingOccurrences(of: "-", with: "")
+      try await SQLHelper.withTable(spark, tableName)({
+        try await spark.sql(
+          "CREATE TABLE \(tableName)(a INT, CONSTRAINT c1 CHECK (a > 0)) USING ORC"
+        ).count()
+        try await spark.sql("INSERT INTO \(tableName) VALUES (-1)").count()
+      })
+    }
+    await spark.stop()
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org