Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
113996ea
提交
113996ea
authored
2月 23, 2011
作者:
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
);
}
...
...
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
;
...
...
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
);
}
}
}
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
);
...
...
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 ##
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>
...
...
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
;
...
...
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
();
}
}
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 ##
}
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
}
...
...
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
);
}
...
...
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
h2/src/tools/org/h2/jaqu/util/StringUtils.java
浏览文件 @
113996ea
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论