Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
1452e9ba
提交
1452e9ba
authored
1月 29, 2008
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
--no commit message
--no commit message
上级
dd7fba44
隐藏空白字符变更
内嵌
并排
正在显示
24 个修改的文件
包含
234 行增加
和
176 行删除
+234
-176
Parser.java
h2/src/main/org/h2/command/Parser.java
+16
-15
AlterTableAddConstraint.java
h2/src/main/org/h2/command/ddl/AlterTableAddConstraint.java
+35
-34
CreateIndex.java
h2/src/main/org/h2/command/ddl/CreateIndex.java
+29
-1
CreateTable.java
h2/src/main/org/h2/command/ddl/CreateTable.java
+12
-1
Constraint.java
h2/src/main/org/h2/constraint/Constraint.java
+5
-0
ConstraintReferential.java
h2/src/main/org/h2/constraint/ConstraintReferential.java
+25
-24
ConstraintUnique.java
h2/src/main/org/h2/constraint/ConstraintUnique.java
+25
-11
ResultRemote.java
h2/src/main/org/h2/result/ResultRemote.java
+6
-1
IndexColumn.java
h2/src/main/org/h2/table/IndexColumn.java
+4
-3
MetaTable.java
h2/src/main/org/h2/table/MetaTable.java
+7
-7
TableData.java
h2/src/main/org/h2/table/TableData.java
+2
-2
Recover.java
h2/src/main/org/h2/tools/Recover.java
+8
-2
Cache2Q.java
h2/src/main/org/h2/util/Cache2Q.java
+2
-2
TestAll.java
h2/src/test/org/h2/test/TestAll.java
+10
-49
TestBase.java
h2/src/test/org/h2/test/TestBase.java
+10
-11
TestBigDb.java
h2/src/test/org/h2/test/db/TestBigDb.java
+2
-5
TestFullText.java
h2/src/test/org/h2/test/db/TestFullText.java
+2
-2
TestListener.java
h2/src/test/org/h2/test/db/TestListener.java
+2
-2
TestMemoryUsage.java
h2/src/test/org/h2/test/db/TestMemoryUsage.java
+27
-0
TestCrashAPI.java
h2/src/test/org/h2/test/synth/TestCrashAPI.java
+1
-1
TestKillRestart.java
h2/src/test/org/h2/test/synth/TestKillRestart.java
+1
-1
TestRandomSQL.java
h2/src/test/org/h2/test/synth/TestRandomSQL.java
+1
-1
TestValueMemory.java
h2/src/test/org/h2/test/unit/TestValueMemory.java
+1
-1
H2Platform.java.txt
.../toplink/essentials/platform/database/H2Platform.java.txt
+1
-0
没有找到文件。
h2/src/main/org/h2/command/Parser.java
浏览文件 @
1452e9ba
...
...
@@ -4166,9 +4166,9 @@ public class Parser {
}
private
Prepared
parseAlterTableAddConstraintIf
(
String
tableName
,
Schema
schema
)
throws
SQLException
{
String
n
ame
=
null
,
comment
=
null
;
String
constraintN
ame
=
null
,
comment
=
null
;
if
(
readIf
(
"CONSTRAINT"
))
{
n
ame
=
readIdentifierWithSchema
(
schema
.
getName
());
constraintN
ame
=
readIdentifierWithSchema
(
schema
.
getName
());
checkSchema
(
schema
);
comment
=
readCommentIf
();
}
...
...
@@ -4176,6 +4176,7 @@ public class Parser {
read
(
"KEY"
);
CreateIndex
command
=
new
CreateIndex
(
session
,
schema
);
command
.
setComment
(
comment
);
command
.
setConstraintName
(
constraintName
);
command
.
setTableName
(
tableName
);
command
.
setPrimaryKey
(
true
);
if
(
readIf
(
"HASH"
))
{
...
...
@@ -4206,10 +4207,10 @@ public class Parser {
command
=
new
AlterTableAddConstraint
(
session
,
schema
);
command
.
setType
(
AlterTableAddConstraint
.
UNIQUE
);
if
(!
readIf
(
"("
))
{
n
ame
=
readUniqueIdentifier
();
constraintN
ame
=
readUniqueIdentifier
();
read
(
"("
);
}
command
.
set
ColumnNames
(
parse
ColumnList
());
command
.
set
IndexColumns
(
parseIndex
ColumnList
());
if
(
readIf
(
"INDEX"
))
{
String
indexName
=
readIdentifierWithSchema
();
command
.
setIndex
(
getSchema
().
findIndex
(
indexName
));
...
...
@@ -4219,8 +4220,7 @@ public class Parser {
command
.
setType
(
AlterTableAddConstraint
.
REFERENTIAL
);
read
(
"KEY"
);
read
(
"("
);
String
[]
cols
=
parseColumnList
();
command
.
setColumnNames
(
cols
);
command
.
setIndexColumns
(
parseIndexColumnList
());
if
(
readIf
(
"INDEX"
))
{
String
indexName
=
readIdentifierWithSchema
();
command
.
setIndex
(
schema
.
findIndex
(
indexName
));
...
...
@@ -4228,7 +4228,7 @@ public class Parser {
read
(
"REFERENCES"
);
parseReferences
(
command
,
schema
,
tableName
);
}
else
{
if
(
n
ame
!=
null
)
{
if
(
constraintN
ame
!=
null
)
{
throw
getSyntaxError
();
}
return
null
;
...
...
@@ -4240,23 +4240,20 @@ public class Parser {
command
.
setCheckExisting
(
true
);
}
command
.
setTableName
(
tableName
);
command
.
setConstraintName
(
n
ame
);
command
.
setConstraintName
(
constraintN
ame
);
command
.
setComment
(
comment
);
return
command
;
}
private
void
parseReferences
(
AlterTableAddConstraint
command
,
Schema
schema
,
String
tableName
)
throws
SQLException
{
String
[]
cols
;
if
(
readIf
(
"("
))
{
command
.
setRefTableName
(
schema
,
tableName
);
cols
=
parseColumnList
();
command
.
setRefColumnNames
(
cols
);
command
.
setRefIndexColumns
(
parseIndexColumnList
());
}
else
{
String
refTableName
=
readIdentifierWithSchema
(
schema
.
getName
());
command
.
setRefTableName
(
getSchema
(),
refTableName
);
if
(
readIf
(
"("
))
{
cols
=
parseColumnList
();
command
.
setRefColumnNames
(
cols
);
command
.
setRefIndexColumns
(
parseIndexColumnList
());
}
}
if
(
readIf
(
"INDEX"
))
{
...
...
@@ -4357,7 +4354,9 @@ public class Parser {
AlterTableAddConstraint
unique
=
new
AlterTableAddConstraint
(
session
,
schema
);
unique
.
setConstraintName
(
constraintName
);
unique
.
setType
(
AlterTableAddConstraint
.
UNIQUE
);
unique
.
setColumnNames
(
new
String
[]
{
columnName
});
IndexColumn
[]
cols
=
new
IndexColumn
[]{
new
IndexColumn
()};
cols
[
0
].
columnName
=
columnName
;
unique
.
setIndexColumns
(
cols
);
unique
.
setTableName
(
tableName
);
command
.
addConstraintCommand
(
unique
);
}
...
...
@@ -4369,7 +4368,9 @@ public class Parser {
AlterTableAddConstraint
ref
=
new
AlterTableAddConstraint
(
session
,
schema
);
ref
.
setConstraintName
(
constraintName
);
ref
.
setType
(
AlterTableAddConstraint
.
REFERENTIAL
);
ref
.
setColumnNames
(
new
String
[]
{
columnName
});
IndexColumn
[]
cols
=
new
IndexColumn
[]{
new
IndexColumn
()};
cols
[
0
].
columnName
=
columnName
;
ref
.
setIndexColumns
(
cols
);
ref
.
setTableName
(
tableName
);
parseReferences
(
ref
,
schema
,
tableName
);
command
.
addConstraintCommand
(
ref
);
...
...
h2/src/main/org/h2/command/ddl/AlterTableAddConstraint.java
浏览文件 @
1452e9ba
...
...
@@ -38,12 +38,12 @@ public class AlterTableAddConstraint extends SchemaCommand {
private
int
type
;
private
String
constraintName
;
private
String
tableName
;
private
String
[]
columnName
s
;
private
IndexColumn
[]
indexColumn
s
;
private
int
deleteAction
;
private
int
updateAction
;
private
Schema
refSchema
;
private
String
refTableName
;
private
String
[]
refColumnName
s
;
private
IndexColumn
[]
refIndexColumn
s
;
private
Expression
checkExpression
;
private
Index
index
,
refIndex
;
private
String
comment
;
...
...
@@ -87,22 +87,22 @@ public class AlterTableAddConstraint extends SchemaCommand {
break
;
}
case
UNIQUE:
{
Column
[]
columns
=
table
.
getColumns
(
columnNames
);
IndexColumn
.
mapColumns
(
indexColumns
,
table
);
boolean
isOwner
=
false
;
if
(
index
!=
null
&&
canUseUniqueIndex
(
index
,
table
,
c
olumns
))
{
if
(
index
!=
null
&&
canUseUniqueIndex
(
index
,
table
,
indexC
olumns
))
{
isOwner
=
true
;
index
.
getIndexType
().
setBelongsToConstraint
(
true
);
}
else
{
index
=
getUniqueIndex
(
table
,
c
olumns
);
index
=
getUniqueIndex
(
table
,
indexC
olumns
);
if
(
index
==
null
)
{
index
=
createIndex
(
table
,
c
olumns
,
true
);
index
=
createIndex
(
table
,
indexC
olumns
,
true
);
isOwner
=
true
;
}
}
int
id
=
getObjectId
(
true
,
true
);
String
name
=
generateConstraintName
(
table
,
id
);
ConstraintUnique
unique
=
new
ConstraintUnique
(
getSchema
(),
id
,
name
,
table
);
unique
.
setColumns
(
c
olumns
);
ConstraintUnique
unique
=
new
ConstraintUnique
(
getSchema
(),
id
,
name
,
table
,
false
);
unique
.
setColumns
(
indexC
olumns
);
unique
.
setIndex
(
index
,
isOwner
);
constraint
=
unique
;
break
;
...
...
@@ -111,25 +111,24 @@ public class AlterTableAddConstraint extends SchemaCommand {
Table
refTable
=
refSchema
.
getTableOrView
(
session
,
refTableName
);
session
.
getUser
().
checkRight
(
refTable
,
Right
.
ALL
);
boolean
isOwner
=
false
;
Column
[]
columns
=
table
.
getColumns
(
columnNames
);
if
(
index
!=
null
&&
canUseIndex
(
index
,
table
,
c
olumns
))
{
IndexColumn
.
mapColumns
(
indexColumns
,
table
);
if
(
index
!=
null
&&
canUseIndex
(
index
,
table
,
indexC
olumns
))
{
isOwner
=
true
;
index
.
getIndexType
().
setBelongsToConstraint
(
true
);
}
else
{
index
=
getIndex
(
table
,
c
olumns
);
index
=
getIndex
(
table
,
indexC
olumns
);
if
(
index
==
null
)
{
index
=
createIndex
(
table
,
c
olumns
,
false
);
index
=
createIndex
(
table
,
indexC
olumns
,
false
);
isOwner
=
true
;
}
}
Column
[]
refColumns
;
if
(
refColumnNames
==
null
)
{
if
(
refIndexColumns
==
null
)
{
Index
refIdx
=
refTable
.
getPrimaryKey
();
ref
Columns
=
refIdx
.
get
Columns
();
ref
IndexColumns
=
refIdx
.
getIndex
Columns
();
}
else
{
refColumns
=
refTable
.
getColumns
(
refColumnNames
);
IndexColumn
.
mapColumns
(
refIndexColumns
,
refTable
);
}
if
(
ref
Columns
.
length
!=
c
olumns
.
length
)
{
if
(
ref
IndexColumns
.
length
!=
indexC
olumns
.
length
)
{
throw
Message
.
getSQLException
(
ErrorCode
.
COLUMN_COUNT_DOES_NOT_MATCH
);
}
boolean
isRefOwner
=
false
;
...
...
@@ -140,19 +139,19 @@ public class AlterTableAddConstraint extends SchemaCommand {
refIndex
=
null
;
}
if
(
refIndex
==
null
)
{
refIndex
=
getUniqueIndex
(
refTable
,
refColumns
);
refIndex
=
getUniqueIndex
(
refTable
,
ref
Index
Columns
);
if
(
refIndex
==
null
)
{
refIndex
=
createIndex
(
refTable
,
refColumns
,
true
);
refIndex
=
createIndex
(
refTable
,
ref
Index
Columns
,
true
);
isRefOwner
=
true
;
}
}
int
id
=
getObjectId
(
true
,
true
);
String
name
=
generateConstraintName
(
table
,
id
);
ConstraintReferential
ref
=
new
ConstraintReferential
(
getSchema
(),
id
,
name
,
table
);
ref
.
setColumns
(
c
olumns
);
ref
.
setColumns
(
indexC
olumns
);
ref
.
setIndex
(
index
,
isOwner
);
ref
.
setRefTable
(
refTable
);
ref
.
setRefColumns
(
refColumns
);
ref
.
setRefColumns
(
ref
Index
Columns
);
ref
.
setRefIndex
(
refIndex
,
isRefOwner
);
if
(
checkExisting
)
{
ref
.
checkExistingData
(
session
);
...
...
@@ -173,7 +172,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
return
0
;
}
private
Index
createIndex
(
Table
t
,
Column
[]
cols
,
boolean
unique
)
throws
SQLException
{
private
Index
createIndex
(
Table
t
,
Index
Column
[]
cols
,
boolean
unique
)
throws
SQLException
{
int
indexId
=
getObjectId
(
true
,
false
);
IndexType
indexType
;
if
(
unique
)
{
...
...
@@ -188,8 +187,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
indexType
.
setBelongsToConstraint
(
true
);
String
prefix
=
constraintName
==
null
?
"CONSTRAINT"
:
constraintName
;
String
indexName
=
getSchema
().
getUniqueIndexName
(
t
,
prefix
+
"_INDEX_"
);
IndexColumn
[]
idxCols
=
IndexColumn
.
wrap
(
cols
);
return
t
.
addIndex
(
session
,
indexName
,
indexId
,
idxCols
,
indexType
,
Index
.
EMPTY_HEAD
,
null
);
return
t
.
addIndex
(
session
,
indexName
,
indexId
,
cols
,
indexType
,
Index
.
EMPTY_HEAD
,
null
);
}
public
void
setDeleteAction
(
int
action
)
{
...
...
@@ -200,7 +198,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
this
.
updateAction
=
action
;
}
private
Index
getUniqueIndex
(
Table
t
,
Column
[]
cols
)
{
private
Index
getUniqueIndex
(
Table
t
,
Index
Column
[]
cols
)
{
ObjectArray
list
=
t
.
getIndexes
();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
Index
index
=
(
Index
)
list
.
get
(
i
);
...
...
@@ -211,7 +209,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
return
null
;
}
private
Index
getIndex
(
Table
t
,
Column
[]
cols
)
{
private
Index
getIndex
(
Table
t
,
Index
Column
[]
cols
)
{
ObjectArray
list
=
t
.
getIndexes
();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
Index
index
=
(
Index
)
list
.
get
(
i
);
...
...
@@ -222,7 +220,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
return
null
;
}
private
boolean
canUseUniqueIndex
(
Index
index
,
Table
table
,
Column
[]
cols
)
{
private
boolean
canUseUniqueIndex
(
Index
index
,
Table
table
,
Index
Column
[]
cols
)
{
if
(
index
.
getTable
()
!=
table
||
!
index
.
getIndexType
().
isUnique
())
{
return
false
;
}
...
...
@@ -235,7 +233,10 @@ public class AlterTableAddConstraint extends SchemaCommand {
if
(
indexCols
.
length
>
cols
.
length
)
{
return
false
;
}
HashSet
set
=
new
HashSet
(
Arrays
.
asList
(
cols
));
HashSet
set
=
new
HashSet
();
for
(
int
i
=
0
;
i
<
cols
.
length
;
i
++)
{
set
.
add
(
cols
[
i
].
column
);
}
for
(
int
j
=
0
;
j
<
indexCols
.
length
;
j
++)
{
// all columns of the index must be part of the list,
// but not all columns of the list need to be part of the index
...
...
@@ -246,7 +247,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
return
true
;
}
private
boolean
canUseIndex
(
Index
index
,
Table
table
,
Column
[]
cols
)
{
private
boolean
canUseIndex
(
Index
index
,
Table
table
,
Index
Column
[]
cols
)
{
if
(
index
.
getTable
()
!=
table
||
index
.
getCreateSQL
()
==
null
)
{
// can't use the scan index or index of another table
return
false
;
...
...
@@ -265,7 +266,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
// but not all columns of the index need to be part of the list
// holes are not allowed (index=a,b,c & list=a,b is ok; but list=a,c
// is not)
int
idx
=
index
.
getColumnIndex
(
cols
[
j
]);
int
idx
=
index
.
getColumnIndex
(
cols
[
j
]
.
column
);
if
(
idx
<
0
||
idx
>=
cols
.
length
)
{
return
false
;
}
...
...
@@ -289,8 +290,8 @@ public class AlterTableAddConstraint extends SchemaCommand {
this
.
tableName
=
tableName
;
}
public
void
set
ColumnNames
(
String
[]
columnName
s
)
{
this
.
columnNames
=
columnName
s
;
public
void
set
IndexColumns
(
IndexColumn
[]
indexColumn
s
)
{
this
.
indexColumns
=
indexColumn
s
;
}
public
void
setRefTableName
(
Schema
refSchema
,
String
ref
)
{
...
...
@@ -298,8 +299,8 @@ public class AlterTableAddConstraint extends SchemaCommand {
this
.
refTableName
=
ref
;
}
public
void
setRef
ColumnNames
(
String
[]
col
s
)
{
this
.
ref
ColumnNames
=
col
s
;
public
void
setRef
IndexColumns
(
IndexColumn
[]
indexColumn
s
)
{
this
.
ref
IndexColumns
=
indexColumn
s
;
}
public
void
setIndex
(
Index
index
)
{
...
...
h2/src/main/org/h2/command/ddl/CreateIndex.java
浏览文件 @
1452e9ba
...
...
@@ -7,9 +7,12 @@ package org.h2.command.ddl;
import
java.sql.SQLException
;
import
org.h2.constant.ErrorCode
;
import
org.h2.constraint.ConstraintUnique
;
import
org.h2.engine.Database
;
import
org.h2.engine.DbObject
;
import
org.h2.engine.Right
;
import
org.h2.engine.Session
;
import
org.h2.index.Index
;
import
org.h2.index.IndexType
;
import
org.h2.message.Message
;
import
org.h2.schema.Schema
;
...
...
@@ -28,6 +31,7 @@ public class CreateIndex extends SchemaCommand {
private
boolean
primaryKey
,
unique
,
hash
;
private
boolean
ifNotExists
;
private
String
comment
;
private
String
constraintName
;
public
CreateIndex
(
Session
session
,
Schema
schema
)
{
super
(
session
,
schema
);
...
...
@@ -57,6 +61,13 @@ public class CreateIndex extends SchemaCommand {
return
indexColumns
;
}
private
String
generateConstraintName
(
DbObject
obj
,
int
id
)
throws
SQLException
{
if
(
constraintName
==
null
)
{
constraintName
=
getSchema
().
getUniqueConstraintName
(
obj
);
}
return
constraintName
;
}
public
int
update
()
throws
SQLException
{
// TODO cancel: may support for index creation
session
.
commit
(
true
);
...
...
@@ -90,7 +101,20 @@ public class CreateIndex extends SchemaCommand {
indexType
=
IndexType
.
createNonUnique
(
persistent
);
}
IndexColumn
.
mapColumns
(
indexColumns
,
table
);
table
.
addIndex
(
session
,
indexName
,
id
,
indexColumns
,
indexType
,
headPos
,
comment
);
Index
index
=
table
.
addIndex
(
session
,
indexName
,
id
,
indexColumns
,
indexType
,
headPos
,
comment
);
int
todo
;
// if (primaryKey) {
// // TODO this code is a copy of CreateTable (primaryKey creation)
// // for primary keys, create a constraint as well
// String name = generateConstraintName(table, id);
// int constraintId = getObjectId(true, true);
// ConstraintUnique pk = new ConstraintUnique(getSchema(), constraintId, name, table, true);
// pk.setColumns(index.getIndexColumns());
// pk.setIndex(index, true);
// pk.setComment(comment);
// db.addSchemaObject(session, pk);
// table.addConstraint(pk);
// }
return
0
;
}
...
...
@@ -114,4 +138,8 @@ public class CreateIndex extends SchemaCommand {
this
.
comment
=
comment
;
}
public
void
setConstraintName
(
String
constraintName
)
{
this
.
constraintName
=
constraintName
;
}
}
h2/src/main/org/h2/command/ddl/CreateTable.java
浏览文件 @
1452e9ba
...
...
@@ -10,6 +10,7 @@ import org.h2.command.Prepared;
import
org.h2.command.dml.Insert
;
import
org.h2.command.dml.Query
;
import
org.h2.constant.ErrorCode
;
import
org.h2.constraint.ConstraintUnique
;
import
org.h2.engine.Database
;
import
org.h2.engine.Session
;
import
org.h2.expression.Expression
;
...
...
@@ -146,8 +147,18 @@ public class CreateTable extends SchemaCommand {
if
(
pkColumns
!=
null
)
{
IndexColumn
.
mapColumns
(
pkColumns
,
table
);
int
indexId
=
getObjectId
(
true
,
false
);
table
.
addIndex
(
session
,
null
,
indexId
,
pkColumns
,
IndexType
.
createPrimaryKey
(
persistent
,
hashPrimaryKey
),
Index
index
=
table
.
addIndex
(
session
,
null
,
indexId
,
pkColumns
,
IndexType
.
createPrimaryKey
(
persistent
,
hashPrimaryKey
),
Index
.
EMPTY_HEAD
,
null
);
// TODO this code is a copy of CreateIndex (if primaryKey)
int
todo
;
// String name = getSchema().getUniqueConstraintName(table);
// int constraintId = getObjectId(true, true);
// ConstraintUnique pk = new ConstraintUnique(getSchema(), constraintId, name, table, true);
// pk.setColumns(index.getIndexColumns());
// pk.setIndex(index, true);
// pk.setComment(comment);
// db.addSchemaObject(session, pk);
// table.addConstraint(pk);
}
for
(
int
i
=
0
;
i
<
sequences
.
size
();
i
++)
{
Sequence
sequence
=
(
Sequence
)
sequences
.
get
(
i
);
...
...
h2/src/main/org/h2/constraint/Constraint.java
浏览文件 @
1452e9ba
...
...
@@ -36,6 +36,11 @@ public abstract class Constraint extends SchemaObjectBase {
*/
public
static
final
String
UNIQUE
=
"UNIQUE"
;
/**
* The constraint type name for primary key constraints.
*/
public
static
final
String
PRIMARY_KEY
=
"PRIMARY KEY"
;
/**
* The table for which this constraint is defined.
*/
...
...
h2/src/main/org/h2/constraint/ConstraintReferential.java
浏览文件 @
1452e9ba
...
...
@@ -20,6 +20,7 @@ import org.h2.result.Row;
import
org.h2.result.SearchRow
;
import
org.h2.schema.Schema
;
import
org.h2.table.Column
;
import
org.h2.table.IndexColumn
;
import
org.h2.table.Table
;
import
org.h2.util.ObjectArray
;
import
org.h2.util.StringUtils
;
...
...
@@ -39,8 +40,8 @@ public class ConstraintReferential extends Constraint {
private
Index
refIndex
;
private
boolean
indexOwner
;
private
boolean
refIndexOwner
;
protected
Column
[]
columns
;
protected
Column
[]
refColumns
;
protected
Index
Column
[]
columns
;
protected
Index
Column
[]
refColumns
;
private
String
deleteSQL
,
updateSQL
;
private
boolean
skipOwnTable
;
...
...
@@ -83,8 +84,8 @@ public class ConstraintReferential extends Constraint {
buff
.
append
(
" COMMENT "
);
buff
.
append
(
StringUtils
.
quoteStringSQL
(
comment
));
}
Column
[]
cols
=
columns
;
Column
[]
refCols
=
refColumns
;
Index
Column
[]
cols
=
columns
;
Index
Column
[]
refCols
=
refColumns
;
buff
.
append
(
" FOREIGN KEY("
);
for
(
int
i
=
0
;
i
<
cols
.
length
;
i
++)
{
if
(
i
>
0
)
{
...
...
@@ -164,19 +165,19 @@ public class ConstraintReferential extends Constraint {
return
getCreateSQLForCopy
(
table
,
getSQL
());
}
public
void
setColumns
(
Column
[]
cols
)
{
public
void
setColumns
(
Index
Column
[]
cols
)
{
columns
=
cols
;
}
public
Column
[]
getColumns
()
{
public
Index
Column
[]
getColumns
()
{
return
columns
;
}
public
void
setRefColumns
(
Column
[]
refCols
)
{
public
void
setRefColumns
(
Index
Column
[]
refCols
)
{
refColumns
=
refCols
;
}
public
Column
[]
getRefColumns
()
{
public
Index
Column
[]
getRefColumns
()
{
return
refColumns
;
}
...
...
@@ -240,7 +241,7 @@ public class ConstraintReferential extends Constraint {
}
boolean
containsNull
=
false
;
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
int
idx
=
columns
[
i
].
getColumnId
();
int
idx
=
columns
[
i
].
column
.
getColumnId
();
Value
v
=
newRow
.
getValue
(
idx
);
if
(
v
==
ValueNull
.
INSTANCE
)
{
containsNull
=
true
;
...
...
@@ -255,9 +256,9 @@ public class ConstraintReferential extends Constraint {
// first
boolean
self
=
true
;
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
int
idx
=
columns
[
i
].
getColumnId
();
int
idx
=
columns
[
i
].
column
.
getColumnId
();
Value
v
=
newRow
.
getValue
(
idx
);
Column
refCol
=
refColumns
[
i
];
Column
refCol
=
refColumns
[
i
]
.
column
;
int
refIdx
=
refCol
.
getColumnId
();
Value
r
=
newRow
.
getValue
(
refIdx
);
if
(!
database
.
areEqual
(
r
,
v
))
{
...
...
@@ -271,9 +272,9 @@ public class ConstraintReferential extends Constraint {
}
Row
check
=
refTable
.
getTemplateRow
();
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
int
idx
=
columns
[
i
].
getColumnId
();
int
idx
=
columns
[
i
].
column
.
getColumnId
();
Value
v
=
newRow
.
getValue
(
idx
);
Column
refCol
=
refColumns
[
i
];
Column
refCol
=
refColumns
[
i
]
.
column
;
int
refIdx
=
refCol
.
getColumnId
();
check
.
setValue
(
refIdx
,
v
.
convertTo
(
refCol
.
getType
()));
}
...
...
@@ -317,10 +318,10 @@ public class ConstraintReferential extends Constraint {
// first
boolean
self
=
true
;
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
Column
refCol
=
refColumns
[
i
];
Column
refCol
=
refColumns
[
i
]
.
column
;
int
refIdx
=
refCol
.
getColumnId
();
Value
v
=
oldRow
.
getValue
(
refIdx
);
int
idx
=
columns
[
i
].
getColumnId
();
int
idx
=
columns
[
i
].
column
.
getColumnId
();
Value
r
=
oldRow
.
getValue
(
idx
);
if
(!
database
.
areEqual
(
r
,
v
))
{
self
=
false
;
...
...
@@ -333,9 +334,9 @@ public class ConstraintReferential extends Constraint {
}
SearchRow
check
=
table
.
getTemplateSimpleRow
(
false
);
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
Column
refCol
=
refColumns
[
i
];
Column
refCol
=
refColumns
[
i
]
.
column
;
int
refIdx
=
refCol
.
getColumnId
();
Column
col
=
columns
[
i
];
Column
col
=
columns
[
i
]
.
column
;
int
idx
=
col
.
getColumnId
();
Value
v
=
oldRow
.
getValue
(
refIdx
).
convertTo
(
col
.
getType
());
check
.
setValue
(
idx
,
v
);
...
...
@@ -375,7 +376,7 @@ public class ConstraintReferential extends Constraint {
ObjectArray
params
=
updateCommand
.
getParameters
();
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
Parameter
param
=
(
Parameter
)
params
.
get
(
i
);
Column
refCol
=
refColumns
[
i
];
Column
refCol
=
refColumns
[
i
]
.
column
;
param
.
setValue
(
newRow
.
getValue
(
refCol
.
getColumnId
()));
}
}
...
...
@@ -400,7 +401,7 @@ public class ConstraintReferential extends Constraint {
void
setWhere
(
Prepared
command
,
int
pos
,
Row
row
)
{
for
(
int
i
=
0
;
i
<
refColumns
.
length
;
i
++)
{
int
idx
=
refColumns
[
i
].
getColumnId
();
int
idx
=
refColumns
[
i
].
column
.
getColumnId
();
Value
v
=
row
.
getValue
(
idx
);
ObjectArray
params
=
command
.
getParameters
();
Parameter
param
=
(
Parameter
)
params
.
get
(
pos
+
i
);
...
...
@@ -462,7 +463,7 @@ public class ConstraintReferential extends Constraint {
if
(
action
!=
CASCADE
)
{
ObjectArray
params
=
command
.
getParameters
();
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
Column
column
=
columns
[
i
];
Column
column
=
columns
[
i
]
.
column
;
Parameter
param
=
(
Parameter
)
params
.
get
(
i
);
Value
value
;
if
(
action
==
SET_NULL
)
{
...
...
@@ -488,7 +489,7 @@ public class ConstraintReferential extends Constraint {
if
(
i
>
0
)
{
buff
.
append
(
" , "
);
}
Column
column
=
columns
[
i
];
Column
column
=
columns
[
i
]
.
column
;
buff
.
append
(
Parser
.
quoteIdentifier
(
column
.
getName
()));
buff
.
append
(
"=?"
);
}
...
...
@@ -500,7 +501,7 @@ public class ConstraintReferential extends Constraint {
if
(
i
>
0
)
{
buff
.
append
(
" AND "
);
}
Column
column
=
columns
[
i
];
Column
column
=
columns
[
i
]
.
column
;
buff
.
append
(
Parser
.
quoteIdentifier
(
column
.
getName
()));
buff
.
append
(
"=?"
);
}
...
...
@@ -516,12 +517,12 @@ public class ConstraintReferential extends Constraint {
public
boolean
containsColumn
(
Column
col
)
{
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
if
(
columns
[
i
]
==
col
)
{
if
(
columns
[
i
]
.
column
==
col
)
{
return
true
;
}
}
for
(
int
i
=
0
;
i
<
refColumns
.
length
;
i
++)
{
if
(
refColumns
[
i
]
==
col
)
{
if
(
refColumns
[
i
]
.
column
==
col
)
{
return
true
;
}
}
...
...
h2/src/main/org/h2/constraint/ConstraintUnique.java
浏览文件 @
1452e9ba
...
...
@@ -11,6 +11,7 @@ import org.h2.index.Index;
import
org.h2.result.Row
;
import
org.h2.schema.Schema
;
import
org.h2.table.Column
;
import
org.h2.table.IndexColumn
;
import
org.h2.table.Table
;
import
org.h2.util.StringUtils
;
...
...
@@ -21,14 +22,16 @@ public class ConstraintUnique extends Constraint {
private
Index
index
;
private
boolean
indexOwner
;
private
Column
[]
columns
;
private
IndexColumn
[]
columns
;
private
boolean
primaryKey
;
public
ConstraintUnique
(
Schema
schema
,
int
id
,
String
name
,
Table
table
)
{
public
ConstraintUnique
(
Schema
schema
,
int
id
,
String
name
,
Table
table
,
boolean
primaryKey
)
{
super
(
schema
,
id
,
name
,
table
);
this
.
primaryKey
=
primaryKey
;
}
public
String
getConstraintType
()
{
return
Constraint
.
UNIQUE
;
return
primaryKey
?
Constraint
.
PRIMARY_KEY
:
Constraint
.
UNIQUE
;
}
public
String
getCreateSQLForCopy
(
Table
table
,
String
quotedName
)
{
...
...
@@ -45,14 +48,16 @@ public class ConstraintUnique extends Constraint {
buff
.
append
(
" COMMENT "
);
buff
.
append
(
StringUtils
.
quoteStringSQL
(
comment
));
}
buff
.
append
(
" UNIQUE("
);
buff
.
append
(
' '
);
buff
.
append
(
getTypeName
());
buff
.
append
(
'('
);
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
if
(
i
>
0
)
{
buff
.
append
(
", "
);
}
buff
.
append
(
Parser
.
quoteIdentifier
(
columns
[
i
].
getName
()));
buff
.
append
(
Parser
.
quoteIdentifier
(
columns
[
i
].
column
.
getName
()));
}
buff
.
append
(
")"
);
buff
.
append
(
')'
);
if
(
internalIndex
&&
indexOwner
&&
table
==
this
.
table
)
{
buff
.
append
(
" INDEX "
);
buff
.
append
(
index
.
getSQL
());
...
...
@@ -60,16 +65,25 @@ public class ConstraintUnique extends Constraint {
return
buff
.
toString
();
}
private
String
getTypeName
()
{
if
(
primaryKey
)
{
return
"PRIMARY KEY"
;
}
else
{
return
"UNIQUE"
;
}
}
public
String
getShortDescription
()
{
StringBuffer
buff
=
new
StringBuffer
();
buff
.
append
(
getName
());
buff
.
append
(
": "
);
buff
.
append
(
"UNIQUE("
);
buff
.
append
(
getTypeName
());
buff
.
append
(
'('
);
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
if
(
i
>
0
)
{
buff
.
append
(
", "
);
}
buff
.
append
(
Parser
.
quoteIdentifier
(
columns
[
i
].
getName
()));
buff
.
append
(
Parser
.
quoteIdentifier
(
columns
[
i
].
column
.
getName
()));
}
buff
.
append
(
")"
);
return
buff
.
toString
();
...
...
@@ -83,11 +97,11 @@ public class ConstraintUnique extends Constraint {
return
getCreateSQLForCopy
(
table
,
getSQL
());
}
public
void
setColumns
(
Column
[]
columns
)
{
public
void
setColumns
(
Index
Column
[]
columns
)
{
this
.
columns
=
columns
;
}
public
Column
[]
getColumns
()
{
public
Index
Column
[]
getColumns
()
{
return
columns
;
}
...
...
@@ -117,7 +131,7 @@ public class ConstraintUnique extends Constraint {
public
boolean
containsColumn
(
Column
col
)
{
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
if
(
columns
[
i
]
==
col
)
{
if
(
columns
[
i
]
.
column
==
col
)
{
return
true
;
}
}
...
...
h2/src/main/org/h2/result/ResultRemote.java
浏览文件 @
1452e9ba
...
...
@@ -10,6 +10,7 @@ import java.sql.SQLException;
import
org.h2.constant.SysProperties
;
import
org.h2.engine.SessionRemote
;
import
org.h2.message.Message
;
import
org.h2.message.Trace
;
import
org.h2.util.ObjectArray
;
import
org.h2.value.Transfer
;
import
org.h2.value.Value
;
...
...
@@ -163,7 +164,11 @@ public class ResultRemote implements ResultInterface {
}
public
void
close
()
{
if
(
session
==
null
)
{
return
;
}
result
=
null
;
Trace
trace
=
session
.
getTrace
();
sendClose
();
if
(
lobValues
!=
null
)
{
for
(
int
i
=
0
;
i
<
lobValues
.
size
();
i
++)
{
...
...
@@ -171,7 +176,7 @@ public class ResultRemote implements ResultInterface {
try
{
v
.
close
();
}
catch
(
SQLException
e
)
{
session
.
getTrace
()
.
error
(
"delete lob "
+
v
.
getSQL
(),
e
);
trace
.
error
(
"delete lob "
+
v
.
getSQL
(),
e
);
}
}
lobValues
=
null
;
...
...
h2/src/main/org/h2/table/IndexColumn.java
浏览文件 @
1452e9ba
...
...
@@ -9,14 +9,14 @@ import java.sql.SQLException;
import
org.h2.result.SortOrder
;
/**
* This represents a column item of an index. This is required because some
* This represents a column item of an index. This is required because some
* indexes support descending sorted columns.
*/
public
class
IndexColumn
{
public
String
columnName
;
public
Column
column
;
public
int
sortType
=
SortOrder
.
ASCENDING
;
public
String
getSQL
()
{
StringBuffer
buff
=
new
StringBuffer
(
column
.
getSQL
());
if
((
sortType
&
SortOrder
.
DESCENDING
)
!=
0
)
{
...
...
@@ -29,8 +29,9 @@ public class IndexColumn {
}
return
buff
.
toString
();
}
public
static
IndexColumn
[]
wrap
(
Column
[]
columns
)
{
int
testDelete_
;
IndexColumn
[]
list
=
new
IndexColumn
[
columns
.
length
];
for
(
int
i
=
0
;
i
<
list
.
length
;
i
++)
{
list
[
i
]
=
new
IndexColumn
();
...
...
h2/src/main/org/h2/table/MetaTable.java
浏览文件 @
1452e9ba
...
...
@@ -1060,8 +1060,8 @@ public class MetaTable extends Table {
continue
;
}
ConstraintReferential
ref
=
(
ConstraintReferential
)
constraint
;
Column
[]
cols
=
ref
.
getColumns
();
Column
[]
refCols
=
ref
.
getRefColumns
();
Index
Column
[]
cols
=
ref
.
getColumns
();
Index
Column
[]
refCols
=
ref
.
getRefColumns
();
Table
tab
=
ref
.
getTable
();
Table
refTab
=
ref
.
getRefTable
();
String
tableName
=
identifier
(
refTab
.
getName
());
...
...
@@ -1075,11 +1075,11 @@ public class MetaTable extends Table {
catalog
,
// PKTABLE_CATALOG
identifier
(
refTab
.
getSchema
().
getName
()),
// PKTABLE_SCHEMA
identifier
(
refTab
.
getName
()),
// PKTABLE_NAME
identifier
(
refCols
[
j
].
getName
()),
// PKCOLUMN_NAME
identifier
(
refCols
[
j
].
column
.
getName
()),
// PKCOLUMN_NAME
catalog
,
// FKTABLE_CATALOG
identifier
(
tab
.
getSchema
().
getName
()),
// FKTABLE_SCHEMA
identifier
(
tab
.
getName
()),
// FKTABLE_NAME
identifier
(
cols
[
j
].
getName
()),
// FKCOLUMN_NAME
identifier
(
cols
[
j
].
column
.
getName
()),
// FKCOLUMN_NAME
String
.
valueOf
(
j
+
1
),
// ORDINAL_POSITION
String
.
valueOf
(
update
),
// UPDATE_RULE SMALLINT
String
.
valueOf
(
delete
),
// DELETE_RULE SMALLINT
...
...
@@ -1097,7 +1097,7 @@ public class MetaTable extends Table {
Constraint
constraint
=
(
Constraint
)
constraints
.
get
(
i
);
String
type
=
constraint
.
getConstraintType
();
String
checkExpression
=
null
;
Column
[]
columns
=
null
;
Index
Column
[]
columns
=
null
;
Table
table
=
constraint
.
getTable
();
String
tableName
=
identifier
(
table
.
getName
());
if
(!
checkIndex
(
session
,
tableName
,
indexFrom
,
indexTo
))
{
...
...
@@ -1105,7 +1105,7 @@ public class MetaTable extends Table {
}
if
(
type
.
equals
(
Constraint
.
CHECK
))
{
checkExpression
=
((
ConstraintCheck
)
constraint
).
getExpression
().
getSQL
();
}
else
if
(
type
.
equals
(
Constraint
.
UNIQUE
))
{
}
else
if
(
type
.
equals
(
Constraint
.
UNIQUE
)
||
type
.
equals
(
Constraint
.
PRIMARY_KEY
)
)
{
columns
=
((
ConstraintUnique
)
constraint
).
getColumns
();
}
else
if
(
type
.
equals
(
Constraint
.
REFERENTIAL
))
{
columns
=
((
ConstraintReferential
)
constraint
).
getColumns
();
...
...
@@ -1117,7 +1117,7 @@ public class MetaTable extends Table {
if
(
j
>
0
)
{
buff
.
append
(
','
);
}
buff
.
append
(
columns
[
j
].
getName
());
buff
.
append
(
columns
[
j
].
column
.
getName
());
}
columnList
=
buff
.
toString
();
}
...
...
h2/src/main/org/h2/table/TableData.java
浏览文件 @
1452e9ba
...
...
@@ -68,6 +68,7 @@ public class TableData extends Table implements RecordReader {
for
(
int
i
=
0
;
i
<
cols
.
length
;
i
++)
{
if
(
DataType
.
isLargeObject
(
cols
[
i
].
getType
()))
{
containsLargeObject
=
true
;
memoryPerRow
=
Row
.
MEMORY_CALCULATE
;
}
}
traceLock
=
database
.
getTrace
(
Trace
.
LOCK
);
...
...
@@ -464,8 +465,7 @@ public class TableData extends Table implements RecordReader {
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
data
[
i
]
=
s
.
readValue
();
}
int
memory
=
containsLargeObject
?
Row
.
MEMORY_CALCULATE
:
memoryPerRow
;
Row
row
=
new
Row
(
data
,
memory
);
Row
row
=
new
Row
(
data
,
memoryPerRow
);
return
row
;
}
...
...
h2/src/main/org/h2/tools/Recover.java
浏览文件 @
1452e9ba
...
...
@@ -138,6 +138,12 @@ public class Recover implements DataHandler {
}
}
private
void
log
(
String
message
)
{
if
(
log
)
{
System
.
out
.
println
(
message
);
}
}
private
void
logError
(
String
message
,
Throwable
t
)
{
System
.
out
.
println
(
message
+
": "
+
t
.
toString
());
if
(
log
)
{
...
...
@@ -289,10 +295,10 @@ public class Recover implements DataHandler {
}
}
private
static
PrintWriter
getWriter
(
String
fileName
,
String
suffix
)
throws
IOException
,
SQLException
{
private
PrintWriter
getWriter
(
String
fileName
,
String
suffix
)
throws
IOException
,
SQLException
{
fileName
=
fileName
.
substring
(
0
,
fileName
.
length
()
-
3
);
String
outputFile
=
fileName
+
suffix
;
System
.
out
.
println
(
"Created file: "
+
outputFile
);
log
(
"Created file: "
+
outputFile
);
return
new
PrintWriter
(
FileUtils
.
openFileWriter
(
outputFile
,
false
));
}
...
...
h2/src/main/org/h2/util/Cache2Q.java
浏览文件 @
1452e9ba
...
...
@@ -203,9 +203,9 @@ public class Cache2Q implements Cache {
removeCacheObject
(
r
.
getPos
());
removeFromList
(
r
);
}
}
else
{
}
else
if
(
sizeMain
>
0
)
{
CacheObject
r
=
headMain
.
next
;
if
(!
r
.
canRemove
())
{
if
(!
r
.
canRemove
()
&&
!(
r
instanceof
CacheHead
)
)
{
removeFromList
(
r
);
addToFront
(
headMain
,
r
);
continue
;
...
...
h2/src/test/org/h2/test/TestAll.java
浏览文件 @
1452e9ba
...
...
@@ -151,60 +151,21 @@ java org.h2.test.TestAll timer
/*
adjust cache memory usage
simple pure java config file (interpreted)
not done yet:
DROP ALL OBJECTS;
SET MAX_LENGTH_INPLACE_LOB 32768;
CREATE TABLE TEST(ID IDENTITY, DATA CLOB);
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
@LOOP 1000 INSERT INTO TEST(DATA) VALUES(SPACE(32000));
CALL MEMORY_USED();
ResultRemote.close()
public void close() {
result = null;
// NULL OUT THE SESSION REFERENCE
sendClose();
if (lobValues != null) {
for (int i = 0; i < lobValues.size(); i++) {
Value v = (Value) lobValues.get(i);
try {
v.close();
} catch (SQLException e) {
// BANG NullPointerException
session.getTrace().error("delete lob " + v.getSQL(), e);
}
}
lobValues = null;
}
}
create table bla (id integer not null);
alter table bla add constraint pk primary key (id);
-- doesn't create a constraint!
alter table bla drop constraint pk;
alter table bla drop primary key;
drop table bla;
-- PostgreSQL, Derby, HSQLDB: works
-- MySQL: does not work
implement max_query_time and use it for TestCrashAPI
adjust cache memory usage
simple pure java config file (interpreted)
orphan?
javadoc: design patterns
...
...
@@ -401,7 +362,6 @@ Features of H2
deleteIndex
=
(
a
&
128
)
!=
0
;
for
(
logMode
=
0
;
logMode
<
3
;
logMode
++)
{
traceLevelFile
=
logMode
;
TestBase
.
printTime
(
"cipher:"
+
cipher
+
" a:"
+
a
+
" logMode:"
+
logMode
);
test
();
}
}
...
...
@@ -542,7 +502,8 @@ Features of H2
* Run all tests with the current settings.
*/
private
void
test
()
throws
Exception
{
System
.
out
.
println
(
"test big:"
+
big
+
" net:"
+
networked
+
" cipher:"
+
cipher
+
" memory:"
+
memory
+
" log:"
+
logMode
+
" diskResult:"
+
diskResult
+
" mvcc:"
+
mvcc
);
System
.
out
.
println
();
System
.
out
.
println
(
"Test big:"
+
big
+
" net:"
+
networked
+
" cipher:"
+
cipher
+
" memory:"
+
memory
+
" log:"
+
logMode
+
" diskResult:"
+
diskResult
+
" mvcc:"
+
mvcc
);
beforeTest
();
// db
...
...
@@ -552,7 +513,6 @@ Features of H2
new
TestBackup
().
runTest
(
this
);
new
TestBigDb
().
runTest
(
this
);
new
TestBigResult
().
runTest
(
this
);
new
TestCache
().
runTest
(
this
);
new
TestCases
().
runTest
(
this
);
new
TestCheckpoint
().
runTest
(
this
);
new
TestCluster
().
runTest
(
this
);
...
...
@@ -623,6 +583,7 @@ Features of H2
// unit
new
TestBitField
().
runTest
(
this
);
new
TestCache
().
runTest
(
this
);
new
TestCompress
().
runTest
(
this
);
new
TestDataPage
().
runTest
(
this
);
new
TestDate
().
runTest
(
this
);
...
...
h2/src/test/org/h2/test/TestBase.java
浏览文件 @
1452e9ba
...
...
@@ -51,9 +51,8 @@ public abstract class TestBase {
try
{
init
(
conf
);
start
=
System
.
currentTimeMillis
();
printlnWithTime
(
"start"
);
test
();
println
(
"
done
"
);
println
(
""
);
}
catch
(
Exception
e
)
{
fail
(
"FAIL "
+
e
.
toString
(),
e
);
if
(
config
.
stopOnError
)
{
...
...
@@ -193,7 +192,7 @@ public abstract class TestBase {
public
void
printTimeMemory
(
String
s
,
long
time
)
{
if
(
config
.
big
)
{
println
(
time
+
" ms; "
+
getMemoryUsed
()
+
" MB: "
+
s
);
println
(
getMemoryUsed
()
+
" MB: "
+
s
);
}
}
...
...
@@ -244,19 +243,19 @@ public abstract class TestBase {
}
protected
void
println
(
String
s
)
{
printlnWithTime
(
s
);
long
time
=
System
.
currentTimeMillis
()
-
start
;
printlnWithTime
(
time
,
getClass
().
getName
()
+
" "
+
s
);
}
private
void
printlnWithTime
(
String
s
)
{
long
time
=
System
.
currentTimeMillis
()
-
start
;
String
t
=
" "
+
time
;
private
static
void
printlnWithTime
(
long
time
,
String
s
)
{
String
t
=
"0000000000"
+
time
;
t
=
t
.
substring
(
t
.
length
()
-
6
);
System
.
out
.
println
(
s
+
" ("
+
t
+
" ms) "
+
getClass
().
getName
()
);
System
.
out
.
println
(
t
+
" "
+
s
);
}
protected
static
void
printTime
(
String
s
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"
yyyy-MM-dd
HH:mm:ss"
);
System
.
out
.
println
(
dateFormat
.
format
(
new
java
.
util
.
Date
())
+
" "
+
s
);
protected
void
printTime
(
String
s
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
println
(
dateFormat
.
format
(
new
java
.
util
.
Date
())
+
" "
+
s
);
}
protected
void
deleteDb
(
String
name
)
throws
Exception
{
...
...
h2/src/test/org/h2/test/db/TestBigDb.java
浏览文件 @
1452e9ba
...
...
@@ -64,7 +64,7 @@ public class TestBigDb extends TestBase {
if
(
t
-
time
>
1000
)
{
time
=
t
;
int
free
=
MemoryUtils
.
getMemoryFree
();
System
.
out
.
println
(
"i: "
+
i
+
" free: "
+
free
+
" used: "
+
MemoryUtils
.
getMemoryUsed
());
println
(
"i: "
+
i
+
" free: "
+
free
+
" used: "
+
MemoryUtils
.
getMemoryUsed
());
}
}
prep
.
setInt
(
1
,
i
);
...
...
@@ -118,12 +118,9 @@ public class TestBigDb extends TestBase {
stat
.
execute
(
"CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(NAME) VALUES('Hello World')"
);
int
len
=
getSize
(
1000
,
10000
);
long
time
=
System
.
currentTimeMillis
();
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(
i
%
1000
==
0
)
{
long
t
=
System
.
currentTimeMillis
();
time
=
t
;
trace
(
"rows:"
+
i
+
" time:"
+
(
t
-
time
));
println
(
"rows: "
+
i
);
Thread
.
yield
();
}
prep
.
execute
();
...
...
h2/src/test/org/h2/test/db/TestFullText.java
浏览文件 @
1452e9ba
...
...
@@ -49,7 +49,7 @@ public class TestFullText extends TestBase {
stat
.
execute
(
"CREATE PRIMARY KEY ON TEST(ID)"
);
long
time
=
System
.
currentTimeMillis
();
stat
.
execute
(
"CALL "
+
prefix
+
"_CREATE_INDEX('PUBLIC', 'TEST', NULL)"
);
println
(
"
Create index "
+
prefix
+
": "
+
(
System
.
currentTimeMillis
()
-
time
)
+
" ms"
);
println
(
"
create "
+
prefix
+
": "
+
(
System
.
currentTimeMillis
()
-
time
)
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"SELECT * FROM "
+
prefix
+
"_SEARCH(?, 0, 0)"
);
time
=
System
.
currentTimeMillis
();
ResultSet
rs
=
stat
.
executeQuery
(
"SELECT TEXT FROM TEST"
);
...
...
@@ -70,7 +70,7 @@ public class TestFullText extends TestBase {
}
}
}
println
(
"
Search "
+
prefix
+
": "
+
(
System
.
currentTimeMillis
()
-
time
)
+
" ms,
count: "
+
count
);
println
(
"
search "
+
prefix
+
": "
+
(
System
.
currentTimeMillis
()
-
time
)
+
"
count: "
+
count
);
stat
.
execute
(
"CALL "
+
prefix
+
"_DROP_ALL()"
);
conn
.
close
();
}
...
...
h2/src/test/org/h2/test/db/TestListener.java
浏览文件 @
1452e9ba
...
...
@@ -49,7 +49,7 @@ public class TestListener extends TestBase implements DatabaseEventListener {
}
public
void
diskSpaceIsLow
(
long
stillAvailable
)
throws
SQLException
{
System
.
out
.
println
(
"diskSpaceIsLow stillAvailable="
+
stillAvailable
);
printTime
(
"diskSpaceIsLow stillAvailable="
+
stillAvailable
);
}
public
void
exceptionThrown
(
SQLException
e
,
String
sql
)
{
...
...
@@ -81,7 +81,7 @@ public class TestListener extends TestBase implements DatabaseEventListener {
Thread
.
sleep
(
1
);
}
catch
(
InterruptedException
e
)
{
}
System
.
out
.
println
(
"state: "
+
stateName
+
" "
+
(
100
*
current
/
max
)
+
" "
+
(
time
-
start
));
printTime
(
"state: "
+
stateName
+
" "
+
(
100
*
current
/
max
)
+
" "
+
(
time
-
start
));
}
public
void
closingDatabase
()
{
...
...
h2/src/test/org/h2/test/db/TestMemoryUsage.java
浏览文件 @
1452e9ba
...
...
@@ -11,6 +11,7 @@ import java.sql.Statement;
import
java.util.Random
;
import
org.h2.test.TestBase
;
import
org.h2.util.MemoryUtils
;
/**
* Tests the memory usage of the cache.
...
...
@@ -29,6 +30,8 @@ public class TestMemoryUsage extends TestBase {
}
public
void
test
()
throws
Exception
{
deleteDb
(
"memoryUsage"
);
testClob
();
deleteDb
(
"memoryUsage"
);
testReconnectOften
();
deleteDb
(
"memoryUsage"
);
...
...
@@ -39,6 +42,30 @@ public class TestMemoryUsage extends TestBase {
conn
.
close
();
}
private
void
testClob
()
throws
Exception
{
if
(
config
.
memory
||
!
config
.
big
)
{
return
;
}
Connection
conn
=
getConnection
(
"memoryUsage"
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"SET MAX_LENGTH_INPLACE_LOB 32768"
);
stat
.
execute
(
"SET CACHE_SIZE 8000"
);
stat
.
execute
(
"CREATE TABLE TEST(ID IDENTITY, DATA CLOB)"
);
System
.
gc
();
System
.
gc
();
int
start
=
MemoryUtils
.
getMemoryUsed
();
for
(
int
i
=
0
;
i
<
4
;
i
++)
{
stat
.
execute
(
"INSERT INTO TEST(DATA) SELECT SPACE(32000) FROM SYSTEM_RANGE(1, 200)"
);
System
.
gc
();
System
.
gc
();
int
used
=
MemoryUtils
.
getMemoryUsed
();
if
((
used
-
start
)
>
16000
)
{
error
(
"Used: "
+
(
used
-
start
));
}
}
conn
.
close
();
}
private
void
testReconnectOften
()
throws
Exception
{
int
len
=
getSize
(
1
,
2000
);
Connection
conn1
=
getConnection
(
"memoryUsage"
);
...
...
h2/src/test/org/h2/test/synth/TestCrashAPI.java
浏览文件 @
1452e9ba
...
...
@@ -133,7 +133,7 @@ public class TestCrashAPI extends TestBase {
}
private
void
testOne
(
int
seed
)
throws
Exception
{
printTime
(
"
TestCrashAPI
"
+
seed
);
printTime
(
"
seed:
"
+
seed
);
callCount
=
0
;
openCount
=
0
;
random
=
new
RandomGen
(
null
);
...
...
h2/src/test/org/h2/test/synth/TestKillRestart.java
浏览文件 @
1452e9ba
...
...
@@ -49,7 +49,7 @@ public class TestKillRestart extends TestBase {
error
(
"Expected: #..., got: "
+
s
);
}
else
if
(
s
.
startsWith
(
"#Running"
))
{
Thread
.
sleep
(
100
);
printTime
(
"
Killing...
"
+
i
);
printTime
(
"
killing:
"
+
i
);
p
.
destroy
();
break
;
}
else
if
(
s
.
startsWith
(
"#Fail"
))
{
...
...
h2/src/test/org/h2/test/synth/TestRandomSQL.java
浏览文件 @
1452e9ba
...
...
@@ -162,7 +162,7 @@ public class TestRandomSQL extends TestBase {
String
old
=
SysProperties
.
scriptDirectory
;
SysProperties
.
scriptDirectory
=
"dataScript/"
;
seed
=
i
;
printTime
(
"
TestRandomSQL
"
+
seed
);
printTime
(
"
seed:
"
+
seed
);
try
{
deleteDb
();
}
catch
(
SQLException
e
)
{
...
...
h2/src/test/org/h2/test/unit/TestValueMemory.java
浏览文件 @
1452e9ba
...
...
@@ -60,7 +60,7 @@ public class TestValueMemory extends TestBase implements DataHandler {
System
.
gc
();
long
used
=
MemoryUtils
.
getMemoryUsed
()
-
first
;
memory
/=
1024
;
if
(
used
>
memory
*
2
)
{
if
(
used
>
memory
*
3
)
{
error
(
"Type: "
+
type
+
" Used memory: "
+
used
+
" calculated: "
+
memory
+
" "
+
array
.
length
);
}
}
...
...
h2/src/tools/oracle/toplink/essentials/platform/database/H2Platform.java.txt
浏览文件 @
1452e9ba
...
...
@@ -40,6 +40,7 @@ import oracle.toplink.essentials.internal.sessions.AbstractSession;
* name="toplink.platform.class.name"
* value="oracle.toplink.essentials.platform.database.H2Platform"/>
* </pre>
* See also: https://glassfish.dev.java.net/issues/show_bug.cgi?id=4042
*/
public class H2Platform extends DatabasePlatform {
public H2Platform() {
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论