Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
b4c3fe93
提交
b4c3fe93
authored
2月 28, 2014
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Limit line length to 80 characters
上级
06698d68
显示空白字符变更
内嵌
并排
正在显示
45 个修改的文件
包含
259 行增加
和
206 行删除
+259
-206
Driver.java
h2/src/main/org/h2/Driver.java
+1
-1
RuleElement.java
h2/src/main/org/h2/bnf/RuleElement.java
+2
-2
DbContents.java
h2/src/main/org/h2/bnf/context/DbContents.java
+3
-3
DbContextRule.java
h2/src/main/org/h2/bnf/context/DbContextRule.java
+16
-16
DbProcedure.java
h2/src/main/org/h2/bnf/context/DbProcedure.java
+1
-1
DbSchema.java
h2/src/main/org/h2/bnf/context/DbSchema.java
+2
-2
CommandRemote.java
h2/src/main/org/h2/command/CommandRemote.java
+1
-1
SysProperties.java
h2/src/main/org/h2/constant/SysProperties.java
+45
-45
Constants.java
h2/src/main/org/h2/engine/Constants.java
+4
-4
Database.java
h2/src/main/org/h2/engine/Database.java
+10
-10
Engine.java
h2/src/main/org/h2/engine/Engine.java
+7
-6
Expression.java
h2/src/main/org/h2/expression/Expression.java
+2
-1
ViewIndex.java
h2/src/main/org/h2/index/ViewIndex.java
+1
-1
DataUtils.java
h2/src/main/org/h2/mvstore/DataUtils.java
+1
-1
FileStore.java
h2/src/main/org/h2/mvstore/FileStore.java
+1
-1
MVStore.java
h2/src/main/org/h2/mvstore/MVStore.java
+5
-5
OffHeapStore.java
h2/src/main/org/h2/mvstore/OffHeapStore.java
+1
-1
Page.java
h2/src/main/org/h2/mvstore/Page.java
+1
-1
StreamStore.java
h2/src/main/org/h2/mvstore/StreamStore.java
+1
-1
CacheLongKeyLIRS.java
h2/src/main/org/h2/mvstore/cache/CacheLongKeyLIRS.java
+2
-2
MVDelegateIndex.java
h2/src/main/org/h2/mvstore/db/MVDelegateIndex.java
+2
-2
MVPrimaryIndex.java
h2/src/main/org/h2/mvstore/db/MVPrimaryIndex.java
+4
-4
MVSecondaryIndex.java
h2/src/main/org/h2/mvstore/db/MVSecondaryIndex.java
+2
-2
MVSpatialIndex.java
h2/src/main/org/h2/mvstore/db/MVSpatialIndex.java
+1
-1
MVTableEngine.java
h2/src/main/org/h2/mvstore/db/MVTableEngine.java
+1
-1
TransactionStore.java
h2/src/main/org/h2/mvstore/db/TransactionStore.java
+1
-1
ValueDataType.java
h2/src/main/org/h2/mvstore/db/ValueDataType.java
+6
-6
CipherFactory.java
h2/src/main/org/h2/security/CipherFactory.java
+5
-5
Fog.java
h2/src/main/org/h2/security/Fog.java
+8
-8
SHA256.java
h2/src/main/org/h2/security/SHA256.java
+1
-1
TcpServerThread.java
h2/src/main/org/h2/server/TcpServerThread.java
+2
-2
FileStore.java
h2/src/main/org/h2/store/FileStore.java
+2
-2
LobStorageBackend.java
h2/src/main/org/h2/store/LobStorageBackend.java
+24
-12
LobStorageFrontend.java
h2/src/main/org/h2/store/LobStorageFrontend.java
+4
-2
LobStorageMap.java
h2/src/main/org/h2/store/LobStorageMap.java
+12
-6
LobStorageRemoteInputStream.java
h2/src/main/org/h2/store/LobStorageRemoteInputStream.java
+2
-1
Csv.java
h2/src/main/org/h2/tools/Csv.java
+2
-2
NetUtils.java
h2/src/main/org/h2/util/NetUtils.java
+1
-1
Profiler.java
h2/src/main/org/h2/util/Profiler.java
+5
-5
SourceCompiler.java
h2/src/main/org/h2/util/SourceCompiler.java
+12
-6
StringUtils.java
h2/src/main/org/h2/util/StringUtils.java
+1
-1
TempFileDeleter.java
h2/src/main/org/h2/util/TempFileDeleter.java
+2
-1
ToChar.java
h2/src/main/org/h2/util/ToChar.java
+31
-15
Tool.java
h2/src/main/org/h2/util/Tool.java
+10
-5
Utils.java
h2/src/main/org/h2/util/Utils.java
+11
-9
没有找到文件。
h2/src/main/org/h2/Driver.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/bnf/RuleElement.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/bnf/context/DbContents.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/bnf/context/DbContextRule.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/bnf/context/DbProcedure.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/bnf/context/DbSchema.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/command/CommandRemote.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/constant/SysProperties.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/engine/Constants.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/engine/Database.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/engine/Engine.java
浏览文件 @
b4c3fe93
...
...
@@ -38,7 +38,8 @@ public class Engine implements SessionFactory {
return
INSTANCE
;
}
private
Session
openSession
(
ConnectionInfo
ci
,
boolean
ifExists
,
String
cipher
)
{
private
Session
openSession
(
ConnectionInfo
ci
,
boolean
ifExists
,
String
cipher
)
{
String
name
=
ci
.
getName
();
Database
database
;
ci
.
removeProperty
(
"NO_UPGRADE"
,
false
);
...
...
h2/src/main/org/h2/expression/Expression.java
浏览文件 @
b4c3fe93
...
...
@@ -271,7 +271,8 @@ public abstract class Expression {
* @param outerJoin if the expression is part of an outer join
*/
public
void
addFilterConditions
(
TableFilter
filter
,
boolean
outerJoin
)
{
if
(!
addedToFilter
&&
!
outerJoin
&&
isEverything
(
ExpressionVisitor
.
EVALUATABLE_VISITOR
))
{
if
(!
addedToFilter
&&
!
outerJoin
&&
isEverything
(
ExpressionVisitor
.
EVALUATABLE_VISITOR
))
{
filter
.
addFilterCondition
(
this
,
false
);
addedToFilter
=
true
;
}
...
...
h2/src/main/org/h2/index/ViewIndex.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/DataUtils.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/FileStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/MVStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/OffHeapStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/Page.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/StreamStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/cache/CacheLongKeyLIRS.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/MVDelegateIndex.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/MVPrimaryIndex.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/MVSecondaryIndex.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/MVSpatialIndex.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/MVTableEngine.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/TransactionStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/mvstore/db/ValueDataType.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/security/CipherFactory.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/security/Fog.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/security/SHA256.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/server/TcpServerThread.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/store/FileStore.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/store/LobStorageBackend.java
浏览文件 @
b4c3fe93
...
...
@@ -213,12 +213,14 @@ public class LobStorageBackend implements LobStorageInterface {
assertNotHolds
(
conn
.
getSession
());
synchronized
(
database
)
{
synchronized
(
conn
.
getSession
())
{
String
sql
=
"SELECT COMPRESSED, DATA FROM "
+
LOB_DATA
+
" WHERE BLOCK = ?"
;
String
sql
=
"SELECT COMPRESSED, DATA FROM "
+
LOB_DATA
+
" WHERE BLOCK = ?"
;
PreparedStatement
prep
=
prepare
(
sql
);
prep
.
setLong
(
1
,
block
);
ResultSet
rs
=
prep
.
executeQuery
();
if
(!
rs
.
next
())
{
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry, block: "
+
block
)
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry, block: "
+
block
)
.
getSQLException
();
}
int
compressed
=
rs
.
getInt
(
1
);
...
...
@@ -319,7 +321,8 @@ public class LobStorageBackend implements LobStorageInterface {
}
@Override
public
InputStream
getInputStream
(
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
throws
IOException
{
public
InputStream
getInputStream
(
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
throws
IOException
{
try
{
init
();
assertNotHolds
(
conn
.
getSession
());
...
...
@@ -335,7 +338,8 @@ public class LobStorageBackend implements LobStorageInterface {
}
}
private
ValueLobDb
addLob
(
InputStream
in
,
long
maxLength
,
int
type
,
CountingReaderInputStream
countingReaderForClob
)
{
private
ValueLobDb
addLob
(
InputStream
in
,
long
maxLength
,
int
type
,
CountingReaderInputStream
countingReaderForClob
)
{
try
{
byte
[]
buff
=
new
byte
[
BLOCK_LENGTH
];
if
(
maxLength
<
0
)
{
...
...
@@ -385,13 +389,15 @@ public class LobStorageBackend implements LobStorageInterface {
if
(
small
!=
null
)
{
// For a BLOB, precision is length in bytes.
// For a CLOB, precision is length in chars
long
precision
=
countingReaderForClob
==
null
?
small
.
length
:
countingReaderForClob
.
getLength
();
long
precision
=
countingReaderForClob
==
null
?
small
.
length
:
countingReaderForClob
.
getLength
();
ValueLobDb
v
=
ValueLobDb
.
createSmallLob
(
type
,
small
,
precision
);
return
v
;
}
// For a BLOB, precision is length in bytes.
// For a CLOB, precision is length in chars
long
precision
=
countingReaderForClob
==
null
?
length
:
countingReaderForClob
.
getLength
();
long
precision
=
countingReaderForClob
==
null
?
length
:
countingReaderForClob
.
getLength
();
return
registerLob
(
type
,
lobId
,
LobStorageFrontend
.
TABLE_TEMP
,
length
,
precision
);
}
catch
(
IOException
e
)
{
if
(
lobId
!=
-
1
)
{
...
...
@@ -404,7 +410,8 @@ public class LobStorageBackend implements LobStorageInterface {
}
}
private
ValueLobDb
registerLob
(
int
type
,
long
lobId
,
int
tableId
,
long
byteCount
,
long
precision
)
throws
SQLException
{
private
ValueLobDb
registerLob
(
int
type
,
long
lobId
,
int
tableId
,
long
byteCount
,
long
precision
)
throws
SQLException
{
assertNotHolds
(
conn
.
getSession
());
// see locking discussion at the top
synchronized
(
database
)
{
...
...
@@ -495,7 +502,8 @@ public class LobStorageBackend implements LobStorageInterface {
* @param b the data
* @param compressAlgorithm the compression algorithm (may be null)
*/
void
storeBlock
(
long
lobId
,
int
seq
,
long
pos
,
byte
[]
b
,
String
compressAlgorithm
)
throws
SQLException
{
void
storeBlock
(
long
lobId
,
int
seq
,
long
pos
,
byte
[]
b
,
String
compressAlgorithm
)
throws
SQLException
{
long
block
;
boolean
blockExists
=
false
;
if
(
compressAlgorithm
!=
null
)
{
...
...
@@ -523,7 +531,8 @@ public class LobStorageBackend implements LobStorageInterface {
if
(!
blockExists
)
{
block
=
nextBlock
++;
setHashCacheBlock
(
hash
,
block
);
String
sql
=
"INSERT INTO "
+
LOB_DATA
+
"(BLOCK, COMPRESSED, DATA) VALUES(?, ?, ?)"
;
String
sql
=
"INSERT INTO "
+
LOB_DATA
+
"(BLOCK, COMPRESSED, DATA) VALUES(?, ?, ?)"
;
PreparedStatement
prep
=
prepare
(
sql
);
prep
.
setLong
(
1
,
block
);
prep
.
setInt
(
2
,
compressAlgorithm
==
null
?
0
:
1
);
...
...
@@ -531,7 +540,8 @@ public class LobStorageBackend implements LobStorageInterface {
prep
.
execute
();
reuse
(
sql
,
prep
);
}
String
sql
=
"INSERT INTO "
+
LOB_MAP
+
"(LOB, SEQ, POS, HASH, BLOCK) VALUES(?, ?, ?, ?, ?)"
;
String
sql
=
"INSERT INTO "
+
LOB_MAP
+
"(LOB, SEQ, POS, HASH, BLOCK) VALUES(?, ?, ?, ?, ?)"
;
PreparedStatement
prep
=
prepare
(
sql
);
prep
.
setLong
(
1
,
lobId
);
prep
.
setInt
(
2
,
seq
);
...
...
@@ -641,7 +651,8 @@ public class LobStorageBackend implements LobStorageInterface {
prep
.
setLong
(
1
,
lobId
);
ResultSet
rs
=
prep
.
executeQuery
();
if
(!
rs
.
next
())
{
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry: "
+
lobId
).
getSQLException
();
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry: "
+
lobId
).
getSQLException
();
}
byteCount
=
rs
.
getLong
(
1
);
reuse
(
sql
,
prep
);
...
...
@@ -653,7 +664,8 @@ public class LobStorageBackend implements LobStorageInterface {
prep
.
setLong
(
1
,
lobId
);
ResultSet
rs
=
prep
.
executeQuery
();
if
(!
rs
.
next
())
{
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry: "
+
lobId
).
getSQLException
();
throw
DbException
.
get
(
ErrorCode
.
IO_EXCEPTION_1
,
"Missing lob entry: "
+
lobId
).
getSQLException
();
}
int
lobMapCount
=
rs
.
getInt
(
1
);
reuse
(
sql
,
prep
);
...
...
h2/src/main/org/h2/store/LobStorageFrontend.java
浏览文件 @
b4c3fe93
...
...
@@ -49,11 +49,13 @@ public class LobStorageFrontend implements LobStorageInterface {
* @return the stream
*/
@Override
public
InputStream
getInputStream
(
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
throws
IOException
{
public
InputStream
getInputStream
(
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
throws
IOException
{
if
(
byteCount
<
0
)
{
byteCount
=
Long
.
MAX_VALUE
;
}
return
new
BufferedInputStream
(
new
LobStorageRemoteInputStream
(
handler
,
lob
,
hmac
,
byteCount
));
return
new
BufferedInputStream
(
new
LobStorageRemoteInputStream
(
handler
,
lob
,
hmac
,
byteCount
));
}
@Override
...
...
h2/src/main/org/h2/store/LobStorageMap.java
浏览文件 @
b4c3fe93
...
...
@@ -153,10 +153,12 @@ public class LobStorageMap implements LobStorageInterface {
b
.
reset
();
reader
=
b
;
}
CountingReaderInputStream
in
=
new
CountingReaderInputStream
(
reader
,
maxLength
);
CountingReaderInputStream
in
=
new
CountingReaderInputStream
(
reader
,
maxLength
);
ValueLobDb
lob
=
createLob
(
in
,
type
);
// the length is not correct
lob
=
ValueLobDb
.
create
(
type
,
database
,
lob
.
getTableId
(),
lob
.
getLobId
(),
null
,
in
.
getLength
());
lob
=
ValueLobDb
.
create
(
type
,
database
,
lob
.
getTableId
(),
lob
.
getLobId
(),
null
,
in
.
getLength
());
return
lob
;
}
catch
(
IllegalStateException
e
)
{
throw
DbException
.
get
(
ErrorCode
.
OBJECT_CLOSED
);
...
...
@@ -179,7 +181,8 @@ public class LobStorageMap implements LobStorageInterface {
lobMap
.
put
(
lobId
,
value
);
Object
[]
key
=
new
Object
[]
{
streamStoreId
,
lobId
};
refMap
.
put
(
key
,
Boolean
.
TRUE
);
ValueLobDb
lob
=
ValueLobDb
.
create
(
type
,
database
,
tableId
,
lobId
,
null
,
length
);
ValueLobDb
lob
=
ValueLobDb
.
create
(
type
,
database
,
tableId
,
lobId
,
null
,
length
);
if
(
TRACE
)
{
trace
(
"create "
+
tableId
+
"/"
+
lobId
);
}
...
...
@@ -208,9 +211,11 @@ public class LobStorageMap implements LobStorageInterface {
lobMap
.
put
(
lobId
,
value
);
Object
[]
key
=
new
Object
[]
{
streamStoreId
,
lobId
};
refMap
.
put
(
key
,
Boolean
.
TRUE
);
ValueLobDb
lob
=
ValueLobDb
.
create
(
type
,
database
,
tableId
,
lobId
,
null
,
length
);
ValueLobDb
lob
=
ValueLobDb
.
create
(
type
,
database
,
tableId
,
lobId
,
null
,
length
);
if
(
TRACE
)
{
trace
(
"copy "
+
old
.
getTableId
()
+
"/"
+
old
.
getLobId
()
+
" > "
+
tableId
+
"/"
+
lobId
);
trace
(
"copy "
+
old
.
getTableId
()
+
"/"
+
old
.
getLobId
()
+
" > "
+
tableId
+
"/"
+
lobId
);
}
return
lob
;
}
...
...
@@ -230,7 +235,8 @@ public class LobStorageMap implements LobStorageInterface {
long
lobId
=
lob
.
getLobId
();
Object
[]
value
=
lobMap
.
remove
(
lobId
);
if
(
TRACE
)
{
trace
(
"move "
+
lob
.
getTableId
()
+
"/"
+
lob
.
getLobId
()
+
" > "
+
tableId
+
"/"
+
lobId
);
trace
(
"move "
+
lob
.
getTableId
()
+
"/"
+
lob
.
getLobId
()
+
" > "
+
tableId
+
"/"
+
lobId
);
}
value
[
1
]
=
tableId
;
lobMap
.
put
(
lobId
,
value
);
...
...
h2/src/main/org/h2/store/LobStorageRemoteInputStream.java
浏览文件 @
b4c3fe93
...
...
@@ -39,7 +39,8 @@ class LobStorageRemoteInputStream extends InputStream {
*/
private
long
remainingBytes
;
public
LobStorageRemoteInputStream
(
DataHandler
handler
,
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
{
public
LobStorageRemoteInputStream
(
DataHandler
handler
,
ValueLobDb
lob
,
byte
[]
hmac
,
long
byteCount
)
{
this
.
handler
=
handler
;
this
.
lob
=
lob
.
getLobId
();
this
.
hmac
=
hmac
;
...
...
h2/src/main/org/h2/tools/Csv.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/util/NetUtils.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/util/Profiler.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/util/SourceCompiler.java
浏览文件 @
b4c3fe93
...
...
@@ -114,7 +114,8 @@ public class SourceCompiler {
* @param packageAndClassName the class name
* @return the class
*/
public
Class
<?>
getClass
(
String
packageAndClassName
)
throws
ClassNotFoundException
{
public
Class
<?>
getClass
(
String
packageAndClassName
)
throws
ClassNotFoundException
{
Class
<?>
compiledClass
=
compiled
.
get
(
packageAndClassName
);
if
(
compiledClass
!=
null
)
{
...
...
@@ -238,7 +239,8 @@ public class SourceCompiler {
* @param source the (possibly shortened) source code
* @return the full source code
*/
static
String
getCompleteSourceCode
(
String
packageName
,
String
className
,
String
source
)
{
static
String
getCompleteSourceCode
(
String
packageName
,
String
className
,
String
source
)
{
if
(
source
.
startsWith
(
"package "
))
{
return
source
;
}
...
...
@@ -410,15 +412,18 @@ public class SourceCompiler {
INIT_FAIL_EXCEPTION
=
initFailException
;
}
public
static
Class
<?>
parseClass
(
String
source
,
String
packageAndClassName
)
{
public
static
Class
<?>
parseClass
(
String
source
,
String
packageAndClassName
)
{
if
(
LOADER
==
null
)
{
throw
new
RuntimeException
(
"Compile fail: no Groovy jar in the classpath"
,
INIT_FAIL_EXCEPTION
);
throw
new
RuntimeException
(
"Compile fail: no Groovy jar in the classpath"
,
INIT_FAIL_EXCEPTION
);
}
try
{
Object
codeSource
=
Utils
.
newInstance
(
"groovy.lang.GroovyCodeSource"
,
source
,
packageAndClassName
+
".groovy"
,
"UTF-8"
);
Utils
.
callMethod
(
codeSource
,
"setCachable"
,
false
);
Class
<?>
clazz
=
(
Class
<?>)
Utils
.
callMethod
(
LOADER
,
"parseClass"
,
codeSource
);
Class
<?>
clazz
=
(
Class
<?>)
Utils
.
callMethod
(
LOADER
,
"parseClass"
,
codeSource
);
return
clazz
;
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
...
...
@@ -471,7 +476,8 @@ public class SourceCompiler {
/**
* An in-memory class file manager.
*/
static
class
ClassFileManager
extends
ForwardingJavaFileManager
<
StandardJavaFileManager
>
{
static
class
ClassFileManager
extends
ForwardingJavaFileManager
<
StandardJavaFileManager
>
{
/**
* The class (only one class is kept).
...
...
h2/src/main/org/h2/util/StringUtils.java
浏览文件 @
b4c3fe93
h2/src/main/org/h2/util/TempFileDeleter.java
浏览文件 @
b4c3fe93
...
...
@@ -111,7 +111,8 @@ public class TempFileDeleter {
String
f2
=
refMap
.
remove
(
ref
);
if
(
SysProperties
.
CHECK
)
{
if
(
f2
==
null
||
!
f2
.
equals
(
fileName
))
{
DbException
.
throwInternalError
(
"f2:"
+
f2
+
" "
+
(
f2
==
null
?
""
:
f2
)
+
" f:"
+
fileName
);
DbException
.
throwInternalError
(
"f2:"
+
f2
+
" "
+
(
f2
==
null
?
""
:
f2
)
+
" f:"
+
fileName
);
}
}
}
...
...
h2/src/main/org/h2/util/ToChar.java
浏览文件 @
b4c3fe93
...
...
@@ -120,7 +120,8 @@ public class ToChar {
* @param nlsParam the NLS parameter (if any)
* @return the formatted number
*/
public
static
String
toChar
(
BigDecimal
number
,
String
format
,
String
nlsParam
)
{
public
static
String
toChar
(
BigDecimal
number
,
String
format
,
String
nlsParam
)
{
// short-circuit logic for formats that don't follow common logic below
String
formatUp
=
format
!=
null
?
format
.
toUpperCase
()
:
null
;
...
...
@@ -130,7 +131,8 @@ public class ToChar {
}
else
if
(
formatUp
.
equals
(
"TME"
))
{
int
pow
=
number
.
precision
()
-
number
.
scale
()
-
1
;
number
=
number
.
movePointLeft
(
pow
);
return
number
.
toPlainString
()
+
"E"
+
(
pow
<
0
?
'-'
:
'+'
)
+
(
abs
(
pow
)
<
10
?
"0"
:
""
)
+
abs
(
pow
);
return
number
.
toPlainString
()
+
"E"
+
(
pow
<
0
?
'-'
:
'+'
)
+
(
abs
(
pow
)
<
10
?
"0"
:
""
)
+
abs
(
pow
);
}
else
if
(
formatUp
.
equals
(
"RN"
))
{
boolean
lowercase
=
format
.
startsWith
(
"r"
);
String
rn
=
StringUtils
.
pad
(
toRomanNumeral
(
number
.
intValue
()),
15
,
" "
,
false
);
...
...
@@ -256,7 +258,8 @@ public class ToChar {
String
cs
=
currency
.
getSymbol
();
output
.
insert
(
0
,
cs
);
}
else
{
throw
DbException
.
get
(
ErrorCode
.
INVALID_TO_CHAR_FORMAT
,
originalFormat
);
throw
DbException
.
get
(
ErrorCode
.
INVALID_TO_CHAR_FORMAT
,
originalFormat
);
}
}
...
...
@@ -295,12 +298,14 @@ public class ToChar {
}
}
}
else
{
throw
DbException
.
get
(
ErrorCode
.
INVALID_TO_CHAR_FORMAT
,
originalFormat
);
throw
DbException
.
get
(
ErrorCode
.
INVALID_TO_CHAR_FORMAT
,
originalFormat
);
}
}
}
addSign
(
output
,
number
.
signum
(),
leadingSign
,
trailingSign
,
trailingMinus
,
angleBrackets
,
fillMode
);
addSign
(
output
,
number
.
signum
(),
leadingSign
,
trailingSign
,
trailingMinus
,
angleBrackets
,
fillMode
);
if
(
power
!=
null
)
{
output
.
append
(
'E'
);
...
...
@@ -322,8 +327,9 @@ public class ToChar {
return
output
.
toString
();
}
private
static
void
addSign
(
StringBuilder
output
,
int
signum
,
boolean
leadingSign
,
boolean
trailingSign
,
boolean
trailingMinus
,
boolean
angleBrackets
,
boolean
fillMode
)
{
private
static
void
addSign
(
StringBuilder
output
,
int
signum
,
boolean
leadingSign
,
boolean
trailingSign
,
boolean
trailingMinus
,
boolean
angleBrackets
,
boolean
fillMode
)
{
if
(
angleBrackets
)
{
if
(
signum
<
0
)
{
output
.
insert
(
0
,
'<'
);
...
...
@@ -381,8 +387,10 @@ public class ToChar {
}
private
static
String
toRomanNumeral
(
int
number
)
{
int
[]
values
=
new
int
[]
{
1000
,
900
,
500
,
400
,
100
,
90
,
50
,
40
,
10
,
9
,
5
,
4
,
1
};
String
[]
numerals
=
new
String
[]
{
"M"
,
"CM"
,
"D"
,
"CD"
,
"C"
,
"XC"
,
"L"
,
"XL"
,
"X"
,
"IX"
,
"V"
,
"IV"
,
"I"
};
int
[]
values
=
new
int
[]
{
1000
,
900
,
500
,
400
,
100
,
90
,
50
,
40
,
10
,
9
,
5
,
4
,
1
};
String
[]
numerals
=
new
String
[]
{
"M"
,
"CM"
,
"D"
,
"CD"
,
"C"
,
"XC"
,
"L"
,
"XL"
,
"X"
,
"IX"
,
"V"
,
"IV"
,
"I"
};
StringBuilder
result
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++)
{
int
value
=
values
[
i
];
...
...
@@ -673,7 +681,8 @@ public class ToChar {
// Fractional seconds
}
else
if
((
cap
=
containsAt
(
format
,
i
,
"FF1"
,
"FF2"
,
"FF3"
,
"FF4"
,
"FF5"
,
"FF6"
,
"FF7"
,
"FF8"
,
"FF9"
))
!=
null
)
{
}
else
if
((
cap
=
containsAt
(
format
,
i
,
"FF1"
,
"FF2"
,
"FF3"
,
"FF4"
,
"FF5"
,
"FF6"
,
"FF7"
,
"FF8"
,
"FF9"
))
!=
null
)
{
int
x
=
Integer
.
parseInt
(
format
.
substring
(
i
+
2
,
i
+
3
));
int
ff
=
(
int
)
(
cal
.
get
(
Calendar
.
MILLISECOND
)
*
Math
.
pow
(
10
,
x
-
3
));
output
.
append
(
ff
);
...
...
@@ -780,8 +789,12 @@ public class ToChar {
break
;
}
}
}
else
if
(
format
.
charAt
(
i
)
==
'-'
||
format
.
charAt
(
i
)
==
'/'
||
format
.
charAt
(
i
)
==
','
||
format
.
charAt
(
i
)
==
'.'
||
format
.
charAt
(
i
)
==
';'
||
format
.
charAt
(
i
)
==
':'
}
else
if
(
format
.
charAt
(
i
)
==
'-'
||
format
.
charAt
(
i
)
==
'/'
||
format
.
charAt
(
i
)
==
','
||
format
.
charAt
(
i
)
==
'.'
||
format
.
charAt
(
i
)
==
';'
||
format
.
charAt
(
i
)
==
':'
||
format
.
charAt
(
i
)
==
' '
)
{
output
.
append
(
format
.
charAt
(
i
));
i
+=
1
;
...
...
@@ -818,7 +831,8 @@ public class ToChar {
* the specified substrings at the specified index,
* <code>null</code> otherwise
*/
private
static
Capitalization
containsAt
(
String
s
,
int
index
,
String
...
substrings
)
{
private
static
Capitalization
containsAt
(
String
s
,
int
index
,
String
...
substrings
)
{
for
(
String
substring
:
substrings
)
{
if
(
index
+
substring
.
length
()
<=
s
.
length
())
{
boolean
found
=
true
;
...
...
@@ -902,9 +916,11 @@ public class ToChar {
case
LOWERCASE:
return
s
.
toLowerCase
();
case
CAPITALIZE:
return
Character
.
toUpperCase
(
s
.
charAt
(
0
))
+
(
s
.
length
()
>
1
?
s
.
toLowerCase
().
substring
(
1
)
:
""
);
return
Character
.
toUpperCase
(
s
.
charAt
(
0
))
+
(
s
.
length
()
>
1
?
s
.
toLowerCase
().
substring
(
1
)
:
""
);
default
:
throw
new
IllegalArgumentException
(
"Unknown capitalization strategy: "
+
this
);
throw
new
IllegalArgumentException
(
"Unknown capitalization strategy: "
+
this
);
}
}
}
...
...
h2/src/main/org/h2/util/Tool.java
浏览文件 @
b4c3fe93
...
...
@@ -51,7 +51,8 @@ public abstract class Tool {
* @param option the unsupported option
* @return this method never returns normally
*/
protected
SQLException
showUsageAndThrowUnsupportedOption
(
String
option
)
throws
SQLException
{
protected
SQLException
showUsageAndThrowUnsupportedOption
(
String
option
)
throws
SQLException
{
showUsage
();
throw
throwUnsupportedOption
(
option
);
}
...
...
@@ -62,8 +63,10 @@ public abstract class Tool {
* @param option the unsupported option
* @return this method never returns normally
*/
protected
SQLException
throwUnsupportedOption
(
String
option
)
throws
SQLException
{
throw
DbException
.
get
(
ErrorCode
.
FEATURE_NOT_SUPPORTED_1
,
option
).
getSQLException
();
protected
SQLException
throwUnsupportedOption
(
String
option
)
throws
SQLException
{
throw
DbException
.
get
(
ErrorCode
.
FEATURE_NOT_SUPPORTED_1
,
option
).
getSQLException
();
}
/**
...
...
@@ -109,7 +112,8 @@ public abstract class Tool {
out
.
println
(
resources
.
get
(
className
));
out
.
println
(
"Usage: java "
+
getClass
().
getName
()
+
" <options>"
);
out
.
println
(
resources
.
get
(
className
+
".main"
));
out
.
println
(
"See also http://h2database.com/javadoc/"
+
className
.
replace
(
'.'
,
'/'
)
+
".html"
);
out
.
println
(
"See also http://h2database.com/javadoc/"
+
className
.
replace
(
'.'
,
'/'
)
+
".html"
);
}
/**
...
...
@@ -125,7 +129,8 @@ public abstract class Tool {
if
(
arg
.
equals
(
option
))
{
return
true
;
}
else
if
(
arg
.
startsWith
(
option
))
{
throw
DbException
.
getUnsupportedException
(
"expected: "
+
option
+
" got: "
+
arg
);
throw
DbException
.
getUnsupportedException
(
"expected: "
+
option
+
" got: "
+
arg
);
}
return
false
;
}
...
...
h2/src/main/org/h2/util/Utils.java
浏览文件 @
b4c3fe93
...
...
@@ -150,7 +150,8 @@ public class Utils {
* @return the value
*/
public
static
long
readLong
(
byte
[]
buff
,
int
pos
)
{
return
(((
long
)
readInt
(
buff
,
pos
))
<<
32
)
+
(
readInt
(
buff
,
pos
+
4
)
&
0xffffffff
L
);
return
(((
long
)
readInt
(
buff
,
pos
))
<<
32
)
+
(
readInt
(
buff
,
pos
+
4
)
&
0xffffffff
L
);
}
/**
...
...
@@ -520,7 +521,8 @@ public class Utils {
public
static
<
X
>
void
sortTopN
(
X
[]
array
,
int
offset
,
int
limit
,
Comparator
<?
super
X
>
comp
)
{
partitionTopN
(
array
,
offset
,
limit
,
comp
);
Arrays
.
sort
(
array
,
offset
,
(
int
)
Math
.
min
((
long
)
offset
+
limit
,
array
.
length
),
comp
);
Arrays
.
sort
(
array
,
offset
,
(
int
)
Math
.
min
((
long
)
offset
+
limit
,
array
.
length
),
comp
);
}
/**
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论