1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.sql; 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.KnownFailure; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Connection; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.DatabaseMetaData; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.PreparedStatement; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.ResultSet; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Statement; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.DatabaseCreator; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_SQL; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.extensions.TestSetup; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite; 34229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class DeleteFunctionalityTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Connection conn = null; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Statement statement = null; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void setUp() throws Exception { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 43c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann Support_SQL.loadDriver(); 44c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn = Support_SQL.getConnection(); 45c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement = conn.createStatement(); 46c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann createTestTables(); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillParentTable(conn); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void tearDown() throws Exception { 5179870d81001ab3dc70b3bce7dfcca70153a3a14fUrs Grob deleteTestTables(); 52c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.close(); 53c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn.close(); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void createTestTables() { 59c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 60c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann DatabaseMetaData meta = conn.getMetaData(); 61c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann ResultSet userTab = meta.getTables(null, null, null, null); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann while (userTab.next()) { 64c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann String tableName = userTab.getString("TABLE_NAME"); 65c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann if (tableName.equals(DatabaseCreator.PARENT_TABLE)) { 66c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement 67c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .execute(DatabaseCreator.DROP_TABLE_PARENT); 68c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } else if (tableName 69c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .equals(DatabaseCreator.FKCASCADE_TABLE)) { 70c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement 71c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .execute(DatabaseCreator.DROP_TABLE_FKCASCADE); 72c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } else if (tableName 73c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .equals(DatabaseCreator.FKSTRICT_TABLE)) { 74c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement 75c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .execute(DatabaseCreator.DROP_TABLE_FKSTRICT); 76c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } else if (tableName 77c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann .equals(DatabaseCreator.TEST_TABLE5)) { 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE5); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann userTab.close(); 82c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.CREATE_TABLE_PARENT); 83c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.CREATE_TABLE_FKSTRICT); 84c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.CREATE_TABLE_FKCASCADE); 85c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.CREATE_TABLE5); 86c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 87c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann fail("Unexpected SQLException " + e.toString()); 88c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 89c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 90c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann 91c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void deleteTestTables() { 92c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 93c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.DROP_TABLE_FKCASCADE); 94c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.DROP_TABLE_FKSTRICT); 95c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.DROP_TABLE_PARENT); 96c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.DROP_TABLE5); 97c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 98c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann fail("Unexpected SQLException " + e.toString()); 99c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 103229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete1(). Deletes row with no 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referencing ones and RESTRICT action 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete1() throws SQLException { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillFKStrictTable(conn); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE id = 3;"); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 113229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete2(). Attempts to delete row with 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referencing ones and RESTRICT action - expecting SQLException 115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * TODO foreign key functionality is not supported 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* public void testDelete2() throws SQLException { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillFKStrictTable(conn); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE id = 1;"); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expecting SQLException"); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException ex) { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 129229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete3(). Deletes all referencing 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rows and then deletes referenced one 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete3() throws SQLException { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE name_id = 1;"); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE id = 1;"); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 140229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete4(). Deletes row with no 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referencing ones and CASCADE action 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete4() throws SQLException { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillFKCascadeTable(conn); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE id = 3;"); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 150229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete5(). Attempts to delete row with 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referencing ones and CASCADE action - expecting all referencing 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rows will also be deleted 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete5() throws SQLException { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE id = 1;"); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM " 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.FKCASCADE_TABLE + " WHERE name_id = 1;"); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.next(); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Should be no rows", 0, r.getInt(1)); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.close(); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 166229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete6(). 167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * TODO Foreign key functionality is not supported 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("not supported") 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete6() throws SQLException { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillFKStrictTable(conn); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE name_id = ANY (SELECT id FROM " 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.PARENT_TABLE + " WHERE id > 1)"); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM " 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.FKSTRICT_TABLE + " WHERE name_id = 1;"); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.next(); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Should be 2 rows", 2, r.getInt(1)); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.close(); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 183229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * DeleteFunctionalityTest#testDelete7(). Deletes rows using 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PreparedStatement 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDelete7() throws SQLException { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.fillTestTable5(conn); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PreparedStatement stat = conn.prepareStatement("DELETE FROM " 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE5 + " WHERE testID = ?"); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stat.setInt(1, 1); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stat.execute(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stat.setInt(1, 2); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stat.execute(); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM " 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE5 + " WHERE testID < 3 "); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.next(); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, r.getInt(1)); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project r.close(); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stat.close(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 202