/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #pragma once #include "sqlitebasestatement.h" namespace Sqlite { template class ReadStatement final : protected StatementImplementation { using Base = StatementImplementation; public: ReadStatement(Utils::SmallStringView sqlStatement, Database &database) : Base{sqlStatement, database} { checkIsReadOnlyStatement(); Base::checkColumnCount(ResultCount); } using Base::range; using Base::rangeWithTransaction; using Base::readCallback; using Base::readTo; using Base::toValue; using Base::value; using Base::values; template auto valueWithTransaction(const QueryTypes &...queryValues) { DeferredTransaction transaction{Base::database()}; auto resultValue = Base::template value(queryValues...); transaction.commit(); return resultValue; } template auto valuesWithTransaction(std::size_t reserveSize, const QueryTypes &...queryValues) { DeferredTransaction transaction{Base::database()}; auto resultValues = Base::template values(reserveSize, queryValues...); transaction.commit(); return resultValues; } template void readCallbackWithTransaction(Callable &&callable, const QueryTypes &...queryValues) { DeferredTransaction transaction{Base::database()}; Base::readCallback(std::forward(callable), queryValues...); transaction.commit(); } template void readToWithTransaction(Container &container, const QueryTypes &...queryValues) { DeferredTransaction transaction{Base::database()}; Base::readTo(container, queryValues...); transaction.commit(); } protected: void checkIsReadOnlyStatement() { if (!Base::isReadOnlyStatement()) throw NotReadOnlySqlStatement( "SqliteStatement::SqliteReadStatement: is not read only statement!"); } }; template ReadStatement(ReadStatement &) -> ReadStatement; template ReadStatement(const ReadStatement &) -> ReadStatement; } // namespace Sqlite