Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
113996ea
提交
113996ea
authored
14 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cleanup:
- Javadocs - Work in progress
上级
daa2b0bf
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
1715 行增加
和
1716 行删除
+1715
-1716
Query.java
h2/src/tools/org/h2/jaqu/Query.java
+13
-9
QueryWhere.java
h2/src/tools/org/h2/jaqu/QueryWhere.java
+2
-2
SQLDialect.java
h2/src/tools/org/h2/jaqu/SQLDialect.java
+106
-106
SQLStatement.java
h2/src/tools/org/h2/jaqu/SQLStatement.java
+8
-7
SetColumn.java
h2/src/tools/org/h2/jaqu/SetColumn.java
+40
-40
Table.java
h2/src/tools/org/h2/jaqu/Table.java
+43
-41
TableDefinition.java
h2/src/tools/org/h2/jaqu/TableDefinition.java
+1
-1
TableInspector.java
h2/src/tools/org/h2/jaqu/TableInspector.java
+695
-716
Validation.java
h2/src/tools/org/h2/jaqu/Validation.java
+115
-113
ClassUtils.java
h2/src/tools/org/h2/jaqu/util/ClassUtils.java
+4
-0
GenerateModels.java
h2/src/tools/org/h2/jaqu/util/GenerateModels.java
+169
-165
JdbcUtils.java
h2/src/tools/org/h2/jaqu/util/JdbcUtils.java
+243
-241
Message.java
h2/src/tools/org/h2/jaqu/util/Message.java
+2
-0
StatementBuilder.java
h2/src/tools/org/h2/jaqu/util/StatementBuilder.java
+4
-2
StatementLogger.java
h2/src/tools/org/h2/jaqu/util/StatementLogger.java
+85
-90
StringUtils.java
h2/src/tools/org/h2/jaqu/util/StringUtils.java
+185
-183
没有找到文件。
h2/src/tools/org/h2/jaqu/Query.java
浏览文件 @
113996ea
...
...
@@ -19,7 +19,6 @@ import org.h2.jaqu.bytecode.ClassReader;
import
org.h2.jaqu.util.StatementLogger
;
import
org.h2.jaqu.util.JdbcUtils
;
import
org.h2.jaqu.util.Utils
;
//import org.h2.util.JdbcUtils;
//## Java 1.5 end ##
/**
...
...
@@ -38,8 +37,8 @@ public class Query<T> {
private
final
IdentityHashMap
<
Object
,
SelectColumn
<
T
>>
aliasMap
=
Utils
.
newIdentityHashMap
();
private
ArrayList
<
OrderExpression
<
T
>>
orderByList
=
Utils
.
newArrayList
();
private
Object
[]
groupByExpressions
;
private
long
limit
=
0
;
private
long
offset
=
0
;
private
long
limit
;
private
long
offset
;
Query
(
Db
db
)
{
this
.
db
=
db
;
...
...
@@ -65,6 +64,7 @@ public class Query<T> {
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
}
finally
{
int
whyTrue
;
JdbcUtils
.
closeSilently
(
rs
,
true
);
}
}
...
...
@@ -120,24 +120,26 @@ public class Query<T> {
StatementLogger
.
delete
(
stat
.
getSQL
());
return
stat
.
executeUpdate
();
}
public
<
A
>
SetColumn
<
T
,
A
>
set
(
A
field
)
{
int
renameSetColumnClassToUpdateSetColumn
;
return
new
SetColumn
<
T
,
A
>(
this
,
field
);
}
public
<
A
>
IncrementColumn
<
T
,
A
>
increment
(
A
field
)
{
int
renameIncrementColumnClassToUpdateIncrementColumn
;
return
new
IncrementColumn
<
T
,
A
>(
this
,
field
);
}
public
int
update
()
{
if
(
declarations
.
size
()
==
0
)
throw
new
RuntimeException
(
"Please specify SET or INCREMENT before calling Update!"
);
SQLStatement
stat
=
new
SQLStatement
(
db
);
SQLStatement
stat
=
new
SQLStatement
(
db
);
stat
.
appendSQL
(
"UPDATE "
);
from
.
appendSQL
(
stat
);
stat
.
appendSQL
(
" SET "
);
int
i
=
0
;
for
(
Declaration
declaration
:
declarations
)
{
for
(
Declaration
declaration
:
declarations
)
{
if
(
i
++
>
0
)
{
stat
.
appendSQL
(
", "
);
}
...
...
@@ -145,7 +147,7 @@ public class Query<T> {
}
appendWhere
(
stat
);
StatementLogger
.
update
(
stat
.
getSQL
());
return
stat
.
executeUpdate
();
return
stat
.
executeUpdate
();
}
public
<
X
,
Z
>
List
<
X
>
selectDistinct
(
Z
x
)
{
...
...
@@ -196,6 +198,7 @@ public class Query<T> {
try
{
X
value
;
Object
o
=
rs
.
getObject
(
1
);
int
convertHereIsProbablyWrong
;
if
(
Clob
.
class
.
isAssignableFrom
(
o
.
getClass
()))
{
value
=
(
X
)
Utils
.
convert
(
o
,
String
.
class
);
}
else
...
...
@@ -266,7 +269,7 @@ public class Query<T> {
return
this
;
}
//## Java 1.5 end ##
/**
* Order by a number of columns.
*
...
...
@@ -323,8 +326,9 @@ public class Query<T> {
void
addConditionToken
(
Token
condition
)
{
conditions
.
add
(
condition
);
}
void
addDeclarationToken
(
Declaration
declaration
)
{
int
todoWhatIsDeclaration
;
declarations
.
add
(
declaration
);
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/QueryWhere.java
浏览文件 @
113996ea
...
...
@@ -33,12 +33,12 @@ public class QueryWhere<T> {
query
.
addConditionToken
(
ConditionAndOr
.
OR
);
return
new
QueryCondition
<
T
,
A
>(
query
,
x
);
}
public
QueryWhere
<
T
>
limit
(
long
limit
)
{
query
.
limit
(
limit
);
return
this
;
}
public
QueryWhere
<
T
>
offset
(
long
offset
)
{
query
.
offset
(
offset
);
return
this
;
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/SQLDialect.java
浏览文件 @
113996ea
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
import
org.h2.jaqu.TableDefinition.IndexDefinition
;
import
org.h2.jaqu.util.StatementBuilder
;
import
org.h2.jaqu.util.StringUtils
;
/**
* This interface defines points where JaQu can build different statements
* depending on the database used.
*/
public
interface
SQLDialect
{
/**
* Get the SQL snippet for the table name.
*
* @param schema the schema name, or null for no schema
* @param table the table name
* @return the SQL snippet
*/
String
tableName
(
String
schema
,
String
table
);
/**
* Get the CREATE INDEX statement.
*
* @param schema the schema name
* @param table the table name
* @param index the index definition
* @return the SQL statement
*/
String
createIndex
(
String
schema
,
String
table
,
IndexDefinition
index
);
/**
* Append "LIMIT limit" to the SQL statement.
*
* @param stat the statement
* @param limit the limit
*/
void
appendLimit
(
SQLStatement
stat
,
long
limit
);
/**
* Append "OFFSET offset" to the SQL statement.
*
* @param stat the statement
* @param offset the offset
*/
void
appendOffset
(
SQLStatement
stat
,
long
offset
);
/**
* Default implementation of an SQL dialect.
* Designed for an H2 database. May be suitable for others.
*/
public
static
class
DefaultSQLDialect
implements
SQLDialect
{
public
String
tableName
(
String
schema
,
String
table
)
{
if
(
StringUtils
.
isNullOrEmpty
(
schema
))
{
return
table
;
}
return
schema
+
"."
+
table
;
}
public
String
createIndex
(
String
schema
,
String
table
,
IndexDefinition
index
)
{
StatementBuilder
buff
=
new
StatementBuilder
();
buff
.
append
(
"CREATE "
);
switch
(
index
.
type
)
{
case
STANDARD:
break
;
case
UNIQUE:
buff
.
append
(
"UNIQUE "
);
break
;
case
HASH:
buff
.
append
(
"HASH "
);
break
;
case
UNIQUE_HASH:
buff
.
append
(
"UNIQUE HASH "
);
break
;
}
buff
.
append
(
"INDEX IF NOT EXISTS "
);
buff
.
append
(
index
.
indexName
);
buff
.
append
(
" ON "
);
buff
.
append
(
table
);
buff
.
append
(
"("
);
for
(
String
col:
index
.
columnNames
)
{
buff
.
appendExceptFirst
(
", "
);
buff
.
append
(
col
);
}
buff
.
append
(
")"
);
return
buff
.
toString
();
}
public
void
appendLimit
(
SQLStatement
stat
,
long
limit
)
{
stat
.
appendSQL
(
" LIMIT "
+
limit
);
}
public
void
appendOffset
(
SQLStatement
stat
,
long
offset
)
{
stat
.
appendSQL
(
" OFFSET "
+
offset
);
}
}
}
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
import
org.h2.jaqu.TableDefinition.IndexDefinition
;
import
org.h2.jaqu.util.StatementBuilder
;
import
org.h2.jaqu.util.StringUtils
;
/**
* This interface defines points where JaQu can build different statements
* depending on the database used.
*/
public
interface
SQLDialect
{
/**
* Get the SQL snippet for the table name.
*
* @param schema the schema name, or null for no schema
* @param table the table name
* @return the SQL snippet
*/
String
tableName
(
String
schema
,
String
table
);
/**
* Get the CREATE INDEX statement.
*
* @param schema the schema name
* @param table the table name
* @param index the index definition
* @return the SQL statement
*/
String
createIndex
(
String
schema
,
String
table
,
IndexDefinition
index
);
/**
* Append "LIMIT limit" to the SQL statement.
*
* @param stat the statement
* @param limit the limit
*/
void
appendLimit
(
SQLStatement
stat
,
long
limit
);
/**
* Append "OFFSET offset" to the SQL statement.
*
* @param stat the statement
* @param offset the offset
*/
void
appendOffset
(
SQLStatement
stat
,
long
offset
);
/**
* Default implementation of an SQL dialect.
* Designed for an H2 database. May be suitable for others.
*/
public
static
class
DefaultSQLDialect
implements
SQLDialect
{
public
String
tableName
(
String
schema
,
String
table
)
{
if
(
StringUtils
.
isNullOrEmpty
(
schema
))
{
return
table
;
}
return
schema
+
"."
+
table
;
}
public
String
createIndex
(
String
schema
,
String
table
,
IndexDefinition
index
)
{
StatementBuilder
buff
=
new
StatementBuilder
();
buff
.
append
(
"CREATE "
);
switch
(
index
.
type
)
{
case
STANDARD:
break
;
case
UNIQUE:
buff
.
append
(
"UNIQUE "
);
break
;
case
HASH:
buff
.
append
(
"HASH "
);
break
;
case
UNIQUE_HASH:
buff
.
append
(
"UNIQUE HASH "
);
break
;
}
buff
.
append
(
"INDEX IF NOT EXISTS "
);
buff
.
append
(
index
.
indexName
);
buff
.
append
(
" ON "
);
buff
.
append
(
table
);
buff
.
append
(
"("
);
for
(
String
col:
index
.
columnNames
)
{
buff
.
appendExceptFirst
(
", "
);
buff
.
append
(
col
);
}
buff
.
append
(
")"
);
return
buff
.
toString
();
}
public
void
appendLimit
(
SQLStatement
stat
,
long
limit
)
{
stat
.
appendSQL
(
" LIMIT "
+
limit
);
}
public
void
appendOffset
(
SQLStatement
stat
,
long
offset
)
{
stat
.
appendSQL
(
" OFFSET "
+
offset
);
}
}
}
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/SQLStatement.java
浏览文件 @
113996ea
...
...
@@ -38,7 +38,7 @@ public class SQLStatement {
sql
=
null
;
return
this
;
}
public
SQLStatement
appendTable
(
String
schema
,
String
table
)
{
return
appendSQL
(
db
.
getDialect
().
tableName
(
schema
,
table
));
}
...
...
@@ -54,7 +54,7 @@ public class SQLStatement {
params
.
add
(
o
);
return
this
;
}
ResultSet
executeQuery
()
{
try
{
return
prepare
(
false
).
executeQuery
();
...
...
@@ -74,7 +74,7 @@ public class SQLStatement {
JdbcUtils
.
closeSilently
(
ps
);
}
}
long
executeInsert
()
{
PreparedStatement
ps
=
null
;
try
{
...
...
@@ -82,9 +82,10 @@ public class SQLStatement {
ps
.
executeUpdate
();
long
identity
=
-
1
;
ResultSet
rs
=
ps
.
getGeneratedKeys
();
if
(
rs
!=
null
&&
rs
.
next
())
if
(
rs
!=
null
&&
rs
.
next
())
{
identity
=
rs
.
getLong
(
1
);
JdbcUtils
.
closeSilently
(
rs
);
}
JdbcUtils
.
closeSilently
(
rs
);
return
identity
;
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
...
...
@@ -101,8 +102,8 @@ public class SQLStatement {
}
}
private
PreparedStatement
prepare
(
boolean
return
Identity
)
{
PreparedStatement
prep
=
db
.
prepare
(
getSQL
(),
return
Identity
);
private
PreparedStatement
prepare
(
boolean
return
GeneratedKeys
)
{
PreparedStatement
prep
=
db
.
prepare
(
getSQL
(),
return
GeneratedKeys
);
for
(
int
i
=
0
;
i
<
params
.
size
();
i
++)
{
Object
o
=
params
.
get
(
i
);
setValue
(
prep
,
i
+
1
,
o
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/SetColumn.java
浏览文件 @
113996ea
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
/**
* This class represents "SET column = value" in an UPDATE statement.
*
* @param <T> the query type
* @param <A> the new value data type
*/
//## Java 1.5 begin ##
public
class
SetColumn
<
T
,
A
>
implements
Declaration
{
private
Query
<
T
>
query
;
private
A
x
;
private
A
y
;
SetColumn
(
Query
<
T
>
query
,
A
x
)
{
this
.
query
=
query
;
this
.
x
=
x
;
}
public
Query
<
T
>
to
(
A
y
)
{
query
.
addDeclarationToken
(
this
);
this
.
y
=
y
;
return
query
;
}
public
void
appendSQL
(
SQLStatement
stat
)
{
query
.
appendSQL
(
stat
,
x
);
stat
.
appendSQL
(
"=?"
);
stat
.
addParameter
(
y
);
}
}
//## Java 1.5 end ##
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
/**
* This class represents "SET column = value" in an UPDATE statement.
*
* @param <T> the query type
* @param <A> the new value data type
*/
//## Java 1.5 begin ##
public
class
SetColumn
<
T
,
A
>
implements
Declaration
{
private
Query
<
T
>
query
;
private
A
x
;
private
A
y
;
SetColumn
(
Query
<
T
>
query
,
A
x
)
{
this
.
query
=
query
;
this
.
x
=
x
;
}
public
Query
<
T
>
to
(
A
y
)
{
query
.
addDeclarationToken
(
this
);
this
.
y
=
y
;
return
query
;
}
public
void
appendSQL
(
SQLStatement
stat
)
{
query
.
appendSQL
(
stat
,
x
);
stat
.
appendSQL
(
"=?"
);
stat
.
addParameter
(
y
);
}
}
//## Java 1.5 end ##
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/Table.java
浏览文件 @
113996ea
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, Version
* 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). Initial Developer: H2 Group
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package
org
.
h2
.
jaqu
;
...
...
@@ -10,6 +11,9 @@ import java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* A class that implements this interface can be used as a database table.
*/
/**
* A class that implements the JaQu model mapping options.
* <p>
...
...
@@ -112,95 +116,93 @@ import java.lang.annotation.Target;
* <p>
* You may automatically generate model classes as strings with the <i>Db</i>
* and <i>DbInspector</i> objects.
*
*
* <pre>
* Db db = Db.open("jdbc:h2:mem:", "sa", "sa");
* DbInspector inspector = new DbInspector(db);
* List<String> models = inspector.generateModel(schema, table,
* packageName, annotateSchema, trimStrings);
* List<String> models =
* inspector.generateModel(schema, table, packageName,
* annotateSchema, trimStrings)
* </pre>
*
*
* OR you may use the <i>GenerateModels</i> tool to generate and save your
* classes to the filesystem.
*
*
* <pre>
* java -cp h2jaqu.jar org.h2.jaqu.util.GenerateModels
* java -cp h2jaqu.jar org.h2.jaqu.util.GenerateModels
* -url "jdbc:h2:mem:"
* -user sa -password sa -schema schemaName -table tableName
* -package packageName -folder destination
* -annotateSchema false -trimStrings true
* </pre>
*
*
* <b>Model Validation</b>
* <p>
* You may validate your model class with <i>DbInspector</i> object.<br>
* The DbInspector will report ERRORS, WARNINGS, and SUGGESTIONS to help you.
*
* The DbInspector will report ERRORS, WARNINGS, and
* SUGGESTIONS to help you.
*
* <pre>
* Db db = Db.open("jdbc:h2:mem:", "sa", "sa");
* Db db = Db.open("jdbc:h2:mem:",
* "sa", "sa");
* DbInspector inspector = new DbInspector(db);
*
MyModel model = new MyModel();
*
List<Validation> remarks = inspector.validateModel(model
, throwOnError);
* for (Validation remark : remarks)
*
List<Validation> remarks =
*
inspector.validateModel(new MyModel()
, throwOnError);
* for (Validation remark : remarks)
{
* System.out.println(remark);
* }
* </pre>
*/
public
interface
Table
{
static
final
int
reviewWholeClassAndJavadocs
=
0
;
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
TYPE
)
public
@interface
JQDatabase
{
/**
* If
<b>version</b> is set to a <i>non-zero</i>
value, JaQu will
* If
version is set to a non-zero
value, JaQu will
* maintain a "_jq_versions" table within your database. The
* <i>version</i> number will be used to call to a registered
* <i>DbUpgrader</i> implementation to perform relevant ALTERs or
* whatever.
* <p>
* <b>Default: <i>0</i></b>
* <p>
* <b>NOTE:</b><br>
* You must specify a <i>DbUpgrader</i> on your <i>Db</i> object to
* version number will be used to call to a registered
* DbUpgrader implementation to perform relevant ALTER statements.
* Default: 0.
* You must specify a DbUpgrader on your Db object to
* use this parameter.
*/
int
version
()
default
0
;
}
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
TYPE
)
public
@interface
JQSchema
{
/**
* <b>schema</b> may be optionally specified. If it is not specified the
* schema will be ignored.
* <p>
* <b>Default: <i>Unspecified</i></b>
* The schema may be optionally specified. If it is not specified the
* schema will be ignored. Default: Unspecified.
*/
String
name
()
default
""
;
}
/**
* Enumeration defining the 4 index types.
*
*/
public
static
enum
IndexType
{
STANDARD
,
UNIQUE
,
HASH
,
UNIQUE_HASH
;
}
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
TYPE
)
public
@interface
JQIndex
{
/**
*
<b>standard</b>
indexes may be optionally specified. If not specified,
*
Standard
indexes may be optionally specified. If not specified,
* these values will be ignored.
* <ul>
* <li>standard = "id, name"
* <li>standard = "id name"
* <li>standard = { "id name", "date" }
* </ul>
* Standard indexes may still be added in the
<i>define()</i>
method if
* Standard indexes may still be added in the
define()
method if
* the model class is not annotated with JQTable.
* <p>
* <b>Default: <i>Unspecified</i></b>
* Default: Unspecified.
*/
String
[]
standard
()
default
{};
...
...
@@ -218,7 +220,7 @@ public interface Table {
* <b>Default: <i>Unspecified</i></b>
*/
String
[]
unique
()
default
{};
/**
* <b>hash</b> indexes may be optionally specified. If not specified,
* these values will be ignored.
...
...
@@ -232,7 +234,7 @@ public interface Table {
* <b>Default: <i>Unspecified</i></b>
*/
String
[]
hash
()
default
{};
/**
* <b>uniqueHash</b> indexes may be optionally specified. If not specified,
* these values will be ignored.
...
...
@@ -337,8 +339,8 @@ public interface Table {
* If <b>version</b> is set to a <i>non-zero</i> value, JaQu will
* maintain a "_jq_versions" table within your database. The
* <i>version</i> number will be used to call to a registered
* <i>DbUpgrader</i> implementation to perform relevant ALTER
s or
*
whatever
.
* <i>DbUpgrader</i> implementation to perform relevant ALTER
*
statements
.
* <p>
* <b>Default: <i>0</i></b>
* <p>
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/TableDefinition.java
浏览文件 @
113996ea
...
...
@@ -227,7 +227,7 @@ class TableDefinition<T> {
for
(
Field
f
:
classFields
)
{
// default to field name
String
columnName
=
f
.
getName
();
String
columnName
=
f
.
getName
();
boolean
isAutoIncrement
=
false
;
boolean
isPrimaryKey
=
false
;
int
maxLength
=
0
;
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/TableInspector.java
浏览文件 @
113996ea
差异被折叠。
点击展开。
h2/src/tools/org/h2/jaqu/Validation.java
浏览文件 @
113996ea
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
import
org.h2.jaqu.TableDefinition.FieldDefinition
;
import
org.h2.jaqu.TableInspector.ColumnInspector
;
import
org.h2.jaqu.util.StringUtils
;
/**
* A Validation Remark is a result of running a model validation.
* <p>
* Each remark has a level, associated component (schema, table, column, index),
* and a message.
*
*/
public
class
Validation
{
public
static
Validation
CONSIDER
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
CONSIDER
,
table
,
type
,
message
);
}
public
static
Validation
CONSIDER
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
CONSIDER
,
table
,
col
,
message
);
}
public
static
Validation
WARN
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
WARN
,
table
,
col
,
message
);
}
public
static
Validation
WARN
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
WARN
,
table
,
type
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
col
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
type
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
FieldDefinition
field
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
field
,
message
);
}
public
static
enum
Level
{
CONSIDER
,
WARN
,
ERROR
;
}
Level
level
;
String
table
;
String
fieldType
;
String
fieldName
;
String
message
;
private
Validation
(
Level
level
,
String
table
,
String
type
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
type
;
this
.
fieldName
=
""
;
this
.
message
=
message
;
}
private
Validation
(
Level
level
,
String
table
,
FieldDefinition
field
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
field
.
dataType
;
this
.
fieldName
=
field
.
columnName
;
this
.
message
=
message
;
}
private
Validation
(
Level
level
,
String
table
,
ColumnInspector
col
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
col
.
type
;
this
.
fieldName
=
col
.
name
;
this
.
message
=
message
;
}
public
Validation
throwError
(
boolean
throwOnError
)
{
if
(
throwOnError
&&
isError
())
throw
new
RuntimeException
(
toString
());
return
this
;
}
public
boolean
isError
()
{
return
level
.
equals
(
Level
.
ERROR
);
}
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
StringUtils
.
pad
(
level
.
name
(),
9
,
" "
,
true
));
sb
.
append
(
StringUtils
.
pad
(
table
,
25
,
" "
,
true
));
sb
.
append
(
StringUtils
.
pad
(
fieldName
,
20
,
" "
,
true
));
sb
.
append
(
' '
);
sb
.
append
(
message
);
return
sb
.
toString
();
}
public
String
toCSVString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
level
.
name
()).
append
(
','
);
sb
.
append
(
table
).
append
(
','
);
sb
.
append
(
fieldType
).
append
(
','
);
sb
.
append
(
fieldName
).
append
(
','
);
sb
.
append
(
message
);
return
sb
.
toString
();
}
}
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
;
import
org.h2.jaqu.TableDefinition.FieldDefinition
;
import
org.h2.jaqu.TableInspector.ColumnInspector
;
import
org.h2.jaqu.util.StringUtils
;
/**
* A Validation Remark is a result of running a model validation.
* <p>
* Each remark has a level, associated component (schema, table, column, index),
* and a message.
*
*/
public
class
Validation
{
private
int
todoReviewWholeClass
;
public
static
Validation
CONSIDER
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
CONSIDER
,
table
,
type
,
message
);
}
public
static
Validation
CONSIDER
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
CONSIDER
,
table
,
col
,
message
);
}
public
static
Validation
WARN
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
WARN
,
table
,
col
,
message
);
}
public
static
Validation
WARN
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
WARN
,
table
,
type
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
ColumnInspector
col
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
col
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
type
,
message
);
}
public
static
Validation
ERROR
(
String
table
,
FieldDefinition
field
,
String
message
)
{
return
new
Validation
(
Level
.
ERROR
,
table
,
field
,
message
);
}
public
static
enum
Level
{
CONSIDER
,
WARN
,
ERROR
;
}
Level
level
;
String
table
;
String
fieldType
;
String
fieldName
;
String
message
;
private
Validation
(
Level
level
,
String
table
,
String
type
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
type
;
this
.
fieldName
=
""
;
this
.
message
=
message
;
}
private
Validation
(
Level
level
,
String
table
,
FieldDefinition
field
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
field
.
dataType
;
this
.
fieldName
=
field
.
columnName
;
this
.
message
=
message
;
}
private
Validation
(
Level
level
,
String
table
,
ColumnInspector
col
,
String
message
)
{
this
.
level
=
level
;
this
.
table
=
table
;
this
.
fieldType
=
col
.
type
;
this
.
fieldName
=
col
.
name
;
this
.
message
=
message
;
}
public
Validation
throwError
(
boolean
throwOnError
)
{
if
(
throwOnError
&&
isError
())
throw
new
RuntimeException
(
toString
());
return
this
;
}
public
boolean
isError
()
{
return
level
.
equals
(
Level
.
ERROR
);
}
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
StringUtils
.
pad
(
level
.
name
(),
9
,
" "
,
true
));
sb
.
append
(
StringUtils
.
pad
(
table
,
25
,
" "
,
true
));
sb
.
append
(
StringUtils
.
pad
(
fieldName
,
20
,
" "
,
true
));
sb
.
append
(
' '
);
sb
.
append
(
message
);
return
sb
.
toString
();
}
public
String
toCSVString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
level
.
name
()).
append
(
','
);
sb
.
append
(
table
).
append
(
','
);
sb
.
append
(
fieldType
).
append
(
','
);
sb
.
append
(
fieldName
).
append
(
','
);
sb
.
append
(
message
);
return
sb
.
toString
();
}
}
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/util/ClassUtils.java
浏览文件 @
113996ea
...
...
@@ -13,6 +13,8 @@ package org.h2.jaqu.util;
*/
public
class
ClassUtils
{
int
todoDelete
;
private
ClassUtils
()
{
// utility class
}
...
...
@@ -31,5 +33,7 @@ public class ClassUtils {
throw
new
RuntimeException
(
e
);
}
}
//## Java 1.5 end ##
}
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/util/GenerateModels.java
浏览文件 @
113996ea
差异被折叠。
点击展开。
h2/src/tools/org/h2/jaqu/util/JdbcUtils.java
浏览文件 @
113996ea
差异被折叠。
点击展开。
h2/src/tools/org/h2/jaqu/util/Message.java
浏览文件 @
113996ea
...
...
@@ -18,6 +18,8 @@ import java.sql.SQLException;
*/
public
class
Message
{
private
int
todoDelete
;
private
Message
()
{
// utility class
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/util/StatementBuilder.java
浏览文件 @
113996ea
...
...
@@ -30,6 +30,8 @@ package org.h2.jaqu.util;
*/
public
class
StatementBuilder
{
private
int
todoDelete
;
private
final
StringBuilder
builder
=
new
StringBuilder
();
private
int
index
;
...
...
@@ -113,11 +115,11 @@ public class StatementBuilder {
builder
.
append
(
s
);
}
}
public
void
append
(
StatementBuilder
sb
)
{
builder
.
append
(
sb
);
}
public
void
insert
(
int
offset
,
char
c
)
{
builder
.
insert
(
offset
,
c
);
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/util/StatementLogger.java
浏览文件 @
113996ea
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
.
util
;
import
java.io.PrintWriter
;
import
java.text.DecimalFormat
;
import
java.util.concurrent.atomic.AtomicLong
;
/**
* Utility class to optionally log generated statements to an output stream.<br>
* Default output stream is System.out.<br>
* Statement logging is disabled by default.
* <p>
* This class also tracks the counts for generated statements by major type.
*
*/
public
class
StatementLogger
{
public
static
boolean
logStatements
=
false
;
public
static
PrintWriter
out
=
new
PrintWriter
(
System
.
out
);
public
final
static
AtomicLong
selectCount
=
new
AtomicLong
(
0
);
public
final
static
AtomicLong
createCount
=
new
AtomicLong
(
0
);
public
final
static
AtomicLong
insertCount
=
new
AtomicLong
(
0
);
public
final
static
AtomicLong
updateCount
=
new
AtomicLong
(
0
);
public
final
static
AtomicLong
mergeCount
=
new
AtomicLong
(
0
);
public
final
static
AtomicLong
deleteCount
=
new
AtomicLong
(
0
);
public
static
void
create
(
String
statement
)
{
createCount
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
insert
(
String
statement
)
{
insertCount
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
update
(
String
statement
)
{
updateCount
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
merge
(
String
statement
)
{
mergeCount
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
delete
(
String
statement
)
{
deleteCount
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
select
(
String
statement
)
{
selectCount
.
incrementAndGet
();
log
(
statement
);
}
private
static
void
log
(
String
statement
)
{
if
(
logStatements
)
out
.
println
(
statement
);
}
public
static
void
printStats
()
{
out
.
println
(
"JaQu Runtime Stats"
);
out
.
println
(
"======================="
);
printStat
(
"CREATE"
,
createCount
);
printStat
(
"INSERT"
,
insertCount
);
printStat
(
"UPDATE"
,
updateCount
);
printStat
(
"MERGE"
,
mergeCount
);
printStat
(
"DELETE"
,
deleteCount
);
printStat
(
"SELECT"
,
selectCount
);
}
private
static
void
printStat
(
String
name
,
AtomicLong
value
)
{
if
(
value
.
get
()
>
0
)
{
DecimalFormat
df
=
new
DecimalFormat
(
"###,###,###,###"
);
out
.
println
(
name
+
"="
+
df
.
format
(
createCount
.
get
()));
}
}
/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: James Moger
*/
package
org
.
h2
.
jaqu
.
util
;
import
java.io.PrintWriter
;
import
java.text.DecimalFormat
;
import
java.util.concurrent.atomic.AtomicLong
;
/**
* Utility class to optionally log generated statements to an output stream.<br>
* Default output stream is System.out.<br>
* Statement logging is disabled by default.
* <p>
* This class also tracks the counts for generated statements by major type.
*
*/
public
class
StatementLogger
{
public
static
boolean
logStatements
;
private
static
PrintWriter
out
=
new
PrintWriter
(
System
.
out
);
private
static
final
AtomicLong
SELECT_COUNT
=
new
AtomicLong
();
private
static
final
AtomicLong
CREATE_COUNT
=
new
AtomicLong
();
private
static
final
AtomicLong
INSERT_COUNT
=
new
AtomicLong
();
private
static
final
AtomicLong
UPDATE_COUNT
=
new
AtomicLong
();
private
static
final
AtomicLong
MERGE_COUNT
=
new
AtomicLong
();
private
static
final
AtomicLong
DELETE_COUNT
=
new
AtomicLong
();
public
static
void
create
(
String
statement
)
{
CREATE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
insert
(
String
statement
)
{
INSERT_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
update
(
String
statement
)
{
UPDATE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
merge
(
String
statement
)
{
MERGE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
delete
(
String
statement
)
{
DELETE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
select
(
String
statement
)
{
SELECT_COUNT
.
incrementAndGet
();
log
(
statement
);
}
private
static
void
log
(
String
statement
)
{
if
(
logStatements
)
{
out
.
println
(
statement
);
}
}
public
static
void
printStats
()
{
out
.
println
(
"JaQu Runtime Statistics"
);
out
.
println
(
"======================="
);
printStat
(
"CREATE"
,
CREATE_COUNT
);
printStat
(
"INSERT"
,
INSERT_COUNT
);
printStat
(
"UPDATE"
,
UPDATE_COUNT
);
printStat
(
"MERGE"
,
MERGE_COUNT
);
printStat
(
"DELETE"
,
DELETE_COUNT
);
printStat
(
"SELECT"
,
SELECT_COUNT
);
}
private
static
void
printStat
(
String
name
,
AtomicLong
value
)
{
if
(
value
.
get
()
>
0
)
{
DecimalFormat
df
=
new
DecimalFormat
(
"###,###,###,###"
);
out
.
println
(
name
+
"="
+
df
.
format
(
CREATE_COUNT
.
get
()));
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/jaqu/util/StringUtils.java
浏览文件 @
113996ea
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论