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             SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name;
114
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;
118                     
119                     SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
120
121                 END IF;
122                 
123                 INSERT INTO core_geoip_division (code, name, country_id) VALUES (v_iso, v_local_name, v_id_tmp);
124             END IF;
125
126 --             ITERATE re_loop;
127                 
128             IF v_count = v_total THEN
129               LEAVE re_loop;
130             END IF;
131
132         END LOOP;
133         CLOSE re_csr;
134
135         RETURN v_count;
136     END $$
137 DELIMITER ; 
138
139
140
141 DROP FUNCTION IF EXISTS core_cities_merge_city;
142 DELIMITER $$
143 CREATE FUNCTION core_cities_merge_city()  RETURNS INT DETERMINISTIC
144     BEGIN
145         DECLARE ci_done INT DEFAULT FALSE;
146
147         DECLARE v_count INT DEFAULT 0;
148         DECLARE v_total INT DEFAULT 0;
149
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;
157
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;
163
164         DECLARE v_id_tmp_tmp INT DEFAULT 0;
165
166         DECLARE ci_csr CURSOR FOR 
167         SELECT 
168             id,iso,local_name,in_location,geo_lat,geo_lng
169         FROM 
170             meta_location
171         WHERE
172             type = 'CI';
173
174         SELECT COUNT(id) INTO v_total FROM meta_location WHERE type = 'CI';
175
176         SET v_count = 0;
177
178         OPEN ci_csr;
179         ci_loop: LOOP
180             FETCH ci_csr INTO v_id,v_iso,v_local_name,v_in_location,v_geo_lat,v_geo_lng;
181             
182             SET v_count = v_count + 1;
183
184             SET v_id_tmp = 0;
185             SET v_id_tmp_tmp = 0;
186
187             SELECT id INTO v_id_tmp FROM core_geoip_city WHERE name = v_local_name LIMIT 1;
188
189             IF(v_id_tmp = 0) THEN
190                 IF v_in_location IS NOT NULL THEN
191
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;
193                     
194                     IF v_type_tmp = 'CO' THEN
195                         SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
196                         
197                         INSERT INTO core_geoip_city (name, country_id) VALUES (v_local_name, v_id_tmp);
198                     END IF;
199
200                     IF v_type_tmp = 'RE' THEN
201                         SELECT id INTO v_id_tmp FROM core_geoip_division WHERE name = v_local_name_tmp;
202                         
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;
204                         
205                         SELECT id INTO v_id_tmp_tmp FROM core_geoip_country WHERE code = v_iso_tmp;
206                         
207                         INSERT INTO core_geoip_city (name, country_id, division_id) VALUES (v_local_name, v_id_tmp_tmp, v_id_tmp);
208                     END IF;
209                     
210                 END IF;
211
212                 IF v_geo_lat IS NOT NULL OR v_geo_lng IS NOT NULL THEN
213                     SET v_id_tmp = LAST_INSERT_ID();
214
215                     INSERT INTO core_geoip_location (latitude, longitude, city_id) VALUES (v_geo_lat, v_geo_lng, v_id_tmp);
216                 END IF;
217                 
218                 
219             END IF;
220
221             IF v_count = v_total THEN
222               LEAVE ci_loop;
223             END IF;
224
225         END LOOP;
226         CLOSE ci_csr;
227
228         RETURN v_count;
229     END $$
230 DELIMITER ; 
231
232
233 -----------------------------------------------------------------------------------------------------------------
234
235
236 DROP FUNCTION IF EXISTS core_country_locations;
237 DELIMITER $$
238 CREATE FUNCTION core_country_locations()  RETURNS INT DETERMINISTIC
239     BEGIN
240         DECLARE v_count INT DEFAULT 0;
241         DECLARE v_total INT DEFAULT 0;
242
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 INT DEFAULT 0;
247         DECLARE v_country_name INT DEFAULT 0;
248
249         DECLARE v_id INT DEFAULT 0;
250
251         DECLARE csr CURSOR FOR 
252         SELECT 
253             geoname_id,continent_code,continent_name,country_iso_code,country_name
254         FROM 
255             country_locations
256         
257         SELECT COUNT(*) INTO v_total FROM country_locations;
258
259         SET v_count = 0;
260
261         OPEN csr;
262         read_loop: LOOP
263             FETCH csr INTO v_geoname_id,v_continent_code,v_continent_name,v_country_iso_code,v_country_name;
264             
265             SET v_count = v_count + 1;
266
267             SELECT id INTO v_id_tmp FROM core_geoip_country WHERE code = v_iso;
268
269             IF(v_id_tmp = 0) THEN
270                 INSERT INTO core_geoip_country (code, name, continent_id) VALUES (v_iso, v_local_name, 0);
271             END IF;
272                 
273             IF v_count = v_total THEN
274               LEAVE co_loop;
275             END IF;
276
277         END LOOP;
278         CLOSE co_csr;
279
280
281         RETURN v_count;
282     END $$
283 DELIMITER ; 
284