/home/martin/workspace/OpenStreetNav/src/osmdb/ImportTableProcessor.cpp
Go to the documentation of this file.
00001 /*
00002  * ImportTableProcessor.cpp
00003  *
00004  *  Created on: Jan 7, 2012
00005  *      Author: martin
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     //indexes
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     //updates
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     //deletes
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     //orphans
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     //duplicities
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     //incomplete
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     //orphan_import
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     //duplicit other stuff
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         //import
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 } /* namespace osmdb */
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines