From b7ddea0488e7c602eed3756a599971140d673686 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Wed, 25 Jul 2018 10:05:38 -0400 Subject: [PATCH] 2018-07-25 Fred Gleason * Fixed a bug that caused the incorrect character set to be used when opening a DB connection. * Added a 'db_charset_test' test harness. --- .gitignore | 1 + ChangeLog | 4 ++ lib/rddb.cpp | 10 +++-- rdlibrary/edit_cart.cpp | 1 - tests/Makefile.am | 4 ++ tests/db_charset_test.cpp | 82 +++++++++++++++++++++++++++++++++++++++ tests/db_charset_test.h | 35 +++++++++++++++++ 7 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 tests/db_charset_test.cpp create mode 100644 tests/db_charset_test.h diff --git a/.gitignore b/.gitignore index 11e33dfa..ddcf2de1 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,7 @@ tests/audio_export_test tests/audio_import_test tests/audio_peaks_test tests/datedecode_test +tests/db_charset_test tests/log_unlink_test tests/mcast_recv_test tests/rdxml_parse_test diff --git a/ChangeLog b/ChangeLog index 9c2442e9..7345ac1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17218,3 +17218,7 @@ * Fixed a bug in the 'RDEscapeString' function that caused corruption in UTF-8 strings. * Added a UTF-8 complaint MySQL driver in 'drivers/qt3-mysql-utf/'. +2018-07-25 Fred Gleason + * Fixed a bug that caused the incorrect character set to be used + when opening a DB connection. + * Added a 'db_charset_test' test harness. diff --git a/lib/rddb.cpp b/lib/rddb.cpp index a7137136..3f032bd4 100644 --- a/lib/rddb.cpp +++ b/lib/rddb.cpp @@ -63,14 +63,16 @@ QSqlDatabase *RDInitDb (unsigned *schema,QString *error) return NULL; } } + + QString sql=QString("set charset '")+cf->mysqlCharset()+"'"; + QSqlQuery *q=new QSqlQuery(sql); + delete q; + if (firsttime){ new RDDbHeartbeat(cf->mysqlHeartbeatInterval()); firsttime = false; } - // QSqlQuery *q=new QSqlQuery("set character_set_results='utf8'"); - // delete q; - - QSqlQuery *q=new QSqlQuery("select DB from VERSION"); + q=new QSqlQuery("select DB from VERSION"); if(q->first()) { *schema=q->value(0).toUInt(); } diff --git a/rdlibrary/edit_cart.cpp b/rdlibrary/edit_cart.cpp index acd32fa1..7fe52964 100644 --- a/rdlibrary/edit_cart.cpp +++ b/rdlibrary/edit_cart.cpp @@ -916,7 +916,6 @@ void EditCart::okData() rdcart_cart->setPublisher(rdcart_controls.publisher_edit->text()); rdcart_cart->setConductor(rdcart_controls.conductor_edit->text()); rdcart_cart->setComposer(rdcart_controls.composer_edit->text()); - printf("USERDEF: %s\n",(const char *)rdcart_controls.user_defined_edit->text()); rdcart_cart->setUserDefined(rdcart_controls.user_defined_edit->text()); rdcart_cart-> setUsageCode((RDCart::UsageCode)rdcart_usage_box->currentItem()); diff --git a/tests/Makefile.am b/tests/Makefile.am index 0ecb907e..dc3735e5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -33,6 +33,7 @@ noinst_PROGRAMS = audio_convert_test\ audio_import_test\ audio_peaks_test\ datedecode_test\ + db_charset_test\ log_unlink_test\ mcast_recv_test\ rdxml_parse_test\ @@ -59,6 +60,9 @@ audio_peaks_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@ dist_datedecode_test_SOURCES = datedecode_test.cpp datedecode_test.h datedecode_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@ +dist_db_charset_test_SOURCES = db_charset_test.cpp db_charset_test.h +db_charset_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@ + dist_log_unlink_test_SOURCES = log_unlink_test.cpp log_unlink_test.h nodist_log_unlink_test_SOURCES = moc_log_unlink_test.cpp log_unlink_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@ diff --git a/tests/db_charset_test.cpp b/tests/db_charset_test.cpp new file mode 100644 index 00000000..82005e16 --- /dev/null +++ b/tests/db_charset_test.cpp @@ -0,0 +1,82 @@ +// db_charset_test.cpp +// +// Display charset/collation parameters for a DB connection +// +// (C) Copyright 2018 Fred Gleason +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include + +#include + +#include + +#include "db_charset_test.h" + +MainObject::MainObject(QObject *parent) + : QObject() +{ + QString err_msg; + QString sql; + RDSqlQuery *q; + RDCmdSwitch *cmd= + new RDCmdSwitch(qApp->argc(),qApp->argv(),"db_charset_test", + DB_CHARSET_TEST_USAGE); + for(unsigned i=0;ikeys();i++) { + if(!cmd->processed(i)) { + fprintf(stderr,"db_charset_test: unknown option \"%s\"\n", + (const char *)cmd->value(i)); + exit(256); + } + } + + // + // Open the Database + // + rda=new RDApplication("db_charset_test","rdvairplayd",DB_CHARSET_TEST_USAGE, + this); + if(!rda->open(&err_msg)) { + fprintf(stderr,"db_charset_test: %s\n",(const char *)err_msg); + exit(1); + } + + sql=QString("show variables like '%character_set%'"); + q=new RDSqlQuery(sql); + while(q->next()) { + printf("%s: %s\n",(const char *)q->value(0).toString(), + (const char *)q->value(1).toString()); + } + delete q; + + sql=QString("show variables like '%collation%'"); + q=new RDSqlQuery(sql); + while(q->next()) { + printf("%s: %s\n",(const char *)q->value(0).toString(), + (const char *)q->value(1).toString()); + } + delete q; + + exit(0); +} + + +int main(int argc,char *argv[]) +{ + QApplication a(argc,argv,false); + + MainObject(); + return a.exec(); +} diff --git a/tests/db_charset_test.h b/tests/db_charset_test.h new file mode 100644 index 00000000..6641f769 --- /dev/null +++ b/tests/db_charset_test.h @@ -0,0 +1,35 @@ +// db_charset_test.h +// +// Display charset/collation parameters for a DB connection +// +// (C) Copyright 2018 Fred Gleason +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#ifndef DB_CHARSET_TEST_H +#define DB_CHARSET_TEST_H + +#include + +#define DB_CHARSET_TEST_USAGE "\n\n" + +class MainObject : public QObject +{ + public: + MainObject(QObject *parent=0); +}; + + +#endif // DB_CHARSET_TEST_H