Mercurial > hg > syntilista
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 |