diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8eb336d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target/ +/nbproject/ +**/*-clean.sql \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..61231ee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: java +dist: trusty + +sudo: false # faster builds + +script: mvn install test diff --git a/City Import Sheet.xlsx b/City Import Sheet.xlsx new file mode 100644 index 0000000..05b6094 Binary files /dev/null and b/City Import Sheet.xlsx differ diff --git a/README.md b/README.md index 73d7b46..fda4f61 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ +[![Build Status](https://travis-ci.org/javydreamercsw/Countries-States-Cities-database.svg?branch=master)](https://travis-ci.org/javydreamercsw/Countries-States-Cities-database) -#Database +# Database City state country dropdown : http://lab.iamrohit.in/php_ajax_country_state_city_dropdown/ Download full source code: http://www.iamrohit.in/tag/php-ajax-country-state-city-dropdown -#Note: -*This Free database dose not guarantee for the complete list of world countries, states and cities. - -*You can manually change the spelling mistakes, or add edit any records, which are not correct. +# Note: +* This Free database dose not guarantee for the complete list of world countries, states and cities. +* You can manually change the spelling mistakes, or add edit any records, which are not correct. +* You can submit new data by filling up the provided excel files following the instructions within. +* There's a Maven Java project built around the sql files with the sole purpose of testing that the scripts are correct to help with the Pull Request process to prevent bad data to be added. diff --git a/cities.sql b/cities.sql index 8c1a372..ea5ad8b 100644 --- a/cities.sql +++ b/cities.sql @@ -10,7 +10,8 @@ CREATE TABLE IF NOT EXISTS `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `state_id` int(11) NOT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + FOREIGN KEY (state_id) REFERENCES states(id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=47577 ; @@ -2336,8 +2337,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (2318, 'Mau', 21), (2319, 'Mauganj', 21), (2320, 'Meghnagar', 21), -(2321, 'Mehara Gaon', 21); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(2321, 'Mehara Gaon', 21), (2322, 'Mehgaon', 21), (2323, 'Mhaugaon', 21), (2324, 'Mhow', 21), @@ -4494,8 +4494,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (4475, 'Mancherial', 36), (4476, 'Mandamarri', 36), (4477, 'Manuguru', 36), -(4478, 'Medak', 36); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(4478, 'Medak', 36), (4479, 'Medchal', 36), (4480, 'Miryalaguda', 36), (4481, 'Nagar Karnul', 36), @@ -6645,8 +6644,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (6625, 'Gatton', 269), (6626, 'Gladstone', 269), (6627, 'Gold Coast', 269), -(6628, 'Gowrie Junction', 269); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(6628, 'Gowrie Junction', 269), (6629, 'Gympie', 269), (6630, 'Helensvale', 269), (6631, 'Hervey Bay', 269), @@ -8738,8 +8736,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (8717, 'Iacu', 516), (8718, 'Ibicarai', 516), (8719, 'Ibicui', 516), -(8720, 'Ibipeba', 516); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(8720, 'Ibipeba', 516), (8721, 'Ibirapitanga', 516), (8722, 'Ibirataia', 516), (8723, 'Ibotirama', 516), @@ -10736,8 +10733,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (10714, 'Saint-Canut', 673), (10715, 'Saint-Cesaire', 673), (10716, 'Saint-Cyrill-de-Wendover', 673), -(10717, 'Saint-Damase', 673); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(10717, 'Saint-Damase', 673), (10718, 'Saint-Damien-de-Buckland', 673), (10719, 'Saint-Denis', 673), (10720, 'Saint-Donat-de-Montcalm', 673), @@ -11187,20 +11183,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (11164, 'Shucheng', 731), (11165, 'Xinchang', 731), (11166, 'Xuancheng', 731), -(11167, 'Fengyang', 732), -(11168, 'Guangde', 732), -(11169, 'Liuan', 732), -(11170, 'Ningguo', 732), -(11171, 'Shucheng', 732), -(11172, 'Xinchang', 732), -(11173, 'Xuancheng', 732), -(11174, 'Fengyang', 733), -(11175, 'Guangde', 733), -(11176, 'Liuan', 733), -(11177, 'Ningguo', 733), -(11178, 'Shucheng', 733), -(11179, 'Xinchang', 733), -(11180, 'Xuancheng', 733), (11181, 'Aomen', 734), (11182, 'Beijing', 735), (11183, 'Changping', 735), @@ -11262,41 +11244,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (11239, 'Yongan', 738), (11240, 'Zhangzhou', 738), (11241, 'Zhicheng', 738), -(11242, 'Bantou', 739), -(11243, 'Dongshan', 739), -(11244, 'Fuan', 739), -(11245, 'Fujian', 739), -(11246, 'Fuqing', 739), -(11247, 'Fuzhou', 739), -(11248, 'Gantou', 739), -(11249, 'Hanyang', 739), -(11250, 'Jiangkou', 739), -(11251, 'Jiaocheng', 739), -(11252, 'Jinjiang', 739), -(11253, 'Jinshang', 739), -(11254, 'Longhai', 739), -(11255, 'Longyan', 739), -(11256, 'Luoyang', 739), -(11257, 'Nanan', 739), -(11258, 'Nanping', 739), -(11259, 'Nanpu', 739), -(11260, 'Putian', 739), -(11261, 'Qingyang', 739), -(11262, 'Quanzhou', 739), -(11263, 'Rongcheng', 739), -(11264, 'Sanming', 739), -(11265, 'Shaowu', 739), -(11266, 'Shima', 739), -(11267, 'Shishi', 739), -(11268, 'Tantou', 739), -(11269, 'Tongshan', 739), -(11270, 'Xiamen', 739), -(11271, 'Xiapu', 739), -(11272, 'Xiapu Ningde', 739), -(11273, 'Ximei', 739), -(11274, 'Yongan', 739), -(11275, 'Zhangzhou', 739), -(11276, 'Zhicheng', 739), (11277, 'Baiyin', 740), (11278, 'Baoji', 740), (11279, 'Beidao', 740), @@ -11398,92 +11345,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (11375, 'Zhilong', 741), (11376, 'Zhongshan', 741), (11377, 'Zhuhai', 741), -(11378, 'Anbu', 742), -(11379, 'Chaozhou', 742), -(11380, 'Chenghai', 742), -(11381, 'Chuncheng', 742), -(11382, 'Daliang', 742), -(11383, 'Danshui', 742), -(11384, 'Dongguan', 742), -(11385, 'Donghai', 742), -(11386, 'Dongli', 742), -(11387, 'Dongzhen', 742), -(11388, 'Ducheng', 742), -(11389, 'Encheng', 742), -(11390, 'Foahn', 742), -(11391, 'Foshan', 742), -(11392, 'Gaozhou', 742), -(11393, 'Guangdong', 742), -(11394, 'Guangzhou', 742), -(11395, 'Guanjiao', 742), -(11396, 'Haicheng', 742), -(11397, 'Haimen', 742), -(11398, 'Hepo', 742), -(11399, 'Houpu', 742), -(11400, 'Huaicheng', 742), -(11401, 'Huanggang', 742), -(11402, 'Huangpu', 742), -(11403, 'Huazhou', 742), -(11404, 'Huicheng', 742), -(11405, 'Huizhou', 742), -(11406, 'Humen', 742), -(11407, 'Jiangmen', 742), -(11408, 'Jiazi', 742), -(11409, 'Jieshi', 742), -(11410, 'Jieyang', 742), -(11411, 'Lecheng', 742), -(11412, 'Leicheng', 742), -(11413, 'Liancheng', 742), -(11414, 'Lianzhou', 742), -(11415, 'Licheng', 742), -(11416, 'Liusha', 742), -(11417, 'Longgang', 742), -(11418, 'Lubu', 742), -(11419, 'Luocheng', 742), -(11420, 'Luohu', 742), -(11421, 'Luoyang', 742), -(11422, 'Maba', 742), -(11423, 'Maoming', 742), -(11424, 'Mata', 742), -(11425, 'Meilu', 742), -(11426, 'Meizhou', 742), -(11427, 'Mianchang', 742), -(11428, 'Nanfeng', 742), -(11429, 'Nanhai', 742), -(11430, 'Pingshan', 742), -(11431, 'Qingtang', 742), -(11432, 'Qingyuan', 742), -(11433, 'Rongcheng', 742), -(11434, 'Sanbu', 742), -(11435, 'Shantou', 742), -(11436, 'Shanwei', 742), -(11437, 'Shaoguan', 742), -(11438, 'Shaping', 742), -(11439, 'Shenzhen', 742), -(11440, 'Shilong', 742), -(11441, 'Shiqiao', 742), -(11442, 'Shiwan', 742), -(11443, 'Shuizhai', 742), -(11444, 'Shunde', 742), -(11445, 'Suicheng', 742), -(11446, 'Taicheng', 742), -(11447, 'Tangping', 742), -(11448, 'Xiaolan', 742), -(11449, 'Xinan', 742), -(11450, 'Xingcheng', 742), -(11451, 'Xiongzhou', 742), -(11452, 'Xucheng', 742), -(11453, 'Yangjiang', 742), -(11454, 'Yingcheng', 742), -(11455, 'Yuancheng', 742), -(11456, 'Yuncheng', 742), -(11457, 'Yunfu', 742), -(11458, 'Zengcheng', 742), -(11459, 'Zhanjiang', 742), -(11460, 'Zhaoqing', 742), -(11461, 'Zhilong', 742), -(11462, 'Zhongshan', 742), -(11463, 'Zhuhai', 742), (11464, 'Babu', 743), (11465, 'Baihe', 743), (11466, 'Baise', 743), @@ -11860,75 +11721,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (11837, 'Zhaoyang', 751), (11838, 'Zhenjiang', 751), (11839, 'Zhongxing', 751), -(11840, 'Baoying', 752), -(11841, 'Changzhou', 752), -(11842, 'Dachang', 752), -(11843, 'Dafeng', 752), -(11844, 'Danyang', 752), -(11845, 'Dingshu', 752), -(11846, 'Dongkan', 752), -(11847, 'Dongtai', 752), -(11848, 'Fengxian', 752), -(11849, 'Gaogou', 752), -(11850, 'Gaoyou', 752), -(11851, 'Guiren', 752), -(11852, 'Haian', 752), -(11853, 'Haizhou', 752), -(11854, 'Hede', 752), -(11855, 'Huaicheng', 752), -(11856, 'Huaiyin', 752), -(11857, 'Huilong', 752), -(11858, 'Hutang', 752), -(11859, 'Jiangdu', 752), -(11860, 'Jiangyan', 752), -(11861, 'Jiangyin', 752), -(11862, 'Jiangyuan', 752), -(11863, 'Jianhu', 752), -(11864, 'Jingcheng', 752), -(11865, 'Jinsha', 752), -(11866, 'Jintan', 752), -(11867, 'Juegang', 752), -(11868, 'Jurong', 752), -(11869, 'Kunshan', 752), -(11870, 'Lianyungang', 752), -(11871, 'Liucheng', 752), -(11872, 'Liyang', 752), -(11873, 'Luodu', 752), -(11874, 'Mudu', 752), -(11875, 'Nanjing', 752), -(11876, 'Nantong', 752), -(11877, 'Pecheng', 752), -(11878, 'Pukou', 752), -(11879, 'Qidong', 752), -(11880, 'Qinnan', 752), -(11881, 'Qixia', 752), -(11882, 'Rucheng', 752), -(11883, 'Songling', 752), -(11884, 'Sucheng', 752), -(11885, 'Suicheng', 752), -(11886, 'Suqian', 752), -(11887, 'Suzhou', 752), -(11888, 'Taicang', 752), -(11889, 'Taixing', 752), -(11890, 'Wujiang', 752), -(11891, 'Wuxi', 752), -(11892, 'Xiaolingwei', 752), -(11893, 'Xiaoshi', 752), -(11894, 'Xinan', 752), -(11895, 'Xinpu', 752), -(11896, 'Xuzhou', 752), -(11897, 'Yancheng', 752), -(11898, 'Yangshe', 752), -(11899, 'Yangzhou', 752), -(11900, 'Yizheng', 752), -(11901, 'Yunhe', 752), -(11902, 'Yunyang', 752), -(11903, 'Yushan', 752), -(11904, 'Zhangjiagang', 752), -(11905, 'Zhangjiangang', 752), -(11906, 'Zhaoyang', 752), -(11907, 'Zhenjiang', 752), -(11908, 'Zhongxing', 752), (11909, 'Fengxin', 753), (11910, 'Fenyi', 753), (11911, 'Ganzhou', 753), @@ -12053,54 +11845,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (12030, 'Yingkou', 755), (12031, 'Yuhong', 755), (12032, 'Zhuanghe', 755), -(12033, 'Anshan', 756), -(12034, 'Beipiao', 756), -(12035, 'Benxi', 756), -(12036, 'Changtu', 756), -(12037, 'Chaoyang', 756), -(12038, 'Dalian', 756), -(12039, 'Dalianwan', 756), -(12040, 'Dalinghe', 756), -(12041, 'Dandong', 756), -(12042, 'Dashiqiao', 756), -(12043, 'Dongling', 756), -(12044, 'Fengcheng', 756), -(12045, 'Fushun', 756), -(12046, 'Fuxin', 756), -(12047, 'Haicheng', 756), -(12048, 'Heishan', 756), -(12049, 'Huanren', 756), -(12050, 'Huludao', 756), -(12051, 'Hushitai', 756), -(12052, 'Jinxi', 756), -(12053, 'Jinzhou', 756), -(12054, 'Jiupu', 756), -(12055, 'Kaiyuan', 756), -(12056, 'Kuandian', 756), -(12057, 'Langtou', 756), -(12058, 'Liaoyang', 756), -(12059, 'Liaozhong', 756), -(12060, 'Lingyuan', 756), -(12061, 'Liuerbao', 756), -(12062, 'Lushunkou', 756), -(12063, 'Nantai', 756), -(12064, 'Panjin', 756), -(12065, 'Pulandian', 756), -(12066, 'Shenyang', 756), -(12067, 'Sujiatun', 756), -(12068, 'Tieling', 756), -(12069, 'Wafangdian', 756), -(12070, 'Xiaoshi', 756), -(12071, 'Xifeng', 756), -(12072, 'Xinchengxi', 756), -(12073, 'Xingcheng', 756), -(12074, 'Xinmin', 756), -(12075, 'Xiongyue', 756), -(12076, 'Xiuyan', 756), -(12077, 'Yebaishou', 756), -(12078, 'Yingkou', 756), -(12079, 'Yuhong', 756), -(12080, 'Zhuanghe', 756), (12081, 'Qiatou', 759), (12082, 'Xining', 759), (12083, 'Ankang', 760), @@ -12220,108 +11964,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (12197, 'Zicheng', 761), (12198, 'Zouping', 761), (12199, 'Zouxian', 761), -(12200, 'Anqiu', 762), -(12201, 'Bianzhuang', 762), -(12202, 'Binzhou', 762), -(12203, 'Boshan', 762), -(12204, 'Boxing County', 762), -(12205, 'Caocheng', 762), -(12206, 'Changqing', 762), -(12207, 'Chengyang', 762), -(12208, 'Dengzhou', 762), -(12209, 'Dezhou', 762), -(12210, 'Dingtao', 762), -(12211, 'Dongcun', 762), -(12212, 'Dongdu', 762), -(12213, 'Donge County', 762), -(12214, 'Dongying', 762), -(12215, 'Feicheng', 762), -(12216, 'Fushan', 762), -(12217, 'Gaomi', 762), -(12218, 'Haiyang', 762), -(12219, 'Hanting', 762), -(12220, 'Hekou', 762), -(12221, 'Heze', 762), -(12222, 'Jiaonan', 762), -(12223, 'Jiaozhou', 762), -(12224, 'Jiehu', 762), -(12225, 'Jimo', 762), -(12226, 'Jinan', 762), -(12227, 'Jining', 762), -(12228, 'Juxian', 762), -(12229, 'Juye', 762), -(12230, 'Kunlun', 762), -(12231, 'Laiwu', 762), -(12232, 'Laiyang', 762), -(12233, 'Laizhou', 762), -(12234, 'Leling', 762), -(12235, 'Liaocheng', 762), -(12236, 'Licung', 762), -(12237, 'Linqing', 762), -(12238, 'Linqu', 762), -(12239, 'Linshu', 762), -(12240, 'Linyi', 762), -(12241, 'Longkou', 762), -(12242, 'Mengyin', 762), -(12243, 'Mingshui', 762), -(12244, 'Nanchou', 762), -(12245, 'Nanding', 762), -(12246, 'Nanma', 762), -(12247, 'Ninghai', 762), -(12248, 'Ningyang', 762), -(12249, 'Pingdu', 762), -(12250, 'Pingyi', 762), -(12251, 'Pingyin', 762), -(12252, 'Qingdao', 762), -(12253, 'Qingzhou', 762), -(12254, 'Qixia', 762), -(12255, 'Qufu', 762), -(12256, 'Rizhao', 762), -(12257, 'Rongcheng', 762), -(12258, 'Shancheng', 762), -(12259, 'Shanting', 762), -(12260, 'Shengzhuang', 762), -(12261, 'Shenxian', 762), -(12262, 'Shizilu', 762), -(12263, 'Shouguang', 762), -(12264, 'Shuiji', 762), -(12265, 'Sishui', 762), -(12266, 'Suozhen', 762), -(12267, 'Taian', 762), -(12268, 'Tancheng', 762), -(12269, 'Taozhuang', 762), -(12270, 'Tengzhou', 762), -(12271, 'Weifang', 762), -(12272, 'Weihai', 762), -(12273, 'Wencheng', 762), -(12274, 'Wendeng', 762), -(12275, 'Wenshang', 762), -(12276, 'Wudi', 762), -(12277, 'Xiazhen', 762), -(12278, 'Xincheng', 762), -(12279, 'Xindian', 762), -(12280, 'Xintai', 762), -(12281, 'Yanggu', 762), -(12282, 'Yangshan', 762), -(12283, 'Yantai', 762), -(12284, 'Yanzhou', 762), -(12285, 'Yatou', 762), -(12286, 'Yidu', 762), -(12287, 'Yishui', 762), -(12288, 'Yucheng', 762), -(12289, 'Yuncheng', 762), -(12290, 'Zaozhuang', 762), -(12291, 'Zhangdian', 762), -(12292, 'Zhangjiawa', 762), -(12293, 'Zhangqiu', 762), -(12294, 'Zhaocheng', 762), -(12295, 'Zhoucheng', 762), -(12296, 'Zhoucun', 762), -(12297, 'Zhucheng', 762), -(12298, 'Zhuwang', 762), -(12299, 'Zicheng', 762), -(12300, 'Zouping', 762), -(12301, 'Zouxian', 762), (12302, 'Jiading', 763), (12303, 'Minhang', 763), (12304, 'Shanghai', 763), @@ -12496,61 +12138,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (12473, 'Zhuji', 771), (12474, 'fenghua', 771), (12475, 'jiashan', 771), -(12476, 'Aojiang', 772), -(12477, 'Choucheng', 772), -(12478, 'Cixi', 772), -(12479, 'Daqiao', 772), -(12480, 'Deqing', 772), -(12481, 'Dinghai', 772), -(12482, 'Dongyang', 772), -(12483, 'Fuyang', 772), -(12484, 'Haining', 772), -(12485, 'Haiyan', 772), -(12486, 'Hangzhou', 772), -(12487, 'Huangyan', 772), -(12488, 'Hushan', 772), -(12489, 'Huzhou', 772), -(12490, 'Jiaojiang', 772), -(12491, 'Jiaxing', 772), -(12492, 'Jinhua', 772), -(12493, 'Jinxiang', 772), -(12494, 'Kaihua', 772), -(12495, 'Kunyang', 772), -(12496, 'Lanxi', 772), -(12497, 'Linan City', 772), -(12498, 'Linhai', 772), -(12499, 'Linping', 772), -(12500, 'Lishui', 772), -(12501, 'Liushi', 772), -(12502, 'Ningbo', 772), -(12503, 'Ninghai', 772), -(12504, 'Pinghu', 772), -(12505, 'Quzhou', 772), -(12506, 'Ruian', 772), -(12507, 'Shangyu', 772), -(12508, 'Shaoxing', 772), -(12509, 'Shenjiamen', 772), -(12510, 'Taizhou City', 772), -(12511, 'Tonglu', 772), -(12512, 'Wenling', 772), -(12513, 'Wenzhou', 772), -(12514, 'Wuning', 772), -(12515, 'Wuyi', 772), -(12516, 'Xianju', 772), -(12517, 'Xiaoshan', 772), -(12518, 'Xiashi', 772), -(12519, 'Xushan', 772), -(12520, 'Yiwu', 772), -(12521, 'Yongkang', 772), -(12522, 'Yueqing', 772), -(12523, 'Yuhuan', 772), -(12524, 'Yuyao', 772), -(12525, 'Zhejiang', 772), -(12526, 'Zhenhai', 772), -(12527, 'Zhicheng', 772), -(12528, 'Zhuji', 772), -(12529, 'fenghua', 772), -(12530, 'jiashan', 772), (12531, 'Leticia', 775), (12532, 'Puerto Narino', 775), (12533, 'Abejorral', 776), @@ -12839,8 +12426,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (12816, 'San Luis de Gaceno', 781), (12817, 'San Mateo', 781), (12818, 'San Miguel de Sema', 781), -(12819, 'San Pablo de Borbur', 781); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(12819, 'San Pablo de Borbur', 781), (12820, 'Santa Maria', 781), (12821, 'Santa Rosa de Viterbo', 781), (12822, 'Santa Sofia', 781), @@ -14869,8 +14455,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (14845, 'Dubi', 936), (14846, 'Duchcov', 936), (14847, 'Jilove', 936), -(14848, 'Jirkov', 936); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(14848, 'Jirkov', 936), (14849, 'Kadan', 936), (14850, 'Klasterec nad Ohri', 936), (14851, 'Krupka', 936), @@ -16930,8 +16515,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (16905, 'Keuruu', 1161), (16906, 'Laukaa', 1161), (16907, 'Lieto', 1161), -(16908, 'Anjalankoski', 1162); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(16908, 'Anjalankoski', 1162), (16909, 'Hamina', 1162), (16910, 'Kotka', 1162), (16911, 'Kouvola', 1162), @@ -18772,8 +18356,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (18746, 'Alzenau', 1357), (18747, 'Amberg', 1357), (18748, 'Amerang', 1357), -(18749, 'Ansbach', 1357); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(18749, 'Ansbach', 1357), (18750, 'Aschaffenburg', 1357), (18751, 'Augsburg', 1357), (18752, 'Bad Aibling', 1357), @@ -20701,8 +20284,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (20674, 'Nuusuaq', 1491), (20675, 'Tasiusaq', 1491), (20676, 'Upernavik', 1491), -(20677, 'Upernavik Kujalleq', 1491); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(20677, 'Upernavik Kujalleq', 1491), (20678, 'Ikerasak', 1492), (20679, 'Illorsuit', 1492), (20680, 'Niaqornat', 1492), @@ -22612,8 +22194,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (22584, 'Miglianico', 1826), (22585, 'Montazzoli', 1826), (22586, 'Montebello sul Sangro', 1826), -(22587, 'Monteferrante', 1826); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(22587, 'Monteferrante', 1826), (22588, 'Montelapiano', 1826), (22589, 'Montenerodomo', 1826), (22590, 'Monteodorisio', 1826), @@ -22906,12 +22487,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (22877, 'Margno', 1843), (22878, 'Osnago', 1843), (22879, 'Sirone', 1843), -(22880, 'Airuno', 1844), -(22881, 'Bosisio Parini', 1844), -(22882, 'Lecco', 1844), -(22883, 'Margno', 1844), -(22884, 'Osnago', 1844), -(22885, 'Sirone', 1844), (22886, 'Alassio', 1845), (22887, 'Albenga', 1845), (22888, 'Albisola Superiore', 1845), @@ -24487,8 +24062,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (24459, 'Nishiwaki', 1930), (24460, 'Ono', 1930), (24461, 'Sanda', 1930), -(24462, 'Sasayama', 1930); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(24462, 'Sasayama', 1930), (24463, 'Sumoto', 1930), (24464, 'Taishi', 1930), (24465, 'Takarazuka', 1930), @@ -26502,8 +26076,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (26473, 'Oberdonven', 2236), (26474, 'Olingen', 2236), (26475, 'Rodenbourg', 2236), -(26476, 'Roodt-sur-Syr', 2236); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(26476, 'Roodt-sur-Syr', 2236), (26477, 'Wasserbillig', 2236), (26478, 'Wecker', 2236), (26479, 'Wecker-Gare', 2236), @@ -28381,8 +27954,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (28351, 'Tejupilco', 2442), (28352, 'Temamatla', 2442), (28353, 'Temascalapa', 2442), -(28354, 'Temascalcingo', 2442); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(28354, 'Temascalcingo', 2442), (28355, 'Temoaya', 2442), (28356, 'Tenancingo', 2442), (28357, 'Tenango de Arista', 2442), @@ -30284,8 +29856,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (30253, 'Wormer', 2594), (30254, 'Wormerland', 2594), (30255, 'Wormerveer', 2594), -(30256, 'Zaandam', 2594); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(30256, 'Zaandam', 2594), (30257, 'Zaanstad', 2594), (30258, 'Zandvoort', 2594), (30259, 'Zeevang', 2594), @@ -32268,8 +31839,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (32236, 'Baguio', 2844), (32237, 'Bangued', 2844), (32238, 'Davao', 2845), -(32239, 'Dagupan', 2848); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(32239, 'Dagupan', 2848), (32240, 'Laoag', 2848), (32241, 'Manaoag', 2848), (32242, 'Mangaldan', 2848), @@ -33087,7 +32657,6 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (33054, 'Catano', 2911), (33055, 'Guaynabo', 2911), (33056, 'Levittown', 2911), -(33057, 'Valencia', 2911), (33058, 'Canovanas', 2912), (33059, 'Carolina', 2912), (33060, 'Trujillo Alto', 2912), @@ -34226,8 +33795,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (34193, 'Buciumeni', 2950), (34194, 'Bucsani', 2950), (34195, 'Butimanu', 2950), -(34196, 'Candesti', 2950); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(34196, 'Candesti', 2950), (34197, 'Ciocanesti', 2950), (34198, 'Cobia', 2950), (34199, 'Cojasca', 2950), @@ -36193,8 +35761,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (36159, 'Novozybkov', 2986), (36160, 'Pochjop', 2986), (36161, 'Pogar', 2986), -(36162, 'Selco', 2986); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(36162, 'Selco', 2986), (36163, 'Starodub', 2986), (36164, 'Surazh', 2986), (36165, 'Suzjomka', 2986), @@ -38129,8 +37696,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (38094, 'Polokwane', 3244), (38095, 'Soekmekaar', 3244), (38096, 'Southdale', 3244), -(38097, 'Thabazimbi', 3244); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(38097, 'Thabazimbi', 3244), (38098, 'Thohoyandou', 3244), (38099, 'Thulamahashe', 3244), (38100, 'Tzaneen', 3244), @@ -40060,8 +39626,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (40024, 'Nafzah', 3634), (40025, 'Quballat', 3634), (40026, 'Tabursuq', 3634), -(40027, 'Tastur', 3634); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(40027, 'Tastur', 3634), (40028, 'Zahrat Madina', 3634), (40029, 'al-Ma''qulah', 3634), (40030, '''Awsajah', 3636), @@ -42028,8 +41593,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (41991, 'West Bromwich', 3842), (41992, 'Westhoughton', 3842), (41993, 'Weston-super-Mare', 3842), -(41994, 'Weymouth', 3842); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(41994, 'Weymouth', 3842), (41995, 'Whitefield', 3842), (41996, 'Whitehaven', 3842), (41997, 'Whitley Bay', 3842), @@ -43912,8 +43476,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (43874, 'South Venice', 3930), (43875, 'Spring Hill', 3930), (43876, 'Stuart', 3930), -(43877, 'Sun City Center', 3930); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(43877, 'Sun City Center', 3930), (43878, 'Sunny Isles', 3930), (43879, 'Sunrise', 3930), (43880, 'Sunset', 3930), @@ -44742,8 +44305,8 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (44703, 'West Monroe', 3939), (44704, 'Westwego', 3939), (44705, 'Zachary', 3939), -(44706, 'Manchester', 3940), -(44707, 'Washington', 3940), +/*TODO: Fix/delete if invalid(44706, 'Manchester', 3940), +TODO: Fix/delete if invalid(44707, 'Washington', 3940),*/ (44708, 'Auburn', 3941), (44709, 'Augusta', 3941), (44710, 'Bangor', 3941), @@ -45813,8 +45376,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (45774, 'Springdale', 3959), (45775, 'Springfield', 3959), (45776, 'Steubenville', 3959), -(45777, 'Stow', 3959); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(45777, 'Stow', 3959), (45778, 'Streetsboro', 3959), (45779, 'Strongsville', 3959), (45780, 'Struthers', 3959), @@ -46229,7 +45791,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (46189, 'Yardley', 3963), (46190, 'Yeadon', 3963), (46191, 'York', 3963), -(46192, 'Ramey', 3964), +/*TODO: Fix/delete if invalid(46192, 'Ramey', 3964),*/ (46193, 'Adamsville', 3969), (46194, 'Alcoa', 3969), (46195, 'Antioch', 3969), @@ -46578,7 +46140,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (46538, 'Wylie', 3970), (46539, 'Yoakum', 3970), (46540, 'austinn', 3970), -(46541, 'Bedford Kentucky', 3971), +(46541, 'Bedford', 3938), (46542, 'Alpine', 3972), (46543, 'American Fork', 3972), (46544, 'Bluffdale', 3972), @@ -47613,8 +47175,7 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (47573, 'Mvuma', 4120), (47574, 'Redcliffe', 4120), (47575, 'Shurugwi', 4120), -(47576, 'Zvishavane', 4120); -INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES +(47576, 'Zvishavane', 4120), (47577, 'Manchester', 3952), (47578, 'Nashua', 3952), (47579, 'Concord', 3952), @@ -48352,7 +47913,705 @@ INSERT INTO `cities` (`id`, `name`, `state_id`) VALUES (48311, 'Weston', 3976), (48312, 'Lewisburg', 3976), (48313, 'Ravenswood', 3976), -(48314, 'Summersville', 3976); +(48314, 'Summersville', 3976), +(48315,'Beitbridge', 4119), +(48316,'Gwanda', 4119), +(48317,'Lupane', 4118), +(48318,'Hwange', 4118), +(48319,'Victoria Falls', 4118), +(48320,'Banket', 4116), +(48321,'Chegutu', 4116), +(48322,'Chinhoyi', 4116), +(48323,'Kadoma', 4116), +(48324,'Kariba', 4116), +(48325,'Karoi', 4116), +(48326,'Mhangura', 4116), +(48327,'Norton', 4116), +(48328,'Chivhu', 4115), +(48329,'Marondera', 4115), +(48330,'Murewa', 4115), +(48331,'Mutoko', 4115), +(48332,'Ruwa', 4115), +(48333,'Bindura', 4114), +(48334,'Glendale', 4114), +(48335,'Mvurwi', 4114), +(48336,'Shamva', 4114), +(48337, 'Andradina', 30), +(48338, 'Castilho', 30), +(48339, 'Guaraçaí', 30), +(48340, 'Ilha Solteira', 30), +(48341, 'Itapura', 30), +(48342, 'Mirandópolis', 30), +(48343, 'Murutinga do Sul', 30), +(48344, 'Nova Independência', 30), +(48345, 'Pereira Barreto', 30), +(48346, 'Sud Mennucci', 30), +(48347, 'Suzanápolis', 30), +(48348, 'Araçatuba', 30), +(48349, 'Bento de Abreu', 30), +(48350, 'Guararapes', 30), +(48351, 'Lavínia', 30), +(48352, 'Rubiácea', 30), +(48353, 'Santo Antônio do Aracanguá', 30), +(48354, 'Valparaíso', 30), +(48355, 'Alto Alegre', 30), +(48356, 'Avanhandava', 30), +(48357, 'Barbosa', 30), +(48358, 'Bilac', 30), +(48359, 'Birigui', 30), +(48360, 'Braúna', 30), +(48361, 'Brejo Alegre', 30), +(48362, 'Buritama', 30), +(48363, 'Clementina', 30), +(48364, 'Coroados', 30), +(48365, 'Gabriel Monteiro', 30), +(48366, 'Glicério', 30), +(48367, 'Lourdes', 30), +(48368, 'Luiziânia', 30), +(48369, 'Penápolis', 30), +(48370, 'Piacatu', 30), +(48371, 'Santópolis do Aguapeí', 30), +(48372, 'Turiúba', 30), +(48373, 'Américo Brasiliense', 30), +(48374, 'Araraquara', 30), +(48375, 'Boa Esperança do Sul', 30), +(48376, 'Borborema', 30), +(48377, 'Dobrada', 30), +(48378, 'Gavião Peixoto', 30), +(48379, 'Ibitinga', 30), +(48380, 'Itápolis', 30), +(48381, 'Matão', 30), +(48382, 'Motuca', 30), +(48383, 'Nova Europa', 30), +(48384, 'Rincão', 30), +(48385, 'Santa Lúcia', 30), +(48386, 'Tabatinga', 30), +(48387, 'Trabiju', 30), +(48388, 'Analândia', 30), +(48389, 'Descalvado', 30), +(48390, 'Dourado', 30), +(48391, 'Ibaté', 30), +(48392, 'Ribeirão Bonito', 30), +(48393, 'São Carlos', 30), +(48394, 'Assis', 30), +(48395, 'Borá', 30), +(48396, 'Campos Novos Paulista', 30), +(48397, 'Cândido Mota', 30), +(48398, 'Cruzália', 30), +(48399, 'Florínia', 30), +(48400, 'Ibirarema', 30), +(48401, 'Iepê', 30), +(48402, 'Lutécia', 30), +(48403, 'Maracaí', 30), +(48404, 'Nantes', 30), +(48405, 'Palmital', 30), +(48406, 'Paraguaçu Paulista', 30), +(48407, 'Pedrinhas Paulista', 30), +(48408, 'Platina', 30), +(48409, 'Quatá', 30), +(48410, 'Tarumã', 30), +(48411, 'Bernardino de Campos', 30), +(48412, 'Canitar', 30), +(48413, 'Chavantes', 30), +(48414, 'Espírito Santo do Turvo', 30), +(48415, 'Fartura', 30), +(48416, 'Ipaussu', 30), +(48417, 'Manduri', 30), +(48418, 'Óleo', 30), +(48419, 'Ourinhos', 30), +(48420, 'Piraju', 30), +(48421, 'Ribeirão do Sul', 30), +(48422, 'Salto Grande', 30), +(48423, 'Santa Cruz do Rio Pardo', 30), +(48424, 'São Pedro do Turvo', 30), +(48425, 'Sarutaiá', 30), +(48426, 'Taguaí', 30), +(48427, 'Tejupá', 30), +(48428, 'Timburi', 30), +(48429, 'Águas de Santa Bárbara', 30), +(48430, 'Arandu', 30), +(48431, 'Avaré', 30), +(48432, 'Cerqueira César', 30), +(48433, 'Iaras', 30), +(48434, 'Itaí', 30), +(48435, 'Itatinga', 30), +(48436, 'Paranapanema', 30), +(48437, 'Agudos', 30), +(48438, 'Arealva', 30), +(48439, 'Areiópolis', 30), +(48440, 'Avaí', 30), +(48441, 'Balbinos', 30), +(48442, 'Bauru', 30), +(48443, 'Borebi', 30), +(48444, 'Cabrália Paulista', 30), +(48445, 'Duartina', 30), +(48446, 'Guarantã', 30), +(48447, 'Iacanga', 30), +(48448, 'Lençóis Paulista', 30), +(48449, 'Lucianópolis', 30), +(48450, 'Paulistânia', 30), +(48451, 'Pirajuí', 30), +(48452, 'Piratininga', 30), +(48453, 'Pongaí', 30), +(48454, 'Presidente Alves', 30), +(48455, 'Reginópolis', 30), +(48456, 'Ubirajara', 30), +(48457, 'Uru', 30), +(48458, 'Anhembi', 30), +(48459, 'Bofete', 30), +(48460, 'Botucatu', 30), +(48461, 'Conchas', 30), +(48462, 'Pardinho', 30), +(48463, 'Pratânia', 30), +(48464, 'São Manuel', 30), +(48465, 'Bariri', 30), +(48466, 'Barra Bonita', 30), +(48467, 'Bocaina', 30), +(48468, 'Boraceia', 30), +(48469, 'Dois Córregos', 30), +(48470, 'Igaraçu do Tietê', 30), +(48471, 'Itaju', 30), +(48472, 'Itapuí', 30), +(48473, 'Jaú', 30), +(48474, 'Macatuba', 30), +(48475, 'Mineiros do Tietê', 30), +(48476, 'Pederneiras', 30), +(48477, 'Cafelândia', 30), +(48478, 'Getulina', 30), +(48479, 'Guaiçara', 30), +(48480, 'Guaimbê', 30), +(48481, 'Júlio Mesquita', 30), +(48482, 'Lins', 30), +(48483, 'Promissão', 30), +(48484, 'Sabino', 30), +(48485, 'Águas de Lindoia', 30), +(48486, 'Amparo', 30), +(48487, 'Lindoia', 30), +(48488, 'Monte Alegre do Sul', 30), +(48489, 'Pedra Bela', 30), +(48490, 'Pinhalzinho', 30), +(48491, 'Serra Negra', 30), +(48492, 'Socorro', 30), +(48493, 'Americana', 30), +(48494, 'Campinas', 30), +(48495, 'Cosmópolis', 30), +(48496, 'Elias Fausto', 30), +(48497, 'Holambra', 30), +(48498, 'Hortolândia', 30), +(48499, 'Indaiatuba', 30), +(48500, 'Jaguariúna', 30), +(48501, 'Monte Mor', 30), +(48502, 'Nova Odessa', 30), +(48503, 'Paulínia', 30), +(48504, 'Pedreira', 30), +(48505, 'Santa Bárbara d''Oeste', 30), +(48506, 'Sumaré', 30), +(48507, 'Valinhos', 30), +(48508, 'Vinhedo', 30), +(48509, 'Artur Nogueira', 30), +(48510, 'Engenheiro Coelho', 30), +(48511, 'Estiva Gerbi', 30), +(48512, 'Itapira', 30), +(48513, 'Mogi Guaçu', 30), +(48514, 'Mogi Mirim', 30), +(48515, 'Santo Antônio de Posse', 30), +(48516, 'Aguaí', 30), +(48517, 'Pirassununga', 30), +(48518, 'Porto Ferreira', 30), +(48519, 'Santa Cruz das Palmeiras', 30), +(48520, 'Águas da Prata', 30), +(48521, 'Caconde', 30), +(48522, 'Casa Branca', 30), +(48523, 'Divinolândia', 30), +(48524, 'Espírito Santo do Pinhal', 30), +(48525, 'Itobi', 30), +(48526, 'Mococa', 30), +(48527, 'Santo Antônio do Jardim', 30), +(48528, 'São João da Boa Vista', 30), +(48529, 'São José do Rio Pardo', 30), +(48530, 'São Sebastião da Grama', 30), +(48531, 'Tambaú', 30), +(48532, 'Tapiratiba', 30), +(48533, 'Vargem Grande do Sul', 30), +(48534, 'Apiaí', 30), +(48535, 'Barra do Chapéu', 30), +(48536, 'Capão Bonito', 30), +(48537, 'Guapiara', 30), +(48538, 'Iporanga', 30), +(48539, 'Itaóca', 30), +(48540, 'Itapirapuã Paulista', 30), +(48541, 'Ribeira', 30), +(48542, 'Ribeirão Branco', 30), +(48543, 'Ribeirão Grande', 30), +(48544, 'Alambari', 30), +(48545, 'Angatuba', 30), +(48546, 'Campina do Monte Alegre', 30), +(48547, 'Guareí', 30), +(48548, 'Itapetininga', 30), +(48549, 'Barão de Antonina', 30), +(48550, 'Bom Sucesso de Itararé', 30), +(48551, 'Buri', 30), +(48552, 'Coronel Macedo', 30), +(48553, 'Itaberá', 30), +(48554, 'Itapeva', 30), +(48555, 'Itaporanga', 30), +(48556, 'Itararé', 30), +(48557, 'Nova Campina', 30), +(48558, 'Riversul', 30), +(48559, 'Taquarituba', 30), +(48560, 'Taquarivaí', 30), +(48561, 'Boituva', 30), +(48562, 'Cerquilho', 30), +(48563, 'Cesário Lange', 30), +(48564, 'Laranjal Paulista', 30), +(48565, 'Pereiras', 30), +(48566, 'Porangaba', 30), +(48567, 'Quadra', 30), +(48568, 'Tatuí', 30), +(48569, 'Torre de Pedra', 30), +(48570, 'Itanhaém', 30), +(48571, 'Itariri', 30), +(48572, 'Mongaguá', 30), +(48573, 'Pedro de Toledo', 30), +(48574, 'Peruíbe', 30), +(48575, 'Barra do Turvo', 30), +(48576, 'Cajati', 30), +(48577, 'Cananéia', 30), +(48578, 'Eldorado', 30), +(48579, 'Iguape', 30), +(48580, 'Ilha Comprida', 30), +(48581, 'Jacupiranga', 30), +(48582, 'Juquiá', 30), +(48583, 'Miracatu', 30), +(48584, 'Pariquera-Açu', 30), +(48585, 'Registro', 30), +(48586, 'Sete Barras', 30), +(48587, 'Atibaia', 30), +(48588, 'Bom Jesus dos Perdões', 30), +(48589, 'Bragança Paulista', 30), +(48590, 'Itatiba', 30), +(48591, 'Jarinu', 30), +(48592, 'Joanópolis', 30), +(48593, 'Morungaba', 30), +(48594, 'Nazaré Paulista', 30), +(48595, 'Piracaia', 30), +(48596, 'Tuiuti', 30), +(48597, 'Vargem', 30), +(48598, 'Campo Limpo Paulista', 30), +(48599, 'Itupeva', 30), +(48600, 'Jundiaí', 30), +(48601, 'Louveira', 30), +(48602, 'Várzea Paulista', 30), +(48603, 'Ibiúna', 30), +(48604, 'Piedade', 30), +(48605, 'Pilar do Sul', 30), +(48606, 'São Miguel Arcanjo', 30), +(48607, 'Tapiraí', 30), +(48608, 'Alumínio', 30), +(48609, 'Araçariguama', 30), +(48610, 'Araçoiaba da Serra', 30), +(48611, 'Cabreúva', 30), +(48612, 'Capela do Alto', 30), +(48613, 'Iperó', 30), +(48614, 'Itu', 30), +(48615, 'Mairinque', 30), +(48616, 'Porto Feliz', 30), +(48617, 'Salto', 30), +(48618, 'Salto de Pirapora', 30), +(48619, 'São Roque', 30), +(48620, 'Sarapuí', 30), +(48621, 'Sorocaba', 30), +(48622, 'Votorantim', 30), +(48623, 'Álvaro de Carvalho', 30), +(48624, 'Alvinlândia', 30), +(48625, 'Echaporã', 30), +(48626, 'Fernão', 30), +(48627, 'Gália', 30), +(48628, 'Garça', 30), +(48629, 'Lupércio', 30), +(48630, 'Marília', 30), +(48631, 'Ocauçu', 30), +(48632, 'Oriente', 30), +(48633, 'Oscar Bressane', 30), +(48634, 'Pompeia', 30), +(48635, 'Vera Cruz', 30), +(48636, 'Arco-Íris', 30), +(48637, 'Bastos', 30), +(48638, 'Herculândia', 30), +(48639, 'Iacri', 30), +(48640, 'Queiroz', 30), +(48641, 'Quintana', 30), +(48642, 'Tupã', 30), +(48643, 'Caieiras', 30), +(48644, 'Francisco Morato', 30), +(48645, 'Franco da Rocha', 30), +(48646, 'Mairiporã', 30), +(48647, 'Arujá', 30), +(48648, 'Guarulhos', 30), +(48649, 'Santa Isabel', 30), +(48650, 'Cotia', 30), +(48651, 'Embu', 30), +(48652, 'Embu-Guaçu', 30), +(48653, 'Itapecerica da Serra', 30), +(48654, 'Juquitiba', 30), +(48655, 'São Lourenço da Serra', 30), +(48656, 'Taboão da Serra', 30), +(48657, 'Vargem Grande Paulista', 30), +(48658, 'Biritiba-Mirim', 30), +(48659, 'Ferraz de Vasconcelos', 30), +(48660, 'Guararema', 30), +(48661, 'Itaquaquecetuba', 30), +(48662, 'Mogi das Cruzes', 30), +(48663, 'Poá', 30), +(48664, 'Salesópolis', 30), +(48665, 'Suzano', 30), +(48666, 'Barueri', 30), +(48667, 'Cajamar', 30), +(48668, 'Carapicuíba', 30), +(48669, 'Itapevi', 30), +(48670, 'Jandira', 30), +(48671, 'Osasco', 30), +(48672, 'Pirapora do Bom Jesus', 30), +(48673, 'Santana de Parnaíba', 30), +(48674, 'Bertioga', 30), +(48675, 'Cubatão', 30), +(48676, 'Guarujá', 30), +(48677, 'Praia Grande', 30), +(48678, 'Santos', 30), +(48679, 'São Vicente', 30), +(48680, 'Diadema', 30), +(48681, 'Mauá', 30), +(48682, 'Ribeirão Pires', 30), +(48683, 'Rio Grande da Serra', 30), +(48684, 'Santo André', 30), +(48685, 'São Bernardo do Campo', 30), +(48686, 'São Caetano do Sul', 30), +(48687, 'São Paulo (State Capital)', 30), +(48688, 'Araras', 30), +(48689, 'Conchal', 30), +(48690, 'Cordeirópolis', 30), +(48691, 'Iracemápolis', 30), +(48692, 'Leme', 30), +(48693, 'Limeira', 30), +(48694, 'Santa Cruz da Conceição', 30), +(48695, 'Santa Gertrudes', 30), +(48696, 'Águas de São Pedro', 30), +(48697, 'Capivari', 30), +(48698, 'Charqueada', 30), +(48699, 'Jumirim', 30), +(48700, 'Mombuca', 30), +(48701, 'Piracicaba', 30), +(48702, 'Rafard', 30), +(48703, 'Rio das Pedras', 30), +(48704, 'Saltinho', 30), +(48705, 'Santa Maria da Serra', 30), +(48706, 'São Pedro', 30), +(48707, 'Tietê', 30), +(48708, 'Brotas', 30), +(48709, 'Corumbataí', 30), +(48710, 'Ipeúna', 30), +(48711, 'Itirapina', 30), +(48712, 'Rio Claro', 30), +(48713, 'Torrinha', 30), +(48714, 'Adamantina', 30), +(48715, 'Flora Rica', 30), +(48716, 'Flórida Paulista', 30), +(48717, 'Inúbia Paulista', 30), +(48718, 'Irapuru', 30), +(48719, 'Lucélia', 30), +(48720, 'Mariápolis', 30), +(48721, 'Osvaldo Cruz', 30), +(48722, 'Pacaembu', 30), +(48723, 'Parapuã', 30), +(48724, 'Pracinha', 30), +(48725, 'Rinópolis', 30), +(48726, 'Sagres', 30), +(48727, 'Salmourão', 30), +(48728, 'Dracena', 30), +(48729, 'Junqueirópolis', 30), +(48730, 'Monte Castelo', 30), +(48731, 'Nova Guataporanga', 30), +(48732, 'Ouro Verde', 30), +(48733, 'Panorama', 30), +(48734, 'Pauliceia', 30), +(48735, 'Santa Mercedes', 30), +(48736, 'São João do Pau d''Alho', 30), +(48737, 'Tupi Paulista', 30), +(48738, 'Alfredo Marcondes', 30), +(48739, 'Álvares Machado', 30), +(48740, 'Anhumas', 30), +(48741, 'Caiabu', 30), +(48742, 'Caiuá', 30), +(48743, 'Emilianópolis', 30), +(48744, 'Estrela do Norte', 30), +(48745, 'Euclides da Cunha Paulista', 30), +(48746, 'Indiana', 30), +(48747, 'João Ramalho', 30), +(48748, 'Marabá Paulista', 30), +(48749, 'Martinópolis', 30), +(48750, 'Mirante do Paranapanema', 30), +(48751, 'Narandiba', 30), +(48752, 'Piquerobi', 30), +(48753, 'Pirapozinho', 30), +(48754, 'Presidente Bernardes', 30), +(48755, 'Presidente Epitácio', 30), +(48756, 'Presidente Prudente', 30), +(48757, 'Presidente Venceslau', 30), +(48758, 'Rancharia', 30), +(48759, 'Regente Feijó', 30), +(48760, 'Ribeirão dos Índios', 30), +(48761, 'Rosana', 30), +(48762, 'Sandovalina', 30), +(48763, 'Santo Anastácio', 30), +(48764, 'Santo Expedito', 30), +(48765, 'Taciba', 30), +(48766, 'Tarabai', 30), +(48767, 'Teodoro Sampaio', 30), +(48768, 'Barretos', 30), +(48769, 'Colina', 30), +(48770, 'Colômbia', 30), +(48771, 'Altinópolis', 30), +(48772, 'Batatais', 30), +(48773, 'Cajuru', 30), +(48774, 'Cássia dos Coqueiros', 30), +(48775, 'Santa Cruz da Esperança', 30), +(48776, 'Santo Antônio da Alegria', 30), +(48777, 'Cristais Paulista', 30), +(48778, 'Franca', 30), +(48779, 'Itirapuã', 30), +(48780, 'Jeriquara', 30), +(48781, 'Patrocínio Paulista', 30), +(48782, 'Pedregulho', 30), +(48783, 'Restinga', 30), +(48784, 'Ribeirão Corrente', 30), +(48785, 'Rifaina', 30), +(48786, 'São José da Bela Vista', 30), +(48787, 'Aramina', 30), +(48788, 'Buritizal', 30), +(48789, 'Guará', 30), +(48790, 'Igarapava', 30), +(48791, 'Ituverava', 30), +(48792, 'Bebedouro', 30), +(48793, 'Cândido Rodrigues', 30), +(48794, 'Fernando Prestes', 30), +(48795, 'Guariba', 30), +(48796, 'Jaboticabal', 30), +(48797, 'Monte Alto', 30), +(48798, 'Monte Azul Paulista', 30), +(48799, 'Pirangi', 30), +(48800, 'Pitangueiras', 30), +(48801, 'Santa Ernestina', 30), +(48802, 'Taiaçu', 30), +(48803, 'Taiúva', 30), +(48804, 'Taquaral', 30), +(48805, 'Taquaritinga', 30), +(48806, 'Terra Roxa', 30), +(48807, 'Viradouro', 30), +(48808, 'Vista Alegre do Alto', 30), +(48809, 'Barrinha', 30), +(48810, 'Brodowski', 30), +(48811, 'Cravinhos', 30), +(48812, 'Dumont', 30), +(48813, 'Guatapará', 30), +(48814, 'Jardinópolis', 30), +(48815, 'Luís Antônio', 30), +(48816, 'Pontal', 30), +(48817, 'Pradópolis', 30), +(48818, 'Ribeirão Preto', 30), +(48819, 'Santa Rita do Passa Quatro', 30), +(48820, 'Santa Rosa de Viterbo', 30), +(48821, 'São Simão', 30), +(48822, 'Serra Azul', 30), +(48823, 'Serrana', 30), +(48824, 'Sertãozinho', 30), +(48825, 'Guaíra', 30), +(48826, 'Ipuã', 30), +(48827, 'Jaborandi', 30), +(48828, 'Miguelópolis', 30), +(48829, 'Morro Agudo', 30), +(48830, 'Nuporanga', 30), +(48831, 'Orlândia', 30), +(48832, 'Sales Oliveira', 30), +(48833, 'São Joaquim da Barra', 30), +(48834, 'Auriflama', 30), +(48835, 'Floreal', 30), +(48836, 'Gastão Vidigal', 30), +(48837, 'General Salgado', 30), +(48838, 'Guzolândia', 30), +(48839, 'Magda', 30), +(48840, 'Nova Castilho', 30), +(48841, 'Nova Luzitânia', 30), +(48842, 'São João de Iracema', 30), +(48843, 'Ariranha', 30), +(48844, 'Cajobi', 30), +(48845, 'Catanduva', 30), +(48846, 'Catiguá', 30), +(48847, 'Elisiário', 30), +(48848, 'Embaúba', 30), +(48849, 'Novais', 30), +(48850, 'Palmares Paulista', 30), +(48851, 'Paraíso', 30), +(48852, 'Pindorama', 30), +(48853, 'Santa Adélia', 30), +(48854, 'Severínia', 30), +(48855, 'Tabapuã', 30), +(48856, 'Estrela d''Oeste', 30), +(48857, 'Fernandópolis', 30), +(48858, 'Guarani d''Oeste', 30), +(48859, 'Indiaporã', 30), +(48860, 'Macedônia', 30), +(48861, 'Meridiano', 30), +(48862, 'Mira Estrela', 30), +(48863, 'Ouroeste', 30), +(48864, 'Pedranópolis', 30), +(48865, 'São João das Duas Pontes', 30), +(48866, 'Turmalina', 30), +(48867, 'Aparecida d''Oeste', 30), +(48868, 'Aspásia', 30), +(48869, 'Dirce Reis', 30), +(48870, 'Dolcinópolis', 30), +(48871, 'Jales', 30), +(48872, 'Marinópolis', 30), +(48873, 'Mesópolis', 30), +(48874, 'Nova Canaã Paulista', 30), +(48875, 'Palmeira d''Oeste', 30), +(48876, 'Paranapuã', 30), +(48877, 'Pontalinda', 30), +(48878, 'Populina', 30), +(48879, 'Rubinéia', 30), +(48880, 'Santa Albertina', 30), +(48881, 'Santa Clara d''Oeste', 30), +(48882, 'Santa Fé do Sul', 30), +(48883, 'Santa Rita d''Oeste', 30), +(48884, 'Santa Salete', 30), +(48885, 'Santana da Ponte Pensa', 30), +(48886, 'São Francisco', 30), +(48887, 'Três Fronteiras', 30), +(48888, 'Urânia', 30), +(48889, 'Vitória Brasil', 30), +(48890, 'Macaubal', 30), +(48891, 'Monções', 30), +(48892, 'Monte Aprazível', 30), +(48893, 'Neves Paulista', 30), +(48894, 'Nhandeara', 30), +(48895, 'Nipoã', 30), +(48896, 'Poloni', 30), +(48897, 'Sebastianópolis do Sul', 30), +(48898, 'União Paulista', 30), +(48899, 'Irapuã', 30), +(48900, 'Itajobi', 30), +(48901, 'Marapoama', 30), +(48902, 'Novo Horizonte', 30), +(48903, 'Sales', 30), +(48904, 'Urupês', 30), +(48905, 'Adolfo', 30), +(48906, 'Altair', 30), +(48907, 'Bady Bassitt', 30), +(48908, 'Bálsamo', 30), +(48909, 'Cedral', 30), +(48910, 'Guapiaçu', 30), +(48911, 'Guaraci', 30), +(48912, 'Ibirá', 30), +(48913, 'Icém', 30), +(48914, 'Ipiguá', 30), +(48915, 'Jaci', 30), +(48916, 'José Bonifácio', 30), +(48917, 'Mendonça', 30), +(48918, 'Mirassol', 30), +(48919, 'Mirassolândia', 30), +(48920, 'Nova Aliança', 30), +(48921, 'Nova Granada', 30), +(48922, 'Olímpia', 30), +(48923, 'Onda Verde', 30), +(48924, 'Orindiúva', 30), +(48925, 'Palestina', 30), +(48926, 'Paulo de Faria', 30), +(48927, 'Planalto', 30), +(48928, 'Potirendaba', 30), +(48929, 'São José do Rio Preto', 30), +(48930, 'Tanabi', 30), +(48931, 'Ubarana', 30), +(48932, 'Uchoa', 30), +(48933, 'Zacarias', 30), +(48934, 'Álvares Florence', 30), +(48935, 'Américo de Campos', 30), +(48936, 'Cardoso', 30), +(48937, 'Cosmorama', 30), +(48938, 'Parisi', 30), +(48939, 'Pontes Gestal', 30), +(48940, 'Riolândia', 30), +(48941, 'Valentim Gentil', 30), +(48942, 'Votuporanga', 30), +(48943, 'Arapeí', 30), +(48944, 'Areias', 30), +(48945, 'Bananal', 30), +(48946, 'São José do Barreiro', 30), +(48947, 'Silveiras', 30), +(48948, 'Campos do Jordão', 30), +(48949, 'Monteiro Lobato', 30), +(48950, 'Santo Antônio do Pinhal', 30), +(48951, 'São Bento do Sapucaí', 30), +(48952, 'Caraguatatuba', 30), +(48953, 'Ilhabela', 30), +(48954, 'São Sebastião', 30), +(48955, 'Ubatuba', 30), +(48956, 'Aparecida', 30), +(48957, 'Cachoeira Paulista', 30), +(48958, 'Canas', 30), +(48959, 'Cruzeiro', 30), +(48960, 'Guaratinguetá', 30), +(48961, 'Lavrinhas', 30), +(48962, 'Lorena', 30), +(48963, 'Piquete', 30), +(48964, 'Potim', 30), +(48965, 'Queluz', 30), +(48966, 'Roseira', 30), +(48967, 'Cunha', 30), +(48968, 'Jambeiro', 30), +(48969, 'Lagoinha', 30), +(48970, 'Natividade da Serra', 30), +(48971, 'Paraibuna', 30), +(48972, 'Redenção da Serra', 30), +(48973, 'São Luiz do Paraitinga', 30), +(48974, 'Caçapava', 30), +(48975, 'Igaratá', 30), +(48976, 'Jacareí', 30), +(48977, 'Pindamonhangaba', 30), +(48978, 'Santa Branca', 30), +(48979, 'São José dos Campos', 30), +(48980, 'Taubaté', 30), +(48981, 'Tremembé', 30), +(48982, 'San Juan', 2919), +(48983, 'Ceiba', 2915), +(48984, 'Ciales', 2910), +(48985, 'Cidra', 2910), +(48986, 'Comerio', 2910), +(48987, 'Guayanilla', 2910), +(48988, 'Hatillo', 2910), +(48989, 'Lajas', 2910), +(48990, 'Lares', 2910), +(48991, 'Las Marias', 2910), +(48992, 'Las Piedras', 2915), +(48993, 'Loiza', 2910), +(48994, 'Luquillo', 2915), +(48995, 'Maricao', 2910), +(48996, 'Maunabo', 2915), +(48997, 'Moca', 2910), +(48998, 'Morovis', 2910), +(48999, 'Naguabo', 2910), +(49000, 'Naranjito', 2910), +(49001, 'Orocovis', 2915), +(49003, 'Patillas', 2915), +(49004, 'Penuelas', 2915), +(49005, 'Quebradillas', 2915), +(49006, 'Rincon', 2916), +(49007, 'Sabana Grande', 2915), +(49008, 'San Lorenzo', 2915), +(49009, 'Santa Isabel', 2915), +(49010, 'Toa Alta', 2915), +(49011, 'Toa Baja', 2915), +(49012, 'Villalba', 2915), +(49013, 'Yabucoa', 2915); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; diff --git a/nb-configuration.xml b/nb-configuration.xml new file mode 100644 index 0000000..a65c451 --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,18 @@ + + + + + + JDK_1.8 + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..13302ae --- /dev/null +++ b/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + com.github.hiiamrohit + Countries-States-Cities-database + 1.0-SNAPSHOT + jar + + UTF-8 + 1.8 + 1.8 + + + + + junit + junit + 4.12 + test + jar + + + com.wix + wix-embedded-mysql + 4.1.0 + test + + + mysql + mysql-connector-java + 6.0.6 + test + + + \ No newline at end of file diff --git a/src/test/java/com/github/hiiamrohit/ScriptTest.java b/src/test/java/com/github/hiiamrohit/ScriptTest.java new file mode 100644 index 0000000..20d98d0 --- /dev/null +++ b/src/test/java/com/github/hiiamrohit/ScriptTest.java @@ -0,0 +1,326 @@ +package com.github.hiiamrohit; + +import static com.wix.mysql.EmbeddedMysql.anEmbeddedMysql; +import static com.wix.mysql.config.MysqldConfig.aMysqldConfig; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.MalformedURLException; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.wix.mysql.EmbeddedMysql; +import com.wix.mysql.Sources; +import com.wix.mysql.SqlScriptSource; +import com.wix.mysql.config.MysqldConfig; +import com.wix.mysql.distribution.Version; + +/** + * + * @author Javier Ortiz Bultron + */ +public class ScriptTest +{ + private static EmbeddedMysql mysqld; + private static Connection conn; + private final String user = "testUser"; + private final String password = "testPassword"; + private final String schema = "countries-states-cities-db-test"; + private final int port = 3336; + private static final Logger LOG + = Logger.getLogger(ScriptTest.class.getName()); + + @Before + public void setupMySQL() throws SQLException + { + MysqldConfig config = aMysqldConfig(Version.v5_7_latest) + .withPort(port) + .withUser(user, password) + .build(); + + mysqld = anEmbeddedMysql(config) + .addSchema(schema) + .start(); + + conn = DriverManager.getConnection( + "jdbc:mysql://localhost:" + port + "/" + schema + "?useSSL=false", + user, password); + } + + @After + public void shutdown() + { + try + { + if (conn != null) + { + conn.close(); + } + if (mysqld != null) + { + mysqld.stop(); + } + } + catch (SQLException ex) + { + LOG.log(Level.SEVERE, null, ex); + } + } + + /** + * Check the + */ + @Test + public void testIntegrity() + { + Map>> results = new HashMap<>(); + ArrayList scripts = new ArrayList<>(); + scripts.add(new File("countries.sql")); + scripts.add(new File("states.sql")); + scripts.add(new File("cities.sql")); + scripts.forEach(file -> + { + checkIntegrity(file, file.getName().equals("countries.sql"), results); + }); + + //Now check that al the keys are valid + List countryKeys = results.get("countries.sql").get("keys"); + assertFalse(countryKeys.isEmpty()); + List stateKeys = results.get("states.sql").get("keys"); + assertFalse(stateKeys.isEmpty()); + + List stateLinks = results.get("states.sql").get("links"); + assertFalse(stateLinks.isEmpty()); + List cityLinks = results.get("cities.sql").get("links"); + assertFalse(cityLinks.isEmpty()); + + //Make sure all state links exist + stateLinks.forEach(link -> + { + assertTrue(link + " not found in coutry!", countryKeys.contains(link)); + }); + + //Make sure all city links exist + cityLinks.forEach(link -> + { + assertTrue(link + " not found in state!", stateKeys.contains(link)); + }); + } + + @Test + public void testScripts() throws MalformedURLException + { + //Now try to import the data + importData(); + } + + @Test + public void testEmptyCountries() throws MalformedURLException, SQLException + { + importData(); + //Now query for empty Countries + PreparedStatement ps = conn.prepareStatement("select id,name from countries " + + "where id not in (select country_id from states)"); + ResultSet rs = ps.executeQuery(); + boolean isEmpty = !rs.isBeforeFirst() && rs.getRow() == 0; + int count = 0; + List invalid = new ArrayList<>(); + while (rs.next()) + { + System.err.println(rs.getInt(1) + ") " + rs.getString(2)); + invalid.add(rs.getInt(1)); + count++; + } + if (count > 0) + { + System.err.println("There are " + count + " entries without children!"); + writeCleanFile(new File("countries.sql"), new File("countries-clean.sql"), + invalid); + } + assertTrue(isEmpty); + } + + @Test + public void testEmptyStates() throws MalformedURLException, SQLException + { + importData(); + //Now query for empty Countries + PreparedStatement ps = conn.prepareStatement("select s.id, s.name,(select " + + "name from countries where id=s.country_id) from states s where " + + "s.id not in (select state_id from cities)"); + ResultSet rs = ps.executeQuery(); + boolean isEmpty = !rs.isBeforeFirst() && rs.getRow() == 0; + int count = 0; + List invalid = new ArrayList<>(); + while (rs.next()) + { + System.err.println(rs.getInt(1) + ") " + rs.getString(2) + " (" + + rs.getString(3) + ")"); + invalid.add(rs.getInt(1)); + count++; + } + if (count > 0) + { + System.err.println("There are " + count + " states without children!"); + writeCleanFile(new File("cities.sql"), new File("cities-clean.sql"), + invalid); + } + assertTrue(isEmpty); + } + + /** + * Import scripts. It'll throw a RuntimeException if something goes wrong. + * + * @throws MalformedURLException + */ + private void importData() throws MalformedURLException + { + List scripts = new ArrayList<>(); + scripts.add(Sources.fromURL(new File("countries.sql").toURI().toURL())); + scripts.add(Sources.fromURL(new File("states.sql").toURI().toURL())); + scripts.add(Sources.fromURL(new File("cities.sql").toURI().toURL())); + mysqld.executeScripts(schema, scripts); + } + + private void writeCleanFile(File src, File dest, List invalid) + { + try (BufferedWriter writer = Files.newBufferedWriter(dest.toPath())) + { + try (BufferedReader br = new BufferedReader(new FileReader(src))) + { + String line; + while ((line = br.readLine()) != null) + { + if (line.startsWith("(")) + { + int id = Integer.valueOf(line.substring(1, line.indexOf(","))); + if (!invalid.contains(id)) + { + writer.write(line); + writer.append('\n'); + } + } + else + { + writer.write(line); + writer.append('\n'); + } + } + } + catch (IOException ex) + { + LOG.log(Level.SEVERE, null, ex); + } + } + catch (IOException ex) + { + LOG.log(Level.SEVERE, null, ex); + } + } + + /** + * Scan the file for duplicate keys or references + * + * @param file File to check. + * @param onlyKeys Use true to ignore integer columns beyond the first one + * (key). + * @param results Map storing results in the following format: + * + * script file name ->keys, links + */ + private void checkIntegrity(File file, boolean onlyKeys, + Map>> results) + { + //Read file + List list = null; + try (Stream lines = Files.lines(file.toPath())) + { + list = lines.collect(Collectors.toList()); + } + catch (IOException e) + { + fail(e.getLocalizedMessage()); + } + assertNotNull(list); + ArrayList keys = new ArrayList<>(); + ArrayList relationships = new ArrayList<>(); + int lineNumber = 0; + for (String line : list) + { + lineNumber++; + if (line.startsWith("(")) + { + line = line.substring(1, line.lastIndexOf(")")); + StringTokenizer st = new StringTokenizer(line, ","); + int counter = 0; + while (st.hasMoreTokens()) + { + try + { + String token = st.nextToken().trim(); + if (counter == 0) + { + //This is the key + + int key = Integer.valueOf(token); + if (keys.contains(key)) + { + fail("Duplicated key: " + key + " on file " + file.getName() + + ", line number: " + lineNumber); + } + else + { + keys.add(key); + } + if (onlyKeys) + { + //Don't check the rest + break; + } + } + else + { + int value = Integer.valueOf(token); + if (!st.hasMoreTokens()) + { + relationships.add(value); + } + } + } + catch (NumberFormatException ne) + { + //Ignore. + } + counter++; + } + } + results.put(file.getName(), new HashMap<>()); + results.get(file.getName()).put("keys", keys); + results.get(file.getName()).put("links", relationships); + } + } +} diff --git a/states.sql b/states.sql index b239c7a..5209fbd 100644 --- a/states.sql +++ b/states.sql @@ -10,7 +10,8 @@ CREATE TABLE IF NOT EXISTS `states` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `country_id` int(11) NOT NULL DEFAULT '1', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + FOREIGN KEY (country_id) REFERENCES countries(id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4121 ; @@ -535,7 +536,6 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (517, 'Ceara', 30), (518, 'Distrito Federal', 30), (519, 'Espirito Santo', 30), -(520, 'Estado de Sao Paulo', 30), (521, 'Goias', 30), (522, 'Maranhao', 30), (523, 'Mato Grosso', 30), @@ -552,7 +552,7 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (534, 'Rondonia', 30), (535, 'Roraima', 30), (536, 'Santa Catarina', 30), -(537, 'Sao Paulo', 30), +(537, 'São Paulo', 30), (538, 'Sergipe', 30), (539, 'Tocantins', 30), (540, 'British Indian Ocean Territory', 31), @@ -747,17 +747,13 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (729, 'Tarapaca', 43), (730, 'Valparaiso', 43), (731, 'Anhui', 44), -(732, 'Anhui Province', 44), -(733, 'Anhui Sheng', 44), (734, 'Aomen', 44), (735, 'Beijing', 44), (736, 'Beijing Shi', 44), (737, 'Chongqing', 44), (738, 'Fujian', 44), -(739, 'Fujian Sheng', 44), (740, 'Gansu', 44), (741, 'Guangdong', 44), -(742, 'Guangdong Sheng', 44), (743, 'Guangxi', 44), (744, 'Guizhou', 44), (745, 'Hainan', 44), @@ -767,17 +763,14 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (749, 'Hubei', 44), (750, 'Hunan', 44), (751, 'Jiangsu', 44), -(752, 'Jiangsu Sheng', 44), (753, 'Jiangxi', 44), (754, 'Jilin', 44), (755, 'Liaoning', 44), -(756, 'Liaoning Sheng', 44), (757, 'Nei Monggol', 44), (758, 'Ningxia Hui', 44), (759, 'Qinghai', 44), (760, 'Shaanxi', 44), (761, 'Shandong', 44), -(762, 'Shandong Sheng', 44), (763, 'Shanghai', 44), (764, 'Shanxi', 44), (765, 'Sichuan', 44), @@ -787,7 +780,6 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (769, 'Xizang', 44), (770, 'Yunnan', 44), (771, 'Zhejiang', 44), -(772, 'Zhejiang Sheng', 44), (773, 'Christmas Island', 45), (774, 'Cocos (Keeling) Islands', 46), (775, 'Amazonas', 47), @@ -1638,7 +1630,6 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (1620, 'Comayagua', 97), (1621, 'Copan', 97), (1622, 'Cortes', 97), -(1623, 'Distrito Central', 97), (1624, 'El Paraiso', 97), (1625, 'Francisco Morazan', 97), (1626, 'Gracias a Dios', 97), @@ -1859,7 +1850,6 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (1841, 'Lazio', 107), (1842, 'Lecce', 107), (1843, 'Lecco', 107), -(1844, 'Lecco Province', 107), (1845, 'Liguria', 107), (1846, 'Lodi', 107), (1847, 'Lombardia', 107), @@ -2196,8 +2186,7 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (2178, 'Nimba', 123), (2179, 'Rivercess', 123), (2180, 'Sinoe', 123), -(2181, 'Ajdabiya', 124); -INSERT INTO `states` (`id`, `name`, `country_id`) VALUES +(2181, 'Ajdabiya', 124), (2182, 'Fezzan', 124), (2183, 'Banghazi', 124), (2184, 'Darnah', 124), @@ -3939,9 +3928,7 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (3920, 'Alaska', 231), (3921, 'Arizona', 231), (3922, 'Arkansas', 231), -(3923, 'Byram', 231), (3924, 'California', 231), -(3925, 'Cokato', 231), (3926, 'Colorado', 231), (3927, 'Connecticut', 231), (3928, 'Delaware', 231), @@ -3956,11 +3943,9 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (3937, 'Kansas', 231), (3938, 'Kentucky', 231), (3939, 'Louisiana', 231), -(3940, 'Lowa', 231), (3941, 'Maine', 231), (3942, 'Maryland', 231), (3943, 'Massachusetts', 231), -(3944, 'Medfield', 231), (3945, 'Michigan', 231), (3946, 'Minnesota', 231), (3947, 'Mississippi', 231), @@ -3970,24 +3955,20 @@ INSERT INTO `states` (`id`, `name`, `country_id`) VALUES (3951, 'Nevada', 231), (3952, 'New Hampshire', 231), (3953, 'New Jersey', 231), -(3954, 'New Jersy', 231), (3955, 'New Mexico', 231), (3956, 'New York', 231), (3957, 'North Carolina', 231), (3958, 'North Dakota', 231), (3959, 'Ohio', 231), (3960, 'Oklahoma', 231), -(3961, 'Ontario', 231), +(3961, 'Ontario', 38), (3962, 'Oregon', 231), (3963, 'Pennsylvania', 231), -(3964, 'Ramey', 231), (3965, 'Rhode Island', 231), (3966, 'South Carolina', 231), (3967, 'South Dakota', 231), -(3968, 'Sublimity', 231), (3969, 'Tennessee', 231), (3970, 'Texas', 231), -(3971, 'Trimble', 231), (3972, 'Utah', 231), (3973, 'Vermont', 231), (3974, 'Virginia', 231),