@@ -506,6 +506,52 @@ class CometExpressionSuite extends CometTestBase with AdaptiveSparkPlanHelper {
506506 }
507507 }
508508
509+ test(" LEFT function" ) {
510+ withParquetTable((0 until 10 ).map(i => (s " test $i" , i)), " tbl" ) {
511+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 2) FROM tbl" )
512+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 4) FROM tbl" )
513+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 0) FROM tbl" )
514+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, -1) FROM tbl" )
515+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 100) FROM tbl" )
516+ checkSparkAnswerAndOperator(" SELECT LEFT(CAST(NULL AS STRING), 2) FROM tbl LIMIT 1" )
517+ }
518+ }
519+
520+ test(" LEFT function with unicode" ) {
521+ val data = Seq (" café" , " hello世界" , " 😀emoji" , " తెలుగు" )
522+ withParquetTable(data.zipWithIndex, " unicode_tbl" ) {
523+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 2) FROM unicode_tbl" )
524+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 3) FROM unicode_tbl" )
525+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 0) FROM unicode_tbl" )
526+ }
527+ }
528+
529+ test(" LEFT function equivalence with SUBSTRING" ) {
530+ withParquetTable((0 until 20 ).map(i => Tuple1 (s " test $i" )), " equiv_tbl" ) {
531+ val df = spark.sql("""
532+ SELECT _1,
533+ LEFT(_1, 3) as left_result,
534+ SUBSTRING(_1, 1, 3) as substring_result
535+ FROM equiv_tbl
536+ """ )
537+ checkAnswer(
538+ df.filter(
539+ " left_result != substring_result OR " +
540+ " (left_result IS NULL AND substring_result IS NOT NULL) OR " +
541+ " (left_result IS NOT NULL AND substring_result IS NULL)" ),
542+ Seq .empty)
543+ }
544+ }
545+
546+ test(" LEFT function with dictionary" ) {
547+ val data = (0 until 1000 )
548+ .map(_ % 5 )
549+ .map(i => s " value $i" )
550+ withParquetTable(data.zipWithIndex, " dict_tbl" ) {
551+ checkSparkAnswerAndOperator(" SELECT _1, LEFT(_1, 3) FROM dict_tbl" )
552+ }
553+ }
554+
509555 test(" hour, minute, second" ) {
510556 Seq (true , false ).foreach { dictionaryEnabled =>
511557 withTempDir { dir =>
0 commit comments