diff options
author | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-06 19:22:42 +0000 |
---|---|---|
committer | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-06 19:22:42 +0000 |
commit | 69c5845f97c6c3710aa154ae0f81dfc40c14ea66 (patch) | |
tree | 6e19280706fa03efb9bb1b76ee9f5feb1a6d1620 /sql | |
parent | bba7b45fd533c0a2c772593ff6943c5c87407865 (diff) | |
download | chromium_src-69c5845f97c6c3710aa154ae0f81dfc40c14ea66.zip chromium_src-69c5845f97c6c3710aa154ae0f81dfc40c14ea66.tar.gz chromium_src-69c5845f97c6c3710aa154ae0f81dfc40c14ea66.tar.bz2 |
Upstream sqlite gyp changes for Android.
Includes a change to sql/Connection to propagate the auto_vacuum pragma across a raze operation. Also updates test expectations.
BUG=137853
Review URL: https://chromiumcodereview.appspot.com/10829062
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150128 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sql')
-rw-r--r-- | sql/connection.cc | 27 | ||||
-rw-r--r-- | sql/connection_unittest.cc | 23 |
2 files changed, 42 insertions, 8 deletions
diff --git a/sql/connection.cc b/sql/connection.cc index c7666f9..ea3dacb 100644 --- a/sql/connection.cc +++ b/sql/connection.cc @@ -200,12 +200,27 @@ bool Connection::Raze() { // Get the page size from the current connection, then propagate it // to the null database. - Statement s(GetUniqueStatement("PRAGMA page_size")); - if (!s.Step()) - return false; - const std::string sql = StringPrintf("PRAGMA page_size=%d", s.ColumnInt(0)); - if (!null_db.Execute(sql.c_str())) - return false; + { + Statement s(GetUniqueStatement("PRAGMA page_size")); + if (!s.Step()) + return false; + const std::string sql = StringPrintf("PRAGMA page_size=%d", + s.ColumnInt(0)); + if (!null_db.Execute(sql.c_str())) + return false; + } + + // Get the value of auto_vacuum from the current connection, then propagate it + // to the null database. + { + Statement s(GetUniqueStatement("PRAGMA auto_vacuum")); + if (!s.Step()) + return false; + const std::string sql = StringPrintf("PRAGMA auto_vacuum=%d", + s.ColumnInt(0)); + if (!null_db.Execute(sql.c_str())) + return false; + } // The page size doesn't take effect until a database has pages, and // at this point the null database has none. Changing the schema diff --git a/sql/connection_unittest.cc b/sql/connection_unittest.cc index 565c12f..e50043f 100644 --- a/sql/connection_unittest.cc +++ b/sql/connection_unittest.cc @@ -142,10 +142,21 @@ TEST_F(SQLConnectionTest, Raze) { ASSERT_TRUE(db().Execute(kCreateSql)); ASSERT_TRUE(db().Execute("INSERT INTO foo (value) VALUES (12)")); + int pragma_auto_vacuum = 0; + { + sql::Statement s(db().GetUniqueStatement("PRAGMA auto_vacuum")); + ASSERT_TRUE(s.Step()); + pragma_auto_vacuum = s.ColumnInt(0); + ASSERT_TRUE(pragma_auto_vacuum == 0 || pragma_auto_vacuum == 1); + } + + // If auto_vacuum is set, there's an extra page to maintain a freelist. + const int kExpectedPageCount = 2 + pragma_auto_vacuum; + { sql::Statement s(db().GetUniqueStatement("PRAGMA page_count")); ASSERT_TRUE(s.Step()); - EXPECT_EQ(2, s.ColumnInt(0)); + EXPECT_EQ(kExpectedPageCount, s.ColumnInt(0)); } { @@ -154,7 +165,8 @@ TEST_F(SQLConnectionTest, Raze) { EXPECT_EQ("table", s.ColumnString(0)); EXPECT_EQ("foo", s.ColumnString(1)); EXPECT_EQ("foo", s.ColumnString(2)); - EXPECT_EQ(2, s.ColumnInt(3)); + // Table "foo" is stored in the last page of the file. + EXPECT_EQ(kExpectedPageCount, s.ColumnInt(3)); EXPECT_EQ(kCreateSql, s.ColumnString(4)); } @@ -170,6 +182,13 @@ TEST_F(SQLConnectionTest, Raze) { sql::Statement s(db().GetUniqueStatement("SELECT * FROM sqlite_master")); ASSERT_FALSE(s.Step()); } + + { + sql::Statement s(db().GetUniqueStatement("PRAGMA auto_vacuum")); + ASSERT_TRUE(s.Step()); + // auto_vacuum must be preserved across a Raze. + EXPECT_EQ(pragma_auto_vacuum, s.ColumnInt(0)); + } } // Test that Raze() maintains page_size. |