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