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
parent bba7b45f
...@@ -200,12 +200,27 @@ bool Connection::Raze() { ...@@ -200,12 +200,27 @@ bool Connection::Raze() {
// Get the page size from the current connection, then propagate it // Get the page size from the current connection, then propagate it
// to the null database. // to the null database.
{
Statement s(GetUniqueStatement("PRAGMA page_size")); Statement s(GetUniqueStatement("PRAGMA page_size"));
if (!s.Step()) if (!s.Step())
return false; return false;
const std::string sql = StringPrintf("PRAGMA page_size=%d", s.ColumnInt(0)); const std::string sql = StringPrintf("PRAGMA page_size=%d",
s.ColumnInt(0));
if (!null_db.Execute(sql.c_str())) if (!null_db.Execute(sql.c_str()))
return false; 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 // The page size doesn't take effect until a database has pages, and
// at this point the null database has none. Changing the schema // at this point the null database has none. Changing the schema
......
...@@ -142,10 +142,21 @@ TEST_F(SQLConnectionTest, Raze) { ...@@ -142,10 +142,21 @@ TEST_F(SQLConnectionTest, Raze) {
ASSERT_TRUE(db().Execute(kCreateSql)); ASSERT_TRUE(db().Execute(kCreateSql));
ASSERT_TRUE(db().Execute("INSERT INTO foo (value) VALUES (12)")); 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")); sql::Statement s(db().GetUniqueStatement("PRAGMA page_count"));
ASSERT_TRUE(s.Step()); ASSERT_TRUE(s.Step());
EXPECT_EQ(2, s.ColumnInt(0)); EXPECT_EQ(kExpectedPageCount, s.ColumnInt(0));
} }
{ {
...@@ -154,7 +165,8 @@ TEST_F(SQLConnectionTest, Raze) { ...@@ -154,7 +165,8 @@ TEST_F(SQLConnectionTest, Raze) {
EXPECT_EQ("table", s.ColumnString(0)); EXPECT_EQ("table", s.ColumnString(0));
EXPECT_EQ("foo", s.ColumnString(1)); EXPECT_EQ("foo", s.ColumnString(1));
EXPECT_EQ("foo", s.ColumnString(2)); 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)); EXPECT_EQ(kCreateSql, s.ColumnString(4));
} }
...@@ -170,6 +182,13 @@ TEST_F(SQLConnectionTest, Raze) { ...@@ -170,6 +182,13 @@ TEST_F(SQLConnectionTest, Raze) {
sql::Statement s(db().GetUniqueStatement("SELECT * FROM sqlite_master")); sql::Statement s(db().GetUniqueStatement("SELECT * FROM sqlite_master"));
ASSERT_FALSE(s.Step()); 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. // Test that Raze() maintains page_size.
......
...@@ -34,11 +34,6 @@ ...@@ -34,11 +34,6 @@
], ],
}, },
], ],
['OS == "android"', {
'defines': [
'SQLITE_TEMP_STORE=3',
],
}],
['use_system_sqlite', { ['use_system_sqlite', {
'type': 'none', 'type': 'none',
'direct_dependent_settings': { 'direct_dependent_settings': {
...@@ -55,7 +50,7 @@ ...@@ -55,7 +50,7 @@
], ],
}, },
}], }],
['os_posix == 1 and OS != "mac" and OS != "ios"', { ['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android"', {
'direct_dependent_settings': { 'direct_dependent_settings': {
'cflags': [ 'cflags': [
# This next command produces no output but it it will fail # This next command produces no output but it it will fail
...@@ -128,7 +123,17 @@ ...@@ -128,7 +123,17 @@
], ],
}, },
}], }],
['os_posix == 1 and OS != "mac"', { ['OS == "android"', {
'defines': [
'HAVE_USLEEP=1',
'SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576',
'SQLITE_DEFAULT_AUTOVACUUM=1',
'SQLITE_TEMP_STORE=3',
'SQLITE_ENABLE_FTS3_BACKWARDS',
'DSQLITE_DEFAULT_FILE_FORMAT=4',
],
}],
['os_posix == 1 and OS != "mac" and OS != "android"', {
'cflags': [ 'cflags': [
# SQLite doesn't believe in compiler warnings, # SQLite doesn't believe in compiler warnings,
# preferring testing. # preferring testing.
...@@ -157,7 +162,7 @@ ...@@ -157,7 +162,7 @@
}, },
], ],
'conditions': [ 'conditions': [
['os_posix == 1 and OS != "mac" and OS != "ios" and not use_system_sqlite', { ['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android" and not use_system_sqlite', {
'targets': [ 'targets': [
{ {
'target_name': 'sqlite_shell', 'target_name': 'sqlite_shell',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment