Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sql/recovery.h" | 5 #include "sql/recovery.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 832 ASSERT_FALSE(recovery.get()); | 832 ASSERT_FALSE(recovery.get()); |
| 833 | 833 |
| 834 ASSERT_TRUE(expecter.SawExpectedErrors()); | 834 ASSERT_TRUE(expecter.SawExpectedErrors()); |
| 835 } | 835 } |
| 836 | 836 |
| 837 // Verify that the failure was in the right place with the expected code. | 837 // Verify that the failure was in the right place with the expected code. |
| 838 tester.ExpectBucketCount(kEventHistogramName, kEventEnum, 1); | 838 tester.ExpectBucketCount(kEventHistogramName, kEventEnum, 1); |
| 839 tester.ExpectBucketCount(kErrorHistogramName, SQLITE_NOTADB, 1); | 839 tester.ExpectBucketCount(kErrorHistogramName, SQLITE_NOTADB, 1); |
| 840 } | 840 } |
| 841 | 841 |
| 842 // Verify that sql::Recovery maintains the page size, and the virtual table | |
| 843 // works with page sizes other than SQLite's default. Also verify the case | |
| 844 // where the default page size has changed. | |
| 845 TEST_F(SQLRecoveryTest, PageSize) { | |
| 846 const char kCreateSql[] = "CREATE TABLE x (t TEXT)"; | |
| 847 const char kInsertSql1[] = "INSERT INTO x VALUES ('This is a test')"; | |
| 848 const char kInsertSql2[] = "INSERT INTO x VALUES ('That was a test')"; | |
| 849 const char kSelectSql[] = "SELECT * FROM x ORDER BY t"; | |
| 850 | |
| 851 const std::string default_page_size = | |
| 852 ExecuteWithResult(&db(), "PRAGMA page_size"); | |
| 853 ASSERT_TRUE(db().Execute(kCreateSql)); | |
| 854 ASSERT_TRUE(db().Execute(kInsertSql1)); | |
| 855 ASSERT_TRUE(db().Execute(kInsertSql2)); | |
| 856 sql::Recovery::RecoverDatabase(&db(), db_path()); | |
| 857 ASSERT_TRUE(Reopen()); | |
| 858 EXPECT_EQ(default_page_size, ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 859 EXPECT_EQ("That was a test\nThis is a test", | |
| 860 ExecuteWithResults(&db(), kSelectSql, "|", "\n")); | |
| 861 | |
| 862 // Sync uses 32k pages. | |
| 863 db().Close(); | |
| 864 sql::Connection::Delete(db_path()); | |
| 865 db().set_page_size(32768); | |
| 866 ASSERT_TRUE(Reopen()); | |
| 867 ASSERT_TRUE(db().Execute(kCreateSql)); | |
| 868 ASSERT_TRUE(db().Execute(kInsertSql1)); | |
| 869 ASSERT_TRUE(db().Execute(kInsertSql2)); | |
| 870 ASSERT_EQ("32768", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 871 sql::Recovery::RecoverDatabase(&db(), db_path()); | |
| 872 ASSERT_TRUE(Reopen()); | |
| 873 EXPECT_EQ("32768", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 874 EXPECT_EQ("That was a test\nThis is a test", | |
| 875 ExecuteWithResults(&db(), kSelectSql, "|", "\n")); | |
| 876 | |
| 877 // Many clients use 4k pages. This is the SQLite default after 3.12.0. | |
|
michaeln
2016/10/25 00:12:26
there's some repetition, maybe have a helper
voi
Scott Hess - ex-Googler
2016/10/26 23:37:38
Since I like having it be obvious which test case
| |
| 878 db().Close(); | |
| 879 sql::Connection::Delete(db_path()); | |
| 880 db().set_page_size(4096); | |
| 881 ASSERT_TRUE(Reopen()); | |
| 882 ASSERT_TRUE(db().Execute(kCreateSql)); | |
| 883 ASSERT_TRUE(db().Execute(kInsertSql1)); | |
| 884 ASSERT_TRUE(db().Execute(kInsertSql2)); | |
| 885 ASSERT_EQ("4096", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 886 sql::Recovery::RecoverDatabase(&db(), db_path()); | |
| 887 ASSERT_TRUE(Reopen()); | |
| 888 EXPECT_EQ("4096", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 889 EXPECT_EQ("That was a test\nThis is a test", | |
| 890 ExecuteWithResults(&db(), kSelectSql, "|", "\n")); | |
| 891 | |
| 892 // The default page size before 3.12.0. | |
| 893 db().Close(); | |
| 894 sql::Connection::Delete(db_path()); | |
| 895 db().set_page_size(1024); | |
| 896 ASSERT_TRUE(Reopen()); | |
| 897 ASSERT_TRUE(db().Execute(kCreateSql)); | |
| 898 ASSERT_TRUE(db().Execute(kInsertSql1)); | |
| 899 ASSERT_TRUE(db().Execute(kInsertSql2)); | |
| 900 ASSERT_EQ("1024", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 901 sql::Recovery::RecoverDatabase(&db(), db_path()); | |
| 902 ASSERT_TRUE(Reopen()); | |
| 903 EXPECT_EQ("1024", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 904 EXPECT_EQ("That was a test\nThis is a test", | |
| 905 ExecuteWithResults(&db(), kSelectSql, "|", "\n")); | |
| 906 | |
| 907 // Databases with no page size specified should recover with the new default | |
| 908 // page size. | |
| 909 db().Close(); | |
| 910 sql::Connection::Delete(db_path()); | |
| 911 db().set_page_size(2048); // Not the old or new default. | |
| 912 ASSERT_TRUE(Reopen()); | |
| 913 ASSERT_TRUE(db().Execute(kCreateSql)); | |
| 914 ASSERT_TRUE(db().Execute(kInsertSql1)); | |
| 915 ASSERT_TRUE(db().Execute(kInsertSql2)); | |
| 916 ASSERT_EQ("2048", ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 917 db().set_page_size(0); | |
| 918 sql::Recovery::RecoverDatabase(&db(), db_path()); | |
| 919 ASSERT_TRUE(Reopen()); | |
| 920 EXPECT_EQ(default_page_size, ExecuteWithResult(&db(), "PRAGMA page_size")); | |
| 921 EXPECT_EQ("That was a test\nThis is a test", | |
| 922 ExecuteWithResults(&db(), kSelectSql, "|", "\n")); | |
| 923 } | |
| 924 | |
| 842 } // namespace | 925 } // namespace |
| OLD | NEW |