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