testownsql.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. namespace {
  11. const char testdbC[] = "/tmp/testdb.sqlite";
  12. }
  13. class TestOwnSql : public QObject
  14. {
  15. Q_OBJECT
  16. private slots:
  17. void initTestCase() {
  18. QFileInfo fi( testdbC );
  19. if( fi.exists() ) {
  20. QFile::remove(testdbC);
  21. }
  22. fi.refresh();
  23. QVERIFY(!fi.exists());
  24. }
  25. void cleanupTestCase() {
  26. // QFile::remove(testdbC);
  27. }
  28. void testOpenDb() {
  29. QFileInfo fi( testdbC );
  30. QVERIFY( !fi.exists() ); // must not exist
  31. _db.openOrCreateReadWrite(testdbC);
  32. fi.refresh();
  33. QVERIFY(fi.exists());
  34. }
  35. void testCreate() {
  36. const char *sql = "CREATE TABLE addresses ( id INTEGER, name VARCHAR(4096), "
  37. "address VARCHAR(4096), entered INTEGER(8), PRIMARY KEY(id));";
  38. SqlQuery q(_db);
  39. q.prepare(sql);
  40. QVERIFY(q.exec());
  41. }
  42. void testIsSelect() {
  43. SqlQuery q(_db);
  44. q.prepare("SELECT id FROM addresses;");
  45. QVERIFY( q.isSelect() );
  46. q.prepare("UPDATE addresses SET id = 1;");
  47. QVERIFY( !q.isSelect());
  48. }
  49. void testInsert() {
  50. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  51. "(1, 'Gonzo Alberto', 'Moriabata 24, Palermo', 1403100844);";
  52. SqlQuery q(_db);
  53. q.prepare(sql);
  54. QVERIFY(q.exec());
  55. }
  56. void testInsert2() {
  57. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  58. "(?1, ?2, ?3, ?4);";
  59. SqlQuery q(_db);
  60. q.prepare(sql);
  61. q.bindValue(1, 2);
  62. q.bindValue(2, "Brucely Lafayette");
  63. q.bindValue(3, "Nurderway5, New York");
  64. q.bindValue(4, 1403101224);
  65. QVERIFY(q.exec());
  66. }
  67. void testSelect() {
  68. const char *sql = "SELECT * FROM addresses;";
  69. SqlQuery q(_db);
  70. q.prepare(sql);
  71. q.exec();
  72. while( q.next() ) {
  73. qDebug() << "Name: " << q.stringValue(1);
  74. qDebug() << "Address: " << q.stringValue(2);
  75. }
  76. }
  77. void testSelect2() {
  78. const char *sql = "SELECT * FROM addresses WHERE id=?1";
  79. SqlQuery q(_db);
  80. q.prepare(sql);
  81. q.bindValue(1, 2);
  82. q.exec();
  83. if( q.next() ) {
  84. qDebug() << "Name:" << q.stringValue(1);
  85. qDebug() << "Address:" << q.stringValue(2);
  86. }
  87. }
  88. void testPragma() {
  89. const char *sql = "PRAGMA table_info(addresses)";
  90. SqlQuery q(_db);
  91. int rc = q.prepare(sql);
  92. qDebug() << "Pragma:" << rc;
  93. q.exec();
  94. if( q.next() ) {
  95. qDebug() << "P:" << q.stringValue(1);
  96. }
  97. }
  98. void testUnicode() {
  99. const char *sql = "INSERT INTO addresses (id, name, address, entered) VALUES "
  100. "(?1, ?2, ?3, ?4);";
  101. SqlQuery q(_db);
  102. q.prepare(sql);
  103. q.bindValue(1, 3);
  104. q.bindValue(2, QString::fromUtf8("пятницы"));
  105. q.bindValue(3, QString::fromUtf8("проспект"));
  106. q.bindValue(4, 1403002224);
  107. QVERIFY(q.exec());
  108. }
  109. void testReadUnicode() {
  110. const char *sql = "SELECT * FROM addresses WHERE id=3;";
  111. SqlQuery q(_db);
  112. q.prepare(sql);
  113. if(q.next()) {
  114. QString name = q.stringValue(1);
  115. QString address = q.stringValue(2);
  116. QVERIFY( name == QString::fromUtf8("пятницы") );
  117. QVERIFY( address == QString::fromUtf8("проспект"));
  118. }
  119. }
  120. private:
  121. SqlDatabase _db;
  122. };
  123. QTEST_APPLESS_MAIN(TestOwnSql)
  124. #include "testownsql.moc"