Github user ueshin commented on a diff in the pull request:
https://github.com/apache/spark/pull/21246#discussion_r187839605
--- Diff:
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MaskExpressionsSuite.scala
---
@@ -0,0 +1,236 @@
+/*
+ * 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.
+ */
+
+package org.apache.spark.sql.catalyst.expressions
+
+import org.apache.spark.SparkFunSuite
+import org.apache.spark.sql.AnalysisException
+import org.apache.spark.sql.types.{IntegerType, StringType}
+
+class MaskExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper
{
+
+ test("mask") {
+ checkEvaluation(Mask(Literal("abcd-EFGH-8765-4321"), "U", "l", "#"),
"llll-UUUU-####-####")
+ checkEvaluation(
+ new Mask(Literal("abcd-EFGH-8765-4321"), Literal("U"), Literal("l"),
Literal("#")),
+ "llll-UUUU-####-####")
+ checkEvaluation(new Mask(Literal("abcd-EFGH-8765-4321"), Literal("U"),
Literal("l")),
+ "llll-UUUU-nnnn-nnnn")
+ checkEvaluation(new Mask(Literal("abcd-EFGH-8765-4321"),
Literal("U")), "xxxx-UUUU-nnnn-nnnn")
+ checkEvaluation(new Mask(Literal("abcd-EFGH-8765-4321")),
"xxxx-XXXX-nnnn-nnnn")
+ checkEvaluation(new Mask(Literal(null, StringType)), null)
+ checkEvaluation(Mask(Literal("abcd-EFGH-8765-4321"), null, "l", "#"),
"llll-XXXX-####-####")
+ checkEvaluation(new Mask(
+ Literal("abcd-EFGH-8765-4321"),
+ Literal(null, StringType),
+ Literal(null, StringType),
+ Literal(null, StringType)), "xxxx-XXXX-nnnn-nnnn")
+ checkEvaluation(new Mask(Literal("abcd-EFGH-8765-4321"),
Literal("Upper")),
+ "xxxx-UUUU-nnnn-nnnn")
+ checkEvaluation(new Mask(Literal("")), "")
+ checkEvaluation(new Mask(Literal("abcd-EFGH-8765-4321"), Literal("")),
"xxxx-XXXX-nnnn-nnnn")
+ checkEvaluation(Mask(Literal("abcd-EFGH-8765-4321"), "", "", ""),
"xxxx-XXXX-nnnn-nnnn")
+ // scalastyle:off nonascii
+ checkEvaluation(Mask(Literal("Ul9U"), "\u2200", null, null),
"\u2200xn\u2200")
+ checkEvaluation(new Mask(Literal("Hello World, ããã«ã¡ã¯, ð
"), Literal("ã"), Literal("ð¡½")),
+ "ãð¡½ð¡½ð¡½ð¡½ ãð¡½ð¡½ð¡½ð¡½, ããã«ã¡ã¯, ð ")
+ // scalastyle:on nonascii
+ intercept[AnalysisException] {
+ checkEvaluation(new Mask(Literal(""), Literal(1)), "")
+ }
+ }
+
+ test("mask_first_n") {
+ checkEvaluation(MaskFirstN(Literal("abcd-EFGH-8765-4321"), 6, "U",
"l", "#"),
+ "llll-UFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(
+ Literal("abcd-EFGH-8765-4321"), Literal(6), Literal("U"),
Literal("l"), Literal("#")),
+ "llll-UFGH-8765-4321")
+ checkEvaluation(
+ new MaskFirstN(Literal("abcd-EFGH-8765-4321"), Literal(6),
Literal("U"), Literal("l")),
+ "llll-UFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321"),
Literal(6), Literal("U")),
+ "xxxx-UFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321"),
Literal(6)),
+ "xxxx-XFGH-8765-4321")
+ intercept[AnalysisException] {
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321"),
Literal("U")), "")
+ }
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321")),
"xxxx-EFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(Literal(null, StringType)), null)
+ checkEvaluation(MaskFirstN(Literal("abcd-EFGH-8765-4321"), 4, "U",
"l", null),
+ "llll-EFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(
+ Literal("abcd-EFGH-8765-4321"),
+ Literal(null, IntegerType),
+ Literal(null, StringType),
+ Literal(null, StringType),
+ Literal(null, StringType)), "xxxx-EFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321"),
Literal(6), Literal("Upper")),
+ "xxxx-UFGH-8765-4321")
+ checkEvaluation(new MaskFirstN(Literal("")), "")
+ checkEvaluation(new MaskFirstN(Literal("abcd-EFGH-8765-4321"),
Literal(4), Literal("")),
+ "xxxx-EFGH-8765-4321")
+ checkEvaluation(MaskFirstN(Literal("abcd-EFGH-8765-4321"), 1000, "",
"", ""),
+ "xxxx-XXXX-nnnn-nnnn")
+ checkEvaluation(MaskFirstN(Literal("abcd-EFGH-8765-4321"), -1, "", "",
""),
+ "abcd-EFGH-8765-4321")
+ // scalastyle:off nonascii
+ checkEvaluation(MaskFirstN(Literal("Ul9U"), 2, "\u2200", null, null),
"\u2200x9U")
+ checkEvaluation(new MaskFirstN(Literal("ã, ð , Hello World"),
Literal(10)),
+ "ã, ð , Xxxxo World")
+ // scalastyle:on nonascii
+ }
+
+ test("mask_last_n") {
+ checkEvaluation(MaskLastN(Literal("abcd-EFGH-8765"), 6, "U", "l", "#"),
+ "abcd-EFGU-####")
+ checkEvaluation(new MaskLastN(
+ Literal("abcd-EFGH-8765"), Literal(6), Literal("U"), Literal("l"),
Literal("#")),
+ "abcd-EFGU-####")
+ checkEvaluation(
+ new MaskLastN(Literal("abcd-EFGH-8765"), Literal(6), Literal("U"),
Literal("l")),
+ "abcd-EFGU-nnnn")
+ checkEvaluation(
+ new MaskLastN(Literal("abcd-EFGH-8765"), Literal(6), Literal("U")),
+ "abcd-EFGU-nnnn")
+ checkEvaluation(
+ new MaskLastN(Literal("abcd-EFGH-8765"), Literal(6)),
+ "abcd-EFGX-nnnn")
+ intercept[AnalysisException] {
+ checkEvaluation(new MaskLastN(Literal("abcd-EFGH-8765"),
Literal("U")), "")
+ }
+ checkEvaluation(new MaskLastN(Literal("abcd-EFGH-8765-4321")),
"abcd-EFGH-8765-nnnn")
+ checkEvaluation(new MaskLastN(Literal(null, StringType)), null)
+ checkEvaluation(MaskLastN(Literal("abcd-EFGH-8765-4321"), 4, "U", "l",
null),
+ "abcd-EFGH-8765-nnnn")
+ checkEvaluation(new MaskLastN(
+ Literal("abcd-EFGH-8765-4321"),
+ Literal(null, IntegerType),
+ Literal(null, StringType),
+ Literal(null, StringType),
+ Literal(null, StringType)), "abcd-EFGH-8765-nnnn")
+ checkEvaluation(new MaskLastN(Literal("abcd-EFGH-8765-4321"),
Literal(12), Literal("Upper")),
+ "abcd-EFUU-nnnn-nnnn")
+ checkEvaluation(new MaskLastN(Literal("")), "")
+ checkEvaluation(new MaskLastN(Literal("abcd-EFGH-8765-4321"),
Literal(16), Literal("")),
+ "abcx-XXXX-nnnn-nnnn")
+ checkEvaluation(MaskLastN(Literal("abcd-EFGH-8765-4321"), 1000, "",
"", ""),
+ "xxxx-XXXX-nnnn-nnnn")
+ checkEvaluation(MaskLastN(Literal("abcd-EFGH-8765-4321"), -1, "", "",
""),
+ "abcd-EFGH-8765-4321")
+ // scalastyle:off nonascii
+ checkEvaluation(MaskLastN(Literal("Ul9U"), 2, "\u2200", null, null),
"Uln\u2200")
+ checkEvaluation(new MaskLastN(Literal("ã, ð , Hello World"),
Literal(10)),
--- End diff --
Can you include `ã` and `ð ` in the last N letters?
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]