~ubuntu-branches/ubuntu/lucid/skrooge/lucid

« back to all changes in this revision

Viewing changes to skgbasemodeler/skgservices.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Anthony Mercatante
  • Date: 2009-05-02 06:47:15 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090502064715-b7l4eciitw3asos3
Tags: 0.2.7-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
#include <sqlite3.h>
39
39
 
40
 
int SKGServices::SKGSqlTraces = (getenv("SKGTRACESQL") ? atoi(getenv("SKGTRACESQL")) : 0);
 
40
int SKGServices::SKGSqlTraces = SKGServices::stringToInt(SKGServices::getenv("SKGTRACESQL"));
41
41
 
42
42
SKGError SKGServices::lastCallbackError;
43
43
 
45
45
 
46
46
SKGServices::~SKGServices() {}
47
47
 
 
48
QString SKGServices::getenv(const QString& iAttribute)
 
49
{
 
50
        return QString::fromUtf8(qgetenv(iAttribute.toUtf8().constData()));
 
51
}
 
52
 
48
53
QString SKGServices::intToString(int iNumber)
49
54
{
50
55
        QString output;
101
106
        double output=iNumber.toDouble(&ok);
102
107
        if (!ok) {
103
108
                QString tmp=iNumber;
104
 
                tmp.remove(',');
 
109
                tmp.replace(',', '.');
105
110
                output=tmp.toDouble(&ok);
 
111
                if (!ok) {
 
112
                        QString tmp=iNumber;
 
113
                        tmp.replace('.', ',');
 
114
                        output=tmp.toDouble(&ok);
 
115
                        if (!ok) {
 
116
                                QString tmp=iNumber;
 
117
                                tmp.remove(',');
 
118
                                output=tmp.toDouble(&ok);
 
119
                        }
 
120
                }
106
121
        }
107
122
        if (!ok) {
108
123
                SKGTRACE << "WARNING: SKGServices::stringToDouble(" << iNumber << ") failed" << endl;
455
470
                                // and output the resulting block. The ciphertext is the results of update()
456
471
                                // and the result of final()
457
472
                                fileOutput.write(f.toByteArray());
 
473
 
 
474
                                //Close the file
 
475
                                fileOutput.close();
458
476
                        }
459
477
                }
460
478
        }
461
479
        return err;
462
480
}
463
481
 
464
 
SKGError SKGServices::copySqliteDatabase(const QString& iFileDbFile, QSqlDatabase* iFileDb, QSqlDatabase* iMemoryDb, bool iFromFileToMemory)
 
482
SKGError SKGServices::copySqliteDatabase(QSqlDatabase* iFileDb, QSqlDatabase* iMemoryDb, bool iFromFileToMemory)
465
483
{
466
484
        SKGError err;
467
485
        SKGTRACEINRC(10, "SKGServices::copySqliteDatabase", err);
468
 
        SKGTRACEL(10) << "Input parameter [iFileDbFile]=[" << iFileDbFile << ']' << endl;
469
 
        SKGTRACEL(10) << "Input parameter [iFromFileToMemory]=[" << (iFromFileToMemory ? "FILE->MEMORY" : "MEMORY->FILE") << ']' << endl;
470
 
 
471
 
        // Copy the schema
472
 
        SKGTRACEL(20) << "Coping the schema..." << endl;
473
 
        SKGStringListList listSqlOrder;
474
 
        err=SKGServices::executeSelectSqliteOrder((iFromFileToMemory ? iFileDb: iMemoryDb),
475
 
                        "SELECT sql FROM sqlite_master WHERE sql NOT NULL and name NOT IN ('sqlite_stat1', 'sqlite_sequence')",
476
 
                        listSqlOrder);
477
 
        SKGStringListListIterator it = listSqlOrder.begin();
478
 
        ++it; //To Forget the header
479
 
        for (; err.isSucceeded() &&it != listSqlOrder.end(); ++it) {
480
 
                err=SKGServices::executeSqliteOrder((iFromFileToMemory ? iMemoryDb: iFileDb), *(it->begin()));
481
 
        }
482
 
 
483
 
        // Attach the file iFileDbFile to the target
484
 
        SKGTRACEL(20) << "Attaching the file..." << endl;
485
 
        if (err.isSucceeded()) {
486
 
                err = SKGServices::executeSqliteOrder(iMemoryDb, "ATTACH DATABASE '" + iFileDbFile + "' as source");
 
486
        if (iFileDb && iMemoryDb) {
 
487
                SKGTRACEL(20) << "Input parameter [iFileDb]=[" << iFileDb->databaseName() << ']' << endl;
 
488
                SKGTRACEL(20) << "Input parameter [iMemoryDb]=[" << iMemoryDb->databaseName() << ']' << endl;
 
489
                SKGTRACEL(10) << "Input parameter [iFromFileToMemory]=[" << (iFromFileToMemory ? "FILE->MEMORY" : "MEMORY->FILE") << ']' << endl;
 
490
 
 
491
                QString dbFileName=iFileDb->databaseName();
 
492
 
 
493
                // Copy the schema
 
494
                SKGTRACEL(20) << "Coping the schema..." << endl;
 
495
                SKGStringListList listSqlOrder;
 
496
                err=SKGServices::executeSelectSqliteOrder((iFromFileToMemory ? iFileDb: iMemoryDb),
 
497
                                "SELECT sql FROM sqlite_master WHERE sql NOT NULL and name NOT IN ('sqlite_stat1', 'sqlite_sequence')",
 
498
                                listSqlOrder);
 
499
 
 
500
                int nb=listSqlOrder.count();
 
501
                for (int i=1; err.isSucceeded() && i<nb; ++i) { //Forget header
 
502
                        QString val=listSqlOrder.at(i).at(0);
 
503
                        err=SKGServices::executeSqliteOrder((iFromFileToMemory ? iMemoryDb: iFileDb), val);
 
504
                }
 
505
 
 
506
                // Attach the file dbFileName to the target
487
507
                if (err.isSucceeded()) {
488
 
                        // Copy the DATA from the source to the target
489
 
                        SKGTRACEL(20) << "Coping data..." << endl;
490
 
                        err = SKGServices::executeSqliteOrder(iMemoryDb, "BEGIN");
 
508
                        SKGTRACEL(20) << "Attaching the file..." << endl;
 
509
                        err = SKGServices::executeSqliteOrder(iMemoryDb, "ATTACH DATABASE '" + dbFileName + "' as source");
491
510
                        if (err.isSucceeded()) {
492
 
                                SKGStringListList listSqlOrder;
493
 
                                err=SKGServices::executeSelectSqliteOrder(iMemoryDb,
494
 
                                                "SELECT name FROM source.sqlite_master WHERE type='table' and name NOT IN ('sqlite_stat1', 'sqlite_sequence')",
495
 
                                                listSqlOrder);
496
 
                                SKGStringListListIterator it = listSqlOrder.begin();
497
 
                                ++it; //To Forget the header
498
 
                                for (; err.isSucceeded() &&it != listSqlOrder.end(); ++it) {
499
 
                                        QString val=*(it->begin());
500
 
                                        if (iFromFileToMemory) {
501
 
                                                err=SKGServices::executeSqliteOrder(iMemoryDb,                                                                                    "insert into main."+val+" select * from source."+val);
502
 
                                        } else {
503
 
                                                QString val=*(it->begin());
504
 
                                                err=SKGServices::executeSqliteOrder(iMemoryDb,
505
 
                                                                                    "insert into source."+val+" select * from main."+val);
 
511
                                // Copy the DATA from the source to the target
 
512
                                SKGTRACEL(20) << "Coping data..." << endl;
 
513
                                err = SKGServices::executeSqliteOrder(iMemoryDb, "BEGIN");
 
514
                                if (err.isSucceeded()) {
 
515
                                        SKGStringListList listSqlOrder;
 
516
                                        err=SKGServices::executeSelectSqliteOrder(iMemoryDb,
 
517
                                                        "SELECT name FROM source.sqlite_master WHERE type='table' and name NOT IN ('sqlite_stat1', 'sqlite_sequence')",
 
518
                                                        listSqlOrder);
 
519
                                        int nb=listSqlOrder.count();
 
520
                                        for (int i=1; err.isSucceeded() && i<nb; ++i) { //Forget header
 
521
                                                QString val=listSqlOrder.at(i).at(0);
 
522
                                                if (iFromFileToMemory)  err=SKGServices::executeSqliteOrder(iMemoryDb, "insert into main."+val+" select * from source."+val);
 
523
                                                else  err=SKGServices::executeSqliteOrder(iMemoryDb, "insert into source."+val+" select * from main."+val);
506
524
                                        }
507
 
                                }
508
 
 
509
 
                        }
510
 
                        if (err.isSucceeded()) {
511
 
                                err = SKGServices::executeSqliteOrder(iMemoryDb, "COMMIT");
512
 
                        }
513
 
 
514
 
                        //Detach
515
 
                        SKGServices::executeSqliteOrder(iMemoryDb, "DETACH DATABASE source");
 
525
 
 
526
                                }
 
527
                                if (err.isSucceeded())  err = SKGServices::executeSqliteOrder(iMemoryDb, "COMMIT");
 
528
 
 
529
                                //Detach
 
530
                                SKGError err2=SKGServices::executeSqliteOrder(iMemoryDb, "DETACH DATABASE source");
 
531
                                if (err.isSucceeded() && err2.isFailed()) err=err2;
 
532
 
 
533
                                //Check if created file exists
 
534
                                if (err.isSucceeded() && !iFromFileToMemory && !QFile(dbFileName).exists()) {
 
535
                                        //Set error message
 
536
                                        err.setReturnCode(ERR_FAIL);
 
537
                                        err.setMessage(tr("Creation file [%1] failed").arg(dbFileName));
 
538
                                }
 
539
                        }
516
540
                }
 
541
                if (err.isFailed()) err.addError(SQLLITEERROR + ERR_FAIL, tr("copySqliteDatabase::copySqliteDatabase() failed"));
517
542
        }
518
 
        if (err.isFailed()) err.addError(SQLLITEERROR + ERR_FAIL, tr("copySqliteDatabase::copySqliteDatabase() failed"));
519
543
        return err;
520
544
}
521
545
 
592
616
                //dump
593
617
                int nb=oResult.size();
594
618
                for (int i = 0; i < nb; ++i) {
595
 
                        if (oStream==NULL) cout << oResult.at(i) << endl;
 
619
                        if (oStream==NULL)  SKGTRACESUITE << oResult.at(i) << endl;
596
620
                        else  *oStream << oResult.at(i) << endl;
597
621
                }
598
622
        }