Skip to content

Commit

Permalink
[fix](ip)fix default value for ip (#45194)
Browse files Browse the repository at this point in the history
before this pr: we do not support create table for IP type with default
value
like this:
```
mysql> CREATE TABLE table2
    -> (
    ->     col0 BIGINT  NOT NULL DEFAULT '1' ,
    ->     col24 IPV4  NULL DEFAULT '127.0.0.1'
    -> )
    -> DUPLICATE KEY(col0)
    -> DISTRIBUTED BY HASH(col0) BUCKETS 4
    -> PROPERTIES (
    ->     "replication_num" = "1"
    -> );
ERROR 1105 (HY000): errCode = 2, detailMessage = Unsupported type: ipv4
```
after this pr we deal with this problem
  • Loading branch information
amorynan authored and Your Name committed Dec 13, 2024
1 parent 384a1a4 commit 861afbb
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,12 @@ public static void validateDefaultValue(Type type, String defaultValue, DefaultV
case BOOLEAN:
new BoolLiteral(defaultValue);
break;
case IPV4:
new IPv4Literal(defaultValue);
break;
case IPV6:
new IPv6Literal(defaultValue);
break;
default:
throw new AnalysisException("Unsupported type: " + type);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public Expr clone() {

@Override
protected String toSqlImpl() {
return getStringValue();
return "\"" + getStringValue() + "\"";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private void checkValueValid(String ipv6) throws AnalysisException {

@Override
protected String toSqlImpl() {
return getStringValue();
return "\"" + getStringValue() + "\"";
}

@Override
Expand Down
31 changes: 31 additions & 0 deletions regression-test/data/datatype_p0/ip/test_ip_basic.out
Original file line number Diff line number Diff line change
Expand Up @@ -373,3 +373,34 @@ ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 4
-- !sql --
1 false 127.0.0.1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

-- !sql --
1 5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b 0.0.0.1
2 :: 127.0.0.1

-- !sql --
table_ip_default UNIQUE_KEYS col0 bigint bigint No true \N true
col4 ipv6 ipv6 Yes false :: NONE true
col24 ipv4 ipv4 Yes false 127.0.0.1 NONE true

-- !sql --
table_ip_default_like UNIQUE_KEYS col0 bigint bigint No true \N true
col4 ipv6 ipv6 Yes false :: NONE true
col24 ipv4 ipv4 Yes false 127.0.0.1 NONE true

-- !sql --
2

-- !sql --
1 5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b 0.0.0.1
2 :: 127.0.0.1

-- !sql --
0

-- !sql --
0

-- !sql --
1 5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b 0.0.0.1 :: 127.0.0.1
2 :: 127.0.0.1 :: 127.0.0.1

26 changes: 26 additions & 0 deletions regression-test/suites/datatype_p0/ip/test_ip_basic.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,30 @@ suite("test_ip_basic") {
qt_sql """ select * from table_ip where col0 = 1"""
sql """ Update table_ip set col25 = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' where col0 = 1 """
qt_sql """ select * from table_ip where col0 = 1"""

// test ip with default value
sql """ DROP TABLE IF EXISTS table_ip_default """
sql """ CREATE TABLE IF NOT EXISTS `table_ip_default` (`col0` bigint NOT NULL, `col4` ipv6 NULL DEFAULT "::", `col24` ipv4 NULL DEFAULT "127.0.0.1") ENGINE=OLAP UNIQUE KEY(`col0`) DISTRIBUTED BY HASH(`col0`) BUCKETS 4 PROPERTIES ("replication_allocation" = "tag.location.default: 1") """
sql """ insert into table_ip_default values (1, "5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b", "0.0.0.1") """
sql """ insert into table_ip_default(col0) values (2); """
qt_sql """ select * from table_ip_default order by col0"""
// add cases for default value to make sure in all cases, the default value is not lost.
// show create table
// desc table
// create table like
// insert into table
// alter new ip column with default value
def result = sql """ show create table table_ip_default """
log.info("show result : ${result}")
assertTrue(result.toString().containsIgnoreCase("`col4` ipv6 NULL DEFAULT \"::\""))
assertTrue(result.toString().containsIgnoreCase("`col24` ipv4 NULL DEFAULT \"127.0.0.1\""))
qt_sql """ desc table_ip_default all"""
sql """ DROP TABLE IF EXISTS table_ip_default_like """
sql """ create table table_ip_default_like like table_ip_default """
qt_sql """ desc table_ip_default_like all"""
qt_sql """ insert into table_ip_default_like select * from table_ip_default """
qt_sql """ select * from table_ip_default_like order by col0 """
qt_sql """ alter table table_ip_default_like add column col25 ipv6 NULL DEFAULT "::" """
qt_sql """ alter table table_ip_default_like add column col26 ipv4 NULL DEFAULT "127.0.0.1" """
qt_sql """ select * from table_ip_default_like order by col0 """
}

0 comments on commit 861afbb

Please sign in to comment.