@@ -1590,4 +1590,96 @@ trait AlterTableTests extends SharedSparkSession with QueryErrorsBase {
1590
1590
Row (1 , Map (Row (20 , null ) -> Row (" d" , null )), " sales" )))
1591
1591
}
1592
1592
}
1593
+
1594
+ test(" Add column with special column name default value conflicting with column name" ) {
1595
+ withSQLConf(SQLConf .DEFAULT_COLUMN_ALLOWED_PROVIDERS .key -> s " $v2Format, " ) {
1596
+ val t = fullTableName(" table_name" )
1597
+ // There is a default value that is a special column name 'current_timestamp'.
1598
+ withTable(t) {
1599
+ sql(s " CREATE TABLE $t (i boolean) USING $v2Format" )
1600
+ sql(s " ALTER TABLE $t ADD COLUMN s timestamp DEFAULT current_timestamp " )
1601
+ sql(s " INSERT INTO $t(i) VALUES(false) " )
1602
+ val result = sql(s " SELECT * FROM $t" ).collect()
1603
+ assert(result.length == 1 )
1604
+ assert(! result(0 ).getBoolean(0 ))
1605
+ assert(result(0 ).getTimestamp(1 ) != null )
1606
+ }
1607
+ // There is a default value with special column name 'current_user' but in uppercase.
1608
+ withTable(t) {
1609
+ sql(s " CREATE TABLE $t (i boolean) USING $v2Format" )
1610
+ sql(s " ALTER TABLE $t ADD COLUMN s string DEFAULT CURRENT_USER " )
1611
+ sql(s " INSERT INTO $t(i) VALUES(false) " )
1612
+ val result = sql(s " SELECT * FROM $t" ).collect()
1613
+ assert(result.length == 1 )
1614
+ assert(! result(0 ).getBoolean(0 ))
1615
+ assert(result(0 ).getString(1 ) != null )
1616
+ }
1617
+ // There is a default value with special column name same as current column name
1618
+ withTable(t) {
1619
+ sql(s " CREATE TABLE $t (b boolean) USING $v2Format" )
1620
+ sql(s " ALTER TABLE $t ADD COLUMN current_timestamp timestamp DEFAULT current_timestamp " )
1621
+ sql(s " INSERT INTO $t(b) VALUES(false) " )
1622
+ val result = sql(s " SELECT * FROM $t" ).collect()
1623
+ assert(result.length == 1 )
1624
+ assert(! result(0 ).getBoolean(0 ))
1625
+ assert(result(0 ).getTimestamp(1 ) != null )
1626
+ }
1627
+ // There is a default value with special column name same as another column name
1628
+ withTable(t) {
1629
+ sql(s " CREATE TABLE $t (current_date boolean) USING $v2Format" )
1630
+ sql(s " ALTER TABLE $t ADD COLUMN s date DEFAULT current_date " )
1631
+ sql(s " INSERT INTO $t(current_date) VALUES(false) " )
1632
+ val result = sql(s " SELECT * FROM $t" ).collect()
1633
+ assert(result.length == 1 )
1634
+ assert(! result(0 ).getBoolean(0 ))
1635
+ assert(result(0 ).getDate(1 ) != null )
1636
+ }
1637
+ }
1638
+ }
1639
+
1640
+ test(" Set default value for existing column conflicting with special column names" ) {
1641
+ withSQLConf(SQLConf .DEFAULT_COLUMN_ALLOWED_PROVIDERS .key -> s " $v2Format, " ) {
1642
+ val t = fullTableName(" table_name" )
1643
+ // There is a default value that is a special column name 'current_timestamp'.
1644
+ withTable(t) {
1645
+ sql(s " CREATE TABLE $t (i boolean, s timestamp) USING $v2Format" )
1646
+ sql(s " ALTER TABLE $t ALTER COLUMN s SET DEFAULT current_timestamp " )
1647
+ sql(s " INSERT INTO $t(i) VALUES(false) " )
1648
+ val result = sql(s " SELECT * FROM $t" ).collect()
1649
+ assert(result.length == 1 )
1650
+ assert(! result(0 ).getBoolean(0 ))
1651
+ assert(result(0 ).getTimestamp(1 ) != null )
1652
+ }
1653
+ // There is a default value with special column name 'current_user' but in uppercase.
1654
+ withTable(t) {
1655
+ sql(s " CREATE TABLE $t (i boolean, s string) USING $v2Format" )
1656
+ sql(s " ALTER TABLE $t ALTER COLUMN s SET DEFAULT CURRENT_USER " )
1657
+ sql(s " INSERT INTO $t(i) VALUES(false) " )
1658
+ val result = sql(s " SELECT * FROM $t" ).collect()
1659
+ assert(result.length == 1 )
1660
+ assert(! result(0 ).getBoolean(0 ))
1661
+ assert(result(0 ).getString(1 ) != null )
1662
+ }
1663
+ // There is a default value with special column name same as current column name
1664
+ withTable(t) {
1665
+ sql(s " CREATE TABLE $t (current_timestamp timestamp, b boolean) USING $v2Format" )
1666
+ sql(s " ALTER TABLE $t ALTER COLUMN current_timestamp SET DEFAULT current_timestamp " )
1667
+ sql(s " INSERT INTO $t(b) VALUES(false) " )
1668
+ val result = sql(s " SELECT * FROM $t" ).collect()
1669
+ assert(result.length == 1 )
1670
+ assert(result(0 ).getTimestamp(0 ) != null )
1671
+ assert(! result(0 ).getBoolean(1 ))
1672
+ }
1673
+ // There is a default value with special column name same as another column name
1674
+ withTable(t) {
1675
+ sql(s " CREATE TABLE $t (current_date boolean, s date) USING $v2Format" )
1676
+ sql(s " ALTER TABLE $t ALTER COLUMN s SET DEFAULT current_date " )
1677
+ sql(s " INSERT INTO $t(current_date) VALUES(false) " )
1678
+ val result = sql(s " SELECT * FROM $t" ).collect()
1679
+ assert(result.length == 1 )
1680
+ assert(! result(0 ).getBoolean(0 ))
1681
+ assert(result(0 ).getDate(1 ) != null )
1682
+ }
1683
+ }
1684
+ }
1593
1685
}
0 commit comments