package com.healthmarketscience.jackcess;
+import java.io.File;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.util.Arrays;
public void x_testCreateIsoFile() throws Exception
{
- for (final Database.FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
- Database db = create(fileFormat, true);
+ Database db = create(Database.FileFormat.V2000, true);
- Table t = new TableBuilder("test")
- .addColumn(new ColumnBuilder("row", DataType.TEXT).toColumn())
- .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
- .toTable(db);
-
- for(int i = 0; i < 256; ++i) {
- String str = "AA" + ((char)i) + "AA";
- t.addRow("row" + i, str);
- }
-
- db.close();
+ Table t = new TableBuilder("test")
+ .addColumn(new ColumnBuilder("row", DataType.TEXT).toColumn())
+ .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+ .toTable(db);
+
+ for(int i = 0; i < 256; ++i) {
+ String str = "AA" + ((char)i) + "AA";
+ t.addRow("row" + i, str);
}
+
+ db.close();
}
public void x_testCreateAltIsoFile() throws Exception
{
- for (final TestDB testDB : TestDB.getSupportedForBasename(null)) {
- // @todo Bank test dbFiles and create new TestDB here.
- //Database db = openCopy(new File("/tmp/test_ind.mdb"), true);
- Database db = openCopy(testDB, true);
-
- Table t = db.getTable("Table1");
-
- for(int i = 0; i < 256; ++i) {
- String str = "AA" + ((char)i) + "AA";
- t.addRow("row" + i, str,
- (byte)42 + i, (short)53 + i, 13 * i,
- (6.7d / i), null, null, true);
- }
+ Database db = openCopy(new File("/tmp/test_ind.mdb"), true);
- db.close();
+ Table t = db.getTable("Table1");
+
+ for(int i = 0; i < 256; ++i) {
+ String str = "AA" + ((char)i) + "AA";
+ t.addRow("row" + i, str,
+ (byte)42 + i, (short)53 + i, 13 * i,
+ (6.7d / i), null, null, true);
}
+
+ db.close();
}
public void x_testWriteAllCodesMdb() throws Exception
{
- for (final Database.FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
- Database db = create(fileFormat, true);
-
- // Table t = new TableBuilder("Table1")
- // .addColumn(new ColumnBuilder("key", DataType.TEXT).toColumn())
- // .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
- // .toTable(db);
-
- // for(int i = 0; i <= 0xFFFF; ++i) {
- // // skip non-char chars
- // char c = (char)i;
- // if(Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
- // continue;
- // }
- // String key = toUnicodeStr(c);
- // String str = "AA" + c + "AA";
- // t.addRow(key, str);
- // }
-
- Table t = new TableBuilder("Table5")
- .addColumn(new ColumnBuilder("name", DataType.TEXT).toColumn())
- .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
- .toTable(db);
-
- char c = (char)0x3041; // crazy 7F 02 ... A0
- char c2 = (char)0x30A2; // crazy 7F 02 ...
- char c3 = (char)0x2045; // inat 27 ... 1C
- char c4 = (char)0x3043; // crazy 7F 03 ... A0
- char c5 = (char)0x3046; // crazy 7F 04 ...
- char c6 = (char)0x30F6; // crazy 7F 0D ... A0
- char c7 = (char)0x3099; // unprint 03
- char c8 = (char)0x0041; // A
- char c9 = (char)0x002D; // - (unprint)
- char c10 = (char)0x20E1; // unprint F2
- char c11 = (char)0x309A; // unprint 04
- char c12 = (char)0x01C4; // (long extra)
- char c13 = (char)0x005F; // _ (long inline)
- char c14 = (char)0xFFFE; // removed
-
- char[] cs = new char[]{c7, c8, c3, c12, c13, c14, c, c2, c9};
- addCombos(t, 0, "", cs, 5);
-
- // t = new TableBuilder("Table2")
- // .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
- // .toTable(db);
-
- // writeChars(0x0000, t);
-
- // t = new TableBuilder("Table3")
- // .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
- // .toTable(db);
-
- // writeChars(0x0400, t);
+ Database db = create(Database.FileFormat.V2000, true);
+
+// Table t = new TableBuilder("Table1")
+// .addColumn(new ColumnBuilder("key", DataType.TEXT).toColumn())
+// .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+// .toTable(db);
+
+// for(int i = 0; i <= 0xFFFF; ++i) {
+// // skip non-char chars
+// char c = (char)i;
+// if(Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
+// continue;
+// }
+// String key = toUnicodeStr(c);
+// String str = "AA" + c + "AA";
+// t.addRow(key, str);
+// }
+
+ Table t = new TableBuilder("Table5")
+ .addColumn(new ColumnBuilder("name", DataType.TEXT).toColumn())
+ .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+ .toTable(db);
+
+ char c = (char)0x3041; // crazy 7F 02 ... A0
+ char c2 = (char)0x30A2; // crazy 7F 02 ...
+ char c3 = (char)0x2045; // inat 27 ... 1C
+ char c4 = (char)0x3043; // crazy 7F 03 ... A0
+ char c5 = (char)0x3046; // crazy 7F 04 ...
+ char c6 = (char)0x30F6; // crazy 7F 0D ... A0
+ char c7 = (char)0x3099; // unprint 03
+ char c8 = (char)0x0041; // A
+ char c9 = (char)0x002D; // - (unprint)
+ char c10 = (char)0x20E1; // unprint F2
+ char c11 = (char)0x309A; // unprint 04
+ char c12 = (char)0x01C4; // (long extra)
+ char c13 = (char)0x005F; // _ (long inline)
+ char c14 = (char)0xFFFE; // removed
+
+ char[] cs = new char[]{c7, c8, c3, c12, c13, c14, c, c2, c9};
+ addCombos(t, 0, "", cs, 5);
+
+// t = new TableBuilder("Table2")
+// .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+// .toTable(db);
+
+// writeChars(0x0000, t);
+
+// t = new TableBuilder("Table3")
+// .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+// .toTable(db);
+
+// writeChars(0x0400, t);
- db.close();
- }
+ db.close();
}
public void x_testReadAllCodesMdb() throws Exception
{
- for (final TestDB testDB : TestDB.getSupportedForBasename(null)) {
-
- // Database db = openCopy(new File("/data2/jackcess_test/testAllIndexCodes.mdb"));
- // Database db = openCopy(new File("/data2/jackcess_test/testAllIndexCodes_orig.mdb"));
- // Database db = openCopy(new File("/data2/jackcess_test/testSomeMoreCodes.mdb"));
- // @todo Bank test dbFiles and create new TestDB here.
- //Database db = openCopy(new File("/data2/jackcess_test/testStillMoreCodes.mdb"));
- Database db = openCopy(testDB);
-
- Table t = db.getTable("Table5");
-
- Index ind = t.getIndexes().iterator().next();
- ind.initialize();
-
- System.out.println("Ind " + ind);
-
- Cursor cursor = Cursor.createIndexCursor(t, ind);
- while(cursor.moveToNextRow()) {
- System.out.println("=======");
- String entryStr =
- entryToString(cursor.getSavepoint().getCurrentPosition());
- System.out.println("Entry Bytes: " + entryStr);
- System.out.println("Value: " + cursor.getCurrentRow() + "; " +
- toUnicodeStr(cursor.getCurrentRow().get("data")));
- }
+// Database db = openCopy(new File("/data2/jackcess_test/testAllIndexCodes.mdb"));
+// Database db = openCopy(new File("/data2/jackcess_test/testAllIndexCodes_orig.mdb"));
+// Database db = openCopy(new File("/data2/jackcess_test/testSomeMoreCodes.mdb"));
+ Database db = openCopy(new File("/data2/jackcess_test/testStillMoreCodes.mdb"));
+ Table t = db.getTable("Table5");
+
+ Index ind = t.getIndexes().iterator().next();
+ ind.initialize();
+
+ System.out.println("Ind " + ind);
- db.close();
+ Cursor cursor = Cursor.createIndexCursor(t, ind);
+ while(cursor.moveToNextRow()) {
+ System.out.println("=======");
+ String entryStr =
+ entryToString(cursor.getSavepoint().getCurrentPosition());
+ System.out.println("Entry Bytes: " + entryStr);
+ System.out.println("Value: " + cursor.getCurrentRow() + "; " +
+ toUnicodeStr(cursor.getCurrentRow().get("data")));
}
+
+ db.close();
}
private int addCombos(Table t, int rowNum, String s, char[] cs, int len)
public void x_testReadIsoMdb() throws Exception
{
- for (final TestDB testDB : TestDB.getSupportedForBasename(null)) {
- // Database db = open(new File("/tmp/test_ind.mdb"));
- // Database db = open(new File("/tmp/test_ind2.mdb"));
- // @todo Bank test dbFiles and create new TestDB here.
- //Database db = open(new File("/tmp/test_ind3.mdb"));
- Database db = open(testDB);
- // Database db = open(new File("/tmp/test_ind4.mdb"));
-
- Table t = db.getTable("Table1");
- Index index = t.getIndex("B");
- index.initialize();
- System.out.println("Ind " + index);
-
- Cursor cursor = Cursor.createIndexCursor(t, index);
- while(cursor.moveToNextRow()) {
- System.out.println("=======");
- System.out.println("Savepoint: " + cursor.getSavepoint());
- System.out.println("Value: " + cursor.getCurrentRow());
- }
+// Database db = open(new File("/tmp/test_ind.mdb"));
+// Database db = open(new File("/tmp/test_ind2.mdb"));
+ Database db = open(Database.FileFormat.V2000, new File("/tmp/test_ind3.mdb"));
+// Database db = open(new File("/tmp/test_ind4.mdb"));
- db.close();
+ Table t = db.getTable("Table1");
+ Index index = t.getIndex("B");
+ index.initialize();
+ System.out.println("Ind " + index);
+
+ Cursor cursor = Cursor.createIndexCursor(t, index);
+ while(cursor.moveToNextRow()) {
+ System.out.println("=======");
+ System.out.println("Savepoint: " + cursor.getSavepoint());
+ System.out.println("Value: " + cursor.getCurrentRow());
}
+
+ db.close();
}
public void x_testReverseIsoMdb() throws Exception
{
- for (final TestDB testDB : TestDB.getSupportedForBasename(null)) {
- // @todo Bank test dbFiles and create new TestDB here.
- //Database db = open(new File("/data2/jackcess_test/testAllIndexCodes3.mdb"));
- Database db = open(testDB);
-
- Table t = db.getTable("Table1");
- Index index = t.getIndexes().iterator().next();
- index.initialize();
- System.out.println("Ind " + index);
-
- Pattern inlinePat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 00");
- Pattern unprintPat = Pattern.compile("01 01 01 80 (.+) 06 (.+) 00");
- Pattern unprint2Pat = Pattern.compile("4A 4A 4A 4A 01 02 (.+) 00");
- Pattern inatPat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 02 02 (.+) 00");
- Pattern inat2Pat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 (02 02 (.+))?01 01 (.*)FF 02 80 FF 80 00");
-
- Map<Character,String[]> inlineCodes = new TreeMap<Character,String[]>();
- Map<Character,String[]> unprintCodes = new TreeMap<Character,String[]>();
- Map<Character,String[]> unprint2Codes = new TreeMap<Character,String[]>();
- Map<Character,String[]> inatInlineCodes = new TreeMap<Character,String[]>();
- Map<Character,String[]> inatExtraCodes = new TreeMap<Character,String[]>();
- Map<Character,String[]> inat2Codes = new TreeMap<Character,String[]>();
- Map<Character,String[]> inat2ExtraCodes = new TreeMap<Character,String[]>();
- Map<Character,String[]> inat2CrazyCodes = new TreeMap<Character,String[]>();
-
-
- Cursor cursor = Cursor.createIndexCursor(t, index);
- while(cursor.moveToNextRow()) {
- // System.out.println("=======");
- // System.out.println("Savepoint: " + cursor.getSavepoint());
- // System.out.println("Value: " + cursor.getCurrentRow());
- Cursor.Savepoint savepoint = cursor.getSavepoint();
- String entryStr = entryToString(savepoint.getCurrentPosition());
-
- Map<String,Object> row = cursor.getCurrentRow();
- String value = (String)row.get("data");
- String key = (String)row.get("key");
- char c = value.charAt(2);
- System.out.println("=======");
- System.out.println("RowId: " +
- savepoint.getCurrentPosition().getRowId());
- System.out.println("Entry: " + entryStr);
- // System.out.println("Row: " + row);
- System.out.println("Value: (" + key + ")" + value);
- System.out.println("Char: " + c + ", " + (int)c + ", " +
- toUnicodeStr(c));
-
- String type = null;
- if(entryStr.endsWith("01 00")) {
-
- // handle inline codes
- type = "INLINE";
- Matcher m = inlinePat.matcher(entryStr);
- m.find();
- handleInlineEntry(m.group(1), c, inlineCodes);
-
- } else if(entryStr.contains("01 01 01 80")) {
-
- // handle most unprintable codes
- type = "UNPRINTABLE";
- Matcher m = unprintPat.matcher(entryStr);
- m.find();
- handleUnprintableEntry(m.group(2), c, unprintCodes);
-
- } else if(entryStr.contains("01 02 02") &&
- !entryStr.contains("FF 02 80 FF 80")) {
-
- // handle chars w/ symbols
- type = "CHAR_WITH_SYMBOL";
- Matcher m = inatPat.matcher(entryStr);
- m.find();
- handleInternationalEntry(m.group(1), m.group(2), c,
- inatInlineCodes, inatExtraCodes);
-
- } else if(entryStr.contains("4A 4A 4A 4A 01 02")) {
-
- // handle chars w/ symbols
- type = "UNPRINTABLE_2";
- Matcher m = unprint2Pat.matcher(entryStr);
- m.find();
- handleUnprintable2Entry(m.group(1), c, unprint2Codes);
-
- } else if(entryStr.contains("FF 02 80 FF 80")) {
-
- type = "CRAZY_INAT";
- Matcher m = inat2Pat.matcher(entryStr);
- m.find();
- handleInternational2Entry(m.group(1), m.group(3), m.group(4), c,
- inat2Codes, inat2ExtraCodes,
- inat2CrazyCodes);
+ Database db = open(Database.FileFormat.V2000, new File("/data2/jackcess_test/testAllIndexCodes3.mdb"));
+
+ Table t = db.getTable("Table1");
+ Index index = t.getIndexes().iterator().next();
+ index.initialize();
+ System.out.println("Ind " + index);
+
+ Pattern inlinePat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 00");
+ Pattern unprintPat = Pattern.compile("01 01 01 80 (.+) 06 (.+) 00");
+ Pattern unprint2Pat = Pattern.compile("4A 4A 4A 4A 01 02 (.+) 00");
+ Pattern inatPat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 02 02 (.+) 00");
+ Pattern inat2Pat = Pattern.compile("7F 4A 4A (.*)4A 4A 01 (02 02 (.+))?01 01 (.*)FF 02 80 FF 80 00");
+
+ Map<Character,String[]> inlineCodes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> unprintCodes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> unprint2Codes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> inatInlineCodes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> inatExtraCodes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> inat2Codes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> inat2ExtraCodes = new TreeMap<Character,String[]>();
+ Map<Character,String[]> inat2CrazyCodes = new TreeMap<Character,String[]>();
+
+
+ Cursor cursor = Cursor.createIndexCursor(t, index);
+ while(cursor.moveToNextRow()) {
+// System.out.println("=======");
+// System.out.println("Savepoint: " + cursor.getSavepoint());
+// System.out.println("Value: " + cursor.getCurrentRow());
+ Cursor.Savepoint savepoint = cursor.getSavepoint();
+ String entryStr = entryToString(savepoint.getCurrentPosition());
- } else {
+ Map<String,Object> row = cursor.getCurrentRow();
+ String value = (String)row.get("data");
+ String key = (String)row.get("key");
+ char c = value.charAt(2);
+ System.out.println("=======");
+ System.out.println("RowId: " +
+ savepoint.getCurrentPosition().getRowId());
+ System.out.println("Entry: " + entryStr);
+// System.out.println("Row: " + row);
+ System.out.println("Value: (" + key + ")" + value);
+ System.out.println("Char: " + c + ", " + (int)c + ", " +
+ toUnicodeStr(c));
+
+ String type = null;
+ if(entryStr.endsWith("01 00")) {
+
+ // handle inline codes
+ type = "INLINE";
+ Matcher m = inlinePat.matcher(entryStr);
+ m.find();
+ handleInlineEntry(m.group(1), c, inlineCodes);
+
+ } else if(entryStr.contains("01 01 01 80")) {
+
+ // handle most unprintable codes
+ type = "UNPRINTABLE";
+ Matcher m = unprintPat.matcher(entryStr);
+ m.find();
+ handleUnprintableEntry(m.group(2), c, unprintCodes);
+
+ } else if(entryStr.contains("01 02 02") &&
+ !entryStr.contains("FF 02 80 FF 80")) {
+
+ // handle chars w/ symbols
+ type = "CHAR_WITH_SYMBOL";
+ Matcher m = inatPat.matcher(entryStr);
+ m.find();
+ handleInternationalEntry(m.group(1), m.group(2), c,
+ inatInlineCodes, inatExtraCodes);
+
+ } else if(entryStr.contains("4A 4A 4A 4A 01 02")) {
+
+ // handle chars w/ symbols
+ type = "UNPRINTABLE_2";
+ Matcher m = unprint2Pat.matcher(entryStr);
+ m.find();
+ handleUnprintable2Entry(m.group(1), c, unprint2Codes);
+
+ } else if(entryStr.contains("FF 02 80 FF 80")) {
+
+ type = "CRAZY_INAT";
+ Matcher m = inat2Pat.matcher(entryStr);
+ m.find();
+ handleInternational2Entry(m.group(1), m.group(3), m.group(4), c,
+ inat2Codes, inat2ExtraCodes,
+ inat2CrazyCodes);
+
+ } else {
+
+ throw new RuntimeException("unhandled " + entryStr);
+ }
+
+ System.out.println("Type: " + type);
+ }
- throw new RuntimeException("unhandled " + entryStr);
- }
+ System.out.println("\n***CODES");
+ for(int i = 0; i <= 0xFFFF; ++i) {
- System.out.println("Type: " + type);
+ if(i == 256) {
+ System.out.println("\n***EXTENDED CODES");
}
- System.out.println("\n***CODES");
- for(int i = 0; i <= 0xFFFF; ++i) {
-
- if(i == 256) {
- System.out.println("\n***EXTENDED CODES");
- }
-
- // skip non-char chars
- char c = (char)i;
- if(Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
- continue;
- }
-
- if(c == (char)0xFFFE) {
- // this gets replaced with FFFD, treat it the same
- c = (char)0xFFFD;
- }
+ // skip non-char chars
+ char c = (char)i;
+ if(Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
+ continue;
+ }
- Character cc = c;
- String[] chars = inlineCodes.get(cc);
- if(chars != null) {
- if((chars.length == 1) && (chars[0].length() == 0)) {
- System.out.println("X");
- } else {
- System.out.println("S" + toByteString(chars));
- }
- continue;
- }
+ if(c == (char)0xFFFE) {
+ // this gets replaced with FFFD, treat it the same
+ c = (char)0xFFFD;
+ }
- chars = inatInlineCodes.get(cc);
- if(chars != null) {
- String[] extra = inatExtraCodes.get(cc);
- System.out.println("I" + toByteString(chars) + "," +
- toByteString(extra));
- continue;
+ Character cc = c;
+ String[] chars = inlineCodes.get(cc);
+ if(chars != null) {
+ if((chars.length == 1) && (chars[0].length() == 0)) {
+ System.out.println("X");
+ } else {
+ System.out.println("S" + toByteString(chars));
}
+ continue;
+ }
- chars = unprintCodes.get(cc);
- if(chars != null) {
- System.out.println("U" + toByteString(chars));
- continue;
- }
+ chars = inatInlineCodes.get(cc);
+ if(chars != null) {
+ String[] extra = inatExtraCodes.get(cc);
+ System.out.println("I" + toByteString(chars) + "," +
+ toByteString(extra));
+ continue;
+ }
+
+ chars = unprintCodes.get(cc);
+ if(chars != null) {
+ System.out.println("U" + toByteString(chars));
+ continue;
+ }
- chars = unprint2Codes.get(cc);
- if(chars != null) {
- if(chars.length > 1) {
- throw new RuntimeException("long unprint codes");
- }
- int val = Integer.parseInt(chars[0], 16) - 2;
- String valStr = ByteUtil.toHexString(new byte[]{(byte)val}).trim();
- System.out.println("P" + valStr);
- continue;
+ chars = unprint2Codes.get(cc);
+ if(chars != null) {
+ if(chars.length > 1) {
+ throw new RuntimeException("long unprint codes");
}
+ int val = Integer.parseInt(chars[0], 16) - 2;
+ String valStr = ByteUtil.toHexString(new byte[]{(byte)val}).trim();
+ System.out.println("P" + valStr);
+ continue;
+ }
- chars = inat2Codes.get(cc);
- if(chars != null) {
- String [] crazyCodes = inat2CrazyCodes.get(cc);
- String crazyCode = "";
- if(crazyCodes != null) {
- if((crazyCodes.length != 1) || !"A0".equals(crazyCodes[0])) {
- throw new RuntimeException("CC " + Arrays.asList(crazyCodes));
- }
- crazyCode = "1";
+ chars = inat2Codes.get(cc);
+ if(chars != null) {
+ String [] crazyCodes = inat2CrazyCodes.get(cc);
+ String crazyCode = "";
+ if(crazyCodes != null) {
+ if((crazyCodes.length != 1) || !"A0".equals(crazyCodes[0])) {
+ throw new RuntimeException("CC " + Arrays.asList(crazyCodes));
}
-
- String[] extra = inat2ExtraCodes.get(cc);
- System.out.println("Z" + toByteString(chars) + "," +
- toByteString(extra) + "," +
- crazyCode);
- continue;
+ crazyCode = "1";
}
- throw new RuntimeException("Unhandled char " + toUnicodeStr(c));
+ String[] extra = inat2ExtraCodes.get(cc);
+ System.out.println("Z" + toByteString(chars) + "," +
+ toByteString(extra) + "," +
+ crazyCode);
+ continue;
}
- System.out.println("\n***END CODES");
- db.close();
+ throw new RuntimeException("Unhandled char " + toUnicodeStr(c));
}
+ System.out.println("\n***END CODES");
+
+ db.close();
}
private static String toByteString(String[] chars)