提交 1226e747 authored 作者: Thomas Mueller's avatar Thomas Mueller

Fix test cases

上级 75604676
...@@ -22,7 +22,7 @@ import org.h2.store.fs.FilePathNio; ...@@ -22,7 +22,7 @@ import org.h2.store.fs.FilePathNio;
*/ */
public class FileStore { public class FileStore {
private final String fileName; private String fileName;
private boolean readOnly; private boolean readOnly;
private FileChannel file; private FileChannel file;
private FileLock fileLock; private FileLock fileLock;
...@@ -30,17 +30,6 @@ public class FileStore { ...@@ -30,17 +30,6 @@ public class FileStore {
private long readCount; private long readCount;
private long writeCount; private long writeCount;
public FileStore(String fileName, boolean readOnly) {
if (fileName != null && fileName.indexOf(':') < 0) {
// NIO is used, unless a different file system is specified
// the following line is to ensure the NIO file system is compiled
FilePathNio.class.getName();
fileName = "nio:" + fileName;
}
this.fileName = fileName;
this.readOnly = readOnly;
}
@Override @Override
public String toString() { public String toString() {
return fileName; return fileName;
...@@ -67,7 +56,14 @@ public class FileStore { ...@@ -67,7 +56,14 @@ public class FileStore {
} }
public void open(char[] encryptionKey) { public void open(String fileName, boolean readOnly, char[] encryptionKey) {
if (fileName != null && fileName.indexOf(':') < 0) {
// NIO is used, unless a different file system is specified
// the following line is to ensure the NIO file system is compiled
FilePathNio.class.getName();
fileName = "nio:" + fileName;
}
this.fileName = fileName;
FilePath f = FilePath.get(fileName); FilePath f = FilePath.get(fileName);
FilePath parent = f.getParent(); FilePath parent = f.getParent();
if (!parent.exists()) { if (!parent.exists()) {
...@@ -76,6 +72,7 @@ public class FileStore { ...@@ -76,6 +72,7 @@ public class FileStore {
if (f.exists() && !f.canWrite()) { if (f.exists() && !f.canWrite()) {
readOnly = true; readOnly = true;
} }
this.readOnly = readOnly;
try { try {
file = f.open(readOnly ? "r" : "rw"); file = f.open(readOnly ? "r" : "rw");
if (encryptionKey != null) { if (encryptionKey != null) {
......
...@@ -267,8 +267,8 @@ public class MVStore { ...@@ -267,8 +267,8 @@ public class MVStore {
cache = null; cache = null;
return; return;
} }
fileStore = new FileStore();
boolean readOnly = config.containsKey("readOnly"); boolean readOnly = config.containsKey("readOnly");
fileStore = new FileStore(f, readOnly);
o = config.get("cacheSize"); o = config.get("cacheSize");
int mb = o == null ? 16 : (Integer) o; int mb = o == null ? 16 : (Integer) o;
int maxMemoryBytes = mb * 1024 * 1024; int maxMemoryBytes = mb * 1024 * 1024;
...@@ -284,7 +284,7 @@ public class MVStore { ...@@ -284,7 +284,7 @@ public class MVStore {
unsavedPageCountMax = writeBufferSize / (div == 0 ? 1 : div); unsavedPageCountMax = writeBufferSize / (div == 0 ? 1 : div);
char[] encryptionKey = (char[]) config.get("encryptionKey"); char[] encryptionKey = (char[]) config.get("encryptionKey");
try { try {
fileStore.open(encryptionKey); fileStore.open(f, readOnly, encryptionKey);
if (fileStore.size() == 0) { if (fileStore.size() == 0) {
creationTime = 0; creationTime = 0;
creationTime = getTime(); creationTime = getTime();
......
...@@ -59,6 +59,8 @@ public class SourceCompiler { ...@@ -59,6 +59,8 @@ public class SourceCompiler {
*/ */
final HashMap<String, Class<?>> compiled = New.hashMap(); final HashMap<String, Class<?>> compiled = New.hashMap();
boolean useJavaSystemCompiler = true;
static { static {
JavaCompiler c; JavaCompiler c;
try { try {
...@@ -89,6 +91,15 @@ public class SourceCompiler { ...@@ -89,6 +91,15 @@ public class SourceCompiler {
compiled.clear(); compiled.clear();
} }
/**
* Enable or disable the usage of the Java system compiler.
*
* @param enabled true to enable
*/
public void setJavaSystemCompiler(boolean enabled) {
this.useJavaSystemCompiler = enabled;
}
/** /**
* Get the class object for the given name. * Get the class object for the given name.
* *
...@@ -125,7 +136,7 @@ public class SourceCompiler { ...@@ -125,7 +136,7 @@ public class SourceCompiler {
className = name; className = name;
} }
String s = getCompleteSourceCode(packageName, className, source); String s = getCompleteSourceCode(packageName, className, source);
if (JAVA_COMPILER != null) { if (JAVA_COMPILER != null && useJavaSystemCompiler) {
classInstance = javaxToolsJavac(packageName, className, s); classInstance = javaxToolsJavac(packageName, className, s);
} else { } else {
byte[] data = javacCompile(packageName, className, s); byte[] data = javacCompile(packageName, className, s);
......
...@@ -398,6 +398,7 @@ public class TestMVStore extends TestBase { ...@@ -398,6 +398,7 @@ public class TestMVStore extends TestBase {
fileName(fileName). fileName(fileName).
encryptionKey(passwordChars).open(); encryptionKey(passwordChars).open();
assertTrue(s.getFileStore().isReadOnly()); assertTrue(s.getFileStore().isReadOnly());
s.close();
FileUtils.delete(fileName); FileUtils.delete(fileName);
assertFalse(FileUtils.exists(fileName)); assertFalse(FileUtils.exists(fileName));
......
...@@ -64,6 +64,7 @@ public class ProxyCodeGenerator { ...@@ -64,6 +64,7 @@ public class ProxyCodeGenerator {
cg.write(new PrintWriter(sw)); cg.write(new PrintWriter(sw));
String code = sw.toString(); String code = sw.toString();
String proxy = "bytecode."+ c.getSimpleName() + "Proxy"; String proxy = "bytecode."+ c.getSimpleName() + "Proxy";
compiler.setJavaSystemCompiler(false);
compiler.setSource(proxy, code); compiler.setSource(proxy, code);
// System.out.println(code); // System.out.println(code);
Class<?> px = compiler.getClass(proxy); Class<?> px = compiler.getClass(proxy);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论