You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UsageMapTest.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.healthmarketscience.jackcess.impl;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import com.healthmarketscience.jackcess.ColumnBuilder;
  7. import com.healthmarketscience.jackcess.DataType;
  8. import com.healthmarketscience.jackcess.Database;
  9. import com.healthmarketscience.jackcess.DatabaseBuilder;
  10. import com.healthmarketscience.jackcess.Table;
  11. import com.healthmarketscience.jackcess.TableBuilder;
  12. import static com.healthmarketscience.jackcess.TestUtil.*;
  13. import static com.healthmarketscience.jackcess.impl.JetFormatTest.*;
  14. import static org.junit.jupiter.api.Assertions.*;
  15. import org.junit.jupiter.api.Test;
  16. /**
  17. * @author Dan Rollo
  18. * Date: Mar 5, 2010
  19. * Time: 2:21:22 PM
  20. */
  21. public final class UsageMapTest
  22. {
  23. @Test
  24. public void testRead() throws Exception {
  25. for (final TestDB testDB : SUPPORTED_DBS_TEST) {
  26. final int expectedFirstPage;
  27. final int expectedLastPage;
  28. final Database.FileFormat expectedFileFormat = testDB.getExpectedFileFormat();
  29. if (Database.FileFormat.V2000.equals(expectedFileFormat)) {
  30. expectedFirstPage = 743;
  31. expectedLastPage = 767;
  32. } else if (Database.FileFormat.V2003.equals(expectedFileFormat)) {
  33. expectedFirstPage = 16;
  34. expectedLastPage = 799;
  35. } else if (Database.FileFormat.V2007.equals(expectedFileFormat)) {
  36. expectedFirstPage = 94;
  37. expectedLastPage = 511;
  38. } else if (Database.FileFormat.V2010.equals(expectedFileFormat)) {
  39. expectedFirstPage = 109;
  40. expectedLastPage = 511;
  41. } else {
  42. throw new IllegalAccessException("Unknown file format: " + expectedFileFormat);
  43. }
  44. checkUsageMapRead(testDB.getFile(), expectedFirstPage, expectedLastPage);
  45. }
  46. }
  47. private static void checkUsageMapRead(
  48. final File dbFile, final int expectedFirstPage, final int expectedLastPage)
  49. throws IOException {
  50. final Database db = DatabaseBuilder.open(dbFile);
  51. final UsageMap usageMap = UsageMap.read((DatabaseImpl)db,
  52. PageChannel.PAGE_GLOBAL_USAGE_MAP,
  53. PageChannel.ROW_GLOBAL_USAGE_MAP,
  54. true);
  55. assertEquals(expectedFirstPage, usageMap.getFirstPageNumber(), "Unexpected FirstPageNumber.");
  56. assertEquals(expectedLastPage, usageMap.getLastPageNumber(), "Unexpected LastPageNumber.");
  57. }
  58. @Test
  59. public void testGobalReferenceUsageMap() throws Exception
  60. {
  61. Database db = openCopy(
  62. Database.FileFormat.V2000,
  63. new File("src/test/data/V2000/testRefGlobalV2000.mdb"));
  64. Table t = new TableBuilder("Test2")
  65. .addColumn(new ColumnBuilder("id", DataType.LONG))
  66. .addColumn(new ColumnBuilder("data1", DataType.TEXT))
  67. .addColumn(new ColumnBuilder("data2", DataType.TEXT))
  68. .toTable(db);
  69. ((DatabaseImpl)db).getPageChannel().startWrite();
  70. try {
  71. List<Object[]> rows = new ArrayList<Object[]>();
  72. for(int i = 0; i < 300000; ++i) {
  73. String s1 = "r" + i + "-" + createString(100);
  74. String s2 = "r" + i + "-" + createString(200);
  75. rows.add(new Object[]{i, s1, s2});
  76. if((i % 2000) == 0) {
  77. t.addRows(rows);
  78. rows.clear();
  79. }
  80. }
  81. } finally {
  82. ((DatabaseImpl)db).getPageChannel().finishWrite();
  83. }
  84. db.close();
  85. }
  86. }