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