testownsql.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * This software is in the public domain, furnished "as is", without technical
  3. * support, and with no warranty, express or implied, as to its usefulness for
  4. * any purpose.
  5. * */
  6. #include <QtTest>
  7. #include <sqlite3.h>
  8. #include "ownsql.h"
  9. using namespace OCC;
  10. class TestOwnSql : public QObject
  11. {
  12. Q_OBJECT
  13. QTemporaryDir _tempDir;
  14. private slots:
  15. void testOpenDb() {
  16. QFileInfo fi( _tempDir.path() + "/testdb.sqlite" );
  17. QVERIFY( !fi.exists() ); // must not exist
  18. _db.openOrCreateReadWrite(fi.filePath());
  19. fi.refresh();
  20. QVERIFY(fi.exists());
  21. }
  22. void testCreate() {
  23. const char *sql = "CREATE TABLE addresses ( id INTEGER, name VARCHAR(4096), "
  24. "address VARCHAR(4096), entered INTEGER(8), PRIMARY KEY(id));";
  25. SqlQuery q(_db);
  26. q.prepare(sql);
  27. QVERIFY(q.exec());
  28. }
  29. void testIsSelect() {
  30. SqlQuery q(_db);
  31. q.prepare("SELECT id FROM addresses;");
  32. QVERIFY( q.isSelect() );
  33. q.prepare("UPDATE addresses SET id = 1;");
  34. QVERIFY( !q.isSelect());
  35. }
  36. void testInsert() {
  37. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  38. "(1, 'Gonzo Alberto', 'Moriabata 24, Palermo', 1403100844);";
  39. SqlQuery q(_db);
  40. q.prepare(sql);
  41. QVERIFY(q.exec());
  42. }
  43. void testInsert2() {
  44. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  45. "(?1, ?2, ?3, ?4);";
  46. SqlQuery q(_db);
  47. q.prepare(sql);
  48. q.bindValue(1, 2);
  49. q.bindValue(2, "Brucely Lafayette");
  50. q.bindValue(3, "Nurderway5, New York");
  51. q.bindValue(4, 1403101224);
  52. QVERIFY(q.exec());
  53. }
  54. void testSelect() {
  55. const char *sql = "SELECT * FROM addresses;";
  56. SqlQuery q(_db);
  57. q.prepare(sql);
  58. q.exec();
  59. while( q.next() ) {
  60. qDebug() << "Name: " << q.stringValue(1);
  61. qDebug() << "Address: " << q.stringValue(2);
  62. }
  63. }
  64. void testSelect2() {
  65. const char *sql = "SELECT * FROM addresses WHERE id=?1";
  66. SqlQuery q(_db);
  67. q.prepare(sql);
  68. q.bindValue(1, 2);
  69. q.exec();
  70. if( q.next() ) {
  71. qDebug() << "Name:" << q.stringValue(1);
  72. qDebug() << "Address:" << q.stringValue(2);
  73. }
  74. }
  75. void testPragma() {
  76. const char *sql = "PRAGMA table_info(addresses)";
  77. SqlQuery q(_db);
  78. int rc = q.prepare(sql);
  79. qDebug() << "Pragma:" << rc;
  80. q.exec();
  81. if( q.next() ) {
  82. qDebug() << "P:" << q.stringValue(1);
  83. }
  84. }
  85. void testUnicode() {
  86. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  87. "(?1, ?2, ?3, ?4);";
  88. SqlQuery q(_db);
  89. q.prepare(sql);
  90. q.bindValue(1, 3);
  91. q.bindValue(2, QString::fromUtf8("пятницы"));
  92. q.bindValue(3, QString::fromUtf8("проспект"));
  93. q.bindValue(4, 1403002224);
  94. QVERIFY(q.exec());
  95. }
  96. void testReadUnicode() {
  97. const char *sql = "SELECT * FROM addresses WHERE id=3;";
  98. SqlQuery q(_db);
  99. q.prepare(sql);
  100. if(q.next()) {
  101. QString name = q.stringValue(1);
  102. QString address = q.stringValue(2);
  103. QVERIFY( name == QString::fromUtf8("пятницы") );
  104. QVERIFY( address == QString::fromUtf8("проспект"));
  105. }
  106. }
  107. private:
  108. SqlDatabase _db;
  109. };
  110. QTEST_APPLESS_MAIN(TestOwnSql)
  111. #include "testownsql.moc"