00001
00002
00003
00004
00005
00006
00007
00008 #include "ImportTableProcessor.h"
00009 #include "../sqllib/sqllib.h"
00010
00011 namespace osmdb
00012 {
00013
00014 std::vector<ImportTableAction> const& AllImportActions::get()
00015 {
00016 return vect;
00017 }
00018
00019 std::vector<ImportTableAction> AllImportActions::vect = std::vector<ImportTableAction>
00020 {
00021 ImportTableAction::CREATE_IMPORT_PKEY,
00022 ImportTableAction::CREATE_IMPORT_INDEX,
00023 ImportTableAction::ANALYZE,
00024 ImportTableAction::DELETE_NODE_TO_UPDATE,
00025 ImportTableAction::DELETE_WAY_TO_UPDATE,
00026 ImportTableAction::DELETE_RELATION_TO_UPDATE,
00027 ImportTableAction::DELETE_NODE_TO_DELETE,
00028 ImportTableAction::DELETE_WAY_TO_DELETE,
00029 ImportTableAction::DELETE_RELATION_TO_DELETE,
00030 ImportTableAction::DELETE_ORPHAN,
00031 ImportTableAction::DELETE_DUPLICIT_NODE,
00032 ImportTableAction::DELETE_DUPLICIT_WAY,
00033 ImportTableAction::DELETE_DUPLICIT_RELATION,
00034 ImportTableAction::DELETE_INCOMPLETE_WAY,
00035 ImportTableAction::DELETE_INCOMPLETE_RELATION,
00036 ImportTableAction::DELETE_IMPORT_ORPHANS,
00037 ImportTableAction::IMPORT_NODE,
00038 ImportTableAction::IMPORT_WAY,
00039 ImportTableAction::IMPORT_RELATION,
00040 ImportTableAction::IMPORT_NODE_ATTR,
00041 ImportTableAction::IMPORT_WAY_ATTR,
00042 ImportTableAction::IMPORT_REL_ATTR,
00043 ImportTableAction::IMPORT_WAY_NODE,
00044 ImportTableAction::IMPORT_MEMBER_NODE,
00045 ImportTableAction::IMPORT_MEMBER_WAY,
00046 ImportTableAction::IMPORT_MEMBER_REL,
00047 ImportTableAction::IMPORT_EDGES,
00048 ImportTableAction::CLEAR_IMPORT,
00049 ImportTableAction::DELETE_DUPLICIT_ATTR,
00050 ImportTableAction::DELETE_DUPLICIT_MEMBER,
00051 ImportTableAction::DELETE_DUPLICIT_WAYNODE
00052 };
00053
00054 ImportTableProcessor::ImportTableProcessor(OsmDatabase& db):
00055 db(db)
00056 {
00057 enable_all();
00058 }
00059
00060 void ImportTableProcessor::process()
00061 {
00062
00063
00064 auto st = sqllib::get_create_import_pkey(db.get_db());
00065 if (enabled[ImportTableAction::CREATE_IMPORT_PKEY])
00066 {
00067 st.execute();
00068 action_signal(ImportTableAction::CREATE_IMPORT_PKEY, 0);
00069 }
00070 st = sqllib::get_create_import_index(db.get_db());
00071 if (enabled[ImportTableAction::CREATE_IMPORT_INDEX])
00072 {
00073 st.execute();
00074 st = sqllib::get_create_import_index_edge(db.get_db());
00075 st.execute();
00076 action_signal(ImportTableAction::CREATE_IMPORT_INDEX, 0);
00077 }
00078 st = sqllib::get_analyze_import(db.get_db());
00079 if (enabled[ImportTableAction::ANALYZE])
00080 {
00081 st.execute();
00082 action_signal(ImportTableAction::ANALYZE, 0);
00083 }
00084
00085
00086 st = sqllib::get_delete_updated_nodes(db.get_db());
00087 if (enabled[ImportTableAction::DELETE_NODE_TO_UPDATE])
00088 {
00089 st.execute();
00090 action_signal(ImportTableAction::DELETE_NODE_TO_UPDATE, st.affected_rows());
00091 }
00092 st = sqllib::get_delete_updated_ways(db.get_db());
00093 if (enabled[ImportTableAction::DELETE_WAY_TO_UPDATE])
00094 {
00095 st.execute();
00096 action_signal(ImportTableAction::DELETE_WAY_TO_UPDATE, st.affected_rows());
00097 }
00098 st = sqllib::get_delete_updated_relations(db.get_db());
00099 if (enabled[ImportTableAction::DELETE_RELATION_TO_UPDATE])
00100 {
00101 st.execute();
00102 action_signal(ImportTableAction::DELETE_RELATION_TO_UPDATE, st.affected_rows());
00103 }
00104
00105 st = sqllib::get_delete_deleted_nodes(db.get_db());
00106 if (enabled[ImportTableAction::DELETE_NODE_TO_DELETE])
00107 {
00108 st.execute();
00109 action_signal(ImportTableAction::DELETE_NODE_TO_DELETE, st.affected_rows());
00110 }
00111 st = sqllib::get_delete_deleted_ways(db.get_db());
00112 if (enabled[ImportTableAction::DELETE_WAY_TO_DELETE])
00113 {
00114 st.execute();
00115 action_signal(ImportTableAction::DELETE_WAY_TO_DELETE, st.affected_rows());
00116 }
00117 st = sqllib::get_delete_deleted_relations(db.get_db());
00118 if (enabled[ImportTableAction::DELETE_RELATION_TO_DELETE])
00119 {
00120 st.execute();
00121 action_signal(ImportTableAction::DELETE_RELATION_TO_DELETE, st.affected_rows());
00122 }
00123
00124
00125 int64_t orp = 0;
00126 st = sqllib::get_delete_orphan1(db.get_db());
00127 if (enabled[ImportTableAction::DELETE_ORPHAN])
00128 {
00129 st.execute();
00130 orp += st.affected_rows();
00131 st = sqllib::get_delete_orphan2(db.get_db());
00132 st.execute();
00133 orp += st.affected_rows();
00134 st = sqllib::get_delete_orphan3(db.get_db());
00135 st.execute();
00136 orp += st.affected_rows();
00137 st = sqllib::get_delete_orphan4(db.get_db());
00138 st.execute();
00139 orp += st.affected_rows();
00140 st = sqllib::get_delete_orphan5(db.get_db());
00141 st.execute();
00142 orp += st.affected_rows();
00143 st = sqllib::get_delete_orphan6(db.get_db());
00144 st.execute();
00145 orp += st.affected_rows();
00146 st = sqllib::get_delete_orphan7(db.get_db());
00147 st.execute();
00148 orp += st.affected_rows();
00149 action_signal(ImportTableAction::DELETE_ORPHAN, orp);
00150 }
00151
00152
00153 st = sqllib::get_delete_duplicit_import_nodes(db.get_db());
00154 if (enabled[ImportTableAction::DELETE_DUPLICIT_NODE])
00155 {
00156 st.execute();
00157 action_signal(ImportTableAction::DELETE_DUPLICIT_NODE, st.affected_rows());
00158 }
00159 st = sqllib::get_delete_duplicit_import_ways(db.get_db());
00160 if (enabled[ImportTableAction::DELETE_DUPLICIT_WAY])
00161 {
00162 st.execute();
00163 action_signal(ImportTableAction::DELETE_DUPLICIT_WAY, st.affected_rows());
00164 }
00165 st = sqllib::get_delete_duplicit_import_rels(db.get_db());
00166 if (enabled[ImportTableAction::DELETE_DUPLICIT_RELATION])
00167 {
00168 st.execute();
00169 action_signal(ImportTableAction::DELETE_DUPLICIT_RELATION, st.affected_rows());
00170 }
00171
00172
00173 st = sqllib::get_delete_incomplete_ways(db.get_db());
00174 if (enabled[ImportTableAction::DELETE_INCOMPLETE_WAY])
00175 {
00176 st.execute();
00177 action_signal(ImportTableAction::DELETE_INCOMPLETE_WAY, st.affected_rows());
00178 }
00179 int64_t inc_rel = 0;
00180 if (enabled[ImportTableAction::DELETE_INCOMPLETE_RELATION])
00181 {
00182 st = sqllib::get_delete_incomplete_rels1(db.get_db());
00183 st.execute();
00184 inc_rel += st.affected_rows();
00185 st = sqllib::get_delete_incomplete_rels2(db.get_db());
00186 st.execute();
00187 inc_rel += st.affected_rows();
00188 st = sqllib::get_delete_incomplete_rels3(db.get_db());
00189 st.execute();
00190 inc_rel += st.affected_rows();
00191 action_signal(ImportTableAction::DELETE_INCOMPLETE_RELATION, inc_rel);
00192 }
00193
00194
00195 orp = 0;
00196 if (enabled[ImportTableAction::DELETE_IMPORT_ORPHANS])
00197 {
00198 st = sqllib::get_delete_orphan_import1(db.get_db());
00199 st.execute();
00200 orp += st.affected_rows();
00201 st = sqllib::get_delete_orphan_import2(db.get_db());
00202 st.execute();
00203 orp += st.affected_rows();
00204 st = sqllib::get_delete_orphan_import3(db.get_db());
00205 st.execute();
00206 orp += st.affected_rows();
00207 st = sqllib::get_delete_orphan_import4(db.get_db());
00208 st.execute();
00209 orp += st.affected_rows();
00210 st = sqllib::get_delete_orphan_import5(db.get_db());
00211 st.execute();
00212 orp += st.affected_rows();
00213 st = sqllib::get_delete_orphan_import6(db.get_db());
00214 st.execute();
00215 orp += st.affected_rows();
00216 st = sqllib::get_delete_orphan_import7(db.get_db());
00217 st.execute();
00218 orp += st.affected_rows();
00219 action_signal(ImportTableAction::DELETE_IMPORT_ORPHANS, orp);
00220 }
00221
00222
00223 int64_t dup = 0;
00224 if (enabled[ImportTableAction::DELETE_DUPLICIT_ATTR])
00225 {
00226 st = sqllib::get_delete_duplicit_node_attrs(db.get_db());
00227 st.execute();
00228 dup += st.affected_rows();
00229 st = sqllib::get_delete_duplicit_way_attrs(db.get_db());
00230 st.execute();
00231 dup += st.affected_rows();
00232 st = sqllib::get_delete_duplicit_rel_attrs(db.get_db());
00233 st.execute();
00234 dup += st.affected_rows();
00235 action_signal(ImportTableAction::DELETE_DUPLICIT_ATTR, dup);
00236 }
00237
00238 st = sqllib::get_delete_duplicit_waynodes(db.get_db());
00239 if (enabled[ImportTableAction::DELETE_DUPLICIT_WAYNODE])
00240 {
00241 st.execute();
00242 action_signal(ImportTableAction::DELETE_DUPLICIT_WAYNODE, st.affected_rows());
00243 }
00244
00245 dup = 0;
00246 st = sqllib::get_delete_duplicit_node_members(db.get_db());
00247 if (enabled[ImportTableAction::DELETE_DUPLICIT_MEMBER])
00248 {
00249 st.execute();
00250 dup += st.affected_rows();
00251 st = sqllib::get_delete_duplicit_way_members(db.get_db());
00252 st.execute();
00253 dup += st.affected_rows();
00254 st = sqllib::get_delete_duplicit_rel_members(db.get_db());
00255 st.execute();
00256 dup += st.affected_rows();
00257 action_signal(ImportTableAction::DELETE_DUPLICIT_MEMBER, dup);
00258 }
00259
00260 if (proceed_signal())
00261 {
00262
00263 st = sqllib::get_do_import1(db.get_db());
00264 if (enabled[ImportTableAction::IMPORT_NODE])
00265 {
00266 st.execute();
00267 action_signal(ImportTableAction::IMPORT_NODE, st.affected_rows());
00268 }
00269 st = sqllib::get_do_import2(db.get_db());
00270 if (enabled[ImportTableAction::IMPORT_WAY])
00271 {
00272 st.execute();
00273 action_signal(ImportTableAction::IMPORT_WAY, st.affected_rows());
00274 }
00275 st = sqllib::get_do_import3(db.get_db());
00276 if (enabled[ImportTableAction::IMPORT_RELATION])
00277 {
00278 st.execute();
00279 action_signal(ImportTableAction::IMPORT_RELATION, st.affected_rows());
00280 }
00281 st = sqllib::get_do_import4(db.get_db());
00282 if (enabled[ImportTableAction::IMPORT_NODE_ATTR])
00283 {
00284 st.execute();
00285 action_signal(ImportTableAction::IMPORT_NODE_ATTR, st.affected_rows());
00286 }
00287 st = sqllib::get_do_import5(db.get_db());
00288 if (enabled[ImportTableAction::IMPORT_WAY_ATTR])
00289 {
00290 st.execute();
00291 action_signal(ImportTableAction::IMPORT_WAY_ATTR, st.affected_rows());
00292 }
00293 st = sqllib::get_do_import6(db.get_db());
00294 if (enabled[ImportTableAction::IMPORT_REL_ATTR])
00295 {
00296 st.execute();
00297 action_signal(ImportTableAction::IMPORT_REL_ATTR, st.affected_rows());
00298 }
00299 st = sqllib::get_do_import7(db.get_db());
00300 if (enabled[ImportTableAction::IMPORT_WAY_NODE])
00301 {
00302 st.execute();
00303 action_signal(ImportTableAction::IMPORT_WAY_NODE, st.affected_rows());
00304 }
00305 st = sqllib::get_do_import8(db.get_db());
00306 if (enabled[ImportTableAction::IMPORT_MEMBER_NODE])
00307 {
00308 st.execute();
00309 action_signal(ImportTableAction::IMPORT_MEMBER_NODE, st.affected_rows());
00310 }
00311 st = sqllib::get_do_import9(db.get_db());
00312 if (enabled[ImportTableAction::IMPORT_MEMBER_WAY])
00313 {
00314 st.execute();
00315 action_signal(ImportTableAction::IMPORT_MEMBER_WAY, st.affected_rows());
00316 }
00317 st = sqllib::get_do_import10(db.get_db());
00318 if (enabled[ImportTableAction::IMPORT_MEMBER_REL])
00319 {
00320 st.execute();
00321 action_signal(ImportTableAction::IMPORT_MEMBER_REL, st.affected_rows());
00322 }
00323 st = sqllib::get_do_import11(db.get_db());
00324 if (enabled[ImportTableAction::IMPORT_EDGES])
00325 {
00326 st.execute();
00327 action_signal(ImportTableAction::IMPORT_EDGES, st.affected_rows());
00328 }
00329
00330 if (enabled[ImportTableAction::CLEAR_IMPORT])
00331 {
00332 st = sqllib::get_drop_import_pkey(db.get_db());
00333 st.execute();
00334 st = sqllib::get_drop_import_index(db.get_db());
00335 st.execute();
00336 st = sqllib::get_drop_import_index_edge(db.get_db());
00337 st.execute();
00338 st = sqllib::get_clear_import_table(db.get_db());
00339 st.execute();
00340 action_signal(ImportTableAction::CLEAR_IMPORT, st.affected_rows());
00341 }
00342 }
00343 }
00344
00345 void ImportTableProcessor::set(ImportTableAction act, bool val)
00346 {
00347 enabled[act] = val;
00348 }
00349
00350 void ImportTableProcessor::enable(ImportTableAction act)
00351 {
00352 set(act, true);
00353 }
00354
00355 void ImportTableProcessor::disable(ImportTableAction act)
00356 {
00357 set(act, false);
00358 }
00359
00360 void ImportTableProcessor::set_all(bool val)
00361 {
00362 for (unsigned int i = 0; i < AllImportActions::get().size(); ++i)
00363 {
00364 enabled[AllImportActions::get()[i]] = val;
00365 }
00366 }
00367
00368 void ImportTableProcessor::enable_all()
00369 {
00370 set_all(true);
00371 }
00372
00373 void ImportTableProcessor::disable_all()
00374 {
00375 set_all(false);
00376 }
00377
00378 ImportTableProcessor::~ImportTableProcessor()
00379 {
00380 }
00381
00382 }