From 4211b1cd48c0ff315d40c37817211b31114080e1 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 30 May 2014 16:19:00 +0400 Subject: MDEV-4051 INET6_ATON() and INET6_NTOA() Backporting functions from MySQL-5.6: - INET6_ATON() - INET6_NTOA() - IS_IPV4() - IS_IPV4_COMPAT() - IS_IPV4_MAPPED() - IS_IPV6() --- mysql-test/r/func_misc.result | 588 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 588 insertions(+) (limited to 'mysql-test/r/func_misc.result') diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index 0c4d22f89b7..5ae9ae1f0e8 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -584,3 +584,591 @@ ERROR 42000: Identifier name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # # End of 5.5 tests # + +# -- +# -- WL#5787: IPv6-capable INET_ATON and INET_NTOA functions. +# -- + +# -- INET6_ATON: checking NULL, invalid types, out-of range values... + +SELECT INET6_ATON(NULL) IS NULL; +INET6_ATON(NULL) IS NULL +1 +SELECT INET6_ATON(123) IS NULL; +INET6_ATON(123) IS NULL +1 +SELECT INET6_ATON(123.45) IS NULL; +INET6_ATON(123.45) IS NULL +1 +SELECT INET6_ATON(NOW()) IS NULL; +INET6_ATON(NOW()) IS NULL +1 +SELECT INET6_ATON('1.2.3') IS NULL; +INET6_ATON('1.2.3') IS NULL +1 +SELECT INET6_ATON('1.2.3.') IS NULL; +INET6_ATON('1.2.3.') IS NULL +1 +SELECT INET6_ATON('1..3.4') IS NULL; +INET6_ATON('1..3.4') IS NULL +1 +SELECT INET6_ATON('-1.2.3.4') IS NULL; +INET6_ATON('-1.2.3.4') IS NULL +1 +SELECT INET6_ATON('1.2.3.256') IS NULL; +INET6_ATON('1.2.3.256') IS NULL +1 +SELECT INET6_ATON('1.2.3.4.5') IS NULL; +INET6_ATON('1.2.3.4.5') IS NULL +1 +SELECT INET6_ATON('0001.2.3.4') IS NULL; +INET6_ATON('0001.2.3.4') IS NULL +1 +SELECT INET6_ATON('0x1.2.3.4') IS NULL; +INET6_ATON('0x1.2.3.4') IS NULL +1 +SELECT INET6_ATON('a.2.3.4') IS NULL; +INET6_ATON('a.2.3.4') IS NULL +1 +SELECT INET6_ATON('1.2.3.4:80') IS NULL; +INET6_ATON('1.2.3.4:80') IS NULL +1 +SELECT INET6_ATON('1.2.3.4/32') IS NULL; +INET6_ATON('1.2.3.4/32') IS NULL +1 +SELECT INET6_ATON('mysql.com') IS NULL; +INET6_ATON('mysql.com') IS NULL +1 +SELECT INET6_ATON(':::') IS NULL; +INET6_ATON(':::') IS NULL +1 +SELECT INET6_ATON(':1:2:3') IS NULL; +INET6_ATON(':1:2:3') IS NULL +1 +SELECT INET6_ATON('1:2:3:') IS NULL; +INET6_ATON('1:2:3:') IS NULL +1 +SELECT INET6_ATON(':1::2:3') IS NULL; +INET6_ATON(':1::2:3') IS NULL +1 +SELECT INET6_ATON('1::2:3:') IS NULL; +INET6_ATON('1::2:3:') IS NULL +1 +SELECT INET6_ATON('::00001') IS NULL; +INET6_ATON('::00001') IS NULL +1 +SELECT INET6_ATON('::00001:2') IS NULL; +INET6_ATON('::00001:2') IS NULL +1 +SELECT INET6_ATON('::12345') IS NULL; +INET6_ATON('::12345') IS NULL +1 +SELECT INET6_ATON('1020::3040::5060') IS NULL; +INET6_ATON('1020::3040::5060') IS NULL +1 +SELECT INET6_ATON('::ABCZ') IS NULL; +INET6_ATON('::ABCZ') IS NULL +1 +SELECT INET6_ATON('::0x1.2.3.4') IS NULL; +INET6_ATON('::0x1.2.3.4') IS NULL +1 +SELECT INET6_ATON('::1.0x2.3.4') IS NULL; +INET6_ATON('::1.0x2.3.4') IS NULL +1 +SELECT INET6_ATON('::a.b.c.d') IS NULL; +INET6_ATON('::a.b.c.d') IS NULL +1 +SELECT INET6_ATON('::FFFF:0x1.2.3.4') IS NULL; +INET6_ATON('::FFFF:0x1.2.3.4') IS NULL +1 +SELECT INET6_ATON('::FFFF:1.0x2.3.4') IS NULL; +INET6_ATON('::FFFF:1.0x2.3.4') IS NULL +1 +SELECT INET6_ATON('::FFFF:a.b.c.d') IS NULL; +INET6_ATON('::FFFF:a.b.c.d') IS NULL +1 +SELECT INET6_ATON('::1.2.3.4:ABCD') IS NULL; +INET6_ATON('::1.2.3.4:ABCD') IS NULL +1 +# NOTE: such addresses are supported because getaddrinfo() supports them. +# This is just to record the current behaviour. +SELECT HEX(INET6_ATON('::ABCD:1.2.3.4')); +HEX(INET6_ATON('::ABCD:1.2.3.4')) +00000000000000000000ABCD01020304 + +# -- INET6_ATON: checking binary representation... + +SELECT HEX(INET6_ATON('0.0.0.0')); +HEX(INET6_ATON('0.0.0.0')) +00000000 +SELECT HEX(INET6_ATON('00.00.00.00')); +HEX(INET6_ATON('00.00.00.00')) +00000000 +SELECT HEX(INET6_ATON('000.000.000.000')); +HEX(INET6_ATON('000.000.000.000')) +00000000 +SELECT HEX(INET6_ATON('1.2.3.4')); +HEX(INET6_ATON('1.2.3.4')) +01020304 +SELECT HEX(INET6_ATON('01.02.03.04')); +HEX(INET6_ATON('01.02.03.04')) +01020304 +SELECT HEX(INET6_ATON('001.002.003.004')); +HEX(INET6_ATON('001.002.003.004')) +01020304 +SELECT HEX(INET6_ATON('255.255.255.255')); +HEX(INET6_ATON('255.255.255.255')) +FFFFFFFF +SELECT HEX(INET6_ATON('::')); +HEX(INET6_ATON('::')) +00000000000000000000000000000000 +SELECT HEX(INET6_ATON('0::0')); +HEX(INET6_ATON('0::0')) +00000000000000000000000000000000 +SELECT HEX(INET6_ATON('1::2')); +HEX(INET6_ATON('1::2')) +00010000000000000000000000000002 +SELECT HEX(INET6_ATON('0::')); +HEX(INET6_ATON('0::')) +00000000000000000000000000000000 +SELECT HEX(INET6_ATON('1::')); +HEX(INET6_ATON('1::')) +00010000000000000000000000000000 +SELECT HEX(INET6_ATON('::0')); +HEX(INET6_ATON('::0')) +00000000000000000000000000000000 +SELECT HEX(INET6_ATON('::1')); +HEX(INET6_ATON('::1')) +00000000000000000000000000000001 +SELECT HEX(INET6_ATON('1:2:3:4:5:6:7:8')); +HEX(INET6_ATON('1:2:3:4:5:6:7:8')) +00010002000300040005000600070008 +SELECT HEX(INET6_ATON('::2:3:4:5:6:7:8')); +HEX(INET6_ATON('::2:3:4:5:6:7:8')) +00000002000300040005000600070008 +SELECT HEX(INET6_ATON('1::3:4:5:6:7:8')); +HEX(INET6_ATON('1::3:4:5:6:7:8')) +00010000000300040005000600070008 +SELECT HEX(INET6_ATON('1:2::4:5:6:7:8')); +HEX(INET6_ATON('1:2::4:5:6:7:8')) +00010002000000040005000600070008 +SELECT HEX(INET6_ATON('1:2:3::5:6:7:8')); +HEX(INET6_ATON('1:2:3::5:6:7:8')) +00010002000300000005000600070008 +SELECT HEX(INET6_ATON('1:2:3:4::6:7:8')); +HEX(INET6_ATON('1:2:3:4::6:7:8')) +00010002000300040000000600070008 +SELECT HEX(INET6_ATON('1:2:3:4:5::7:8')); +HEX(INET6_ATON('1:2:3:4:5::7:8')) +00010002000300040005000000070008 +SELECT HEX(INET6_ATON('1:2:3:4:5:6::8')); +HEX(INET6_ATON('1:2:3:4:5:6::8')) +00010002000300040005000600000008 +SELECT HEX(INET6_ATON('1:2:3:4:5:6:7::')); +HEX(INET6_ATON('1:2:3:4:5:6:7::')) +00010002000300040005000600070000 +SELECT HEX(INET6_ATON('0000:0000::0000:0001')); +HEX(INET6_ATON('0000:0000::0000:0001')) +00000000000000000000000000000001 +SELECT HEX(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed')); +HEX(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed')) +123456789ABCDEF043218765CBA90FED +SELECT HEX(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001')); +HEX(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001')) +00000000000000000000000000000001 +SELECT HEX(INET6_ATON('::C0A8:0102')); +HEX(INET6_ATON('::C0A8:0102')) +000000000000000000000000C0A80102 +SELECT HEX(INET6_ATON('::c0a8:0102')); +HEX(INET6_ATON('::c0a8:0102')) +000000000000000000000000C0A80102 +SELECT HEX(INET6_ATON('::192.168.1.2')); +HEX(INET6_ATON('::192.168.1.2')) +000000000000000000000000C0A80102 +SELECT HEX(INET6_ATON('::FfFf:C0a8:0102')); +HEX(INET6_ATON('::FfFf:C0a8:0102')) +00000000000000000000FFFFC0A80102 +SELECT HEX(INET6_ATON('::ffff:c0a8:0102')); +HEX(INET6_ATON('::ffff:c0a8:0102')) +00000000000000000000FFFFC0A80102 +SELECT HEX(INET6_ATON('::ffff:192.168.1.2')); +HEX(INET6_ATON('::ffff:192.168.1.2')) +00000000000000000000FFFFC0A80102 +SELECT HEX(INET6_ATON('::01.2.3.4')); +HEX(INET6_ATON('::01.2.3.4')) +00000000000000000000000001020304 +SELECT HEX(INET6_ATON('::1.02.3.4')); +HEX(INET6_ATON('::1.02.3.4')) +00000000000000000000000001020304 +SELECT HEX(INET6_ATON('::1.2.03.4')); +HEX(INET6_ATON('::1.2.03.4')) +00000000000000000000000001020304 +SELECT HEX(INET6_ATON('::1.2.3.04')); +HEX(INET6_ATON('::1.2.3.04')) +00000000000000000000000001020304 +SELECT HEX(INET6_ATON('::1.2.3.00')); +HEX(INET6_ATON('::1.2.3.00')) +00000000000000000000000001020300 +SELECT HEX(INET6_ATON('::FFFF:01.2.3.4')); +HEX(INET6_ATON('::FFFF:01.2.3.4')) +00000000000000000000FFFF01020304 +SELECT HEX(INET6_ATON('::FFFF:1.02.3.4')); +HEX(INET6_ATON('::FFFF:1.02.3.4')) +00000000000000000000FFFF01020304 +SELECT HEX(INET6_ATON('::FFFF:1.2.03.4')); +HEX(INET6_ATON('::FFFF:1.2.03.4')) +00000000000000000000FFFF01020304 +SELECT HEX(INET6_ATON('::FFFF:1.2.3.04')); +HEX(INET6_ATON('::FFFF:1.2.3.04')) +00000000000000000000FFFF01020304 +SELECT HEX(INET6_ATON('::FFFF:1.2.3.00')); +HEX(INET6_ATON('::FFFF:1.2.3.00')) +00000000000000000000FFFF01020300 + +# -- INET6_ATON: checking the length is either 4 or 16... + +SELECT LENGTH(INET6_ATON('0.0.0.0')); +LENGTH(INET6_ATON('0.0.0.0')) +4 +SELECT LENGTH(INET6_ATON('255.255.255.255')); +LENGTH(INET6_ATON('255.255.255.255')) +4 +SELECT LENGTH(INET6_ATON('::')); +LENGTH(INET6_ATON('::')) +16 +SELECT LENGTH(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010')); +LENGTH(INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010')) +16 + +# -- INET6_NTOA: checking NULL, invalid types, out-of range values... + +SELECT INET6_NTOA(NULL); +INET6_NTOA(NULL) +NULL +SELECT INET6_NTOA(123); +INET6_NTOA(123) +NULL +SELECT INET6_NTOA(123.456); +INET6_NTOA(123.456) +NULL +SELECT INET6_NTOA(NOW()); +INET6_NTOA(NOW()) +NULL +SELECT INET6_NTOA(UNHEX('C0A801')); +INET6_NTOA(UNHEX('C0A801')) +NULL +SELECT INET6_NTOA(UNHEX('C0A80102')); +INET6_NTOA(UNHEX('C0A80102')) +192.168.1.2 +SELECT INET6_NTOA(UNHEX('C0A8010203')); +INET6_NTOA(UNHEX('C0A8010203')) +NULL +SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F')); +INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F')) +NULL +SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F10')); +INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F10')) +102:304:506:708:90a:b0c:d0e:f10 +SELECT INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F1011')); +INET6_NTOA(UNHEX('0102030405060708090A0B0C0D0E0F1011')) +NULL +SELECT INET6_NTOA('1234'), INET6_NTOA(BINARY('1234')); +INET6_NTOA('1234') INET6_NTOA(BINARY('1234')) +NULL 49.50.51.52 +SELECT INET6_NTOA('0123456789abcdef'), INET6_NTOA(BINARY('0123456789abcdef')); +INET6_NTOA('0123456789abcdef') INET6_NTOA(BINARY('0123456789abcdef')) +NULL 3031:3233:3435:3637:3839:6162:6364:6566 + +# -- Checking double-conversion... + +SELECT INET6_NTOA(INET6_ATON('::')); +INET6_NTOA(INET6_ATON('::')) +:: +SELECT INET6_NTOA(INET6_ATON('0::0')); +INET6_NTOA(INET6_ATON('0::0')) +:: +SELECT INET6_NTOA(INET6_ATON('1::2')); +INET6_NTOA(INET6_ATON('1::2')) +1::2 +SELECT INET6_NTOA(INET6_ATON('0::')); +INET6_NTOA(INET6_ATON('0::')) +:: +SELECT INET6_NTOA(INET6_ATON('1::')); +INET6_NTOA(INET6_ATON('1::')) +1:: +SELECT INET6_NTOA(INET6_ATON('::0')); +INET6_NTOA(INET6_ATON('::0')) +:: +SELECT INET6_NTOA(INET6_ATON('::1')); +INET6_NTOA(INET6_ATON('::1')) +::1 +SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7:8')); +INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7:8')) +1:2:3:4:5:6:7:8 +SELECT INET6_NTOA(INET6_ATON('::2:3:4:5:6:7:8')); +INET6_NTOA(INET6_ATON('::2:3:4:5:6:7:8')) +::2:3:4:5:6:7:8 +SELECT INET6_NTOA(INET6_ATON('1::3:4:5:6:7:8')); +INET6_NTOA(INET6_ATON('1::3:4:5:6:7:8')) +1::3:4:5:6:7:8 +SELECT INET6_NTOA(INET6_ATON('1:2::4:5:6:7:8')); +INET6_NTOA(INET6_ATON('1:2::4:5:6:7:8')) +1:2::4:5:6:7:8 +SELECT INET6_NTOA(INET6_ATON('1:2:3::5:6:7:8')); +INET6_NTOA(INET6_ATON('1:2:3::5:6:7:8')) +1:2:3::5:6:7:8 +SELECT INET6_NTOA(INET6_ATON('1:2:3:4::6:7:8')); +INET6_NTOA(INET6_ATON('1:2:3:4::6:7:8')) +1:2:3:4::6:7:8 +SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5::7:8')); +INET6_NTOA(INET6_ATON('1:2:3:4:5::7:8')) +1:2:3:4:5::7:8 +SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6::8')); +INET6_NTOA(INET6_ATON('1:2:3:4:5:6::8')) +1:2:3:4:5:6::8 +SELECT INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7::')); +INET6_NTOA(INET6_ATON('1:2:3:4:5:6:7::')) +1:2:3:4:5:6:7:: +SELECT INET6_NTOA(INET6_ATON('0000:0000::0000:0001')); +INET6_NTOA(INET6_ATON('0000:0000::0000:0001')) +::1 +SELECT INET6_NTOA(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed')); +INET6_NTOA(INET6_ATON('1234:5678:9abc:def0:4321:8765:cba9:0fed')) +1234:5678:9abc:def0:4321:8765:cba9:fed +SELECT INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001')); +INET6_NTOA(INET6_ATON('0000:0000:0000:0000:0000:0000:0000:0001')) +::1 +SELECT INET6_NTOA(INET6_ATON('::C0A8:0102')); +INET6_NTOA(INET6_ATON('::C0A8:0102')) +::192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::c0a8:0102')); +INET6_NTOA(INET6_ATON('::c0a8:0102')) +::192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::192.168.1.2')); +INET6_NTOA(INET6_ATON('::192.168.1.2')) +::192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::FfFf:C0a8:0102')); +INET6_NTOA(INET6_ATON('::FfFf:C0a8:0102')) +::ffff:192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::ffff:c0a8:0102')); +INET6_NTOA(INET6_ATON('::ffff:c0a8:0102')) +::ffff:192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::ffff:192.168.1.2')); +INET6_NTOA(INET6_ATON('::ffff:192.168.1.2')) +::ffff:192.168.1.2 +SELECT INET6_NTOA(INET6_ATON('::01.2.3.4')); +INET6_NTOA(INET6_ATON('::01.2.3.4')) +::1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::1.02.3.4')); +INET6_NTOA(INET6_ATON('::1.02.3.4')) +::1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::1.2.03.4')); +INET6_NTOA(INET6_ATON('::1.2.03.4')) +::1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::1.2.3.04')); +INET6_NTOA(INET6_ATON('::1.2.3.04')) +::1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::1.2.3.00')); +INET6_NTOA(INET6_ATON('::1.2.3.00')) +::1.2.3.0 +SELECT INET6_NTOA(INET6_ATON('::FFFF:01.2.3.4')); +INET6_NTOA(INET6_ATON('::FFFF:01.2.3.4')) +::ffff:1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::FFFF:1.02.3.4')); +INET6_NTOA(INET6_ATON('::FFFF:1.02.3.4')) +::ffff:1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.03.4')); +INET6_NTOA(INET6_ATON('::FFFF:1.2.03.4')) +::ffff:1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.04')); +INET6_NTOA(INET6_ATON('::FFFF:1.2.3.04')) +::ffff:1.2.3.4 +SELECT INET6_NTOA(INET6_ATON('::FFFF:1.2.3.00')); +INET6_NTOA(INET6_ATON('::FFFF:1.2.3.00')) +::ffff:1.2.3.0 + +# -- Comparing INET_ATON() and INET6_ATON()... + +SELECT HEX(INET_ATON('192.168.1.2')); +HEX(INET_ATON('192.168.1.2')) +C0A80102 +SELECT HEX(INET6_ATON('192.168.1.2')); +HEX(INET6_ATON('192.168.1.2')) +C0A80102 +SELECT HEX(INET_ATON('255.255.255.255')); +HEX(INET_ATON('255.255.255.255')) +FFFFFFFF +SELECT HEX(INET6_ATON('255.255.255.255')); +HEX(INET6_ATON('255.255.255.255')) +FFFFFFFF +SELECT HEX(INET_ATON('192.168.08.2')); +HEX(INET_ATON('192.168.08.2')) +C0A80802 +SELECT HEX(INET6_ATON('192.168.08.2')); +HEX(INET6_ATON('192.168.08.2')) +C0A80802 +SELECT HEX(INET_ATON('192.168.0x8.2')); +HEX(INET_ATON('192.168.0x8.2')) +NULL +SELECT HEX(INET6_ATON('192.168.0x8.2')); +HEX(INET6_ATON('192.168.0x8.2')) +NULL +SELECT HEX(INET_ATON('1.2.255')); +HEX(INET_ATON('1.2.255')) +10200FF +SELECT HEX(INET6_ATON('1.2.255')); +HEX(INET6_ATON('1.2.255')) +NULL +SELECT HEX(INET_ATON('1.2.256')); +HEX(INET_ATON('1.2.256')) +NULL +SELECT HEX(INET6_ATON('1.2.256')); +HEX(INET6_ATON('1.2.256')) +NULL +SELECT HEX(INET_ATON('1.0002.3.4')); +HEX(INET_ATON('1.0002.3.4')) +1020304 +SELECT HEX(INET6_ATON('1.0002.3.4')); +HEX(INET6_ATON('1.0002.3.4')) +NULL +SELECT HEX(INET_ATON('1.2.3.4.5')); +HEX(INET_ATON('1.2.3.4.5')) +102030405 +SELECT HEX(INET6_ATON('1.2.3.4.5')); +HEX(INET6_ATON('1.2.3.4.5')) +NULL + +# -- Checking mix of INET- and INET6- functions... + +SELECT HEX(INET6_ATON(INET_NTOA(INET_ATON('1.2.3.4')))) AS x; +x +01020304 + +# -- Checking IS_IPV4() / IS_IPV6()... + +SELECT IS_IPV4(NULL); +IS_IPV4(NULL) +0 +SELECT IS_IPV4(1); +IS_IPV4(1) +0 +SELECT IS_IPV4(1.0); +IS_IPV4(1.0) +0 +SELECT IS_IPV4('1.2.3.4'); +IS_IPV4('1.2.3.4') +1 +SELECT IS_IPV4('001.02.000.255'); +IS_IPV4('001.02.000.255') +1 +SELECT IS_IPV4('::1.2.0.255'); +IS_IPV4('::1.2.0.255') +0 +SELECT IS_IPV4('::1'); +IS_IPV4('::1') +0 +SELECT IS_IPV4(BINARY('1.2.3.4')); +IS_IPV4(BINARY('1.2.3.4')) +1 +SELECT IS_IPV6(NULL); +IS_IPV6(NULL) +0 +SELECT IS_IPV6(1); +IS_IPV6(1) +0 +SELECT IS_IPV6(1.0); +IS_IPV6(1.0) +0 +SELECT IS_IPV6('1.2.3.4'); +IS_IPV6('1.2.3.4') +0 +SELECT IS_IPV6('001.02.000.255'); +IS_IPV6('001.02.000.255') +0 +SELECT IS_IPV6('::001.02.000.255'); +IS_IPV6('::001.02.000.255') +1 +SELECT IS_IPV6('::1.2.0.255'); +IS_IPV6('::1.2.0.255') +1 +SELECT IS_IPV6('::1'); +IS_IPV6('::1') +1 +SELECT IS_IPV6('0000:0000:0000:0000:0000:0000:0000:0001'); +IS_IPV6('0000:0000:0000:0000:0000:0000:0000:0001') +1 +SELECT IS_IPV6(BINARY('0000:0000:0000:0000:0000:0000:0000:0001')); +IS_IPV6(BINARY('0000:0000:0000:0000:0000:0000:0000:0001')) +1 + +# -- Checking IS_IPV4_MAPPED() and IS_IPV4_COMPAT()... + +SELECT IS_IPV4_MAPPED(INET6_ATON('1.2.3.4')), +IS_IPV4_COMPAT(INET6_ATON('1.2.3.4')); +IS_IPV4_MAPPED(INET6_ATON('1.2.3.4')) IS_IPV4_COMPAT(INET6_ATON('1.2.3.4')) +0 0 +SELECT IS_IPV4_MAPPED(INET6_ATON('::1.2.3.4')), +IS_IPV4_COMPAT(INET6_ATON('::1.2.3.4')); +IS_IPV4_MAPPED(INET6_ATON('::1.2.3.4')) IS_IPV4_COMPAT(INET6_ATON('::1.2.3.4')) +0 1 +SELECT IS_IPV4_MAPPED(INET6_ATON('::FFFF:1.2.3.4')), +IS_IPV4_COMPAT(INET6_ATON('::FFFF:1.2.3.4')); +IS_IPV4_MAPPED(INET6_ATON('::FFFF:1.2.3.4')) IS_IPV4_COMPAT(INET6_ATON('::FFFF:1.2.3.4')) +1 0 +SELECT IS_IPV4_MAPPED(INET6_ATON('::ABCD:1.2.3.4')), +IS_IPV4_COMPAT(INET6_ATON('::ABCD:1.2.3.4')); +IS_IPV4_MAPPED(INET6_ATON('::ABCD:1.2.3.4')) IS_IPV4_COMPAT(INET6_ATON('::ABCD:1.2.3.4')) +0 0 +SELECT IS_IPV4_MAPPED(INET6_ATON('::1')), +IS_IPV4_COMPAT(INET6_ATON('::1')); +IS_IPV4_MAPPED(INET6_ATON('::1')) IS_IPV4_COMPAT(INET6_ATON('::1')) +0 0 +SELECT IS_IPV4_MAPPED(INET6_ATON('::')), +IS_IPV4_COMPAT(INET6_ATON('::')); +IS_IPV4_MAPPED(INET6_ATON('::')) IS_IPV4_COMPAT(INET6_ATON('::')) +0 0 + +# -- Checking IS_IPV4_COMPAT()... + + +# -- Working with a table... + +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +CREATE TABLE t1(ip INT UNSIGNED); +CREATE TABLE t2(ip VARBINARY(16)); + +INSERT INTO t1 VALUES +(INET_ATON('1.2.3.4')), (INET_ATON('255.255.255.255')); +SELECT INET_NTOA(ip) FROM t1; +INET_NTOA(ip) +1.2.3.4 +255.255.255.255 + +INSERT INTO t2 SELECT INET6_ATON(INET_NTOA(ip)) FROM t1; +SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2; +INET6_NTOA(ip) HEX(ip) LENGTH(ip) +1.2.3.4 01020304 4 +255.255.255.255 FFFFFFFF 4 +DELETE FROM t2; + +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; +INET6_NTOA(ip) HEX(ip) LENGTH(ip) +1.2.3.4 01020304 4 +255.255.255.255 FFFFFFFF 4 +::1.2.3.4 00000000000000000000000001020304 16 +::ffff:255.255.255.255 00000000000000000000FFFFFFFFFFFF 16 +:: 00000000000000000000000000000000 16 +::1 00000000000000000000000000000001 16 +1020:3040:5060:7080:90a0:b0c0:d0e0:f010 102030405060708090A0B0C0D0E0F010 16 + +DROP TABLE t1; +DROP TABLE t2; + +# -- Done. + -- cgit v1.2.1