From c420f69da8213b5d709008ba085ec13a0eab5631 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 9 Nov 2021 19:21:58 +0100 Subject: [PATCH] SqlRow: Replace class with a new that takes values by column field name --- src/collection/sqlrow.cpp | 67 +++++++++++++++++++++++++++++++++++---- src/collection/sqlrow.h | 20 ++++++++---- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/src/collection/sqlrow.cpp b/src/collection/sqlrow.cpp index 79d940556..de44579a6 100644 --- a/src/collection/sqlrow.cpp +++ b/src/collection/sqlrow.cpp @@ -1,7 +1,6 @@ /* * Strawberry Music Player - * This file was part of Clementine. - * Copyright 2010, David Sansome + * Copyright 2018-2021, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,20 +20,74 @@ #include "config.h" #include +#include +#include #include #include #include "sqlrow.h" -#include "collectionquery.h" - SqlRow::SqlRow(const QSqlQuery &query) { Init(query); } void SqlRow::Init(const QSqlQuery &query) { - int rows = query.record().count(); - for (int i = 0; i < rows; ++i) { - columns_ << query.value(i); + const QSqlRecord r = query.record(); + for (int i = 0; i < r.count(); ++i) { + columns_by_number_.insert(i, query.value(i)); + const QString field_name = r.fieldName(i); + if (!columns_by_name_.contains(field_name) || columns_by_name_[field_name].isNull()) { + columns_by_name_.insert(field_name, query.value(i)); + } } } + +const QVariant SqlRow::value(const int number) const { + + if (columns_by_number_.contains(number)) { + return columns_by_number_[number]; + } + else { + return QVariant(); + } + +} + +const QVariant SqlRow::value(const QString &name) const { + + if (columns_by_name_.contains(name)) { + return columns_by_name_[name]; + } + else { + return QVariant(); + } + +} + +QString SqlRow::ValueToString(const QString &n) const { + return value(n).isNull() ? QString() : value(n).toString(); +} + +QUrl SqlRow::ValueToUrl(const QString &n) const { + return value(n).isNull() ? QUrl() : QUrl(value(n).toString()); +} + +int SqlRow::ValueToInt(const QString &n) const { + return value(n).isNull() ? -1 : value(n).toInt(); +} + +uint SqlRow::ValueToUInt(const QString &n) const { + return value(n).isNull() || value(n).toInt() < 0 ? 0 : value(n).toInt(); +} + +qint64 SqlRow::ValueToLongLong(const QString &n) const { + return value(n).isNull() ? -1 : value(n).toLongLong(); +} + +float SqlRow::ValueToFloat(const QString &n) const { + return value(n).isNull() ? -1.0F : value(n).toFloat(); +} + +bool SqlRow::ValueToBool(const QString &n) const { + return !value(n).isNull() && value(n).toInt() == 1; +} diff --git a/src/collection/sqlrow.h b/src/collection/sqlrow.h index dc7c81cce..97d0b5058 100644 --- a/src/collection/sqlrow.h +++ b/src/collection/sqlrow.h @@ -1,7 +1,6 @@ /* * Strawberry Music Player - * This file was part of Clementine. - * Copyright 2010, David Sansome + * Copyright 2018-2021, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,24 +24,33 @@ #include #include +#include #include -class CollectionQuery; - class SqlRow { public: SqlRow(const QSqlQuery &query); - const QVariant &value(int i) const { return columns_[i]; } + const QVariant value(const int number) const; + const QVariant value(const QString &name) const; - QList columns_; + QString ValueToString(const QString &n) const; + QUrl ValueToUrl(const QString &n) const; + int ValueToInt(const QString &n) const; + uint ValueToUInt(const QString &n) const; + qint64 ValueToLongLong(const QString &n) const; + float ValueToFloat(const QString &n) const; + bool ValueToBool(const QString& n) const; private: SqlRow(); void Init(const QSqlQuery &query); + QMap columns_by_number_; + QMap columns_by_name_; + }; typedef QList SqlRowList;