提交 dc9a0ee7 authored 作者: perhuss's avatar perhuss

Merge remote-tracking branch 'upstream/master'

/*
* Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.store.fs;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
/**
* Fake file channel to use by in-memory and ZIP file systems.
*/
public class FakeFileChannel extends FileChannel {
@Override
protected void implCloseChannel() throws IOException {
throw new IOException();
}
@Override
public FileLock lock(long position, long size, boolean shared) throws IOException {
throw new IOException();
}
@Override
public MappedByteBuffer map(MapMode mode, long position, long size) throws IOException {
throw new IOException();
}
@Override
public long position() throws IOException {
throw new IOException();
}
@Override
public FileChannel position(long newPosition) throws IOException {
throw new IOException();
}
@Override
public int read(ByteBuffer dst) throws IOException {
throw new IOException();
}
@Override
public int read(ByteBuffer dst, long position) throws IOException {
throw new IOException();
}
@Override
public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
throw new IOException();
}
@Override
public long size() throws IOException {
throw new IOException();
}
@Override
public long transferFrom(ReadableByteChannel src, long position, long count) throws IOException {
throw new IOException();
}
@Override
public long transferTo(long position, long count, WritableByteChannel target) throws IOException {
throw new IOException();
}
@Override
public FileChannel truncate(long size) throws IOException {
throw new IOException();
}
@Override
public FileLock tryLock(long position, long size, boolean shared) throws IOException {
throw new IOException();
}
@Override
public int write(ByteBuffer src) throws IOException {
throw new IOException();
}
@Override
public int write(ByteBuffer src, long position) throws IOException {
throw new IOException();
}
@Override
public long write(ByteBuffer[] srcs, int offset, int len) throws IOException {
throw new IOException();
}
@Override
public void force(boolean metaData) throws IOException {
throw new IOException();
}
}
\ No newline at end of file
......@@ -392,8 +392,7 @@ class FileMem extends FileBase {
}
}
// cast to FileChannel to avoid JDK 1.7 ambiguity
FileLock lock = new FileLock((FileChannel) null, position, size, shared) {
FileLock lock = new FileLock(new FakeFileChannel(), position, size, shared) {
@Override
public boolean isValid() {
......
......@@ -386,8 +386,7 @@ class FileNioMem extends FileBase {
}
}
// cast to FileChannel to avoid JDK 1.7 ambiguity
FileLock lock = new FileLock((FileChannel) null, position, size, shared) {
FileLock lock = new FileLock(new FakeFileChannel(), position, size, shared) {
@Override
public boolean isValid() {
......
......@@ -354,8 +354,7 @@ class FileZip extends FileBase {
public synchronized FileLock tryLock(long position, long size,
boolean shared) throws IOException {
if (shared) {
// cast to FileChannel to avoid JDK 1.7 ambiguity
return new FileLock((FileChannel) null, position, size, shared) {
return new FileLock(new FakeFileChannel(), position, size, shared) {
@Override
public boolean isValid() {
......
......@@ -1498,6 +1498,7 @@ public class TestFunctions extends TestBase implements AggregateFunction {
assertResult("1979-11-12 08:12:34.56", stat, "SELECT X FROM T");
assertResult("-100-01-15 14:04:02.12", stat, "SELECT X FROM U");
String expected = String.format("%tb", timestamp1979).toUpperCase();
expected = stripTrailingPeriod(expected);
assertResult("12-" + expected + "-79 08.12.34.560000 AM", stat,
"SELECT TO_CHAR(X) FROM T");
assertResult("- / , . ; : text - /", stat,
......@@ -1618,6 +1619,7 @@ public class TestFunctions extends TestBase implements AggregateFunction {
assertResult("11", stat, "SELECT TO_CHAR(X, 'mM') FROM T");
assertResult("11", stat, "SELECT TO_CHAR(X, 'mm') FROM T");
expected = String.format("%1$tb", timestamp1979);
expected = stripTrailingPeriod(expected);
expected = expected.substring(0, 1).toUpperCase() + expected.substring(1);
assertResult(expected.toUpperCase(), stat,
"SELECT TO_CHAR(X, 'MON') FROM T");
......@@ -1672,6 +1674,14 @@ public class TestFunctions extends TestBase implements AggregateFunction {
conn.close();
}
String stripTrailingPeriod(String expected) {
// CLDR provider appends period on some locales
int l = expected.length() - 1;
if (expected.charAt(l) == '.')
expected = expected.substring(0, l);
return expected;
}
private void testIfNull() throws SQLException {
deleteDb("functions");
Connection conn = getConnection("functions");
......
......@@ -9,11 +9,12 @@ create memory table test(id int primary key, name varchar(255));
insert into test values(1, 'Hello');
> update count: 1
select degrees(null) vn, degrees(1) v1, degrees(1.1) v2, degrees(-1.1) v3, degrees(1.9) v4, degrees(-1.9) v5 from test;
-- Truncate least significant digits because implementations returns slightly
-- different results depending on Java version
select degrees(null) vn, truncate(degrees(1), 10) v1, truncate(degrees(1.1), 10) v2,
truncate(degrees(-1.1), 10) v3, truncate(degrees(1.9), 10) v4,
truncate(degrees(-1.9), 10) v5 from test;
> VN V1 V2 V3 V4 V5
> ---- ----------------- ----------------- ------------------ ------------------ -------------------
> null 57.29577951308232 63.02535746439057 -63.02535746439057 108.86198107485642 -108.86198107485642
> ---- ------------ ------------- -------------- -------------- ---------------
> null 57.295779513 63.0253574643 -63.0253574643 108.8619810748 -108.8619810748
> rows: 1
......@@ -9,11 +9,12 @@ create memory table test(id int primary key, name varchar(255));
insert into test values(1, 'Hello');
> update count: 1
select radians(null) vn, radians(1) v1, radians(1.1) v2, radians(-1.1) v3, radians(1.9) v4, radians(-1.9) v5 from test;
-- Truncate least significant digits because implementations returns slightly
-- different results depending on Java version
select radians(null) vn, truncate(radians(1), 10) v1, truncate(radians(1.1), 10) v2,
truncate(radians(-1.1), 10) v3, truncate(radians(1.9), 10) v4,
truncate(radians(-1.9), 10) v5 from test;
> VN V1 V2 V3 V4 V5
> ---- -------------------- -------------------- --------------------- ------------------- --------------------
> null 0.017453292519943295 0.019198621771937624 -0.019198621771937624 0.03316125578789226 -0.03316125578789226
> ---- ------------ ------------ ------------- ------------ -------------
> null 0.0174532925 0.0191986217 -0.0191986217 0.0331612557 -0.0331612557
> rows: 1
......@@ -17,6 +17,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.h2.engine.Constants;
import org.h2.message.DbException;
import org.h2.store.fs.FakeFileChannel;
import org.h2.store.fs.FileBase;
import org.h2.store.fs.FileChannelInputStream;
import org.h2.store.fs.FilePath;
......@@ -426,9 +427,7 @@ class FileZip2 extends FileBase {
public synchronized FileLock tryLock(long position, long size,
boolean shared) throws IOException {
if (shared) {
// cast to FileChannel to avoid JDK 1.7 ambiguity
return new FileLock((FileChannel) null, position, size, shared) {
return new FileLock(new FakeFileChannel(), position, size, shared) {
@Override
public boolean isValid() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论