add expr: (#198)

This commit is contained in:
2149
2021-08-31 15:42:09 +08:00
committed by wangzelin.wzl
parent 4c03c7163e
commit f8b75754ce
20 changed files with 3673 additions and 109 deletions

View File

@ -0,0 +1,373 @@
--disable_query_log
set @@session.explicit_defaults_for_timestamp=off;
--enable_query_log
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
#
# Testing of misc functions
#
select inet_ntoa(null),inet_aton(null);
select inet_ntoa(inet_aton("255.255.255.255.255.255.255.255"));
select inet_aton("255.255.255.255.255"),inet_aton("255.255.1.255"),inet_aton("0.1.255");
select inet_ntoa(1099511627775),inet_ntoa(4294902271),inet_ntoa(511);
select inet_aton("0.255.255.255.255");
select inet_aton("255.255.255.0000");
select hex(inet_aton('127'));
select hex(inet_aton('127.1'));
select hex(inet_aton('127.1.1'));
select inet_aton("122.256");
select inet_aton("122.226.");
select inet_aton("");
--echo
--echo # -- INET6_ATON: checking NULL, invalid types, out-of range values...
--echo
SELECT INET6_ATON(NULL) IS NULL;
SELECT INET6_ATON(123) IS NULL;
SELECT INET6_ATON(123.45) IS NULL;
SELECT INET6_ATON(str_to_date('2014,2,28 09', '%Y,%m,%d %h')) IS NULL;
SELECT INET6_ATON('1.2.3') IS NULL;
SELECT INET6_ATON('1.2.3.') IS NULL;
SELECT INET6_ATON('1..3.4') IS NULL;
SELECT INET6_ATON('-1.2.3.4') IS NULL;
SELECT INET6_ATON('1.2.3.256') IS NULL;
SELECT INET6_ATON('1.2.3.4.5') IS NULL;
SELECT INET6_ATON('0001.2.3.4') IS NULL;
SELECT INET6_ATON('0x1.2.3.4') IS NULL;
SELECT INET6_ATON('a.2.3.4') IS NULL;
SELECT INET6_ATON('1.2.3.4:80') IS NULL;
SELECT INET6_ATON('1.2.3.4/32') IS NULL;
SELECT INET6_ATON('oceanbase') IS NULL;
SELECT INET6_ATON(':::') IS NULL;
SELECT INET6_ATON(':1:2:3') IS NULL;
SELECT INET6_ATON('1:2:3:') IS NULL;
SELECT INET6_ATON(':1::2:3') IS NULL;
SELECT INET6_ATON('1::2:3:') IS NULL;
SELECT INET6_ATON('::00001') IS NULL;
SELECT INET6_ATON('::00001:2') IS NULL;
SELECT INET6_ATON('::12345') IS NULL;
SELECT INET6_ATON('1020::3040::5060') IS NULL;
SELECT INET6_ATON('::ABCZ') IS NULL;
SELECT INET6_ATON('::0x1.2.3.4') IS NULL;
SELECT INET6_ATON('::1.0x2.3.4') IS NULL;
SELECT INET6_ATON('::a.b.c.d') IS NULL;
SELECT INET6_ATON('::FFFF:0x1.2.3.4') IS NULL;
SELECT INET6_ATON('::FFFF:1.0x2.3.4') IS NULL;
SELECT INET6_ATON('::FFFF:a.b.c.d') IS NULL;
SELECT INET6_ATON('::1.2.3.4:ABCD') IS NULL;
--echo # NOTE: such addresses are supported because getaddrinfo() supports them.
--echo # This is just to record the current behaviour.
SELECT HEX(INET6_ATON('::ABCD:1.2.3.4'));
--echo
--echo # -- INET6_ATON: checking binary representation...
--echo
SELECT HEX(INET6_ATON('0.0.0.0'));
SELECT HEX(INET6_ATON('00.00.00.00'));
SELECT HEX(INET6_ATON('000.000.000.000'));
SELECT HEX(INET6_ATON('1.2.3.4'));
SELECT HEX(INET6_ATON('01.02.03.04'));
SELECT HEX(INET6_ATON('001.002.003.004'));
SELECT HEX(INET6_ATON('255.255.255.255'));
SELECT HEX(INET6_ATON('::'));
SELECT HEX(INET6_ATON('0::0'));
SELECT HEX(INET6_ATON('1::2'));
SELECT HEX(INET6_ATON('0::'));
SELECT HEX(INET6_ATON('1::'));
SELECT HEX(INET6_ATON('::0'));
SELECT HEX(INET6_ATON('::1'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('::2:3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('1::3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('1:2::4:5:6:7:8'));
SELECT HEX(INET6_ATON('1:2:3::5:6:7:8'));
SELECT HEX(INET6_ATON('1:2:3:4::6:7:8'));
SELECT HEX(INET6_ATON('1:2:3:4:5::7:8'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6::8'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6:7::'));
SELECT HEX(INET6_ATON('0000:0000::0000:0001'));
SELECT HEX(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed'));
SELECT HEX(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001'));
SELECT HEX(INET6_ATON('::C0A8:0102'));
SELECT HEX(INET6_ATON('::c0a8:0102'));
SELECT HEX(INET6_ATON('::192.168.1.2'));
SELECT HEX(INET6_ATON('::FfFf:C0a8:0102'));
SELECT HEX(INET6_ATON('::ffff:c0a8:0102'));
SELECT HEX(INET6_ATON('::ffff:192.168.1.2'));
SELECT HEX(INET6_ATON('::01.2.3.4'));
SELECT HEX(INET6_ATON('::1.02.3.4'));
SELECT HEX(INET6_ATON('::1.2.03.4'));
SELECT HEX(INET6_ATON('::1.2.3.04'));
SELECT HEX(INET6_ATON('::1.2.3.00'));
SELECT HEX(INET6_ATON('::FFFF:01.2.3.4'));
SELECT HEX(INET6_ATON('::FFFF:1.02.3.4'));
SELECT HEX(INET6_ATON('::FFFF:1.2.03.4'));
SELECT HEX(INET6_ATON('::FFFF:1.2.3.04'));
SELECT HEX(INET6_ATON('::FFFF:1.2.3.00'));
--echo
--echo # -- INET6_ATON: checking the length is either 4 or 16...
--echo
SELECT LENGTH(INET6_ATON('0.0.0.0'));
SELECT LENGTH(INET6_ATON('255.255.255.255'));
SELECT LENGTH(INET6_ATON('::'));
SELECT LENGTH(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010'));
--echo
--echo # -- INET6_NTOA: checking NULL, invalid types, out-of range values...
--echo
SELECT INET6_NTOA(NULL);
SELECT INET6_NTOA(123);
SELECT INET6_NTOA(123.456);
SELECT INET6_NTOA(str_to_date('2014,2,28 09', '%Y,%m,%d %h'));
SELECT INET6_NTOA(UNHEX('C0A801')); # 3 bytes -> NULL
SELECT INET6_NTOA(UNHEX('C0A80102')); # 4 bytes -> 192.168.1.2
SELECT INET6_NTOA(UNHEX('C0A8010203')); # 5 bytes -> NULL
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F')); # 15 bytes -> NULL
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F10')); # 16 bytes -> IP
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F1011')); # 17 bytes -> NULL
SELECT INET6_NTOA('1234'), INET6_NTOA(BINARY('1234'));
SELECT INET6_NTOA('0123456789abcdef'), INET6_NTOA(BINARY('0123456789abcdef'));
--echo
--echo # -- Checking double-conversion...
--echo
SELECT INET6_NTOA(INET6_ATON('::'));
SELECT INET6_NTOA(INET6_ATON('0::0'));
SELECT INET6_NTOA(INET6_ATON('1::2'));
SELECT INET6_NTOA(INET6_ATON('0::'));
SELECT INET6_NTOA(INET6_ATON('1::'));
SELECT INET6_NTOA(INET6_ATON('::0'));
SELECT INET6_NTOA(INET6_ATON('::1'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('::2:3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1::3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2::4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3::5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4::6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5::7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6::8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7::'));
SELECT INET6_NTOA(INET6_ATON('0000:0000::0000:0001'));
SELECT INET6_NTOA(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:1:1:255.255.255.255'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0001:0001:255.255.255.255'));
SELECT INET6_NTOA(INET6_ATON('::C0A8:0102'));
SELECT INET6_NTOA(INET6_ATON('::c0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::192.168.1.2'));
SELECT INET6_NTOA(INET6_ATON('::FfFf:C0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::ffff:c0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::ffff:192.168.1.2'));
SELECT INET6_NTOA(INET6_ATON('::01.2.3.4'));
SELECT INET6_NTOA(INET6_ATON('::1.02.3.4'));
SELECT INET6_NTOA(INET6_ATON('::1.2.03.4'));
SELECT INET6_NTOA(INET6_ATON('::1.2.3.04'));
SELECT INET6_NTOA(INET6_ATON('::1.2.3.00'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:01.2.3.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.02.3.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.03.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.04'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.00'));
--echo
--echo # -- Comparing INET_ATON() and INET6_ATON()...
--echo
SELECT HEX(INET_ATON('192.168.1.2'));
SELECT HEX(INET6_ATON('192.168.1.2'));
SELECT HEX(INET_ATON('255.255.255.255'));
SELECT HEX(INET6_ATON('255.255.255.255'));
SELECT HEX(INET_ATON('192.168.08.2'));
SELECT HEX(INET6_ATON('192.168.08.2'));
SELECT HEX(INET_ATON('192.168.0x8.2'));
SELECT HEX(INET6_ATON('192.168.0x8.2'));
SELECT HEX(INET_ATON('1.2.255'));
SELECT HEX(INET6_ATON('1.2.255'));
SELECT HEX(INET_ATON('1.2.256'));
SELECT HEX(INET6_ATON('1.2.256'));
SELECT HEX(INET_ATON('1.0002.3.4'));
SELECT HEX(INET6_ATON('1.0002.3.4'));
SELECT HEX(INET_ATON('1.2.3.4.5'));
SELECT HEX(INET6_ATON('1.2.3.4.5'));
--echo
--echo # -- Checking mix of INET- and INET6- functions...
--echo
SELECT HEX(INET6_ATON(INET_NTOA(INET_ATON('1.2.3.4')))) AS x;
--echo
--echo # -- Checking IS_IPV4() / IS_IPV6()...
--echo
SELECT IS_IPV4(NULL);
SELECT IS_IPV4(1);
SELECT IS_IPV4(1.0);
SELECT IS_IPV4('1.2.3.4');
SELECT IS_IPV4('001.02.000.255');
SELECT IS_IPV4('::1.2.0.255');
SELECT IS_IPV4('::1');
SELECT IS_IPV4(BINARY('1.2.3.4'));
SELECT IS_IPV6(NULL);
SELECT IS_IPV6(1);
SELECT IS_IPV6(1.0);
SELECT IS_IPV6('1.2.3.4');
SELECT IS_IPV6('001.02.000.255');
SELECT IS_IPV6('::001.02.000.255');
SELECT IS_IPV6('::1.2.0.255');
SELECT IS_IPV6('::1');
SELECT IS_IPV6('0000:0000:0000:0000:0000:0000:0000:0001');
SELECT IS_IPV6(BINARY('0000:0000:0000:0000:0000:0000:0000:0001'));
--echo
--echo # -- Checking IS_IPV4_MAPPED() and IS_IPV4_COMPAT()...
--echo
SELECT IS_IPV4_MAPPED(NULL), IS_IPV4_COMPAT(NULL);
SELECT IS_IPV4_MAPPED(INET6_ATON('1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::FFFF:1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::FFFF:1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::ABCD:1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::ABCD:1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::1')),
IS_IPV4_COMPAT(INET6_ATON('::1'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::')),
IS_IPV4_COMPAT(INET6_ATON('::'));
# NOTE: IS_IPV4_COMPAT() / IS_IPV4_MAPPED() could work with "regular strings in
# binary collation" too, but there is no way to create a "regular string"
# starting with \0.
--echo
--echo # -- Checking IS_IPV4_COMPAT()...
--echo
--echo
--echo # -- Working with a table...
--echo
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
--enable_warnings
CREATE TABLE t1(ip INT UNSIGNED);
CREATE TABLE t2(ip VARBINARY(16));
--echo
INSERT INTO t1 VALUES
(INET_ATON('1.2.3.4')), (INET_ATON('255.255.255.255'));
SELECT INET_NTOA(ip) FROM t1;
--echo
INSERT INTO t2 VALUES
(INET6_ATON('1.2.3.4')), (INET6_ATON('255.255.255.255')),
(INET6_ATON('::1.2.3.4')), (INET6_ATON('::ffff:255.255.255.255')),
(INET6_ATON('::')), (INET6_ATON('::1')),
(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010'));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
--echo
--echo # test different sql mode
--echo
set sql_mode = STRICT_TRANS_TABLES;
select @@sql_mode;
DELETE FROM t2;
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.256"));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.226."));
--error 1210
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
--echo
set sql_mode = STRICT_ALL_TABLES;
select @@sql_mode;
DELETE FROM t2;
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.256"));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.226."));
--error 1210
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
--echo
set sql_mode = '';
select @@sql_mode;
DELETE FROM t2;
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
INSERT INTO t2 VALUES (inet_aton("122.256"));
INSERT INTO t2 VALUES (inet_aton("122.226."));
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
DROP TABLE t1;
DROP TABLE t2;
--echo
--echo # -- Done misc test.
--echo
--echo #
--echo # End of tests
--echo #

View File

@ -0,0 +1,383 @@
connect (sys_jianhua, $OBMYSQL_MS0,root@sys,,oceanbase,$OBMYSQL_PORT);
connection sys_jianhua;
alter system set _enable_static_typing_engine = false;
connect(mysql_jianhua, $OBMYSQL_MS0,root@mysql,'',test,$OBMYSQL_PORT);
connection mysql_jianhua;
--disable_query_log
set @@session.explicit_defaults_for_timestamp=off;
--enable_query_log
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
#
# Testing of misc functions
#
select inet_ntoa(null),inet_aton(null);
select inet_ntoa(inet_aton("255.255.255.255.255.255.255.255"));
select inet_aton("255.255.255.255.255"),inet_aton("255.255.1.255"),inet_aton("0.1.255");
select inet_ntoa(1099511627775),inet_ntoa(4294902271),inet_ntoa(511);
select inet_aton("0.255.255.255.255");
select inet_aton("255.255.255.0000");
select hex(inet_aton('127'));
select hex(inet_aton('127.1'));
select hex(inet_aton('127.1.1'));
select inet_aton("122.256");
select inet_aton("122.226.");
select inet_aton("");
--echo
--echo # -- INET6_ATON: checking NULL, invalid types, out-of range values...
--echo
SELECT INET6_ATON(NULL) IS NULL;
SELECT INET6_ATON(123) IS NULL;
SELECT INET6_ATON(123.45) IS NULL;
SELECT INET6_ATON(str_to_date('2014,2,28 09', '%Y,%m,%d %h')) IS NULL;
SELECT INET6_ATON('1.2.3') IS NULL;
SELECT INET6_ATON('1.2.3.') IS NULL;
SELECT INET6_ATON('1..3.4') IS NULL;
SELECT INET6_ATON('-1.2.3.4') IS NULL;
SELECT INET6_ATON('1.2.3.256') IS NULL;
SELECT INET6_ATON('1.2.3.4.5') IS NULL;
SELECT INET6_ATON('0001.2.3.4') IS NULL;
SELECT INET6_ATON('0x1.2.3.4') IS NULL;
SELECT INET6_ATON('a.2.3.4') IS NULL;
SELECT INET6_ATON('1.2.3.4:80') IS NULL;
SELECT INET6_ATON('1.2.3.4/32') IS NULL;
SELECT INET6_ATON('oceanbase') IS NULL;
SELECT INET6_ATON(':::') IS NULL;
SELECT INET6_ATON(':1:2:3') IS NULL;
SELECT INET6_ATON('1:2:3:') IS NULL;
SELECT INET6_ATON(':1::2:3') IS NULL;
SELECT INET6_ATON('1::2:3:') IS NULL;
SELECT INET6_ATON('::00001') IS NULL;
SELECT INET6_ATON('::00001:2') IS NULL;
SELECT INET6_ATON('::12345') IS NULL;
SELECT INET6_ATON('1020::3040::5060') IS NULL;
SELECT INET6_ATON('::ABCZ') IS NULL;
SELECT INET6_ATON('::0x1.2.3.4') IS NULL;
SELECT INET6_ATON('::1.0x2.3.4') IS NULL;
SELECT INET6_ATON('::a.b.c.d') IS NULL;
SELECT INET6_ATON('::FFFF:0x1.2.3.4') IS NULL;
SELECT INET6_ATON('::FFFF:1.0x2.3.4') IS NULL;
SELECT INET6_ATON('::FFFF:a.b.c.d') IS NULL;
SELECT INET6_ATON('::1.2.3.4:ABCD') IS NULL;
--echo # NOTE: such addresses are supported because getaddrinfo() supports them.
--echo # This is just to record the current behaviour.
SELECT HEX(INET6_ATON('::ABCD:1.2.3.4'));
--echo
--echo # -- INET6_ATON: checking binary representation...
--echo
SELECT HEX(INET6_ATON('0.0.0.0'));
SELECT HEX(INET6_ATON('00.00.00.00'));
SELECT HEX(INET6_ATON('000.000.000.000'));
SELECT HEX(INET6_ATON('1.2.3.4'));
SELECT HEX(INET6_ATON('01.02.03.04'));
SELECT HEX(INET6_ATON('001.002.003.004'));
SELECT HEX(INET6_ATON('255.255.255.255'));
SELECT HEX(INET6_ATON('::'));
SELECT HEX(INET6_ATON('0::0'));
SELECT HEX(INET6_ATON('1::2'));
SELECT HEX(INET6_ATON('0::'));
SELECT HEX(INET6_ATON('1::'));
SELECT HEX(INET6_ATON('::0'));
SELECT HEX(INET6_ATON('::1'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('::2:3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('1::3:4:5:6:7:8'));
SELECT HEX(INET6_ATON('1:2::4:5:6:7:8'));
SELECT HEX(INET6_ATON('1:2:3::5:6:7:8'));
SELECT HEX(INET6_ATON('1:2:3:4::6:7:8'));
SELECT HEX(INET6_ATON('1:2:3:4:5::7:8'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6::8'));
SELECT HEX(INET6_ATON('1:2:3:4:5:6:7::'));
SELECT HEX(INET6_ATON('0000:0000::0000:0001'));
SELECT HEX(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed'));
SELECT HEX(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001'));
SELECT HEX(INET6_ATON('::C0A8:0102'));
SELECT HEX(INET6_ATON('::c0a8:0102'));
SELECT HEX(INET6_ATON('::192.168.1.2'));
SELECT HEX(INET6_ATON('::FfFf:C0a8:0102'));
SELECT HEX(INET6_ATON('::ffff:c0a8:0102'));
SELECT HEX(INET6_ATON('::ffff:192.168.1.2'));
SELECT HEX(INET6_ATON('::01.2.3.4'));
SELECT HEX(INET6_ATON('::1.02.3.4'));
SELECT HEX(INET6_ATON('::1.2.03.4'));
SELECT HEX(INET6_ATON('::1.2.3.04'));
SELECT HEX(INET6_ATON('::1.2.3.00'));
SELECT HEX(INET6_ATON('::FFFF:01.2.3.4'));
SELECT HEX(INET6_ATON('::FFFF:1.02.3.4'));
SELECT HEX(INET6_ATON('::FFFF:1.2.03.4'));
SELECT HEX(INET6_ATON('::FFFF:1.2.3.04'));
SELECT HEX(INET6_ATON('::FFFF:1.2.3.00'));
--echo
--echo # -- INET6_ATON: checking the length is either 4 or 16...
--echo
SELECT LENGTH(INET6_ATON('0.0.0.0'));
SELECT LENGTH(INET6_ATON('255.255.255.255'));
SELECT LENGTH(INET6_ATON('::'));
SELECT LENGTH(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010'));
--echo
--echo # -- INET6_NTOA: checking NULL, invalid types, out-of range values...
--echo
SELECT INET6_NTOA(NULL);
SELECT INET6_NTOA(123);
SELECT INET6_NTOA(123.456);
SELECT INET6_NTOA(str_to_date('2014,2,28 09', '%Y,%m,%d %h'));
SELECT INET6_NTOA(UNHEX('C0A801')); # 3 bytes -> NULL
SELECT INET6_NTOA(UNHEX('C0A80102')); # 4 bytes -> 192.168.1.2
SELECT INET6_NTOA(UNHEX('C0A8010203')); # 5 bytes -> NULL
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F')); # 15 bytes -> NULL
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F10')); # 16 bytes -> IP
SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F1011')); # 17 bytes -> NULL
SELECT INET6_NTOA('1234'), INET6_NTOA(BINARY('1234'));
SELECT INET6_NTOA('0123456789abcdef'), INET6_NTOA(BINARY('0123456789abcdef'));
--echo
--echo # -- Checking double-conversion...
--echo
SELECT INET6_NTOA(INET6_ATON('::'));
SELECT INET6_NTOA(INET6_ATON('0::0'));
SELECT INET6_NTOA(INET6_ATON('1::2'));
SELECT INET6_NTOA(INET6_ATON('0::'));
SELECT INET6_NTOA(INET6_ATON('1::'));
SELECT INET6_NTOA(INET6_ATON('::0'));
SELECT INET6_NTOA(INET6_ATON('::1'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('::2:3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1::3:4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2::4:5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3::5:6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4::6:7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5::7:8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6::8'));
SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7::'));
SELECT INET6_NTOA(INET6_ATON('0000:0000::0000:0001'));
SELECT INET6_NTOA(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:1:1:255.255.255.255'));
SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0001:0001:255.255.255.255'));
SELECT INET6_NTOA(INET6_ATON('::C0A8:0102'));
SELECT INET6_NTOA(INET6_ATON('::c0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::192.168.1.2'));
SELECT INET6_NTOA(INET6_ATON('::FfFf:C0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::ffff:c0a8:0102'));
SELECT INET6_NTOA(INET6_ATON('::ffff:192.168.1.2'));
SELECT INET6_NTOA(INET6_ATON('::01.2.3.4'));
SELECT INET6_NTOA(INET6_ATON('::1.02.3.4'));
SELECT INET6_NTOA(INET6_ATON('::1.2.03.4'));
SELECT INET6_NTOA(INET6_ATON('::1.2.3.04'));
SELECT INET6_NTOA(INET6_ATON('::1.2.3.00'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:01.2.3.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.02.3.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.03.4'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.04'));
SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.00'));
--echo
--echo # -- Comparing INET_ATON() and INET6_ATON()...
--echo
SELECT HEX(INET_ATON('192.168.1.2'));
SELECT HEX(INET6_ATON('192.168.1.2'));
SELECT HEX(INET_ATON('255.255.255.255'));
SELECT HEX(INET6_ATON('255.255.255.255'));
SELECT HEX(INET_ATON('192.168.08.2'));
SELECT HEX(INET6_ATON('192.168.08.2'));
SELECT HEX(INET_ATON('192.168.0x8.2'));
SELECT HEX(INET6_ATON('192.168.0x8.2'));
SELECT HEX(INET_ATON('1.2.255'));
SELECT HEX(INET6_ATON('1.2.255'));
SELECT HEX(INET_ATON('1.2.256'));
SELECT HEX(INET6_ATON('1.2.256'));
SELECT HEX(INET_ATON('1.0002.3.4'));
SELECT HEX(INET6_ATON('1.0002.3.4'));
SELECT HEX(INET_ATON('1.2.3.4.5'));
SELECT HEX(INET6_ATON('1.2.3.4.5'));
--echo
--echo # -- Checking mix of INET- and INET6- functions...
--echo
SELECT HEX(INET6_ATON(INET_NTOA(INET_ATON('1.2.3.4')))) AS x;
--echo
--echo # -- Checking IS_IPV4() / IS_IPV6()...
--echo
SELECT IS_IPV4(NULL);
SELECT IS_IPV4(1);
SELECT IS_IPV4(1.0);
SELECT IS_IPV4('1.2.3.4');
SELECT IS_IPV4('001.02.000.255');
SELECT IS_IPV4('::1.2.0.255');
SELECT IS_IPV4('::1');
SELECT IS_IPV4(BINARY('1.2.3.4'));
SELECT IS_IPV6(NULL);
SELECT IS_IPV6(1);
SELECT IS_IPV6(1.0);
SELECT IS_IPV6('1.2.3.4');
SELECT IS_IPV6('001.02.000.255');
SELECT IS_IPV6('::001.02.000.255');
SELECT IS_IPV6('::1.2.0.255');
SELECT IS_IPV6('::1');
SELECT IS_IPV6('0000:0000:0000:0000:0000:0000:0000:0001');
SELECT IS_IPV6(BINARY('0000:0000:0000:0000:0000:0000:0000:0001'));
--echo
--echo # -- Checking IS_IPV4_MAPPED() and IS_IPV4_COMPAT()...
--echo
SELECT IS_IPV4_MAPPED(NULL), IS_IPV4_COMPAT(NULL);
SELECT IS_IPV4_MAPPED(INET6_ATON('1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::FFFF:1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::FFFF:1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::ABCD:1.2.3.4')),
IS_IPV4_COMPAT(INET6_ATON('::ABCD:1.2.3.4'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::1')),
IS_IPV4_COMPAT(INET6_ATON('::1'));
SELECT IS_IPV4_MAPPED(INET6_ATON('::')),
IS_IPV4_COMPAT(INET6_ATON('::'));
# NOTE: IS_IPV4_COMPAT() / IS_IPV4_MAPPED() could work with "regular strings in
# binary collation" too, but there is no way to create a "regular string"
# starting with \0.
--echo
--echo # -- Checking IS_IPV4_COMPAT()...
--echo
--echo
--echo # -- Working with a table...
--echo
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
--enable_warnings
CREATE TABLE t1(ip INT UNSIGNED);
CREATE TABLE t2(ip VARBINARY(16));
--echo
INSERT INTO t1 VALUES
(INET_ATON('1.2.3.4')), (INET_ATON('255.255.255.255'));
SELECT INET_NTOA(ip) FROM t1;
--echo
INSERT INTO t2 VALUES
(INET6_ATON('1.2.3.4')), (INET6_ATON('255.255.255.255')),
(INET6_ATON('::1.2.3.4')), (INET6_ATON('::ffff:255.255.255.255')),
(INET6_ATON('::')), (INET6_ATON('::1')),
(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010'));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
--echo
--echo # test different sql mode
--echo
set sql_mode = STRICT_TRANS_TABLES;
select @@sql_mode;
DELETE FROM t2;
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.256"));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.226."));
--error 1210
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
--echo
set sql_mode = STRICT_ALL_TABLES;
select @@sql_mode;
DELETE FROM t2;
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
--error 1210
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.256"));
--error 1210
INSERT INTO t2 VALUES (inet_aton("122.226."));
--error 1210
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
--echo
set sql_mode = '';
select @@sql_mode;
DELETE FROM t2;
INSERT INTO t2 VALUES (INET6_ATON('1.0002.3.4'));
INSERT INTO t2 VALUES (INET6_ATON('1.2.255'));
INSERT INTO t2 VALUES (INET6_ATON('1.2.256'));
INSERT INTO t2 VALUES (INET6_ATON('192.168.0x8.2'));
INSERT INTO t2 VALUES (inet_aton("122.256"));
INSERT INTO t2 VALUES (inet_aton("122.226."));
INSERT INTO t2 VALUES (inet_aton(""));
SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
SELECT INET6_ATON('1.0002.3.4');
SELECT INET6_ATON("");
DROP TABLE t1;
DROP TABLE t2;
--echo
--echo # -- Done misc test.
--echo
--echo #
--echo # End of tests
--echo #
connection sys_jianhua;
alter system set _enable_static_typing_engine = true;