From d6533747b40009978841bbb94804fdbaf2a415a4 Mon Sep 17 00:00:00 2001 From: Peinthor Rene Date: Sat, 23 Feb 2013 12:57:01 +0100 Subject: [PATCH] rework database encoding settings and conversions --- src/MainWindow.cpp | 21 ++----- src/PreferencesDialog.cpp | 16 +++--- src/PreferencesDialog.ui | 4 +- src/sqlitedb.cpp | 112 +++++++++++++++----------------------- src/sqlitedb.h | 15 +---- 5 files changed, 63 insertions(+), 105 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a382905d..7ef65674 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -777,19 +777,15 @@ void MainWindow::executeQuery() if (mustCreateColumns) { QStringList headerList; - for (int e=0; esetHorizontalHeaderLabels(headerList); mustCreateColumns = false; } - for (int e=0; esetItem(rownum, e, new QStandardItem(QString(firstline))); } queryResultListModel->setVerticalHeaderItem(rownum, new QStandardItem(QString::number(rownum + 1))); @@ -797,7 +793,7 @@ void MainWindow::executeQuery() } sqlite3_finalize(vm); }else{ - lastErrorMessage = QString (sqlite3_errmsg(db._db)); + lastErrorMessage = QString::fromUtf8((const char*)sqlite3_errmsg(db._db)); } ui->queryErrorLineEdit->setText(lastErrorMessage); ui->queryResultTableView->resizeColumnsToContents(); @@ -937,11 +933,6 @@ void MainWindow::updatePreferences() { PreferencesDialog prefs(this); - if(prefs.defaultencoding == "Latin1") - db.setEncoding(kEncodingLatin1); - else - db.setEncoding(kEncodingUTF8); - db.setDefaultNewData(prefs.defaultnewdata); defaultlocation= prefs.defaultlocation; editWin->defaultlocation = defaultlocation; diff --git a/src/PreferencesDialog.cpp b/src/PreferencesDialog.cpp index 58d0dcea..64aa41e3 100644 --- a/src/PreferencesDialog.cpp +++ b/src/PreferencesDialog.cpp @@ -45,10 +45,10 @@ void PreferencesDialog::defaultTextChanged( int which ) void PreferencesDialog::encodingChanged( int which ) { - if (which==1) { - defaultencoding = QString("Latin1"); + if (which == 0) { + defaultencoding = QString("UTF-8"); } else { - defaultencoding = QString("UTF8"); + defaultencoding = QString("UTF-16"); } } @@ -77,18 +77,18 @@ void PreferencesDialog::loadSettings() QSettings settings(QApplication::organizationName(), QApplication::organizationName()); settings.sync(); - defaultencoding = settings.value( "/db/defaultencoding", "UTF8" ).toString(); + defaultencoding = settings.value( "/db/defaultencoding", "UTF-8" ).toString(); defaultnewdata = settings.value( "/db/defaultnewdata", "NULL" ).toString(); defaultlocation = settings.value( "/db/defaultlocation", QDir::homePath() ).toString(); defaulttext = settings.value( "/db/defaulttext", "Plain" ).toString(); foreignkeys = settings.value( "/db/foreignkeys", true ).toBool(); - if (defaultencoding=="Latin1") + if (defaultencoding=="Latin1" || defaultencoding == "UTF-8") { - ui->encodingComboBox->setCurrentIndex(1); + ui->encodingComboBox->setCurrentIndex(0); } else { - ui->encodingComboBox->setCurrentIndex(0) ; - defaultencoding = QString("UTF8"); + ui->encodingComboBox->setCurrentIndex(1); + defaultencoding = QString("UTF-16"); } if (defaultnewdata=="\'\'") diff --git a/src/PreferencesDialog.ui b/src/PreferencesDialog.ui index 90e0add3..055e91b8 100644 --- a/src/PreferencesDialog.ui +++ b/src/PreferencesDialog.ui @@ -117,12 +117,12 @@ - UTF8 (Unicode) + UTF-8 - Latin1 (8bit) + UTF-16 diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index d87d2a89..ef212a70 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -30,40 +30,11 @@ bool DBBrowserDB::getDirty() const return dirty; } -void DBBrowserDB::setEncoding( int encoding ) -{ - curEncoding = encoding; -} - void DBBrowserDB::setDefaultNewData( const QString & data ) { curNewData = data; } -char * DBBrowserDB::GetEncodedQStringAsPointer( const QString & input) const -{ - if (curEncoding==kEncodingUTF8) return (char *) input.toUtf8().constData(); - if (curEncoding==kEncodingLatin1) return (char *) input.toLatin1().constData(); - - return (char *) input.constData(); -} - -QString DBBrowserDB::GetEncodedQString( const QString & input) const -{ - if (curEncoding==kEncodingUTF8) return input.toUtf8(); - if (curEncoding==kEncodingLatin1) return input.toLatin1(); - - return input; -} - -QString DBBrowserDB::GetDecodedQString( const QString & input) const -{ - // if (curEncoding==kEncodingUTF8) return QString::fromUtf8(input); - // if (curEncoding==kEncodingLatin1) return QString::fromLatin1(input); - - return input; -} - bool DBBrowserDB::open ( const QString & db) { bool ok=false; @@ -91,7 +62,7 @@ bool DBBrowserDB::open ( const QString & db) err = sqlite3_open_v2(db.toUtf8(), &_db, SQLITE_OPEN_READWRITE, NULL); if ( err ) { - lastErrorMessage = sqlite3_errmsg(_db); + lastErrorMessage = QString::fromUtf8((const char*)sqlite3_errmsg(_db)); sqlite3_close(_db); _db = 0; return false; @@ -165,8 +136,20 @@ bool DBBrowserDB::create ( const QString & db) lastErrorMessage = QObject::tr("no error"); - if( sqlite3_open(db.toUtf8(), &_db) != SQLITE_OK ){ - lastErrorMessage = sqlite3_errmsg(_db); + // read encoding from settings and open with sqlite3_open for utf8 + // and sqlite3_open16 for utf16 + QSettings settings(QApplication::organizationName(), QApplication::organizationName()); + QString sEncoding = settings.value("/db/defaultencoding", "UTF-8").toString(); + + int openresult = SQLITE_OK; + + if(sEncoding == "UTF-8" || sEncoding == "UTF8" || sEncoding == "Latin1") + openresult = sqlite3_open(db.toUtf8(), &_db); + else + openresult = sqlite3_open16(db.utf16(), &_db); + + if( openresult != SQLITE_OK ){ + lastErrorMessage = QString::fromUtf8((const char*)sqlite3_errmsg(_db)); sqlite3_close(_db); _db = 0; return false; @@ -371,8 +354,8 @@ bool DBBrowserDB::addRecord ( ) int fields = browseFields.count(); QString emptyvalue = curNewData; - QString statement = QString("INSERT INTO `%1` VALUES(").arg(GetEncodedQString(curBrowseTableName)); - for ( int i=1; i<=fields; i++ ) { + QString statement = QString("INSERT INTO `%1` VALUES(").arg(curBrowseTableName); + for ( int i=1; i<=fields; ++i ) { statement.append(emptyvalue); if (i