• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

E:/sqlmaster/src/sqldumpthread.cpp

Go to the documentation of this file.
00001 #include "sqldumpthread.h"
00002 
00003 SqlDumpThread::SqlDumpThread(QObject *parent) :
00004         QThread(parent)
00005 {
00006 }
00007 
00008 void SqlDumpThread::run() {
00009     setDb(db, dbName, tableList, viewList, procedureList, drop, data, structure, createDb, useDb);
00010 }
00011 
00012 void SqlDumpThread::setDb(QSqlDatabase db, QString dbName, QStringList tableList, QStringList viewList,
00013                           QStringList procedureList, bool drop, bool data, bool structure, bool createDb, bool useDb) {
00014     if (db.isOpen()) {
00015         //SQL Database Backup Script Generator
00016         emit totalProgress(0);
00017         int m_tableCount = tableList.count();
00018         int m_viewCount = viewList.count();
00019         int m_procCount = procedureList.count();
00020 
00021         int m_totalCout = m_tableCount + m_viewCount + m_procCount;
00022         if (m_totalCout < 1)
00023             m_totalCout = 1;
00024         int m_pos = 0;
00025         QString finalSqlScript = "";
00026         finalSqlScript.append(tr(""
00027                                  "/*"
00028                                  "\nSmart MySQL Tool Backup Script Generator 1.2"
00029                                  "\nMySQL Backup"
00030                                  "\n********************************************"
00031                                  "\n*/"
00032                                  "\n\n"
00033                                  "/*!40101 SET NAMES utf8 */;"
00034                                  "\n\n"
00035                                  "/*!40101 SET SQL_MODE=''*/;"
00036                                  "\n\n"
00037                                  "/*!40101 SET @OLD_FOREIGN_KEY CHECKS=!FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/;"
00038                                  "\n/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;"));
00039         if (createDb) {
00040             emit currentObjectName(dbName);
00041             emit currentObjectType("Database");
00042             emit currentPosition(1);
00043             emit objectValueCount(1);
00044             finalSqlScript.append(tr(""
00045                                      "\n\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`%1`/*!40100 DEFAULT CHARACTER SET latin1 */;"
00046                                      "").arg(dbName));
00047         }
00048         if (useDb) {
00049             emit currentObjectName(dbName);
00050             emit currentObjectType("Database");
00051             emit currentPosition(1);
00052             emit objectValueCount(1);
00053             finalSqlScript.append(tr(""
00054                                      "\n\nUSE `%1`;").arg(dbName));
00055         }
00056         //TABLES
00057         if (tableList.length() > 0) {
00058             finalSqlScript.append("\n\n");
00059             emit currentObjectType("Table");
00060             emit objectValueCount(tableList.count());
00061             for (int tables = 0; tables < tableList.count(); tables++) {
00062                 m_pos = m_pos + 1;
00063                 emit totalProgress((m_pos/m_totalCout)* 100);
00064                 QString tableName = tableList.at(tables);
00065                 emit currentObjectName(tableName);
00066                 emit currentPosition(tables);
00067                 QString tableString = "";
00068                 if (structure) {
00069                     tableString.append(tr(""
00070                                           "\n/*Table Structure for table `%1` */").arg(tableName));
00071                     if (drop) {
00072                         tableString.append(tr(""
00073                                               "\nDROP TABLE IF EXISTS `%1`;"
00074                                               "").arg(tableName));
00075                     }
00076                     tableString.append("\n");
00077                 }
00078                 //table structure
00079                 if (structure) {
00080                     QSqlQuery tableCreateQuery = QSqlQuery(db);
00081                     if (tableCreateQuery.exec(tr("SHOW CREATE TABLE `%2`.`%1`").arg(tableName, dbName))) {
00082                         tableCreateQuery.first();
00083                         tableString.append("\n");
00084                         tableString.append(tableCreateQuery.value(1).toString());
00085                         tableCreateQuery.clear();
00086                         tableString.append(";\n\n");
00087                     }
00088                 }
00089                 //table structure
00090                 //table data
00091                 if (data) {
00092                     QString dataString = "";
00093                     QString queryHeader = "";
00094                     QSqlQuery tableDataQuery = QSqlQuery(db);
00095                     if (tableDataQuery.exec(tr("describe `%1`.`%2`").arg(dbName, tableName))) {
00096                         queryHeader.append(tr(""
00097                                               "INSERT INTO `%1`("
00098                                               "").arg(tableName));
00099                         while (tableDataQuery.next()) {
00100                             queryHeader.append(tr(""
00101                                                   "`%1`, "
00102                                                   "").arg(tableDataQuery.value(0).toString()));
00103                         }
00104                         queryHeader = queryHeader.left(queryHeader.length() - 2);
00105                         queryHeader.append(") VALUES (");
00106                         //load all data
00107                         tableString.append(tr(""
00108                                               "/*Data for the table `%1`*/\n"
00109                                               "").arg(tableName));
00110                         QString insertStatement = "";
00111                         QSqlQuery selectQuery = QSqlQuery(db);
00112                         int pos = 0;
00113                         if (selectQuery.exec(tr("SELECT * FROM `%1`.`%2`").arg(dbName, tableName))) {
00114                             int cnt = selectQuery.size();
00115                             emit objectValueCount(cnt);
00116                             emit currentObjectType(tr("Data for table %1").arg(tableName));
00117                             while (selectQuery.next()) {
00118                                 pos = pos + 1;
00119                                 QSqlRecord rec = selectQuery.record();
00120                                 emit currentPosition(pos);
00121                                 insertStatement = queryHeader; //insert into `x`.`y` (`a`, `b`) values (
00122                                 for (int i = 0; i < rec.count(); i++) {
00123                                     insertStatement.append(tr("'%1',").arg(rec.value(i).toString()));
00124                                 }
00125                                 insertStatement = insertStatement.left(insertStatement.length() - 1);
00126                                 insertStatement.append(");\n");
00127                                 dataString.append(insertStatement);
00128                             }
00129                         }
00130                         tableString.append(dataString);
00131                     }
00132                 }
00133                 //table data
00134                 finalSqlScript.append(tableString);
00135             }
00136         }
00137         //TABLES
00138         //VIEWS
00139         if (viewList.count() > 0) {
00140             finalSqlScript.append("\n\n");
00141             QString viewString = "";
00142             viewString.append("\n");
00143             for (int view = 0; view < viewList.count(); view++) {
00144                 m_pos = m_pos + 1;
00145                 emit totalProgress((m_pos/m_totalCout)* 100);
00146                 QString viewName = viewList.at(view);
00147                 emit currentObjectName(viewName);
00148                 emit currentObjectType("View");
00149                 emit currentPosition(view);
00150                 emit objectValueCount(viewList.count());
00151                 QString viewDefinition = "";
00152                 if (drop) {
00153                     viewDefinition.append(tr("\nDROP VIEW IF EXISTS `%1`;").arg(viewName));
00154                 }
00155                 QSqlQuery viewDef = QSqlQuery(db);
00156                 if (viewDef.exec(tr("SHOW CREATE VIEW `%1`").arg(viewName))) {
00157                     while (viewDef.next()) {
00158                         viewDefinition.append("\n");
00159                         viewDefinition.append(viewDef.value(1).toString());
00160                         viewDefinition.append(";\n");
00161                     }
00162                 }
00163                 viewString.append(viewDefinition);
00164             }
00165             finalSqlScript.append(viewString);
00166         }
00167         //END OF VIEWS
00168         //STORED PROCEDURES
00169         if (procedureList.count() > 0) {
00170             finalSqlScript.append("\n\n");
00171             QString procString = "";
00172             procString.append("\n");
00173             for (int procedure = 0; procedure < procedureList.count(); procedure++) {
00174                 m_pos = m_pos + 1;
00175                 emit totalProgress((m_pos/m_totalCout)* 100);
00176                 QString procedureName = procedureList.at(procedure);
00177                 emit currentObjectName(procedureName);
00178                 emit currentObjectType("Stored Procedure");
00179                 emit currentPosition(procedure);
00180                 emit objectValueCount(procedureList.count());
00181                 QString procedureDefinition = "";
00182                 if (drop) {
00183                     procedureDefinition.append(tr("\n/*!50003 DROP PROCEDURE IF EXISTS `%1`*/;\nDELIMITER $$").arg(procedureName));
00184                 }
00185                 QSqlQuery procedureDef = QSqlQuery(db);
00186                 if (procedureDef.exec(tr("SHOW CREATE PROCEDURE `%1`").arg(procedureName))) {
00187                     while (procedureDef.next()) {
00188                         procedureDefinition.append("\n/*");
00189                         procedureDefinition.append(procedureDef.value(2).toString());
00190                         procedureDefinition.append("*/ $$\nDELIMITER ;\n");
00191                     }
00192                 }
00193                 procString.append(procedureDefinition);
00194             }
00195             finalSqlScript.append(procString);
00196         }
00197         //END OF STORED PROCEDURES
00198         emit generatedQuery(finalSqlScript);
00199         emit scriptingComplete();
00200     }
00201 }

Generated on Wed Dec 1 2010 08:43:40 for SQL Master by  doxygen 1.7.2