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
10         DECLARE v_id INT DEFAULT 0;
11         DECLARE v_iso TEXT DEFAULT '';
12         DECLARE v_local_name TEXT DEFAULT '';
13 --         DECLARE v_type TEXT DEFAULT '';
14         DECLARE v_in_location INT DEFAULT 0;
15         DECLARE v_geo_lat INT DEFAULT 0;
16         DECLARE v_geo_lng INT DEFAULT 0;
17
18         DECLARE v_id_tmp INT DEFAULT 0;
19         DECLARE v_iso_tmp TEXT DEFAULT '';
20         DECLARE v_local_name_tmp TEXT DEFAULT '';
21         DECLARE v_type_tmp TEXT DEFAULT '';
22         DECLARE v_in_location_tmp INT DEFAULT 0;
23
24         DECLARE v_id_tmp_tmp INT DEFAULT 0;
25
26         DECLARE co_csr CURSOR FOR 
27         SELECT 
28             id,iso,local_name,in_location
29         FROM 
30             meta_location
31         WHERE
32             type = 'CO';
33         DECLARE CONTINUE HANDLER FOR NOT FOUND SET co_done = TRUE;
34
35         SET v_count = 0;
36
37         OPEN co_csr;
38         co_loop: LOOP
39             FETCH co_csr INTO v_id,v_iso,v_local_name,v_in_location;
40             
41             SET v_count = v_count + 1;
42
43             SET v_id_tmp = 0;
44
45 --             SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso;
46
47 --             IF(v_id_tmp = 0) THEN
48 --                 INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_iso, v_local_name, 0);
49 --             END IF;
50                 
51             IF co_done THEN
52               LEAVE co_loop;
53             END IF;
54
55         END LOOP;
56         CLOSE co_csr;
57
58
59         RETURN v_count;
60     END $$
61 DELIMITER ; 
62
63
64
65
66 DROP FUNCTION IF EXISTS core_cities_merge_division;
67 DELIMITER $$
68 CREATE FUNCTION core_cities_merge_division()  RETURNS INT DETERMINISTIC
69     BEGIN
70         DECLARE re_done INT DEFAULT FALSE;
71
72         DECLARE v_count INT DEFAULT 0;
73         DECLARE v_id INT DEFAULT 0;
74         DECLARE v_iso TEXT DEFAULT '';
75         DECLARE v_local_name TEXT DEFAULT '';
76 --         DECLARE v_type TEXT DEFAULT '';
77         DECLARE v_in_location INT DEFAULT 0;
78         DECLARE v_geo_lat INT DEFAULT 0;
79         DECLARE v_geo_lng INT DEFAULT 0;
80
81         DECLARE v_id_tmp INT DEFAULT 0;
82         DECLARE v_iso_tmp TEXT DEFAULT '';
83         DECLARE v_local_name_tmp TEXT DEFAULT '';
84         DECLARE v_type_tmp TEXT DEFAULT '';
85         DECLARE v_in_location_tmp INT DEFAULT 0;
86
87         DECLARE v_id_tmp_tmp INT DEFAULT 0;
88
89         DECLARE re_csr CURSOR FOR 
90         SELECT 
91             id,iso,local_name,in_location
92         FROM 
93             meta_location
94         WHERE
95             type = 'RE';
96         DECLARE CONTINUE HANDLER FOR NOT FOUND SET re_done = TRUE;
97         
98         SET v_count = 0;
99
100         OPEN re_csr;
101         re_loop: LOOP
102             FETCH re_csr INTO v_id,v_iso,v_local_name,v_in_location;
103             
104             SET v_count = v_count + 1;
105
106             SET v_id_tmp = 0;
107
108             SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name;
109
110             IF(v_id_tmp = 0) THEN
111                 IF v_in_location IS NOT NULL THEN
112                     SELECT iso, local_name, type INTO v_iso_tmp, v_local_name_tmp, v_type_tmp FROM meta_location WHERE id = v_in_location;
113                     
114                     SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
115
116                 END IF;
117                 
118                 INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_iso, v_local_name, v_id_tmp);
119             END IF;
120
121 --             ITERATE re_loop;
122                 
123             IF re_done THEN
124               LEAVE re_loop;
125             END IF;
126
127         END LOOP;
128         CLOSE re_csr;
129
130         RETURN v_count;
131     END $$
132 DELIMITER ; 
133
134
135
136 DROP FUNCTION IF EXISTS core_cities_merge_city;
137 DELIMITER $$
138 CREATE FUNCTION core_cities_merge_city()  RETURNS INT DETERMINISTIC
139     BEGIN
140         DECLARE ci_done INT DEFAULT FALSE;
141
142         DECLARE v_count INT DEFAULT 0;
143
144         DECLARE v_id INT DEFAULT 0;
145         DECLARE v_iso TEXT DEFAULT '';
146         DECLARE v_local_name TEXT DEFAULT '';
147 --         DECLARE v_type TEXT DEFAULT '';
148         DECLARE v_in_location INT DEFAULT 0;
149         DECLARE v_geo_lat INT DEFAULT 0;
150         DECLARE v_geo_lng INT DEFAULT 0;
151
152         DECLARE v_id_tmp INT DEFAULT 0;
153         DECLARE v_iso_tmp TEXT DEFAULT '';
154         DECLARE v_local_name_tmp TEXT DEFAULT '';
155         DECLARE v_type_tmp TEXT DEFAULT '';
156         DECLARE v_in_location_tmp INT DEFAULT 0;
157
158         DECLARE v_id_tmp_tmp INT DEFAULT 0;
159
160         DECLARE ci_csr CURSOR FOR 
161         SELECT 
162             id,iso,local_name,in_location,geo_lat,geo_lng
163         FROM 
164             meta_location
165         WHERE
166             type = 'CI';
167         DECLARE CONTINUE HANDLER FOR NOT FOUND SET ci_done = TRUE;
168
169         SET v_count = 0;
170
171         OPEN ci_csr;
172         ci_loop: LOOP
173             FETCH ci_csr INTO v_id,v_iso,v_local_name,v_in_location,v_geo_lat,v_geo_lng;
174             
175             SET v_count = v_count + 1;
176
177             SET v_id_tmp = 0;
178             SET v_id_tmp_tmp = 0;
179
180             SELECT id INTO v_id_tmp FROM core_geoip_city WHERE name = v_local_name LIMIT 1;
181
182             IF(v_id_tmp = 0) THEN
183                 IF v_in_location IS NOT NULL THEN
184
185                     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;
186                     
187                     IF v_type_tmp = 'CO' THEN
188                         SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
189                         
190                         INSERT INTO core_geoip_city (name, country_id) VALUES (v_local_name, v_id_tmp);
191                     END IF;
192
193                     IF v_type_tmp = 'RE' THEN
194                         SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name_tmp;
195                         
196                         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;
197                         
198                         SELECT id INTO v_id_tmp_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
199                         
200                         INSERT INTO core_geoip_city (name, country_id, division_id) VALUES (v_local_name, v_id_tmp_tmp, v_id_tmp);
201                     END IF;
202                     
203                 END IF;
204
205                 IF v_geo_lat IS NOT NULL OR v_geo_lng IS NOT NULL THEN
206                     SET v_id_tmp = LAST_INSERT_ID();
207
208                     INSERT INTO core_geoip_location (latitude, longitude, city_id) VALUES (v_geo_lat, v_geo_lng, v_id_tmp);
209                 END IF;
210                 
211                 
212             END IF;
213
214             IF ci_done THEN
215               LEAVE ci_loop;
216             END IF;
217
218         END LOOP;
219         CLOSE ci_csr;
220
221         RETURN v_count;
222     END $$
223 DELIMITER ; 
224
225