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
);
}
}
...
...
@@ -122,10 +122,12 @@ public class Query<T> {
}
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
);
}
...
...
@@ -137,7 +139,7 @@ public class Query<T> {
from
.
appendSQL
(
stat
);
stat
.
appendSQL
(
" SET "
);
int
i
=
0
;
for
(
Declaration
declaration
:
declarations
)
{
for
(
Declaration
declaration
:
declarations
)
{
if
(
i
++
>
0
)
{
stat
.
appendSQL
(
", "
);
}
...
...
@@ -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
...
...
@@ -325,6 +328,7 @@ public class Query<T> {
}
void
addDeclarationToken
(
Declaration
declaration
)
{
int
todoWhatIsDeclaration
;
declarations
.
add
(
declaration
);
}
...
...
h2/src/tools/org/h2/jaqu/QueryWhere.java
浏览文件 @
113996ea
h2/src/tools/org/h2/jaqu/SQLDialect.java
浏览文件 @
113996ea
h2/src/tools/org/h2/jaqu/SQLStatement.java
浏览文件 @
113996ea
...
...
@@ -82,8 +82,9 @@ 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
);
return
identity
;
}
catch
(
SQLException
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
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>
...
...
@@ -116,8 +120,9 @@ import java.lang.annotation.Target;
* <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
...
...
@@ -134,33 +139,34 @@ import java.lang.annotation.Target;
* <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
;
...
...
@@ -170,17 +176,14 @@ public interface Table {
@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
;
...
...
@@ -190,17 +193,16 @@ public interface Table {
@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
{};
...
...
@@ -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
h2/src/tools/org/h2/jaqu/TableInspector.java
浏览文件 @
113996ea
...
...
@@ -39,6 +39,8 @@ import org.h2.jaqu.util.Utils;
*/
public
class
TableInspector
{
private
final
static
int
todoReviewClass
=
0
;
private
String
schema
;
private
String
table
;
private
boolean
forceUpperCase
;
...
...
@@ -48,8 +50,6 @@ public class TableInspector {
private
Map
<
String
,
ColumnInspector
>
columns
;
private
final
String
eol
=
"\n"
;
private
int
todoReviewWholeClass
;
TableInspector
(
String
schema
,
String
table
,
boolean
forceUpperCase
,
Class
<?
extends
java
.
util
.
Date
>
dateClazz
)
{
this
.
schema
=
schema
;
...
...
@@ -88,7 +88,7 @@ public class TableInspector {
void
read
(
DatabaseMetaData
metaData
)
throws
SQLException
{
ResultSet
rs
=
null
;
//
Primary Keys
//
primary keys
try
{
rs
=
metaData
.
getPrimaryKeys
(
null
,
schema
,
table
);
while
(
rs
.
next
())
{
...
...
@@ -97,14 +97,14 @@ public class TableInspector {
}
closeSilently
(
rs
);
//
Indexes
//
indexes
rs
=
metaData
.
getIndexInfo
(
null
,
schema
,
table
,
false
,
true
);
indexes
=
Utils
.
newHashMap
();
while
(
rs
.
next
())
{
IndexInspector
info
=
new
IndexInspector
(
rs
);
if
(
info
.
type
.
equals
(
IndexType
.
UNIQUE
)
&&
info
.
name
.
toLowerCase
().
startsWith
(
"primary"
))
{
//
Skip PrimaryKey indexes
//
skip primary key indexes
continue
;
}
if
(
indexes
.
containsKey
(
info
.
name
))
{
...
...
@@ -115,7 +115,7 @@ public class TableInspector {
}
closeSilently
(
rs
);
//
Columns
//
columns
rs
=
metaData
.
getColumns
(
null
,
schema
,
table
,
null
);
columns
=
Utils
.
newHashMap
();
while
(
rs
.
next
())
{
...
...
@@ -124,35 +124,15 @@ public class TableInspector {
col
.
type
=
rs
.
getString
(
"TYPE_NAME"
);
col
.
clazz
=
ModelUtils
.
getClassType
(
col
.
type
,
dateClazz
);
col
.
size
=
rs
.
getInt
(
"COLUMN_SIZE"
);
// Allow Null
try
{
col
.
allowNull
=
rs
.
getInt
(
"NULLABLE"
)
==
DatabaseMetaData
.
columnNullable
;
}
catch
(
SQLException
x
)
{
}
// AutoIncrement
try
{
col
.
isAutoIncrement
=
rs
.
getBoolean
(
"IS_AUTOINCREMENT"
);
}
catch
(
SQLException
x
)
{
}
// Primary Key
if
(
primaryKeys
.
size
()
==
1
)
{
if
(
col
.
name
.
equalsIgnoreCase
(
primaryKeys
.
get
(
0
)))
if
(
col
.
name
.
equalsIgnoreCase
(
primaryKeys
.
get
(
0
)))
{
col
.
isPrimaryKey
=
true
;
}
// Default Value
}
if
(!
col
.
isAutoIncrement
)
{
try
{
col
.
defaultValue
=
rs
.
getString
(
"COLUMN_DEFAULT"
);
}
catch
(
SQLException
t
)
{
try
{
col
.
defaultValue
=
rs
.
getString
(
"COLUMN_DEF"
);
}
catch
(
SQLException
x
)
{
}
}
}
columns
.
put
(
col
.
name
,
col
);
}
...
...
@@ -179,14 +159,14 @@ public class TableInspector {
String
generateModel
(
String
packageName
,
boolean
annotateSchema
,
boolean
trimStrings
)
{
//
Set of imports
//
import statements
Set
<
String
>
imports
=
Utils
.
newHashSet
();
imports
.
add
(
JQSchema
.
class
.
getCanonicalName
());
imports
.
add
(
JQTable
.
class
.
getCanonicalName
());
imports
.
add
(
JQIndex
.
class
.
getCanonicalName
());
imports
.
add
(
JQColumn
.
class
.
getCanonicalName
());
//
Table Fields
//
fields
StringBuilder
fields
=
new
StringBuilder
();
List
<
ColumnInspector
>
sortedColumns
=
Utils
.
newArrayList
(
columns
.
values
());
Collections
.
sort
(
sortedColumns
);
...
...
@@ -194,15 +174,15 @@ public class TableInspector {
fields
.
append
(
generateColumn
(
imports
,
col
,
trimStrings
));
}
//
Build Complete Class Definition
//
build complete class definition
StringBuilder
model
=
new
StringBuilder
();
if
(!
isNullOrEmpty
(
packageName
))
{
//
Package
//
package
model
.
append
(
"package "
+
packageName
+
";"
);
model
.
append
(
eol
).
append
(
eol
);
}
//
Imports
//
imports
List
<
String
>
sortedImports
=
new
ArrayList
<
String
>(
imports
);
Collections
.
sort
(
sortedImports
);
for
(
String
imp
:
sortedImports
)
{
...
...
@@ -224,7 +204,7 @@ public class TableInspector {
model
.
append
(
'@'
).
append
(
JQTable
.
class
.
getSimpleName
());
model
.
append
(
'('
);
// JQTable
Annotation Parameters
// JQTable
annotation parameters
AnnotationBuilder
ap
=
new
AnnotationBuilder
();
ap
.
addParameter
(
"name"
,
table
);
...
...
@@ -237,7 +217,7 @@ public class TableInspector {
ap
.
addParameter
(
"primaryKey"
,
pk
.
toString
());
}
//
Finish @JQTable annotation
//
finish @JQTable annotation
model
.
append
(
ap
);
model
.
append
(
')'
).
append
(
eol
);
...
...
@@ -254,19 +234,19 @@ public class TableInspector {
model
.
append
(
')'
).
append
(
eol
);
}
//
Class Declaration
//
class declaration
String
clazzName
=
ModelUtils
.
createClassName
(
table
);
model
.
append
(
format
(
"public class {0} '{'"
,
clazzName
)).
append
(
eol
);
model
.
append
(
eol
);
//
Field Declarations
//
field declarations
model
.
append
(
fields
);
//
Default Constructor
model
.
append
(
"\t
public "
).
append
(
clazzName
).
append
(
"() {"
).
append
(
eol
);
//
default constructor
model
.
append
(
"\t
"
+
"public "
).
append
(
clazzName
).
append
(
"() {"
).
append
(
eol
);
model
.
append
(
"\t}"
).
append
(
eol
);
//
End of Class Body
//
end of class body
model
.
append
(
'}'
);
model
.
trimToSize
();
return
model
.
toString
();
...
...
@@ -279,7 +259,7 @@ public class TableInspector {
void
generateIndexAnnotations
(
AnnotationBuilder
ap
,
String
parameter
,
IndexType
type
)
{
List
<
IndexInspector
>
list
=
getIndexes
(
type
);
if
(
list
.
size
()
==
0
)
{
//
No matching indexes
//
no matching indexes
return
;
}
if
(
list
.
size
()
==
1
)
{
...
...
@@ -323,27 +303,27 @@ public class TableInspector {
boolean
trimStrings
)
{
StatementBuilder
sb
=
new
StatementBuilder
();
Class
<?>
clazz
=
col
.
clazz
;
String
c
name
=
ModelUtils
.
createFieldName
(
col
.
name
.
toLowerCase
());
String
c
olumn
=
ModelUtils
.
createFieldName
(
col
.
name
.
toLowerCase
());
sb
.
append
(
'\t'
);
if
(
clazz
==
null
)
{
//
Unsupported Type
//
unsupported type
clazz
=
Object
.
class
;
sb
.
append
(
"//
Unsupported type "
+
col
.
type
);
sb
.
append
(
"//
unsupported type "
+
col
.
type
);
}
else
{
// @JQColumn
imports
.
add
(
clazz
.
getCanonicalName
());
sb
.
append
(
'@'
).
append
(
JQColumn
.
class
.
getSimpleName
());
// JQColumn
Annotation Parameters
// JQColumn
annotation parameters
AnnotationBuilder
ap
=
new
AnnotationBuilder
();
// JQColumn.name
if
(!
col
.
name
.
equalsIgnoreCase
(
c
name
))
{
if
(!
col
.
name
.
equalsIgnoreCase
(
c
olumn
))
{
ap
.
addParameter
(
"name"
,
col
.
name
);
}
// JQColumn.primaryKey
//
Composite Primary Keys are annotated on the Table
//
composite primary keys are annotated on the table
if
(
col
.
isPrimaryKey
&&
primaryKeys
.
size
()
==
1
)
{
ap
.
addParameter
(
"primaryKey=true"
);
}
...
...
@@ -374,7 +354,7 @@ public class TableInspector {
ap
.
addParameter
(
"defaultValue=\""
+
col
.
defaultValue
+
"\""
);
}
//
Add leading and trailing ()
//
add leading and trailing ()
if
(
ap
.
length
()
>
0
)
{
ap
.
insert
(
0
,
'('
);
ap
.
append
(
')'
);
...
...
@@ -383,11 +363,11 @@ public class TableInspector {
}
sb
.
append
(
eol
);
//
Variable Declaration
//
variable declaration
sb
.
append
(
"\tpublic "
);
sb
.
append
(
clazz
.
getSimpleName
());
sb
.
append
(
' '
);
sb
.
append
(
c
name
);
sb
.
append
(
c
olumn
);
sb
.
append
(
';'
);
sb
.
append
(
eol
).
append
(
eol
);
return
sb
;
...
...
@@ -400,9 +380,10 @@ public class TableInspector {
* Results are returned as a List<Validation> which includes
* recommendations, warnings, and errors about the model.
* <p>
* The caller may choose to have validate throw an exception on any
validation
*
ERROR.
* The caller may choose to have validate throw an exception on any
*
validation ERROR.
* <p>
*
* @param <T>
* @param def
* @param throwError
...
...
@@ -412,7 +393,7 @@ public class TableInspector {
boolean
throwError
)
{
List
<
Validation
>
remarks
=
Utils
.
newArrayList
();
//
Model Class Definition Validation
//
model class definition validation
if
(!
Modifier
.
isPublic
(
def
.
getModelClass
().
getModifiers
()))
{
remarks
.
add
(
ERROR
(
table
,
"SCHEMA"
,
format
(
"Class {0} MUST BE PUBLIC!"
,
...
...
@@ -433,14 +414,13 @@ public class TableInspector {
}
}
//
Index Validation
for
(
IndexInspector
index
:
indexes
.
values
())
{
//
index validation
for
(
IndexInspector
index
:
indexes
.
values
())
{
validate
(
remarks
,
def
,
index
,
throwError
);
}
// Field Column Validation
List
<
FieldDefinition
>
fieldDefs
=
def
.
getFields
();
for
(
FieldDefinition
fieldDef
:
fieldDefs
)
{
// field column validation
for
(
FieldDefinition
fieldDef
:
def
.
getFields
())
{
validate
(
remarks
,
fieldDef
,
throwError
);
}
return
remarks
;
...
...
@@ -467,7 +447,7 @@ public class TableInspector {
}
else
if
(
defIndexes
.
size
()
<
dbIndexes
.
size
())
{
remarks
.
add
(
WARN
(
table
,
IndexType
.
STANDARD
.
name
(),
"Model class is missing indexes!"
));
}
// TODO
Complete index validation.
// TODO
complete index validation.
// Need to actually compare index types and columns within each index.
// At this point my head was starting to hurt.
}
...
...
@@ -483,20 +463,20 @@ public class TableInspector {
*/
void
validate
(
List
<
Validation
>
remarks
,
FieldDefinition
fieldDef
,
boolean
throwError
)
{
//
Unknown Field
String
f
name
=
forceUpperCase
?
//
unknown field
String
f
ield
=
forceUpperCase
?
fieldDef
.
columnName
.
toUpperCase
()
:
fieldDef
.
columnName
;
if
(!
columns
.
containsKey
(
f
name
))
{
//
Unknown column mapping!
if
(!
columns
.
containsKey
(
f
ield
))
{
//
unknown column mapping
remarks
.
add
(
ERROR
(
table
,
fieldDef
,
"Does not exist in database!"
).
throwError
(
throwError
));
return
;
}
ColumnInspector
col
=
columns
.
get
(
f
name
);
ColumnInspector
col
=
columns
.
get
(
f
ield
);
Class
<?>
fieldClazz
=
fieldDef
.
field
.
getType
();
Class
<?>
jdbcClazz
=
ModelUtils
.
getClassType
(
col
.
type
,
dateClazz
);
//
Supported Type Check
//
supported type check
// JaQu maps to VARCHAR for unsupported types.
if
(
fieldDef
.
dataType
.
equals
(
"VARCHAR"
)
&&
(
fieldClazz
!=
String
.
class
))
{
...
...
@@ -504,7 +484,7 @@ public class TableInspector {
"JaQu does not currently implement support for "
+
fieldClazz
.
getName
()).
throwError
(
throwError
));
}
//
Number Types
//
number types
if
(!
fieldClazz
.
equals
(
jdbcClazz
))
{
if
(
Number
.
class
.
isAssignableFrom
(
fieldClazz
))
{
remarks
.
add
(
WARN
(
table
,
col
,
...
...
@@ -519,7 +499,7 @@ public class TableInspector {
}
}
//
String Types
//
string types
if
(
fieldClazz
==
String
.
class
)
{
if
((
fieldDef
.
maxLength
!=
col
.
size
)
&&
(
col
.
size
<
Integer
.
MAX_VALUE
))
{
...
...
@@ -532,31 +512,31 @@ public class TableInspector {
remarks
.
add
(
CONSIDER
(
table
,
col
,
format
(
"{0}.truncateToMaxLength=true"
+
" will prevent RuntimeExceptions on"
+
" INSERT
s or UPDATEs, but will clip data!"
,
+
" INSERT
or UPDATE, but will clip data!"
,
JQColumn
.
class
.
getSimpleName
())));
}
}
//
Numeric AutoIncrement
//
numeric autoIncrement
if
(
fieldDef
.
isAutoIncrement
!=
col
.
isAutoIncrement
)
{
remarks
.
add
(
WARN
(
table
,
col
,
format
(
"{0}.isAutoIncrement={1}"
+
" while Column autoIncrement={2}"
,
JQColumn
.
class
.
getSimpleName
(),
fieldDef
.
isAutoIncrement
,
col
.
isAutoIncrement
)));
}
//
Last Check
//
Default Value...
//
last check
//
default value...
if
(!
col
.
isAutoIncrement
&&
!
col
.
isPrimaryKey
)
{
//
Check Model.defaultValue Format
//
check Model.defaultValue format
if
(!
ModelUtils
.
isProperlyFormattedDefaultValue
(
fieldDef
.
defaultValue
))
{
remarks
.
add
(
ERROR
(
table
,
col
,
format
(
"{0}.defaultValue=\"{1}\""
+
" is improperly formatted!"
,
JQColumn
.
class
.
getSimpleName
(),
fieldDef
.
defaultValue
)).
throwError
(
throwError
));
//
Next field
//
next field
return
;
}
//
Compare Model.defaultValue to Column.defaultValue
//
compare Model.defaultValue to Column.defaultValue
if
(
isNullOrEmpty
(
fieldDef
.
defaultValue
)
&&
!
isNullOrEmpty
(
col
.
defaultValue
))
{
// Model.defaultValue is NULL, Column.defaultValue is NOT NULL
...
...
@@ -580,7 +560,7 @@ public class TableInspector {
}
}
//
Sanity Check Model.defaultValue Literal Value
//
sanity check Model.defaultValue literal value
if
(!
ModelUtils
.
isValidDefaultValue
(
fieldDef
.
field
.
getType
(),
fieldDef
.
defaultValue
))
{
remarks
.
add
(
ERROR
(
table
,
col
,
...
...
@@ -593,7 +573,6 @@ public class TableInspector {
/**
* Represents an index as it exists in the database.
*
*/
public
static
class
IndexInspector
{
String
name
;
...
...
@@ -605,7 +584,7 @@ public class TableInspector {
public
IndexInspector
(
ResultSet
rs
)
throws
SQLException
{
name
=
rs
.
getString
(
"INDEX_NAME"
);
//
Determine Index Type
//
determine index type
boolean
hash
=
rs
.
getInt
(
"TYPE"
)
==
DatabaseMetaData
.
tableIndexHashed
;
boolean
unique
=
!
rs
.
getBoolean
(
"NON_UNIQUE"
);
...
...
@@ -660,7 +639,7 @@ public class TableInspector {
// primary first
return
1
;
}
else
{
//
Neither primary, sort by name
//
neither primary, sort by name
return
name
.
compareTo
(
o
.
name
);
}
}
...
...
h2/src/tools/org/h2/jaqu/Validation.java
浏览文件 @
113996ea
...
...
@@ -19,6 +19,8 @@ import org.h2.jaqu.util.StringUtils;
*/
public
class
Validation
{
private
int
todoReviewWholeClass
;
public
static
Validation
CONSIDER
(
String
table
,
String
type
,
String
message
)
{
return
new
Validation
(
Level
.
CONSIDER
,
table
,
type
,
message
);
}
...
...
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
...
...
@@ -28,6 +28,8 @@ import org.h2.message.DbException;
*/
public
class
GenerateModels
{
private
static
final
int
todoReview
=
0
;
/**
* The output stream where this tool writes to.
*/
...
...
@@ -112,10 +114,11 @@ public class GenerateModels {
List
<
String
>
models
=
inspector
.
generateModel
(
schema
,
table
,
packageName
,
annotateSchema
,
trimStrings
);
File
parentFile
;
if
(
StringUtils
.
isNullOrEmpty
(
folder
))
if
(
StringUtils
.
isNullOrEmpty
(
folder
))
{
parentFile
=
new
File
(
System
.
getProperty
(
"user.dir"
));
else
}
else
{
parentFile
=
new
File
(
folder
);
}
parentFile
.
mkdirs
();
Pattern
p
=
Pattern
.
compile
(
"class ([a-zA-Z0-9]+)"
);
for
(
String
model
:
models
)
{
...
...
@@ -162,4 +165,5 @@ public class GenerateModels {
out
.
println
(
" -annotateSchema <boolean>"
);
out
.
println
(
" -trimStrings <boolean>"
);
}
}
h2/src/tools/org/h2/jaqu/util/JdbcUtils.java
浏览文件 @
113996ea
...
...
@@ -21,6 +21,8 @@ import javax.sql.XAConnection;
*/
public
class
JdbcUtils
{
private
static
final
int
todoDeleteClass
=
0
;
private
static
final
String
[]
DRIVERS
=
{
"h2:"
,
"org.h2.Driver"
,
"Cache:"
,
"com.intersys.jdbc.CacheDriver"
,
...
...
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
;
...
...
h2/src/tools/org/h2/jaqu/util/StatementLogger.java
浏览文件 @
113996ea
...
...
@@ -20,72 +20,67 @@ import java.util.concurrent.atomic.AtomicLong;
*/
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
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
)
{
createCount
.
incrementAndGet
();
CREATE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
insert
(
String
statement
)
{
insertCount
.
incrementAndGet
();
INSERT_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
update
(
String
statement
)
{
updateCount
.
incrementAndGet
();
UPDATE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
merge
(
String
statement
)
{
mergeCount
.
incrementAndGet
();
MERGE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
delete
(
String
statement
)
{
deleteCount
.
incrementAndGet
();
DELETE_COUNT
.
incrementAndGet
();
log
(
statement
);
}
public
static
void
select
(
String
statement
)
{
selectCount
.
incrementAndGet
();
SELECT_COUNT
.
incrementAndGet
();
log
(
statement
);
}
private
static
void
log
(
String
statement
)
{
if
(
logStatements
)
if
(
logStatements
)
{
out
.
println
(
statement
);
}
}
public
static
void
printStats
()
{
out
.
println
(
"JaQu Runtime Stat
s"
);
out
.
println
(
"JaQu Runtime Stat
istics"
);
out
.
println
(
"======================="
);
printStat
(
"CREATE"
,
createCount
);
printStat
(
"INSERT"
,
insertCount
);
printStat
(
"UPDATE"
,
updateCount
);
printStat
(
"MERGE"
,
mergeCount
);
printStat
(
"DELETE"
,
deleteCount
);
printStat
(
"SELECT"
,
selectCount
);
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
(
createCount
.
get
()));
out
.
println
(
name
+
"="
+
df
.
format
(
CREATE_COUNT
.
get
()));
}
}
}
\ No newline at end of file
h2/src/tools/org/h2/jaqu/util/StringUtils.java
浏览文件 @
113996ea
...
...
@@ -12,6 +12,8 @@ package org.h2.jaqu.util;
*/
public
class
StringUtils
{
private
int
todoDelete
;
/**
* Replace all occurrences of the before string with the after string.
*
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论