#include <sqldumpthread.h>
Public Slots | |
| void | setDb (QSqlDatabase db, QString dbName, QStringList tableList, QStringList viewList, QStringList procedureList, bool drop, bool data, bool structure, bool createDb, bool useDb) |
Signals | |
| void | currentObjectType (QString) |
| void | currentObjectName (QString) |
| void | currentPosition (int) |
| void | objectValueCount (int) |
| void | generatedQuery (QString) |
| void | scriptingComplete () |
| void | totalProgress (int) |
Public Member Functions | |
| SqlDumpThread (QObject *parent=0) | |
Public Attributes | |
| QSqlDatabase | db |
| QString | dbName |
| QStringList | tableList |
| QStringList | viewList |
| QStringList | procedureList |
| bool | drop |
| bool | data |
| bool | structure |
| bool | createDb |
| bool | useDb |
Protected Member Functions | |
| void | run () |
Definition at line 6 of file sqldumpthread.h.
| SqlDumpThread::SqlDumpThread | ( | QObject * | parent = 0 ) |
[explicit] |
Definition at line 3 of file sqldumpthread.cpp.
:
QThread(parent)
{
}
| void SqlDumpThread::currentObjectName | ( | QString | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::currentObjectType | ( | QString | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::currentPosition | ( | int | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::generatedQuery | ( | QString | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::objectValueCount | ( | int | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::run | ( | ) | [protected] |
| void SqlDumpThread::scriptingComplete | ( | ) | [signal] |
Referenced by setDb().
| void SqlDumpThread::setDb | ( | QSqlDatabase | db, |
| QString | dbName, | ||
| QStringList | tableList, | ||
| QStringList | viewList, | ||
| QStringList | procedureList, | ||
| bool | drop, | ||
| bool | data, | ||
| bool | structure, | ||
| bool | createDb, | ||
| bool | useDb | ||
| ) | [slot] |
Definition at line 12 of file sqldumpthread.cpp.
References currentObjectName(), currentObjectType(), currentPosition(), generatedQuery(), objectValueCount(), scriptingComplete(), and totalProgress().
Referenced by run().
{
if (db.isOpen()) {
//SQL Database Backup Script Generator
emit totalProgress(0);
int m_tableCount = tableList.count();
int m_viewCount = viewList.count();
int m_procCount = procedureList.count();
int m_totalCout = m_tableCount + m_viewCount + m_procCount;
if (m_totalCout < 1)
m_totalCout = 1;
int m_pos = 0;
QString finalSqlScript = "";
finalSqlScript.append(tr(""
"/*"
"\nSmart MySQL Tool Backup Script Generator 1.2"
"\nMySQL Backup"
"\n********************************************"
"\n*/"
"\n\n"
"/*!40101 SET NAMES utf8 */;"
"\n\n"
"/*!40101 SET SQL_MODE=''*/;"
"\n\n"
"/*!40101 SET @OLD_FOREIGN_KEY CHECKS=!FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/;"
"\n/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;"));
if (createDb) {
emit currentObjectName(dbName);
emit currentObjectType("Database");
emit currentPosition(1);
emit objectValueCount(1);
finalSqlScript.append(tr(""
"\n\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`%1`/*!40100 DEFAULT CHARACTER SET latin1 */;"
"").arg(dbName));
}
if (useDb) {
emit currentObjectName(dbName);
emit currentObjectType("Database");
emit currentPosition(1);
emit objectValueCount(1);
finalSqlScript.append(tr(""
"\n\nUSE `%1`;").arg(dbName));
}
//TABLES
if (tableList.length() > 0) {
finalSqlScript.append("\n\n");
emit currentObjectType("Table");
emit objectValueCount(tableList.count());
for (int tables = 0; tables < tableList.count(); tables++) {
m_pos = m_pos + 1;
emit totalProgress((m_pos/m_totalCout)* 100);
QString tableName = tableList.at(tables);
emit currentObjectName(tableName);
emit currentPosition(tables);
QString tableString = "";
if (structure) {
tableString.append(tr(""
"\n/*Table Structure for table `%1` */").arg(tableName));
if (drop) {
tableString.append(tr(""
"\nDROP TABLE IF EXISTS `%1`;"
"").arg(tableName));
}
tableString.append("\n");
}
//table structure
if (structure) {
QSqlQuery tableCreateQuery = QSqlQuery(db);
if (tableCreateQuery.exec(tr("SHOW CREATE TABLE `%2`.`%1`").arg(tableName, dbName))) {
tableCreateQuery.first();
tableString.append("\n");
tableString.append(tableCreateQuery.value(1).toString());
tableCreateQuery.clear();
tableString.append(";\n\n");
}
}
//table structure
//table data
if (data) {
QString dataString = "";
QString queryHeader = "";
QSqlQuery tableDataQuery = QSqlQuery(db);
if (tableDataQuery.exec(tr("describe `%1`.`%2`").arg(dbName, tableName))) {
queryHeader.append(tr(""
"INSERT INTO `%1`("
"").arg(tableName));
while (tableDataQuery.next()) {
queryHeader.append(tr(""
"`%1`, "
"").arg(tableDataQuery.value(0).toString()));
}
queryHeader = queryHeader.left(queryHeader.length() - 2);
queryHeader.append(") VALUES (");
//load all data
tableString.append(tr(""
"/*Data for the table `%1`*/\n"
"").arg(tableName));
QString insertStatement = "";
QSqlQuery selectQuery = QSqlQuery(db);
int pos = 0;
if (selectQuery.exec(tr("SELECT * FROM `%1`.`%2`").arg(dbName, tableName))) {
int cnt = selectQuery.size();
emit objectValueCount(cnt);
emit currentObjectType(tr("Data for table %1").arg(tableName));
while (selectQuery.next()) {
pos = pos + 1;
QSqlRecord rec = selectQuery.record();
emit currentPosition(pos);
insertStatement = queryHeader; //insert into `x`.`y` (`a`, `b`) values (
for (int i = 0; i < rec.count(); i++) {
insertStatement.append(tr("'%1',").arg(rec.value(i).toString()));
}
insertStatement = insertStatement.left(insertStatement.length() - 1);
insertStatement.append(");\n");
dataString.append(insertStatement);
}
}
tableString.append(dataString);
}
}
//table data
finalSqlScript.append(tableString);
}
}
//TABLES
//VIEWS
if (viewList.count() > 0) {
finalSqlScript.append("\n\n");
QString viewString = "";
viewString.append("\n");
for (int view = 0; view < viewList.count(); view++) {
m_pos = m_pos + 1;
emit totalProgress((m_pos/m_totalCout)* 100);
QString viewName = viewList.at(view);
emit currentObjectName(viewName);
emit currentObjectType("View");
emit currentPosition(view);
emit objectValueCount(viewList.count());
QString viewDefinition = "";
if (drop) {
viewDefinition.append(tr("\nDROP VIEW IF EXISTS `%1`;").arg(viewName));
}
QSqlQuery viewDef = QSqlQuery(db);
if (viewDef.exec(tr("SHOW CREATE VIEW `%1`").arg(viewName))) {
while (viewDef.next()) {
viewDefinition.append("\n");
viewDefinition.append(viewDef.value(1).toString());
viewDefinition.append(";\n");
}
}
viewString.append(viewDefinition);
}
finalSqlScript.append(viewString);
}
//END OF VIEWS
//STORED PROCEDURES
if (procedureList.count() > 0) {
finalSqlScript.append("\n\n");
QString procString = "";
procString.append("\n");
for (int procedure = 0; procedure < procedureList.count(); procedure++) {
m_pos = m_pos + 1;
emit totalProgress((m_pos/m_totalCout)* 100);
QString procedureName = procedureList.at(procedure);
emit currentObjectName(procedureName);
emit currentObjectType("Stored Procedure");
emit currentPosition(procedure);
emit objectValueCount(procedureList.count());
QString procedureDefinition = "";
if (drop) {
procedureDefinition.append(tr("\n/*!50003 DROP PROCEDURE IF EXISTS `%1`*/;\nDELIMITER $$").arg(procedureName));
}
QSqlQuery procedureDef = QSqlQuery(db);
if (procedureDef.exec(tr("SHOW CREATE PROCEDURE `%1`").arg(procedureName))) {
while (procedureDef.next()) {
procedureDefinition.append("\n/*");
procedureDefinition.append(procedureDef.value(2).toString());
procedureDefinition.append("*/ $$\nDELIMITER ;\n");
}
}
procString.append(procedureDefinition);
}
finalSqlScript.append(procString);
}
//END OF STORED PROCEDURES
emit generatedQuery(finalSqlScript);
emit scriptingComplete();
}
}
| void SqlDumpThread::totalProgress | ( | int | ) | [signal] |
Referenced by setDb().
Definition at line 19 of file sqldumpthread.h.
Referenced by run().
| bool SqlDumpThread::data |
Definition at line 17 of file sqldumpthread.h.
Referenced by run().
| QSqlDatabase SqlDumpThread::db |
Definition at line 11 of file sqldumpthread.h.
Referenced by run().
| QString SqlDumpThread::dbName |
Definition at line 12 of file sqldumpthread.h.
Referenced by run().
| bool SqlDumpThread::drop |
Definition at line 16 of file sqldumpthread.h.
Referenced by run().
| QStringList SqlDumpThread::procedureList |
Definition at line 15 of file sqldumpthread.h.
Referenced by run().
Definition at line 18 of file sqldumpthread.h.
Referenced by run().
| QStringList SqlDumpThread::tableList |
Definition at line 13 of file sqldumpthread.h.
Referenced by run().
| bool SqlDumpThread::useDb |
Definition at line 20 of file sqldumpthread.h.
Referenced by run().
| QStringList SqlDumpThread::viewList |
Definition at line 14 of file sqldumpthread.h.
Referenced by run().
1.7.2