Created
April 17, 2019 09:52
-
-
Save diogenese/d62ef63dbf6f85478ed9609fb241f670 to your computer and use it in GitHub Desktop.
latest giolite sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Ensure database exists | |
CREATE DATABASE IF NOT EXISTS `geoipdb` DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
USE `geoipdb` | |
DROP TABLE IF EXISTS `geo_csv_city_blocks_ipv4`; | |
CREATE TABLE `geo_csv_city_blocks_ipv4` ( | |
`network` VARCHAR(20) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
`postal_code` VARCHAR(32) NOT NULL DEFAULT "", | |
`latitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`longitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`accuracy_radius` INT(6) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_city_blocks_ipv6`; | |
CREATE TEMPORARY TABLE `geo_csv_city_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`netmask` INT(3) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
`postal_code` VARCHAR(32) NOT NULL DEFAULT "", | |
`latitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`longitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`accuracy_radius` INT(6) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_blocks_ipv4`; | |
CREATE TEMPORARY TABLE `geo_csv_country_blocks_ipv4` ( | |
`network` VARCHAR(20) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_blocks_ipv6`; | |
CREATE TEMPORARY TABLE `geo_csv_country_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`netmask` INT(3) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_asn_blocks_ipv4`; | |
CREATE TEMPORARY TABLE `geo_csv_asn_blocks_ipv4` ( | |
`network` VARCHAR(20) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`as_number` INT(10) unsigned NOT NULL, | |
`as_org` VARCHAR(256) NOT NULL DEFAULT "" | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_asn_blocks_ipv6`; | |
CREATE TEMPORARY TABLE `geo_csv_asn_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ipword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword1` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword2` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword3` VARCHAR(4) NOT NULL DEFAULT "", | |
`ifword4` VARCHAR(4) NOT NULL DEFAULT "", | |
`netmask` INT(3) unsigned NOT NULL, | |
`as_number` INT(10) unsigned NOT NULL, | |
`as_org` VARCHAR(256) NOT NULL DEFAULT "" | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_locations`; | |
CREATE TEMPORARY TABLE `geo_csv_country_locations` ( | |
`geonameid` INT(10) unsigned NOT NULL, | |
`locale_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_name` VARCHAR(32) NOT NULL DEFAULT "", | |
`cntr_iso` VARCHAR(4) NOT NULL DEFAULT "", | |
`cntr_name` VARCHAR(128) NOT NULL DEFAULT "", | |
`is_euro` TINYINT(1) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_city_locations`; | |
CREATE TEMPORARY TABLE `geo_csv_city_locations` ( | |
`geonameid` INT(10) unsigned NOT NULL, | |
`locale_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_name` VARCHAR(20) NOT NULL DEFAULT "", | |
`cntr_iso` VARCHAR(4) NOT NULL DEFAULT "", | |
`cntr_name` VARCHAR(128) NOT NULL DEFAULT "", | |
`sub1_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`sub1_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`sub2_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`sub2_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`city_name` VARCHAR(128) NOT NULL DEFAULT "", | |
`metro_code` VARCHAR(8) NOT NULL DEFAULT "", | |
`time_zone` VARCHAR(80) NOT NULL DEFAULT "", | |
`is_euro` TINYINT(1) unsigned NOT NULL | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
SELECT "Loading Data"; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-City-Blocks-IPv4.csv" | |
INTO TABLE `geo_csv_city_blocks_ipv4` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-City-Blocks-IPv6.csv" | |
INTO TABLE `geo_csv_city_blocks_ipv6` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-Country-Blocks-IPv4.csv" | |
INTO TABLE `geo_csv_country_blocks_ipv4` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-Country-Blocks-IPv6.csv" | |
INTO TABLE `geo_csv_country_blocks_ipv6` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-City-Locations-en.csv" | |
INTO TABLE `geo_csv_city_locations` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-Country-Locations-en.csv" | |
INTO TABLE `geo_csv_country_locations` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-ASN-Blocks-IPv4.csv" | |
INTO TABLE `geo_csv_asn_blocks_ipv4` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
LOAD DATA LOCAL INFILE "/storage/geoip/data/GeoLite2-CSV/GeoLite2-ASN-Blocks-IPv6.csv" | |
INTO TABLE `geo_csv_asn_blocks_ipv6` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' | |
IGNORE 1 LINES; | |
SELECT "Create new tables"; | |
DROP TABLE IF EXISTS `geo_city_blocks_ipv4`; | |
CREATE TABLE `geo_city_blocks_ipv4` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
`postal_code` VARCHAR(32) NOT NULL DEFAULT "", | |
`latitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`longitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`accuracy_radius` INT(6) unsigned NOT NULL, | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_city_blocks_ipv6`; | |
CREATE TABLE `geo_city_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` INT(5) unsigned NOT NULL, | |
`ipword2` INT(5) unsigned NOT NULL, | |
`ipword3` INT(5) unsigned NOT NULL, | |
`ipword4` INT(5) unsigned NOT NULL, | |
`ifword1` INT(5) unsigned NOT NULL, | |
`ifword2` INT(5) unsigned NOT NULL, | |
`ifword3` INT(5) unsigned NOT NULL, | |
`ifword4` INT(5) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`ifstart` BIGINT(20) unsigned NOT NULL, | |
`ifend` BIGINT(20) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
`postal_code` VARCHAR(32) NOT NULL DEFAULT "", | |
`latitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`longitude` DECIMAL(8,4) NOT NULL DEFAULT "0.0", | |
`accuracy_radius` INT(6) unsigned NOT NULL, | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_country_blocks_ipv4`; | |
CREATE TABLE `geo_country_blocks_ipv4` ( | |
`network` VARCHAR(20) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_country_blocks_ipv6`; | |
CREATE TABLE `geo_country_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` INT(5) unsigned NOT NULL, | |
`ipword2` INT(5) unsigned NOT NULL, | |
`ipword3` INT(5) unsigned NOT NULL, | |
`ipword4` INT(5) unsigned NOT NULL, | |
`ifword1` INT(5) unsigned NOT NULL, | |
`ifword2` INT(5) unsigned NOT NULL, | |
`ifword3` INT(5) unsigned NOT NULL, | |
`ifword4` INT(5) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`ifstart` BIGINT(20) unsigned NOT NULL, | |
`ifend` BIGINT(20) unsigned NOT NULL, | |
`geonameid` INT(10) unsigned NOT NULL, | |
`rgcgeoid` INT(10) unsigned NOT NULL, | |
`rpcgeoid` INT(10) unsigned NOT NULL, | |
`is_anon` TINYINT(1) unsigned NOT NULL, | |
`is_sat` TINYINT(1) unsigned NOT NULL, | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_asn_blocks_ipv4`; | |
CREATE TABLE `geo_asn_blocks_ipv4` ( | |
`network` VARCHAR(20) NOT NULL DEFAULT "", | |
`ipbyte1` INT(3) unsigned NOT NULL, | |
`ipbyte2` INT(3) unsigned NOT NULL, | |
`ipbyte3` INT(3) unsigned NOT NULL, | |
`ipbyte4` INT(3) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`as_number` INT(10) unsigned NOT NULL, | |
`as_org` VARCHAR(128) NOT NULL DEFAULT "", | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_asn_blocks_ipv6`; | |
CREATE TABLE `geo_asn_blocks_ipv6` ( | |
`network` VARCHAR(32) NOT NULL DEFAULT "", | |
`ipword1` INT(5) unsigned NOT NULL, | |
`ipword2` INT(5) unsigned NOT NULL, | |
`ipword3` INT(5) unsigned NOT NULL, | |
`ipword4` INT(5) unsigned NOT NULL, | |
`ifword1` INT(5) unsigned NOT NULL, | |
`ifword2` INT(5) unsigned NOT NULL, | |
`ifword3` INT(5) unsigned NOT NULL, | |
`ifword4` INT(5) unsigned NOT NULL, | |
`netmask` INT(3) unsigned NOT NULL, | |
`ipstart` BIGINT(20) unsigned NOT NULL, | |
`ipend` BIGINT(20) unsigned NOT NULL, | |
`ifstart` BIGINT(20) unsigned NOT NULL, | |
`ifend` BIGINT(20) unsigned NOT NULL, | |
`as_number` INT(10) unsigned NOT NULL, | |
`as_org` VARCHAR(128) NOT NULL DEFAULT "", | |
PRIMARY KEY ( `network` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_city_locations`; | |
CREATE TABLE `geo_city_locations` ( | |
`geonameid` INT(10) unsigned NOT NULL, | |
`locale_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_name` VARCHAR(20) NOT NULL DEFAULT "", | |
`cntr_iso` VARCHAR(4) NOT NULL DEFAULT "", | |
`cntr_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`sub1_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`sub1_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`sub2_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`sub2_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`city_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`metro_code` VARCHAR(8) NOT NULL DEFAULT "", | |
`time_zone` VARCHAR(80) NOT NULL DEFAULT "", | |
`is_euro` TINYINT(1) unsigned NOT NULL, | |
PRIMARY KEY ( `geonameid` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
DROP TABLE IF EXISTS `geo_country_locations`; | |
CREATE TABLE `geo_country_locations` ( | |
`geonameid` INT(10) unsigned NOT NULL, | |
`locale_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_code` VARCHAR(4) NOT NULL DEFAULT "", | |
`cont_name` VARCHAR(32) NOT NULL DEFAULT "", | |
`cntr_iso` VARCHAR(4) NOT NULL DEFAULT "", | |
`cntr_name` VARCHAR(80) NOT NULL DEFAULT "", | |
`is_euro` TINYINT(1) unsigned NOT NULL, | |
PRIMARY KEY ( `geonameid` ) | |
) ENGINE=Aria DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; | |
SELECT "Fill new tables"; | |
-- Clean out any duplicates and create keys | |
INSERT IGNORE `geo_city_blocks_ipv6` ( network,ipword1,ipword2,ipword3,ipword4,ifword1,ifword2,ifword3,ifword4,netmask, | |
ipstart,ipend,ifstart,ifend,geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat,postal_code,latitude,longitude,accuracy_radius ) | |
SELECT network,@ipv1:=conv(if(length(ipword1),ipword1,"0"),16,10),@ipv2:=conv(if(length(ipword2),ipword2,"0"),16,10), | |
@ipv3:=conv(if(length(ipword3),ipword3,"0"),16,10),@ipv4:=conv(if(length(ipword4),ipword4,"0"),16,10), | |
@ifv1:=conv(if(length(ifword1),ifword1,"0"),16,10),@ifv2:=conv(if(length(ifword2),ifword2,"0"),16,10), | |
@ifv3:=conv(if(length(ifword3),ifword3,"0"),16,10),@ifv4:=conv(if(length(ifword4),ifword4,"0"),16,10),netmask, | |
@ipv:=((@ipv1<<48)+(@ipv2<<32)+(@ipv3<<16)+@ipv4), if(netmask>=64,@ipv,@ipv+(1<<64-netmask)-1), | |
@ifv:=((@ifv1<<48)+(@ifv2<<32)+(@ifv3<<16)+@ifv4), if(netmask>=128,@ifv,if(netmask<=64,convert(-1,unsigned),@ifv+(1<<(128-netmask))-1)), | |
geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat,postal_code,latitude,longitude,accuracy_radius FROM `geo_csv_city_blocks_ipv6`; | |
INSERT IGNORE `geo_country_blocks_ipv6` ( network,ipword1,ipword2,ipword3,ipword4,ifword1,ifword2,ifword3,ifword4,netmask, | |
ipstart,ipend,ifstart,ifend,geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat ) | |
SELECT network,@ipv1:=conv(if(length(ipword1),ipword1,"0"),16,10),@ipv2:=conv(if(length(ipword2),ipword2,"0"),16,10), | |
@ipv3:=conv(if(length(ipword3),ipword3,"0"),16,10),@ipv4:=conv(if(length(ipword4),ipword4,"0"),16,10), | |
@ifv1:=conv(if(length(ifword1),ifword1,"0"),16,10),@ifv2:=conv(if(length(ifword2),ifword2,"0"),16,10), | |
@ifv3:=conv(if(length(ifword3),ifword3,"0"),16,10),@ifv4:=conv(if(length(ifword4),ifword4,"0"),16,10),netmask, | |
@ipv:=((@ipv1<<48)+(@ipv2<<32)+(@ipv3<<16)+@ipv4),if(netmask>=64,@ipv,@ipv+(1<<64-netmask)-1), | |
@ifv:=((@ifv1<<48)+(@ifv2<<32)+(@ifv3<<16)+@ifv4), if(netmask>=128,@ifv,if(netmask<=64,convert(-1,unsigned),@ifv+(1<<(128-netmask))-1)), | |
geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat FROM `geo_csv_country_blocks_ipv6`; | |
INSERT IGNORE `geo_asn_blocks_ipv6` ( network,ipword1,ipword2,ipword3,ipword4,ifword1,ifword2,ifword3,ifword4,netmask, | |
ipstart,ipend,ifstart,ifend,as_number,as_org ) | |
SELECT network,@ipv1:=conv(if(length(ipword1),ipword1,"0"),16,10),@ipv2:=conv(if(length(ipword2),ipword2,"0"),16,10), | |
@ipv3:=conv(if(length(ipword3),ipword3,"0"),16,10),@ipv4:=conv(if(length(ipword4),ipword4,"0"),16,10), | |
@ifv1:=conv(if(length(ifword1),ifword1,"0"),16,10),@ifv2:=conv(if(length(ifword2),ifword2,"0"),16,10), | |
@ifv3:=conv(if(length(ifword3),ifword3,"0"),16,10),@ifv4:=conv(if(length(ifword4),ifword4,"0"),16,10),netmask, | |
@ipv:=((@ipv1<<48)+(@ipv2<<32)+(@ipv3<<16)+@ipv4),if(netmask>=64,@ipv,@ipv+(1<<64-netmask)-1), | |
@ifv:=((@ifv1<<48)+(@ifv2<<32)+(@ifv3<<16)+@ifv4), if(netmask>=128,@ifv,if(netmask<=64,convert(-1,unsigned),@ifv+(1<<(128-netmask))-1)), | |
as_number,as_org FROM `geo_csv_asn_blocks_ipv6`; | |
INSERT IGNORE `geo_city_blocks_ipv4` ( network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,ipstart,ipend,geonameid, | |
rgcgeoid,rpcgeoid,is_anon,is_sat,postal_code,latitude,longitude,accuracy_radius ) | |
SELECT network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,@ipv:=((ipbyte1<<24)+(ipbyte2<<16)+(ipbyte3<<8)+ipbyte4),@ipv+(1<<(32-netmask))-1, | |
geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat,postal_code,latitude,longitude,accuracy_radius FROM `geo_csv_city_blocks_ipv4`; | |
INSERT IGNORE `geo_country_blocks_ipv4` ( network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,ipstart,ipend,geonameid,rgcgeoid,rpcgeoid, | |
is_anon,is_sat ) | |
SELECT network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,@ipv:=((ipbyte1<<24)+(ipbyte2<<16)+(ipbyte3<<8)+ipbyte4),@ipv+(1<<(32-netmask))-1, | |
geonameid,rgcgeoid,rpcgeoid,is_anon,is_sat FROM `geo_csv_country_blocks_ipv4`; | |
INSERT IGNORE `geo_asn_blocks_ipv4` ( network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,ipstart,ipend,as_number,as_org ) | |
SELECT network,ipbyte1,ipbyte2,ipbyte3,ipbyte4,netmask,@ipv:=((ipbyte1<<24)+(ipbyte2<<16)+(ipbyte3<<8)+ipbyte4),@ipv+(1<<(32-netmask))-1, | |
as_number,as_org FROM `geo_csv_asn_blocks_ipv4`; | |
INSERT IGNORE `geo_city_locations` SELECT * FROM `geo_csv_city_locations`; | |
INSERT IGNORE `geo_country_locations` SELECT * FROM `geo_csv_country_locations`; | |
SELECT "Add table keys"; | |
ALTER TABLE `geo_city_blocks_ipv4` | |
ADD UNIQUE KEY `ipnumkey` ( `ipstart`,`ipend` ), | |
ADD KEY `bytekey` ( `ipbyte1`,`ipbyte2`,`ipbyte3`,`ipbyte4`), | |
ADD KEY `geoidkey` ( `geonameid` ), | |
ADD KEY `regidkey` ( `rgcgeoid` ), | |
ADD KEY `repidkey` ( `rpcgeoid` ), | |
ADD KEY `anonkey` ( `is_anon` ), | |
ADD KEY `satkey` ( `is_sat` ), | |
ADD KEY `latkey` ( `latitude` ), | |
ADD KEY `lonkey` ( `longitude` ); | |
ALTER TABLE `geo_city_blocks_ipv6` | |
ADD KEY `ipnumkey` ( `ipstart`,`ifstart`,`ipend`,`ifend` ), | |
ADD KEY `ipwkey` ( `ipword1`,`ipword2`,`ipword3`,`ipword4` ), | |
ADD KEY `geoidkey` ( `geonameid` ), | |
ADD KEY `regidkey` ( `rgcgeoid` ), | |
ADD KEY `repidkey` ( `rpcgeoid` ), | |
ADD KEY `anonkey` ( `is_anon` ), | |
ADD KEY `satkey` ( `is_sat` ), | |
ADD KEY `latkey` ( `latitude` ), | |
ADD KEY `lonkey` ( `longitude` ); | |
ALTER TABLE `geo_country_blocks_ipv4` | |
ADD UNIQUE KEY `ipnumkey` ( `ipstart`,`ipend` ), | |
ADD KEY `bytekey` ( `ipbyte1`,`ipbyte2`,`ipbyte3`,`ipbyte4`), | |
ADD KEY `geoidkey` ( `geonameid` ), | |
ADD KEY `regidkey` ( `rgcgeoid` ), | |
ADD KEY `repidkey` ( `rpcgeoid` ), | |
ADD KEY `anonkey` ( `is_anon` ), | |
ADD KEY `satkey` ( `is_sat` ); | |
ALTER TABLE `geo_country_blocks_ipv6` | |
ADD KEY `ipnumkey` ( `ipstart`,`ifstart`,`ipend`,`ifend` ), | |
ADD KEY `ipwkey` ( `ipword1`,`ipword2`,`ipword3`,`ipword4` ), | |
ADD KEY `geoidkey` ( `geonameid` ), | |
ADD KEY `regidkey` ( `rgcgeoid` ), | |
ADD KEY `repidkey` ( `rpcgeoid` ), | |
ADD KEY `anonkey` ( `is_anon` ), | |
ADD KEY `satkey` ( `is_sat` ); | |
ALTER TABLE `geo_asn_blocks_ipv4` | |
ADD UNIQUE KEY `ipnumkey` ( `ipstart`,`ipend` ), | |
ADD KEY `bytekey` ( `ipbyte1`,`ipbyte2`,`ipbyte3`,`ipbyte4`), | |
ADD KEY `asnkey` ( `as_number` ); | |
ALTER TABLE `geo_asn_blocks_ipv6` | |
ADD KEY `ipnumkey` ( `ipstart`,`ifstart`,`ipend`,`ifend` ), | |
ADD KEY `ipwkey` ( `ipword1`,`ipword2`,`ipword3`,`ipword4` ), | |
ADD KEY `asnkey` ( `as_number` ); | |
ALTER TABLE `geo_city_locations` | |
ADD KEY `lockey` ( `locale_code` ), | |
ADD KEY `contkey` ( `cont_code` ), | |
ADD KEY `cisokey` ( `cntr_iso` ), | |
ADD KEY `cnamkey` ( `cont_name`,`cntr_name`,`city_name` ), | |
ADD KEY `rnamkey` ( `city_name`,`cntr_name`,`cont_name` ), | |
ADD KEY `eurokey` ( `is_euro` ); | |
ALTER TABLE `geo_country_locations` | |
ADD KEY `lockey` ( `locale_code` ), | |
ADD KEY `contkey` ( `cont_code` ), | |
ADD KEY `cisokey` ( `cntr_iso` ), | |
ADD KEY `eurokey` ( `is_euro` ), | |
ADD KEY `cnamkey` ( `cont_name`,`cntr_name` ); | |
Select "Drop temp tables"; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_city_blocks_ipv4`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_city_blocks_ipv6`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_blocks_ipv4`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_blocks_ipv6`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_asn_blocks_ipv6`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_country_locations`; | |
DROP TEMPORARY TABLE IF EXISTS `geo_csv_city_locations`; | |
SELECT "Creating functions and procedures"; | |
DELIMITER ;; | |
DROP PROCEDURE IF EXISTS `ip2city`;; | |
CREATE PROCEDURE `ip2city`( | |
fp_ipstr VARCHAR(40) | |
) | |
READS SQL DATA | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_ip, v_pos, v_b1 INT unsigned DEFAULT 0; | |
DECLARE v_place VARCHAR(250) DEFAULT ""; | |
DECLARE v_ip6, v_if6 BIGINT unsigned DEFAULT 0; | |
SET v_pos = LOCATE( '.', fp_ipstr ); | |
IF v_pos THEN | |
SET v_b1 = SUBSTRING(fp_ipstr,1,v_pos-1); | |
SET v_ip = ip4str_to_int( fp_ipstr ); | |
SELECT CONCAT(cl.city_name, IF(LENGTH(cl.city_name), ', ', ''), | |
cl.sub1_name, IF(LENGTH(cl.sub1_name), ', ', ''), | |
cl.sub2_name, IF(LENGTH(cl.sub2_name), ', ', ''), | |
cl.cntr_name) INTO v_place | |
FROM `geo_city_blocks_ipv4` cb | |
JOIN `geo_city_locations` cl ON cb.geonameid = cl.geonameid | |
WHERE cb.ipbyte1 = v_b1 AND cb.ipstart<=v_ip AND cb.ipend>=v_ip; | |
IF ISNULL(v_place) OR NOT LENGTH( v_place ) THEN | |
SELECT ab.as_org INTO v_place | |
FROM `geo_asn_blocks_ipv4` ab | |
WHERE ab.ipbyte1 = v_b1 AND ab.ipstart<=v_ip AND ab.ipend>=v_ip; | |
END IF; | |
ELSE | |
SET v_pos = LOCATE( ':', fp_ipstr ); | |
IF v_pos THEN | |
SET v_b1 = ip6wordval(fp_ipstr,1); | |
SET v_ip6 = (v_b1<<48)+(ip6wordval(fp_ipstr,2)<<32)+ | |
(ip6wordval(fp_ipstr,3)<<16)+ip6wordval(fp_ipstr,4); | |
SET v_if6 = (ip6wordval(fp_ipstr,5)<<48)+(ip6wordval(fp_ipstr,6)<<32)+ | |
(ip6wordval(fp_ipstr,7)<<16)+ip6wordval(fp_ipstr,8); | |
SELECT CONCAT(cl.city_name, IF(LENGTH(cl.city_name), ', ', ''), | |
cl.sub1_name, IF(LENGTH(cl.sub1_name), ', ', ''), | |
cl.sub2_name, IF(LENGTH(cl.sub2_name), ', ', ''), | |
cl.cntr_name) INTO v_place | |
FROM `geo_city_blocks_ipv6` cb | |
JOIN `geo_city_locations` cl ON cb.geonameid = cl.geonameid | |
WHERE cb.ipword1 = v_b1 AND cb.ipstart<=v_ip6 AND cb.ipend>=v_ip6 AND cb.ifstart<=v_if6 AND cb.ifend>=v_if6; | |
IF ISNULL(v_place) OR NOT LENGTH( v_place ) THEN | |
SELECT ab.as_org INTO v_place | |
FROM `geo_asn_blocks_ipv6` ab | |
WHERE ab.ipword1 = v_b1 AND ab.ipstart<=v_ip6 AND ab.ipend>=v_ip6 AND ab.ifstart<=v_if6 AND ab.ifend>=v_if6; | |
END IF; | |
END IF; | |
END IF; | |
SELECT IF(LENGTH(v_place),v_place,"Nothing found"); | |
END ;; | |
DROP PROCEDURE IF EXISTS `ip2map`;; | |
CREATE PROCEDURE `ip2map`( | |
fp_ipstr VARCHAR(40) | |
) | |
READS SQL DATA | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_ip, v_pos, v_b1 INT unsigned DEFAULT 0; | |
DECLARE v_place VARCHAR(250) DEFAULT ""; | |
DECLARE v_ip6, v_if6 BIGINT unsigned DEFAULT 0; | |
SET v_pos = LOCATE( '.', fp_ipstr ); | |
IF v_pos THEN | |
SET v_b1 = SUBSTRING(fp_ipstr,1,v_pos-1); | |
SET v_ip = ip4str_to_int( fp_ipstr ); | |
IF v_ip AND V_b1 THEN | |
SELECT CONCAT("https://www.google.com/maps/@",cb.latitude-0.074,',',cb.longitude,',',gc.gtopo30+6500,'a,35y,358.42h,48.49t/data=!3m1!1e3') INTO v_place | |
FROM geo_city_blocks_ipv4 cb JOIN geo_cities gc ON gc.geonameid = cb.geonameid | |
WHERE cb.ipbyte1 = v_b1 AND cb.ipstart<=v_ip AND cb.ipend>=v_ip; | |
END IF; | |
ELSE | |
SET v_pos = LOCATE( ':', fp_ipstr ); | |
IF v_pos THEN | |
SET v_b1 = ip6wordval(fp_ipstr,1); | |
SET v_ip6 = (v_b1<<48)+(ip6wordval(fp_ipstr,2)<<32)+ | |
(ip6wordval(fp_ipstr,3)<<16)+ip6wordval(fp_ipstr,4); | |
SET v_if6 = (ip6wordval(fp_ipstr,5)<<48)+(ip6wordval(fp_ipstr,6)<<32)+ | |
(ip6wordval(fp_ipstr,7)<<16)+ip6wordval(fp_ipstr,8); | |
SELECT CONCAT("https://www.google.com/maps/@",cb.latitude-0.074,',',cb.longitude,',',gc.gtopo30+6500,'a,35y,358.42h,48.49t/data=!3m1!1e3') INTO v_place | |
FROM `geo_city_blocks_ipv6` cb JOIN geo_cities gc ON gc.geonameid = cb.geonameid | |
WHERE cb.ipword1 = v_b1 AND cb.ipstart<=v_ip6 AND cb.ipend>=v_ip6 AND cb.ifstart<=v_if6 AND cb.ifend>=v_if6; | |
END IF; | |
END IF; | |
SELECT IF(LENGTH(v_place),v_place,"Nothing found"); | |
END ;; | |
DROP FUNCTION IF EXISTS `ip4str_to_int`;; | |
CREATE FUNCTION `ip4str_to_int`( | |
fp_ipstr VARCHAR(255) | |
) RETURNS int(10) unsigned | |
NO SQL | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_part, v_rem VARCHAR(15) DEFAULT ""; | |
DECLARE v_ret,v_pos,v_cnt INT unsigned DEFAULT 0; | |
SET v_rem = fp_ipstr; | |
WHILE v_cnt < 4 DO | |
SET v_pos = LOCATE( '.', v_rem ); | |
IF v_pos > 0 THEN | |
SET v_part = SUBSTRING( v_rem, 1, v_pos - 1); | |
SET v_rem = SUBSTRING( v_rem, v_pos + 1); | |
ELSE | |
SET v_part = v_rem; | |
SET v_rem = ''; | |
END IF; | |
SET v_ret = ( v_ret << 8 ) + v_part; | |
SET v_cnt = v_cnt + 1; | |
END WHILE; | |
RETURN v_ret; | |
END ;; | |
DROP FUNCTION IF EXISTS `ip6str_to_int`;; | |
CREATE FUNCTION `ip6str_to_int`( | |
fp_ipstr VARCHAR(255) | |
) RETURNS BIGINT(20) unsigned | |
NO SQL | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_part,v_rem VARCHAR(40) DEFAULT ""; | |
DECLARE v_pos,v_cnt INT unsigned DEFAULT 0; | |
DECLARE v_ret BIGINT unsigned DEFAULT 0; | |
SET v_pos = LOCATE( '::', fp_ipstr ); | |
IF v_pos > 0 THEN | |
SET v_rem = SUBSTRING( fp_ipstr, 1, v_pos - 1 ); | |
ELSE | |
SET v_rem = fp_ipstr; | |
END IF; | |
WHILE v_cnt < 4 DO | |
SET v_pos = LOCATE( ':', v_rem ); | |
IF v_pos > 0 THEN | |
SET v_part = SUBSTRING( v_rem, 1, v_pos - 1); | |
SET v_rem = SUBSTRING( v_rem, v_pos + 1); | |
ELSE | |
SET v_part = v_rem; | |
SET v_rem = ''; | |
END IF; | |
SET v_ret = ( v_ret << 16 ) + IF(LENGTH(v_part),conv(v_part,16, 10),0); | |
SET v_cnt = v_cnt + 1; | |
END WHILE; | |
RETURN v_ret; | |
END ;; | |
DROP FUNCTION IF EXISTS `ip6words`;; | |
CREATE FUNCTION `ip6words`( | |
fp_ipstr VARCHAR(40), | |
fp_reverse TINYINT | |
) RETURNS INT(3) unsigned | |
NO SQL | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_pos INT unsigned DEFAULT 1; | |
DECLARE v_cnt INT unsigned DEFAULT 0; | |
DECLARE v_str VARCHAR(255) DEFAULT ""; | |
IF fp_reverse THEN | |
SET v_str = REVERSE( fp_ipstr ); | |
ELSE | |
SET v_str = fp_ipstr; | |
END IF; | |
search: REPEAT | |
SET v_pos = LOCATE( ':', v_str, v_pos); | |
IF v_pos THEN | |
SET v_cnt = v_cnt + 1; | |
SET v_pos = v_pos + 1; | |
IF LOCATE( ':', v_str, v_pos ) = v_pos THEN | |
IF v_pos = 2 THEN | |
SET v_cnt = v_cnt - 1; | |
END IF; | |
LEAVE search; | |
END IF; | |
ELSE | |
SET v_cnt = v_cnt + IF(LENGTH(v_str),1,0); | |
END IF; | |
UNTIL NOT v_pos END REPEAT; | |
RETURN v_cnt; | |
END ;; | |
DROP FUNCTION IF EXISTS `ip6wordval`;; | |
CREATE FUNCTION `ip6wordval`( | |
fp_ipstr VARCHAR(40), | |
fp_index TINYINT | |
) RETURNS INT(5) unsigned | |
NO SQL | |
DETERMINISTIC | |
BEGIN | |
DECLARE v_pos,v_lpos INT unsigned DEFAULT 1; | |
DECLARE v_cntf,v_cntl,v_cnt,v_rdx INT unsigned DEFAULT 0; | |
DECLARE v_str,v_rstr VARCHAR(255) DEFAULT ""; | |
SET v_cntf = ip6words( fp_ipstr, 0 ); | |
SET v_cntl = ip6words( fp_ipstr, 1 ); | |
SET v_rdx = 9 - fp_index; | |
IF fp_index <= v_cntf THEN | |
search: WHILE v_cnt < fp_index DO | |
SET v_lpos = v_pos; | |
SET v_pos = LOCATE( ':', fp_ipstr, v_pos); | |
SET v_cnt = v_cnt + 1; | |
IF v_cnt = fp_index THEN | |
SET v_str = SUBSTRING(fp_ipstr, v_lpos,if(v_pos,v_pos-v_lpos,LENGTH(fp_ipstr)-v_lpos)); | |
LEAVE search; | |
END IF; | |
SET v_pos = v_pos + 1; | |
END WHILE; | |
ELSEIF v_rdx <= v_cntl THEN | |
SET v_rstr = REVERSE(fp_ipstr); | |
search2: WHILE v_cnt < v_rdx DO | |
SET v_lpos = v_pos; | |
SET v_pos = LOCATE( ':', v_rstr, v_pos); | |
SET v_cnt = v_cnt + 1; | |
IF v_cnt = v_rdx THEN | |
SET v_str = REVERSE(SUBSTRING(v_rstr, v_lpos,if(v_pos,v_pos-v_lpos,LENGTH(v_rstr)-v_lpos))); | |
LEAVE search2; | |
END IF; | |
SET v_pos = v_pos + 1; | |
END WHILE; | |
END IF; | |
RETURN IF(LENGTH(v_str),CONV(v_str,16,10),0); | |
END ;; | |
DELIMITER ; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment