Public Slots | Signals | Public Member Functions | Public Attributes | Protected Member Functions

SqlDumpThread Class Reference

#include <sqldumpthread.h>

List of all members.

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 ()

Detailed Description

Definition at line 6 of file sqldumpthread.h.


Constructor & Destructor Documentation

SqlDumpThread::SqlDumpThread ( QObject *  parent = 0 ) [explicit]

Definition at line 3 of file sqldumpthread.cpp.

                                            :
        QThread(parent)
{
}

Member Function Documentation

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().


Member Data Documentation

Definition at line 19 of file sqldumpthread.h.

Referenced by run().

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().

Definition at line 12 of file sqldumpthread.h.

Referenced by run().

Definition at line 16 of file sqldumpthread.h.

Referenced by run().

Definition at line 15 of file sqldumpthread.h.

Referenced by run().

Definition at line 18 of file sqldumpthread.h.

Referenced by run().

Definition at line 13 of file sqldumpthread.h.

Referenced by run().

Definition at line 20 of file sqldumpthread.h.

Referenced by run().

Definition at line 14 of file sqldumpthread.h.

Referenced by run().


The documentation for this class was generated from the following files: