comparison src/main.cpp @ 239:9626307f3eeb

Streamline SQL table creation.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 07 May 2018 23:33:52 +0300
parents 54ab3f3e28c0
children 14c6a4d40232
comparison
equal deleted inserted replaced
238:d8c3043c00a0 239:9626307f3eeb
32 QString dbBackupURL; 32 QString dbBackupURL;
33 QString dbBackupSecret; 33 QString dbBackupSecret;
34 QDateTime dbLastBackup; 34 QDateTime dbLastBackup;
35 } settings; 35 } settings;
36 36
37
38 //
39 // SQL schema / table definitions
40 //
41 typedef struct
42 {
43 QString name;
44 QString schema;
45 } SLSQLSchemaDef;
46
47
48 static const SLSQLSchemaDef slSQLSchemaData[] =
49 {
50 {
51 QStringLiteral("people"),
52 QStringLiteral(
53 "id INTEGER PRIMARY KEY,"
54
55 "first_name VARCHAR(" SL_STR(SQL_LEN_FIRST_NAME) ") NOT NULL,"
56 "last_name VARCHAR(" SL_STR(SQL_LEN_LAST_NAME) ") NOT NULL,"
57 "extra_info VARCHAR(" SL_STR(SQL_LEN_EXTRA_INFO) "),"
58
59 "added DATETIME NOT NULL,"
60 "updated DATETIME NOT NULL"
61 )
62 },
63 {
64 QStringLiteral("transactions"),
65 QStringLiteral(
66 "id INTEGER PRIMARY KEY, "
67 "person INT NOT NULL, "
68 "value REAL, "
69 "added DATETIME NOT NULL"
70 )
71 },
72 };
73
74 static const int nslSQLSchemaData = sizeof(slSQLSchemaData) / sizeof(slSQLSchemaData[0]);
37 75
38 76
39 // 77 //
40 // Convert QString to a double value, replacing comma 78 // Convert QString to a double value, replacing comma
41 // 79 //
325 arg(db.lastError().text()) 363 arg(db.lastError().text())
326 ); 364 );
327 return 1; 365 return 1;
328 } 366 }
329 367
330 QSqlQuery query; 368 //
331 if (!db.tables().contains("people")) 369 // Create tables
332 { 370 //
333 query.exec(QStringLiteral( 371 for (int ntable = 0; ntable < nslSQLSchemaData; ntable++)
334 "CREATE TABLE people (id INTEGER PRIMARY KEY, " 372 {
335 "first_name VARCHAR(%1) NOT NULL, " 373 const SLSQLSchemaDef &table = slSQLSchemaData[ntable];
336 "last_name VARCHAR(%2) NOT NULL, " 374 if (!db.tables().contains(table.name))
337 "extra_info VARCHAR(%3), "
338 "added DATETIME NOT NULL, "
339 "updated DATETIME NOT NULL)").
340 arg(SQL_LEN_FIRST_NAME).
341 arg(SQL_LEN_LAST_NAME).
342 arg(SQL_LEN_EXTRA_INFO));
343
344 if (!slCheckAndReportSQLError("CREATE TABLE people", query.lastError(), true))
345 { 375 {
346 slErrorMsg( 376 QSqlQuery query;
347 QObject::tr("Tietokantataulua ei voitu luoda"), 377 QString sql =
348 QObject::tr("Virhe: %1<br><br>"). 378 QStringLiteral("CREATE TABLE %1 (%2)").
349 arg(db.lastError().text()) 379 arg(table.name).
350 ); 380 arg(table.schema);
351 return 1; 381
382 query.exec(sql);
383
384 if (!slCheckAndReportSQLError(
385 QStringLiteral("CREATE TABLE %1").arg(table.name),
386 query.lastError(), true))
387 {
388 slErrorMsg(
389 QObject::tr("Tietokantataulua ei voitu luoda"),
390 QObject::tr("Virhe: %1<br><br>").
391 arg(db.lastError().text())
392 );
393 return 1;
394 }
395
396 query.finish();
352 } 397 }
353 } 398 }
354 399
355 if (!db.tables().contains("transactions")) 400 //
356 { 401 // Execute main app
357 query.exec(QStringLiteral( 402 //
358 "CREATE TABLE transactions ("
359 "id INTEGER PRIMARY KEY, "
360 "person INT NOT NULL, "
361 "value REAL, "
362 "added DATETIME NOT NULL)"));
363
364 if (!slCheckAndReportSQLError("CREATE TABLE transactions", query.lastError(), true))
365 {
366 slErrorMsg(
367 QObject::tr("Tietokantataulua ei voitu luoda"),
368 QObject::tr("Virhe: %1<br><br>").
369 arg(db.lastError().text())
370 );
371 return 1;
372 }
373 }
374
375 query.finish();
376
377 SyntilistaMainWindow swin; 403 SyntilistaMainWindow swin;
378 swin.show(); 404 swin.show();
379 return sapp.exec(); 405 return sapp.exec();
380 } 406 }
381 407