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