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