Mercurial > hg > syntilista
changeset 239:9626307f3eeb
Streamline SQL table creation.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 07 May 2018 23:33:52 +0300 |
parents | d8c3043c00a0 |
children | 14c6a4d40232 |
files | src/main.cpp src/main.h |
diffstat | 2 files changed, 72 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main.cpp Mon May 07 20:07:39 2018 +0300 +++ b/src/main.cpp Mon May 07 23:33:52 2018 +0300 @@ -35,6 +35,44 @@ } settings; +// +// SQL schema / table definitions +// +typedef struct +{ + QString name; + QString schema; +} SLSQLSchemaDef; + + +static const SLSQLSchemaDef slSQLSchemaData[] = +{ + { + QStringLiteral("people"), + QStringLiteral( + "id INTEGER PRIMARY KEY," + + "first_name VARCHAR(" SL_STR(SQL_LEN_FIRST_NAME) ") NOT NULL," + "last_name VARCHAR(" SL_STR(SQL_LEN_LAST_NAME) ") NOT NULL," + "extra_info VARCHAR(" SL_STR(SQL_LEN_EXTRA_INFO) ")," + + "added DATETIME NOT NULL," + "updated DATETIME NOT NULL" + ) + }, + { + QStringLiteral("transactions"), + QStringLiteral( + "id INTEGER PRIMARY KEY, " + "person INT NOT NULL, " + "value REAL, " + "added DATETIME NOT NULL" + ) + }, +}; + +static const int nslSQLSchemaData = sizeof(slSQLSchemaData) / sizeof(slSQLSchemaData[0]); + // // Convert QString to a double value, replacing comma @@ -327,53 +365,41 @@ return 1; } - QSqlQuery query; - if (!db.tables().contains("people")) + // + // Create tables + // + for (int ntable = 0; ntable < nslSQLSchemaData; ntable++) { - query.exec(QStringLiteral( - "CREATE TABLE people (id INTEGER PRIMARY KEY, " - "first_name VARCHAR(%1) NOT NULL, " - "last_name VARCHAR(%2) NOT NULL, " - "extra_info VARCHAR(%3), " - "added DATETIME NOT NULL, " - "updated DATETIME NOT NULL)"). - arg(SQL_LEN_FIRST_NAME). - arg(SQL_LEN_LAST_NAME). - arg(SQL_LEN_EXTRA_INFO)); + const SLSQLSchemaDef &table = slSQLSchemaData[ntable]; + if (!db.tables().contains(table.name)) + { + QSqlQuery query; + QString sql = + QStringLiteral("CREATE TABLE %1 (%2)"). + arg(table.name). + arg(table.schema); + + query.exec(sql); - if (!slCheckAndReportSQLError("CREATE TABLE people", query.lastError(), true)) - { - slErrorMsg( - QObject::tr("Tietokantataulua ei voitu luoda"), - QObject::tr("Virhe: %1<br><br>"). - arg(db.lastError().text()) - ); - return 1; + if (!slCheckAndReportSQLError( + QStringLiteral("CREATE TABLE %1").arg(table.name), + query.lastError(), true)) + { + slErrorMsg( + QObject::tr("Tietokantataulua ei voitu luoda"), + QObject::tr("Virhe: %1<br><br>"). + arg(db.lastError().text()) + ); + return 1; + } + + query.finish(); } } - if (!db.tables().contains("transactions")) - { - query.exec(QStringLiteral( - "CREATE TABLE transactions (" - "id INTEGER PRIMARY KEY, " - "person INT NOT NULL, " - "value REAL, " - "added DATETIME NOT NULL)")); - - if (!slCheckAndReportSQLError("CREATE TABLE transactions", query.lastError(), true)) - { - slErrorMsg( - QObject::tr("Tietokantataulua ei voitu luoda"), - QObject::tr("Virhe: %1<br><br>"). - arg(db.lastError().text()) - ); - return 1; - } - } - - query.finish(); - + // + // Execute main app + // SyntilistaMainWindow swin; swin.show(); return sapp.exec();