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