/*** @file VariadicBind_test.cpp* @ingroup tests* @brief Test of variadic bind** Copyright (c) 2016 Paul Dreik (github@pauldreik.se)* Copyright (c) 2016-2020 Sebastien Rombauts (sebastien.rombauts@gmail.com)* Copyright (c) 2019 Maximilian Bachmann (github@maxbachmann)** Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt* or copy at http://opensource.org/licenses/MIT)*/#include <SQLiteCpp/Database.h>#include <SQLiteCpp/Statement.h>#include <SQLiteCpp/VariadicBind.h>#include <gtest/gtest.h>#include <cstdio>#if (__cplusplus >= 201103L) || ( defined(_MSC_VER) && (_MSC_VER >= 1800) ) // c++11: Visual Studio 2013TEST(VariadicBind, invalid){// Create a new databaseSQLite::Database db(":memory:", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);EXPECT_EQ(0, db.exec("DROP TABLE IF EXISTS test"));EXPECT_EQ(0,db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT DEFAULT 'default') "));EXPECT_EQ(0,db.exec("CREATE TABLE test2 (id INTEGER PRIMARY KEY, value TEXT DEFAULT 'default') "));EXPECT_TRUE(db.tableExists("test"));EXPECT_TRUE(db.tableExists("test2"));{SQLite::Statement query(db, "INSERT INTO test VALUES (?, ?)");// bind one argument less than expected - should be fine.// the unspecified argument should be set to null, not the default.SQLite::bind(query, 1);EXPECT_EQ(1, query.exec());query.reset();// bind all arguments - should work just fineSQLite::bind(query, 2, "two");EXPECT_EQ(1, query.exec());query.reset();// bind too many arguments - should throw.EXPECT_THROW(SQLite::bind(query, 3, "three", 0), SQLite::Exception);EXPECT_EQ(1, query.exec());}// make sure the content is as expected{SQLite::Statement query(db, std::string{"SELECT id, value FROM test ORDER BY id"});std::vector<std::pair<int, std::string> > results;while (query.executeStep()){const int id = query.getColumn(0);std::string value = query.getColumn(1);results.emplace_back( id, std::move(value) );}EXPECT_EQ(std::size_t(3), results.size());EXPECT_EQ(std::make_pair(1,std::string{""}), results.at(0));EXPECT_EQ(std::make_pair(2,std::string{"two"}), results.at(1));EXPECT_EQ(std::make_pair(3,std::string{"three"}), results.at(2));}#if (__cplusplus >= 201402L) || ( defined(_MSC_VER) && (_MSC_VER >= 1900) ) // c++14: Visual Studio 2015{SQLite::Statement query(db, "INSERT INTO test2 VALUES (?, ?)");// bind one argument less than expected - should be fine.// the unspecified argument should be set to null, not the default.SQLite::bind(query, std::make_tuple(1));EXPECT_EQ(1, query.exec());query.reset();// bind all arguments - should work just fineSQLite::bind(query, std::make_tuple(2, "two"));EXPECT_EQ(1, query.exec());query.reset();// bind too many arguments - should throw.EXPECT_THROW(SQLite::bind(query, std::make_tuple(3, "three", 0)), SQLite::Exception);EXPECT_EQ(1, query.exec());}// make sure the content is as expected{SQLite::Statement query(db, std::string{"SELECT id, value FROM test2 ORDER BY id"});std::vector<std::pair<int, std::string> > results;while (query.executeStep()){const int id = query.getColumn(0);std::string value = query.getColumn(1);results.emplace_back( id, std::move(value) );}EXPECT_EQ(std::size_t(3), results.size());EXPECT_EQ(std::make_pair(1,std::string{""}), results.at(0));EXPECT_EQ(std::make_pair(2,std::string{"two"}), results.at(1));EXPECT_EQ(std::make_pair(3,std::string{"three"}), results.at(2));}#endif // c++14}#endif // c++11
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。