2 DROP FUNCTION IF EXISTS core_cities_merge_country;
4 CREATE FUNCTION core_cities_merge_country() RETURNS INT DETERMINISTIC
6 DECLARE co_done INT DEFAULT FALSE;
8 DECLARE v_count INT DEFAULT 0;
9 DECLARE v_total INT DEFAULT 0;
11 DECLARE v_id INT DEFAULT 0;
12 DECLARE v_iso TEXT DEFAULT '';
13 DECLARE v_local_name TEXT DEFAULT '';
14 -- DECLARE v_type TEXT DEFAULT '';
15 DECLARE v_in_location INT DEFAULT 0;
16 DECLARE v_geo_lat INT DEFAULT 0;
17 DECLARE v_geo_lng INT DEFAULT 0;
19 DECLARE v_id_tmp INT DEFAULT 0;
20 DECLARE v_iso_tmp TEXT DEFAULT '';
21 DECLARE v_local_name_tmp TEXT DEFAULT '';
22 DECLARE v_type_tmp TEXT DEFAULT '';
23 DECLARE v_in_location_tmp INT DEFAULT 0;
25 DECLARE v_id_tmp_tmp INT DEFAULT 0;
27 DECLARE co_csr CURSOR FOR
29 id,iso,local_name,in_location
35 SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'CO';
41 FETCH co_csr INTO v_id,v_iso,v_local_name,v_in_location;
43 SET v_count = v_count + 1;
47 SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso;
50 INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_iso, v_local_name, 0);
53 IF v_count = v_total THEN
68 DROP FUNCTION IF EXISTS core_cities_merge_division;
70 CREATE FUNCTION core_cities_merge_division() RETURNS INT DETERMINISTIC
72 DECLARE re_done INT DEFAULT FALSE;
74 DECLARE v_count INT DEFAULT 0;
75 DECLARE v_total INT DEFAULT 0;
77 DECLARE v_id INT DEFAULT 0;
78 DECLARE v_iso TEXT DEFAULT '';
79 DECLARE v_local_name TEXT DEFAULT '';
80 -- DECLARE v_type TEXT DEFAULT '';
81 DECLARE v_in_location INT DEFAULT 0;
82 DECLARE v_geo_lat INT DEFAULT 0;
83 DECLARE v_geo_lng INT DEFAULT 0;
85 DECLARE v_id_tmp INT DEFAULT 0;
86 DECLARE v_iso_tmp TEXT DEFAULT '';
87 DECLARE v_local_name_tmp TEXT DEFAULT '';
88 DECLARE v_type_tmp TEXT DEFAULT '';
89 DECLARE v_in_location_tmp INT DEFAULT 0;
91 DECLARE v_id_tmp_tmp INT DEFAULT 0;
93 DECLARE re_csr CURSOR FOR
95 id,iso,local_name,in_location
101 SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'RE';
107 FETCH re_csr INTO v_id,v_iso,v_local_name,v_in_location;
109 SET v_count = v_count + 1;
113 SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name;
115 IF(v_id_tmp = 0) THEN
116 IF v_in_location IS NOT NULL THEN
117 SELECT iso, local_name, type INTO v_iso_tmp, v_local_name_tmp, v_type_tmp FROM meta_location WHERE id = v_in_location;
119 SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
123 INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_iso, v_local_name, v_id_tmp);
128 IF v_count = v_total THEN
141 DROP FUNCTION IF EXISTS core_cities_merge_city;
143 CREATE FUNCTION core_cities_merge_city() RETURNS INT DETERMINISTIC
145 DECLARE ci_done INT DEFAULT FALSE;
147 DECLARE v_count INT DEFAULT 0;
148 DECLARE v_total INT DEFAULT 0;
150 DECLARE v_id INT DEFAULT 0;
151 DECLARE v_iso TEXT DEFAULT '';
152 DECLARE v_local_name TEXT DEFAULT '';
153 -- DECLARE v_type TEXT DEFAULT '';
154 DECLARE v_in_location INT DEFAULT 0;
155 DECLARE v_geo_lat INT DEFAULT 0;
156 DECLARE v_geo_lng INT DEFAULT 0;
158 DECLARE v_id_tmp INT DEFAULT 0;
159 DECLARE v_iso_tmp TEXT DEFAULT '';
160 DECLARE v_local_name_tmp TEXT DEFAULT '';
161 DECLARE v_type_tmp TEXT DEFAULT '';
162 DECLARE v_in_location_tmp INT DEFAULT 0;
164 DECLARE v_id_tmp_tmp INT DEFAULT 0;
166 DECLARE ci_csr CURSOR FOR
168 id,iso,local_name,in_location,geo_lat,geo_lng
174 SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'CI';
180 FETCH ci_csr INTO v_id,v_iso,v_local_name,v_in_location,v_geo_lat,v_geo_lng;
182 SET v_count = v_count + 1;
185 SET v_id_tmp_tmp = 0;
187 SELECT id INTO v_id_tmp FROM core_geoip_city WHERE name = v_local_name LIMIT 1;
189 IF(v_id_tmp = 0) THEN
190 IF v_in_location IS NOT NULL THEN
192 SELECT iso, local_name, type, in_location INTO v_iso_tmp, v_local_name_tmp, v_type_tmp, v_in_location_tmp FROM meta_location WHERE id = v_in_location;
194 IF v_type_tmp = 'CO' THEN
195 SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
197 INSERT INTO core_geoip_city (name, country_id) VALUES (v_local_name, v_id_tmp);
200 IF v_type_tmp = 'RE' THEN
201 SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name_tmp;
203 SELECT iso, local_name, type INTO v_iso_tmp, v_local_name_tmp, v_type_tmp FROM meta_location WHERE id = v_in_location_tmp;
205 SELECT id INTO v_id_tmp_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
207 INSERT INTO core_geoip_city (name, country_id, division_id) VALUES (v_local_name, v_id_tmp_tmp, v_id_tmp);
212 IF v_geo_lat IS NOT NULL OR v_geo_lng IS NOT NULL THEN
213 SET v_id_tmp = LAST_INSERT_ID();
215 INSERT INTO core_geoip_location (latitude, longitude, city_id) VALUES (v_geo_lat, v_geo_lng, v_id_tmp);
221 IF v_count = v_total THEN
233 -----------------------------------------------------------------------------------------------------------------
236 DROP FUNCTION IF EXISTS core_country_locations;
238 CREATE FUNCTION core_country_locations() RETURNS INT DETERMINISTIC
240 DECLARE v_count INT DEFAULT 0;
241 DECLARE v_total INT DEFAULT 0;
243 DECLARE v_geoname_id INT DEFAULT 0;
244 DECLARE v_continent_code TEXT DEFAULT '';
245 DECLARE v_continent_name TEXT DEFAULT '';
246 DECLARE v_country_iso_code TEXT DEFAULT '';
247 DECLARE v_country_name TEXT DEFAULT '';
249 DECLARE v_country_id INT DEFAULT 0;
250 DECLARE v_continent_id INT DEFAULT 0;
252 DECLARE csr CURSOR FOR
254 geoname_id,continent_code,continent_name,country_iso_code,country_name
258 SELECT COUNT(geoname_id) INTO v_total FROM country_locations;
264 FETCH csr INTO v_geoname_id,v_continent_code,v_continent_name,v_country_iso_code,v_country_name;
266 SET v_count = v_count + 1;
268 SET v_country_id = 0;
269 SET v_continent_id = 0;
271 IF (v_continent_code != '') THEN
272 SELECT id INTO v_continent_id FROM core_geoip_continent WHERE code = v_continent_code;
274 IF v_continent_id = 0 THEN
275 INSERT INTO core_geoip_continent (code, name) VALUES (v_continent_code, v_continent_name);
276 SET v_continent_id = LAST_INSERT_ID();
281 IF (v_country_iso_code != '') THEN
283 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
285 IF v_country_id = 0 THEN
286 INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_country_iso_code, v_country_name, v_continent_id);
291 IF v_count = v_total THEN
304 DROP FUNCTION IF EXISTS core_country_blocks;
306 CREATE FUNCTION core_country_blocks() RETURNS INT DETERMINISTIC
308 DECLARE v_count INT DEFAULT 0;
309 DECLARE v_total INT DEFAULT 0;
311 DECLARE v_geoname_id INT DEFAULT 0;
312 DECLARE v_network_start_ip TEXT DEFAULT '';
313 DECLARE v_network_mask_length INT DEFAULT 0;
314 DECLARE v_is_anonymous_proxy INT DEFAULT 0;
315 DECLARE v_is_satellite_provider INT DEFAULT 0;
317 DECLARE v_country_iso_code TEXT DEFAULT '';
319 DECLARE v_country_id INT DEFAULT 0;
321 DECLARE csr CURSOR FOR
323 network_start_ip,network_mask_length,geoname_id,is_anonymous_proxy,is_satellite_provider
329 registered_country_geoname_id != 0
331 geoname_id = registered_country_geoname_id
333 network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
335 SELECT COUNT(network_start_ip) INTO v_total FROM country_blocks WHERE geoname_id != 0 AND registered_country_geoname_id != 0 AND geoname_id = registered_country_geoname_id AND network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
341 FETCH csr INTO v_network_start_ip,v_network_mask_length,v_geoname_id,v_is_anonymous_proxy,v_is_satellite_provider;
343 SET v_count = v_count + 1;
345 SET v_country_id = 0;
347 SELECT country_iso_code INTO v_country_iso_code FROM country_locations WHERE geoname_id = v_geoname_id;
349 IF v_country_iso_code != '' THEN
350 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
352 IF v_country_id != 0 THEN
353 INSERT INTO core_geoip_country_network_mapping (start_ip, mask_length, country_id, is_anonymous_proxy, is_satellite_provider) VALUES (SUBSTRING_INDEX(v_network_start_ip,':','-1'), POW(2, 128-v_network_mask_length),v_country_id,v_is_anonymous_proxy,v_is_satellite_provider);
358 IF v_count = v_total THEN
374 DROP FUNCTION IF EXISTS core_city_locations;
376 CREATE FUNCTION core_city_locations() RETURNS INT DETERMINISTIC
378 DECLARE v_count INT DEFAULT 0;
379 DECLARE v_total INT DEFAULT 0;
381 DECLARE v_country_iso_code TEXT DEFAULT '';
382 DECLARE v_subdivision_iso_code TEXT DEFAULT '';
383 DECLARE v_subdivision_name TEXT DEFAULT '';
384 DECLARE v_city_name TEXT DEFAULT '';
385 DECLARE v_metro_code TEXT DEFAULT '';
386 DECLARE v_time_zone TEXT DEFAULT '';
388 DECLARE v_country_id INT DEFAULT 0;
389 DECLARE v_division_id INT DEFAULT 0;
390 DECLARE v_city_id INT DEFAULT 0;
392 DECLARE csr CURSOR FOR
394 country_iso_code,subdivision_iso_code,subdivision_name,city_name,metro_code,time_zone
398 subdivision_name != '' OR city_name != '';
400 SELECT COUNT(geoname_id) INTO v_total FROM city_locations WHERE subdivision_name != '' OR city_name != '';;
406 FETCH csr INTO v_country_iso_code,v_subdivision_iso_code,v_subdivision_name,v_city_name,v_metro_code,v_time_zone;
408 SET v_count = v_count + 1;
410 SET v_country_id = 0;
411 SET v_division_id = 0;
415 IF (v_country_iso_code != '') THEN
416 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
419 IF v_subdivision_name != '' THEN
420 SELECT id INTO v_division_id FROM core_geoip_division WHERE name = v_subdivision_name AND country_id = v_country_id;
422 IF v_division_id = 0 THEN
423 INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_subdivision_iso_code, v_subdivision_name, v_country_id);
424 SET v_division_id = LAST_INSERT_ID();
430 IF v_city_name != '' THEN
432 SELECT id INTO v_city_id FROM core_geoip_city WHERE name = v_city_name AND country_id = v_country_id AND division_id = v_division_id;
434 IF v_city_id = 0 THEN
435 INSERT INTO core_geoip_city (name, country_id, division_id, metro_code, time_zone) VALUES (v_city_name, v_country_id, v_division_id, v_metro_code, v_time_zone);
441 IF v_count = v_total THEN
456 DROP FUNCTION IF EXISTS core_city_blocks;
458 CREATE FUNCTION core_city_blocks() RETURNS INT DETERMINISTIC
460 DECLARE v_count INT DEFAULT 0;
461 DECLARE v_total INT DEFAULT 0;
463 DECLARE v_network_start_ip TEXT DEFAULT '';
464 DECLARE v_network_mask_length INT DEFAULT 0;
465 DECLARE v_geoname_id INT DEFAULT 0;
466 DECLARE v_latitude DECIMAL(11,8) DEFAULT 0;
467 DECLARE v_longitude DECIMAL(11,8) DEFAULT 0;
468 DECLARE v_is_anonymous_proxy INT DEFAULT 0;
469 DECLARE v_is_satellite_provider INT DEFAULT 0;
471 DECLARE v_city_id INT DEFAULT 0;
472 DECLARE v_country_iso_code TEXT DEFAULT '';
473 DECLARE v_subdivision_name TEXT DEFAULT '';
474 DECLARE v_city_name TEXT DEFAULT '';
476 DECLARE csr CURSOR FOR
478 network_start_ip,network_mask_length,geoname_id,latitude, longitude, is_anonymous_proxy,is_satellite_provider
484 network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
486 SELECT COUNT(network_start_ip) INTO v_total FROM city_blocks WHERE geoname_id != 0 AND network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
492 FETCH csr INTO v_network_start_ip,v_network_mask_length,v_geoname_id,v_latitude,v_longitude,v_is_anonymous_proxy,v_is_satellite_provider;
494 SET v_count = v_count + 1;
497 SET v_city_name = '';
499 SELECT country_iso_code,subdivision_iso_name,city_name INTO v_city_name FROM city_locations WHERE geoname_id = v_geoname_id;
501 IF (v_city_name != '') THEN
502 SELECT id INTO v_city_id FROM core_geoip_city WHERE name = v_city_name
506 IF v_country_iso_code != '' THEN
507 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
509 IF v_country_id != 0 THEN
510 INSERT INTO core_geoip_country_network_mapping (start_ip, mask_length, country_id, is_anonymous_proxy, is_satellite_provider) VALUES (SUBSTRING_INDEX(v_network_start_ip,':','-1'), POW(2, 128-v_network_mask_length),v_country_id,v_is_anonymous_proxy,v_is_satellite_provider);
515 IF v_count = v_total THEN