mysql/core_cities_merge.sql
[Pman.Core] / mysql / core_cities_merge.sql
1
2 DROP FUNCTION IF EXISTS core_cities_merge_country;
3 DELIMITER $$
4 CREATE FUNCTION core_cities_merge_country()  RETURNS INT DETERMINISTIC
5     BEGIN
6         DECLARE co_done INT DEFAULT FALSE;
7
8         DECLARE v_count INT DEFAULT 0;
9         DECLARE v_total INT DEFAULT 0;
10
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;
18
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;
24
25         DECLARE v_id_tmp_tmp INT DEFAULT 0;
26
27         DECLARE co_csr CURSOR FOR 
28         SELECT 
29             id,iso,local_name,in_location
30         FROM 
31             meta_location
32         WHERE
33             type = 'CO';
34         
35         SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'CO';
36
37         SET v_count = 0;
38
39         OPEN co_csr;
40         co_loop: LOOP
41             FETCH co_csr INTO v_id,v_iso,v_local_name,v_in_location;
42             
43             SET v_count = v_count + 1;
44
45             SET v_id_tmp = 0;
46
47             SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso;
48
49             IF(v_id_tmp = 0) THEN
50                 INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_iso, v_local_name, 0);
51             END IF;
52                 
53             IF v_count = v_total THEN
54               LEAVE co_loop;
55             END IF;
56
57         END LOOP;
58         CLOSE co_csr;
59
60
61         RETURN v_count;
62     END $$
63 DELIMITER ; 
64
65
66
67
68 DROP FUNCTION IF EXISTS core_cities_merge_division;
69 DELIMITER $$
70 CREATE FUNCTION core_cities_merge_division()  RETURNS INT DETERMINISTIC
71     BEGIN
72         DECLARE re_done INT DEFAULT FALSE;
73         
74         DECLARE v_count INT DEFAULT 0;
75         DECLARE v_total INT DEFAULT 0;
76
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;
84
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;
90
91         DECLARE v_id_tmp_tmp INT DEFAULT 0;
92
93         DECLARE re_csr CURSOR FOR 
94         SELECT 
95             id,iso,local_name,in_location
96         FROM 
97             meta_location
98         WHERE
99             type = 'RE';
100         
101         SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'RE';
102
103         SET v_count = 0;
104
105         OPEN re_csr;
106         re_loop: LOOP
107             FETCH re_csr INTO v_id,v_iso,v_local_name,v_in_location;
108             
109             SET v_count = v_count + 1;
110
111             SET v_id_tmp = 0;
112
113             IF v_in_location IS NOT NULL
114
115             END IF;
116
117             SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name;
118
119             IF(v_id_tmp = 0) THEN
120                 IF v_in_location IS NOT NULL THEN
121                     SELECT iso, local_name, type INTO v_iso_tmp, v_local_name_tmp, v_type_tmp FROM meta_location WHERE id = v_in_location;
122                     
123                     SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
124
125                 END IF;
126                 
127                 INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_iso, v_local_name, v_id_tmp);
128             END IF;
129
130 --             ITERATE re_loop;
131                 
132             IF v_count = v_total THEN
133               LEAVE re_loop;
134             END IF;
135
136         END LOOP;
137         CLOSE re_csr;
138
139         RETURN v_count;
140     END $$
141 DELIMITER ; 
142
143
144
145 DROP FUNCTION IF EXISTS core_cities_merge_city;
146 DELIMITER $$
147 CREATE FUNCTION core_cities_merge_city()  RETURNS INT DETERMINISTIC
148     BEGIN
149         DECLARE ci_done INT DEFAULT FALSE;
150
151         DECLARE v_count INT DEFAULT 0;
152         DECLARE v_total INT DEFAULT 0;
153
154         DECLARE v_id INT DEFAULT 0;
155         DECLARE v_iso TEXT DEFAULT '';
156         DECLARE v_local_name TEXT DEFAULT '';
157 --         DECLARE v_type TEXT DEFAULT '';
158         DECLARE v_in_location INT DEFAULT 0;
159         DECLARE v_geo_lat INT DEFAULT 0;
160         DECLARE v_geo_lng INT DEFAULT 0;
161
162         DECLARE v_id_tmp INT DEFAULT 0;
163         DECLARE v_iso_tmp TEXT DEFAULT '';
164         DECLARE v_local_name_tmp TEXT DEFAULT '';
165         DECLARE v_type_tmp TEXT DEFAULT '';
166         DECLARE v_in_location_tmp INT DEFAULT 0;
167
168         DECLARE v_id_tmp_tmp INT DEFAULT 0;
169
170         DECLARE ci_csr CURSOR FOR 
171         SELECT 
172             id,iso,local_name,in_location,geo_lat,geo_lng
173         FROM 
174             meta_location
175         WHERE
176             type = 'CI';
177
178         SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'CI';
179
180         SET v_count = 0;
181
182         OPEN ci_csr;
183         ci_loop: LOOP
184             FETCH ci_csr INTO v_id,v_iso,v_local_name,v_in_location,v_geo_lat,v_geo_lng;
185             
186             SET v_count = v_count + 1;
187
188             SET v_id_tmp = 0;
189             SET v_id_tmp_tmp = 0;
190
191             SELECT id INTO v_id_tmp FROM core_geoip_city WHERE name = v_local_name LIMIT 1;
192
193             IF(v_id_tmp = 0) THEN
194                 IF v_in_location IS NOT NULL THEN
195
196                     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;
197                     
198                     IF v_type_tmp = 'CO' THEN
199                         SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
200                         
201                         INSERT INTO core_geoip_city (name, country_id) VALUES (v_local_name, v_id_tmp);
202                     END IF;
203
204                     IF v_type_tmp = 'RE' THEN
205                         SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name_tmp;
206                         
207                         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;
208                         
209                         SELECT id INTO v_id_tmp_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
210                         
211                         INSERT INTO core_geoip_city (name, country_id, division_id) VALUES (v_local_name, v_id_tmp_tmp, v_id_tmp);
212                     END IF;
213                     
214                 END IF;
215
216                 IF v_geo_lat IS NOT NULL OR v_geo_lng IS NOT NULL THEN
217                     SET v_id_tmp = LAST_INSERT_ID();
218
219                     INSERT INTO core_geoip_location (latitude, longitude, city_id) VALUES (v_geo_lat, v_geo_lng, v_id_tmp);
220                 END IF;
221                 
222                 
223             END IF;
224
225             IF v_count = v_total THEN
226               LEAVE ci_loop;
227             END IF;
228
229         END LOOP;
230         CLOSE ci_csr;
231
232         RETURN v_count;
233     END $$
234 DELIMITER ; 
235
236
237 -----------------------------------------------------------------------------------------------------------------
238
239
240 DROP FUNCTION IF EXISTS core_country_locations;
241 DELIMITER $$
242 CREATE FUNCTION core_country_locations()  RETURNS INT DETERMINISTIC
243     BEGIN
244         DECLARE v_count INT DEFAULT 0;
245         DECLARE v_total INT DEFAULT 0;
246
247         DECLARE v_geoname_id INT DEFAULT 0;
248         DECLARE v_continent_code TEXT DEFAULT '';
249         DECLARE v_continent_name TEXT DEFAULT '';
250         DECLARE v_country_iso_code TEXT DEFAULT '';
251         DECLARE v_country_name TEXT DEFAULT '';
252
253         DECLARE v_country_id INT DEFAULT 0;
254         DECLARE v_continent_id INT DEFAULT 0;
255
256         DECLARE csr CURSOR FOR 
257         SELECT 
258             geoname_id,continent_code,continent_name,country_iso_code,country_name
259         FROM 
260             country_locations;
261         
262         SELECT COUNT(geoname_id) INTO v_total FROM country_locations;
263
264         SET v_count = 0;
265
266         OPEN csr;
267         read_loop: LOOP
268             FETCH csr INTO v_geoname_id,v_continent_code,v_continent_name,v_country_iso_code,v_country_name;
269             
270             SET v_count = v_count + 1;
271             
272             SET v_country_id = 0;
273             SET v_continent_id = 0;
274             
275             IF (v_continent_code != '') THEN
276                 SELECT id INTO v_continent_id FROM core_geoip_continent WHERE code = v_continent_code;
277
278                 IF v_continent_id = 0 THEN
279                     INSERT INTO core_geoip_continent (code, name) VALUES (v_continent_code, v_continent_name);
280                     SET v_continent_id = LAST_INSERT_ID();
281                 END IF;
282                 
283             END IF;
284
285             IF (v_country_iso_code != '') THEN
286                 
287                 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
288
289                 IF v_country_id = 0 THEN
290                     INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_country_iso_code, v_country_name, v_continent_id);
291                 END IF;
292                 
293             END IF;
294     
295             IF v_count = v_total THEN
296               LEAVE read_loop;
297             END IF;
298
299         END LOOP;
300         CLOSE csr;
301
302
303         RETURN v_count;
304     END $$
305 DELIMITER ; 
306
307
308 DROP FUNCTION IF EXISTS core_country_blocks;
309 DELIMITER $$
310 CREATE FUNCTION core_country_blocks()  RETURNS INT DETERMINISTIC
311     BEGIN
312         DECLARE v_count INT DEFAULT 0;
313         DECLARE v_total INT DEFAULT 0;
314         
315         DECLARE v_geoname_id INT DEFAULT 0;
316         DECLARE v_network_start_ip TEXT DEFAULT '';
317         DECLARE v_network_mask_length INT DEFAULT 0;
318         DECLARE v_is_anonymous_proxy INT DEFAULT 0;
319         DECLARE v_is_satellite_provider INT DEFAULT 0;
320
321         DECLARE v_country_iso_code TEXT DEFAULT '';
322
323         DECLARE v_country_id INT DEFAULT 0;
324
325         DECLARE csr CURSOR FOR 
326         SELECT 
327             network_start_ip,network_mask_length,geoname_id,is_anonymous_proxy,is_satellite_provider
328         FROM 
329             country_blocks
330         WHERE 
331                 geoname_id != 0 
332             AND 
333                 registered_country_geoname_id != 0 
334             AND 
335                 geoname_id = registered_country_geoname_id
336             AND
337                 network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
338         
339         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]+$';
340
341         SET v_count = 0;
342
343         OPEN csr;
344         read_loop: LOOP
345             FETCH csr INTO v_network_start_ip,v_network_mask_length,v_geoname_id,v_is_anonymous_proxy,v_is_satellite_provider;
346             
347             SET v_count = v_count + 1;
348             
349             SET v_country_id = 0;
350
351             SELECT country_iso_code INTO v_country_iso_code FROM country_locations WHERE geoname_id = v_geoname_id;
352
353             IF v_country_iso_code != '' THEN
354                 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
355
356                 IF v_country_id != 0 THEN
357                     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                 END IF;
359
360             END IF;
361             
362             IF v_count = v_total THEN
363               LEAVE read_loop;
364             END IF;
365
366         END LOOP;
367         CLOSE csr;
368
369
370         RETURN v_count;
371     END $$
372 DELIMITER ; 
373
374
375
376
377
378 DROP FUNCTION IF EXISTS core_city_locations;
379 DELIMITER $$
380 CREATE FUNCTION core_city_locations()  RETURNS INT DETERMINISTIC
381     BEGIN
382         DECLARE v_count INT DEFAULT 0;
383         DECLARE v_total INT DEFAULT 0;
384
385         DECLARE v_country_iso_code TEXT DEFAULT '';
386         DECLARE v_subdivision_iso_code TEXT DEFAULT '';
387         DECLARE v_subdivision_name TEXT DEFAULT '';
388         DECLARE v_city_name TEXT DEFAULT '';
389         DECLARE v_metro_code TEXT DEFAULT '';
390         DECLARE v_time_zone TEXT DEFAULT '';
391
392         DECLARE v_country_id INT DEFAULT 0;
393         DECLARE v_division_id INT DEFAULT 0;
394         DECLARE v_city_id INT DEFAULT 0;
395
396         DECLARE csr CURSOR FOR 
397         SELECT 
398             country_iso_code,subdivision_iso_code,subdivision_name,city_name,metro_code,time_zone
399         FROM 
400             city_locations
401         WHERE
402             subdivision_name != '' OR city_name != '';
403         
404         SELECT COUNT(geoname_id) INTO v_total FROM city_locations WHERE subdivision_name != '' OR city_name != '';;
405
406         SET v_count = 0;
407
408         OPEN csr;
409         read_loop: LOOP
410             FETCH csr INTO v_country_iso_code,v_subdivision_iso_code,v_subdivision_name,v_city_name,v_metro_code,v_time_zone;
411             
412             SET v_count = v_count + 1;
413             
414             SET v_country_id = 0;
415             SET v_division_id = 0;
416             SET v_city_id = 0;
417             
418             
419             IF (v_country_iso_code != '') THEN
420                 SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
421             END IF;
422     
423             IF v_subdivision_name != '' THEN
424                 SELECT id INTO v_division_id FROM core_geoip_division WHERE name = v_subdivision_name AND country_id = v_country_id;
425
426                 IF v_division_id = 0 THEN
427                     INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_subdivision_iso_code, v_subdivision_name, v_country_id);
428                     SET v_division_id = LAST_INSERT_ID();
429                 END IF;
430                 
431
432             END IF;
433
434             IF v_city_name != '' THEN
435                 
436                 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;
437                 
438                 IF v_city_id = 0 THEN
439                     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);
440
441                 END IF;
442
443             END IF;
444
445             IF v_count = v_total THEN
446               LEAVE read_loop;
447             END IF;
448
449         END LOOP;
450         CLOSE csr;
451
452
453         RETURN v_count;
454     END $$
455 DELIMITER ; 
456
457
458
459 DROP FUNCTION IF EXISTS core_city_blocks_mapping;
460 DELIMITER $$
461 CREATE FUNCTION core_city_blocks_mapping()  RETURNS INT DETERMINISTIC
462     BEGIN
463         DECLARE v_count INT DEFAULT 0;
464         DECLARE v_total INT DEFAULT 0;
465         
466         
467         DECLARE v_geoname_id INT DEFAULT 0;
468
469         DECLARE v_country_id INT DEFAULT 0;
470         DECLARE v_divison_id INT DEFAULT 0;
471         DECLARE v_city_id INT DEFAULT 0;
472         DECLARE v_mapping_id INT DEFAULT 0;
473         DECLARE v_country_iso_code TEXT DEFAULT '';
474         DECLARE v_subdivision_name TEXT DEFAULT '';
475         DECLARE v_city_name TEXT DEFAULT '';
476
477         DECLARE csr CURSOR FOR 
478         SELECT 
479             DISTINCT(geoname_id)
480         FROM 
481             city_blocks
482         WHERE 
483                 geoname_id != 0
484             AND
485                 network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
486         
487         SELECT COUNT(DISTINCT(geoname_id)) INTO v_total FROM city_blocks WHERE geoname_id != 0  AND network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
488
489         SET v_count = 0;
490
491         OPEN csr;
492         read_loop: LOOP
493             FETCH csr INTO v_geoname_id;
494             
495             SET v_count = v_count + 1;
496             
497             SET v_country_id = 0;
498             SET v_divison_id = 0;
499             SET v_city_id = 0;
500             SET v_mapping_id = 0;
501
502             SET v_country_iso_code = '';
503             SET v_subdivision_name = '';
504             SET v_city_name = '';
505
506             SELECT id INTO v_mapping_id FROM city_blocks_mapping WHERE geoname_id = v_geoname_id AND city_id = v_city_id;
507             
508             IF v_mapping_id = 0 THEN
509                 SELECT country_iso_code,subdivision_name,city_name INTO v_country_iso_code, v_subdivision_name, v_city_name FROM city_locations WHERE geoname_id = v_geoname_id;
510
511                 IF v_country_iso_code != '' THEN
512                     SELECT id INTO v_country_id FROM core_geoip_country WHERE code = v_country_iso_code;
513                 END IF;
514
515                 IF v_subdivision_name != '' THEN
516                     SELECT id INTO v_divison_id FROM core_geoip_division WHERE name = v_subdivision_name AND country_id = v_country_id;
517                 END IF;
518
519                 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_divison_id;
520
521                 IF v_city_id != 0 THEN
522                     INSERT INTO city_blocks_mapping (geoname_id, city_id) VALUES (v_geoname_id, v_city_id);
523                     
524                 END IF;
525
526             END IF;
527             
528             
529             IF v_count = v_total THEN
530               LEAVE read_loop;
531             END IF;
532
533         END LOOP;
534         CLOSE csr;
535
536         RETURN v_count;
537     END $$
538 DELIMITER ; 
539
540
541 -- 
542 -- 
543 -- DROP FUNCTION IF EXISTS core_city_blocks;
544 -- DELIMITER $$
545 -- CREATE FUNCTION core_city_blocks()  RETURNS INT DETERMINISTIC
546 --     BEGIN
547 --         DECLARE v_count INT DEFAULT 0;
548 --         DECLARE v_total INT DEFAULT 0;
549 --         
550 --         DECLARE v_network_start_ip TEXT DEFAULT '';
551 --         DECLARE v_network_mask_length INT DEFAULT 0;
552 --         DECLARE v_geoname_id INT DEFAULT 0;
553 --         DECLARE v_latitude DECIMAL(11,8) DEFAULT 0;
554 --         DECLARE v_longitude DECIMAL(11,8) DEFAULT 0;
555 --         DECLARE v_is_anonymous_proxy INT DEFAULT 0;
556 --         DECLARE v_is_satellite_provider INT DEFAULT 0;
557 -- 
558 --         
559 --         DECLARE v_city_id INT DEFAULT 0;
560 --         DECLARE v_mapping_id INT DEFAULT 0;
561 -- 
562 --         DECLARE csr CURSOR FOR 
563 --         SELECT 
564 --             network_start_ip,network_mask_length,geoname_id,latitude, longitude, is_anonymous_proxy,is_satellite_provider
565 --         FROM 
566 --             city_blocks
567 --         WHERE 
568 --                 geoname_id != 0
569 --             AND
570 --                 network_start_ip REGEXP '::ffff:[0-9]+.[0-9]+.[0-9]+.[0-9]+$';
571 --         
572 --         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]+$';
573 -- 
574 --         SET v_count = 0;
575 -- 
576 --         OPEN csr;
577 --         read_loop: LOOP
578 --             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;
579 --             
580 --             SET v_count = v_count + 1;
581 --             
582 --             SET v_city_id = 0;
583 --             SET v_mapping_id = 0;
584 -- 
585 --             SELECT id, city_id INTO v_mapping_id, v_city_id FROM city_blocks_mapping WHERE geoname_id = v_geoname_id;
586 -- 
587 --             IF v_mapping_id != 0 THEN
588 -- 
589 --                 INSERT INTO core_geoip_location (latitude, longitude, city_id) VALUES (v_latitude, v_longitude, v_city_id);
590 -- 
591 --                 INSERT INTO core_geoip_city_network_mapping (start_ip, mask_length, city_id, is_anonymous_proxy, is_satellite_provider) VALUES (SUBSTRING_INDEX(v_network_start_ip,':','-1'), POW(2, 128-v_network_mask_length),v_city_id,v_is_anonymous_proxy,v_is_satellite_provider);
592 --                 
593 --             END IF;
594 --             
595 --             IF v_count = v_total THEN
596 --               LEAVE read_loop;
597 --             END IF;
598 -- 
599 --         END LOOP;
600 --         CLOSE csr;
601 -- 
602 --         RETURN v_count;
603 --     END $$
604 -- DELIMITER ;