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
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
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
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
00090
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
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;
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
00134 finalSqlScript.append(tableString);
00135 }
00136 }
00137
00138
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
00168
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
00198 emit generatedQuery(finalSqlScript);
00199 emit scriptingComplete();
00200 }
00201 }