Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zhaoyufei133
litepal
提交
bd790a55
L
litepal
项目概览
zhaoyufei133
/
litepal
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
litepal
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
bd790a55
编写于
2月 24, 2017
作者:
guolin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add index function when create tables.
上级
18da95e0
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
103 addition
and
33 deletion
+103
-33
litepal/src/main/java/org/litepal/LitePalBase.java
litepal/src/main/java/org/litepal/LitePalBase.java
+5
-2
litepal/src/main/java/org/litepal/annotation/Column.java
litepal/src/main/java/org/litepal/annotation/Column.java
+5
-0
litepal/src/main/java/org/litepal/tablemanager/AssociationCreator.java
...ain/java/org/litepal/tablemanager/AssociationCreator.java
+25
-3
litepal/src/main/java/org/litepal/tablemanager/AssociationUpdater.java
...ain/java/org/litepal/tablemanager/AssociationUpdater.java
+12
-8
litepal/src/main/java/org/litepal/tablemanager/Creator.java
litepal/src/main/java/org/litepal/tablemanager/Creator.java
+25
-6
litepal/src/main/java/org/litepal/tablemanager/Generator.java
...pal/src/main/java/org/litepal/tablemanager/Generator.java
+8
-4
litepal/src/main/java/org/litepal/tablemanager/Upgrader.java
litepal/src/main/java/org/litepal/tablemanager/Upgrader.java
+6
-6
litepal/src/main/java/org/litepal/tablemanager/model/ColumnModel.java
...main/java/org/litepal/tablemanager/model/ColumnModel.java
+15
-2
litepal/src/main/java/org/litepal/util/DBUtility.java
litepal/src/main/java/org/litepal/util/DBUtility.java
+2
-2
未找到文件。
litepal/src/main/java/org/litepal/LitePalBase.java
浏览文件 @
bd790a55
...
...
@@ -674,18 +674,21 @@ public abstract class LitePalBase {
String
columnType
=
getColumnType
(
fieldType
);
boolean
nullable
=
true
;
boolean
unique
=
false
;
boolean
hasIndex
=
false
;
String
defaultValue
=
""
;
Column
annotation
=
field
.
getAnnotation
(
Column
.
class
);
if
(
annotation
!=
null
)
{
nullable
=
annotation
.
nullable
();
unique
=
annotation
.
unique
();
hasIndex
=
annotation
.
index
();
defaultValue
=
annotation
.
defaultValue
();
}
ColumnModel
columnModel
=
new
ColumnModel
();
columnModel
.
setColumnName
(
DBUtility
.
convertToValidColumnName
(
field
.
getName
()));
columnModel
.
setColumnType
(
columnType
);
columnModel
.
setIsNullable
(
nullable
);
columnModel
.
setIsUnique
(
unique
);
columnModel
.
setNullable
(
nullable
);
columnModel
.
setUnique
(
unique
);
columnModel
.
setHasIndex
(
hasIndex
);
columnModel
.
setDefaultValue
(
defaultValue
);
return
columnModel
;
}
...
...
litepal/src/main/java/org/litepal/annotation/Column.java
浏览文件 @
bd790a55
...
...
@@ -51,4 +51,9 @@ public @interface Column {
*/
boolean
ignore
()
default
false
;
/**
* Set index for the column.
*/
boolean
index
()
default
false
;
}
litepal/src/main/java/org/litepal/tablemanager/AssociationCreator.java
浏览文件 @
bd790a55
...
...
@@ -122,6 +122,27 @@ public abstract class AssociationCreator extends Generator {
return
"drop table if exists "
+
tableName
;
}
/**
* Generate SQLs for creating index on a table.
*
* @param tableName
* The table name.
* @param columnModels
* A list contains all column models with column info.
* @return SQLs to create index.
*/
protected
List
<
String
>
generateCreateIndexSQL
(
String
tableName
,
List
<
ColumnModel
>
columnModels
)
{
List
<
String
>
createIndexSQLs
=
new
ArrayList
<
String
>();
for
(
ColumnModel
columnModel
:
columnModels
)
{
if
(
columnModel
.
isHasIndex
())
{
String
sql
=
"create index "
+
tableName
+
"_"
+
columnModel
.
getColumnName
()
+
"_index"
+
" on "
+
tableName
+
"("
+
columnModel
.
getColumnName
()
+
")"
;
createIndexSQLs
.
add
(
sql
);
}
}
return
createIndexSQLs
;
}
/**
* Generate a SQL for add new column into the existing table.
* @param tableName
...
...
@@ -332,7 +353,7 @@ public abstract class AssociationCreator extends Generator {
}
else
{
sqls
.
add
(
generateCreateTableSQL
(
intermediateTableName
,
columnModelList
,
false
));
}
execute
(
sqls
.
toArray
(
new
String
[
0
])
,
db
);
execute
(
sqls
,
db
);
giveTableSchemaACopy
(
intermediateTableName
,
Const
.
TableSchema
.
INTERMEDIATE_JOIN_TABLE
,
db
);
}
...
...
@@ -370,7 +391,7 @@ public abstract class AssociationCreator extends Generator {
}
else
{
sqls
.
add
(
generateCreateTableSQL
(
tableName
,
columnModelList
,
false
));
}
execute
(
sqls
.
toArray
(
new
String
[
0
])
,
db
);
execute
(
sqls
,
db
);
giveTableSchemaACopy
(
tableName
,
Const
.
TableSchema
.
GENERIC_TABLE
,
db
);
}
...
...
@@ -405,7 +426,8 @@ public abstract class AssociationCreator extends Generator {
ColumnModel
columnModel
=
new
ColumnModel
();
columnModel
.
setColumnName
(
foreignKeyColumn
);
columnModel
.
setColumnType
(
"integer"
);
String
[]
sqls
=
{
generateAddColumnSQL
(
tableHoldsForeignKey
,
columnModel
)
};
List
<
String
>
sqls
=
new
ArrayList
<
String
>();
sqls
.
add
(
generateAddColumnSQL
(
tableHoldsForeignKey
,
columnModel
));
execute
(
sqls
,
db
);
}
else
{
LogUtil
.
d
(
TAG
,
"column "
+
foreignKeyColumn
...
...
litepal/src/main/java/org/litepal/tablemanager/AssociationUpdater.java
浏览文件 @
bd790a55
...
...
@@ -140,9 +140,9 @@ public abstract class AssociationUpdater extends Creator {
*/
protected
void
dropTables
(
List
<
String
>
dropTableNames
,
SQLiteDatabase
db
)
{
if
(
dropTableNames
!=
null
&&
!
dropTableNames
.
isEmpty
())
{
String
[]
dropTableSQLS
=
new
String
[
dropTableNames
.
size
()]
;
for
(
int
i
=
0
;
i
<
dropTable
SQLS
.
length
;
i
++)
{
dropTableSQLS
[
i
]
=
generateDropTableSQL
(
dropTableNames
.
get
(
i
));
List
<
String
>
dropTableSQLS
=
new
ArrayList
<
String
>()
;
for
(
int
i
=
0
;
i
<
dropTable
Names
.
size
()
;
i
++)
{
dropTableSQLS
.
add
(
generateDropTableSQL
(
dropTableNames
.
get
(
i
)
));
}
execute
(
dropTableSQLS
,
db
);
}
...
...
@@ -185,7 +185,8 @@ public abstract class AssociationUpdater extends Creator {
deleteData
.
append
(
"="
).
append
(
" lower('"
).
append
(
tableName
).
append
(
"')"
);
}
LogUtil
.
d
(
TAG
,
"clear table schema value sql is "
+
deleteData
);
String
[]
sqls
=
{
deleteData
.
toString
()
};
List
<
String
>
sqls
=
new
ArrayList
<
String
>();
sqls
.
add
(
deleteData
.
toString
());
execute
(
sqls
,
mDb
);
}
}
...
...
@@ -415,10 +416,10 @@ public abstract class AssociationUpdater extends Creator {
* The column names need to remove.
* @param tableName
* The table name to remove from.
* @return A SQL
array
contains create temporary table, create new table,
* @return A SQL
list
contains create temporary table, create new table,
* migrate data and drop temporary table.
*/
private
String
[]
getRemoveColumnSQLs
(
Collection
<
String
>
removeColumnNames
,
String
tableName
)
{
private
List
<
String
>
getRemoveColumnSQLs
(
Collection
<
String
>
removeColumnNames
,
String
tableName
)
{
TableModel
tableModelFromDB
=
getTableModelFromDB
(
tableName
);
String
alterToTempTableSQL
=
generateAlterToTempTableSQL
(
tableName
);
LogUtil
.
d
(
TAG
,
"generateRemoveColumnSQL >> "
+
alterToTempTableSQL
);
...
...
@@ -428,8 +429,11 @@ public abstract class AssociationUpdater extends Creator {
LogUtil
.
d
(
TAG
,
"generateRemoveColumnSQL >> "
+
dataMigrationSQL
);
String
dropTempTableSQL
=
generateDropTempTableSQL
(
tableName
);
LogUtil
.
d
(
TAG
,
"generateRemoveColumnSQL >> "
+
dropTempTableSQL
);
String
[]
sqls
=
{
alterToTempTableSQL
,
createNewTableSQL
,
dataMigrationSQL
,
dropTempTableSQL
};
List
<
String
>
sqls
=
new
ArrayList
<
String
>();
sqls
.
add
(
alterToTempTableSQL
);
sqls
.
add
(
createNewTableSQL
);
sqls
.
add
(
dataMigrationSQL
);
sqls
.
add
(
dropTempTableSQL
);
return
sqls
;
}
...
...
litepal/src/main/java/org/litepal/tablemanager/Creator.java
浏览文件 @
bd790a55
...
...
@@ -22,6 +22,9 @@ import org.litepal.util.DBUtility;
import
android.database.sqlite.SQLiteDatabase
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* This is a subclass of Generator. Use to create tables. It will automatically
* build a create table SQL based on the passing TableModel object. In case of
...
...
@@ -66,17 +69,21 @@ class Creator extends AssociationCreator {
* @return A SQL array contains drop table if it exists and create new
* table.
*/
protected
String
[]
getCreateTableSQLs
(
TableModel
tableModel
,
SQLiteDatabase
db
,
boolean
force
)
{
protected
List
<
String
>
getCreateTableSQLs
(
TableModel
tableModel
,
SQLiteDatabase
db
,
boolean
force
)
{
List
<
String
>
sqls
=
new
ArrayList
<
String
>();
if
(
force
)
{
return
new
String
[]
{
generateDropTableSQL
(
tableModel
),
generateCreateTableSQL
(
tableModel
)
};
sqls
.
add
(
generateDropTableSQL
(
tableModel
));
sqls
.
add
(
generateCreateTableSQL
(
tableModel
));
sqls
.
addAll
(
generateCreateIndexSQLs
(
tableModel
));
}
else
{
if
(
DBUtility
.
isTableExists
(
tableModel
.
getTableName
(),
db
))
{
return
null
;
}
else
{
return
new
String
[]
{
generateCreateTableSQL
(
tableModel
)
};
sqls
.
add
(
generateCreateTableSQL
(
tableModel
));
sqls
.
addAll
(
generateCreateIndexSQLs
(
tableModel
));
}
}
return
sqls
;
}
/**
...
...
@@ -86,7 +93,7 @@ class Creator extends AssociationCreator {
* The table model.
* @return A SQL to drop table.
*/
protected
String
generateDropTableSQL
(
TableModel
tableModel
)
{
private
String
generateDropTableSQL
(
TableModel
tableModel
)
{
return
generateDropTableSQL
(
tableModel
.
getTableName
());
}
...
...
@@ -100,8 +107,20 @@ class Creator extends AssociationCreator {
* generate SQL.
* @return A generated create table SQL.
*/
protected
String
generateCreateTableSQL
(
TableModel
tableModel
)
{
String
generateCreateTableSQL
(
TableModel
tableModel
)
{
return
generateCreateTableSQL
(
tableModel
.
getTableName
(),
tableModel
.
getColumnModels
(),
true
);
}
/**
* Generate create index SQLs by analyzing the TableModel.
*
* @param tableModel
* Use the TableModel to get table name and columns name to
* generate SQL.
* @return generated create index SQLs.
*/
private
List
<
String
>
generateCreateIndexSQLs
(
TableModel
tableModel
)
{
return
generateCreateIndexSQL
(
tableModel
.
getTableName
(),
tableModel
.
getColumnModels
());
}
}
litepal/src/main/java/org/litepal/tablemanager/Generator.java
浏览文件 @
bd790a55
...
...
@@ -18,6 +18,7 @@ package org.litepal.tablemanager;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
org.litepal.LitePalBase
;
import
org.litepal.exceptions.DatabaseGenerateException
;
...
...
@@ -28,6 +29,7 @@ import org.litepal.util.BaseUtility;
import
android.database.SQLException
;
import
android.database.sqlite.SQLiteDatabase
;
import
android.text.TextUtils
;
/**
* This class is the basic class for managing database dynamically. It is used
...
...
@@ -100,13 +102,15 @@ public abstract class Generator extends LitePalBase {
*
* @throws org.litepal.exceptions.DatabaseGenerateException
*/
protected
void
execute
(
String
[]
sqls
,
SQLiteDatabase
db
)
{
protected
void
execute
(
List
<
String
>
sqls
,
SQLiteDatabase
db
)
{
String
throwSQL
=
""
;
try
{
if
(
sqls
!=
null
)
{
if
(
sqls
!=
null
&&
!
sqls
.
isEmpty
()
)
{
for
(
String
sql
:
sqls
)
{
throwSQL
=
sql
;
db
.
execSQL
(
BaseUtility
.
changeCase
(
sql
));
if
(!
TextUtils
.
isEmpty
(
sql
))
{
throwSQL
=
BaseUtility
.
changeCase
(
sql
);
db
.
execSQL
(
throwSQL
);
}
}
}
}
catch
(
SQLException
e
)
{
...
...
litepal/src/main/java/org/litepal/tablemanager/Upgrader.java
浏览文件 @
bd790a55
...
...
@@ -244,14 +244,14 @@ public class Upgrader extends AssociationUpdater {
*
* @param columnModelList
* List with ColumnModel to add new column.
* @return A SQL
array
contains add all new columns job.
* @return A SQL
list
contains add all new columns job.
*/
private
String
[]
getAddColumnSQLs
(
List
<
ColumnModel
>
columnModelList
)
{
private
List
<
String
>
getAddColumnSQLs
(
List
<
ColumnModel
>
columnModelList
)
{
List
<
String
>
sqls
=
new
ArrayList
<
String
>();
for
(
ColumnModel
columnModel
:
columnModelList
)
{
sqls
.
add
(
generateAddColumnSQL
(
columnModel
));
}
return
sqls
.
toArray
(
new
String
[
0
])
;
return
sqls
;
}
/**
...
...
@@ -316,10 +316,10 @@ public class Upgrader extends AssociationUpdater {
/**
* This method create a SQL array for the whole changing column constraints job.
* @return A SQL
array
contains create temporary table, create new table, add foreign keys,
* @return A SQL
list
contains create temporary table, create new table, add foreign keys,
* migrate data and drop temporary table.
*/
private
String
[]
getChangeColumnsConstraintsSQL
()
{
private
List
<
String
>
getChangeColumnsConstraintsSQL
()
{
String
alterToTempTableSQL
=
generateAlterToTempTableSQL
(
mTableModel
.
getTableName
());
String
createNewTableSQL
=
generateCreateTableSQL
(
mTableModel
);
List
<
String
>
addForeignKeySQLs
=
generateAddForeignKeySQL
();
...
...
@@ -336,7 +336,7 @@ public class Upgrader extends AssociationUpdater {
LogUtil
.
d
(
TAG
,
sql
);
}
LogUtil
.
d
(
TAG
,
"<< generateChangeConstraintSQL"
);
return
sqls
.
toArray
(
new
String
[
0
])
;
return
sqls
;
}
/**
...
...
litepal/src/main/java/org/litepal/tablemanager/model/ColumnModel.java
浏览文件 @
bd790a55
...
...
@@ -46,6 +46,11 @@ public class ColumnModel {
*/
private
boolean
isUnique
=
false
;
/**
* Column has index or not.
*/
private
boolean
hasIndex
=
false
;
/**
* Default constraint.
*/
...
...
@@ -71,7 +76,7 @@ public class ColumnModel {
return
isNullable
;
}
public
void
set
Is
Nullable
(
boolean
isNullable
)
{
public
void
setNullable
(
boolean
isNullable
)
{
this
.
isNullable
=
isNullable
;
}
...
...
@@ -79,10 +84,18 @@ public class ColumnModel {
return
isUnique
;
}
public
void
set
Is
Unique
(
boolean
isUnique
)
{
public
void
setUnique
(
boolean
isUnique
)
{
this
.
isUnique
=
isUnique
;
}
public
boolean
isHasIndex
()
{
return
hasIndex
;
}
public
void
setHasIndex
(
boolean
hasIndex
)
{
this
.
hasIndex
=
hasIndex
;
}
public
String
getDefaultValue
()
{
return
defaultValue
;
}
...
...
litepal/src/main/java/org/litepal/util/DBUtility.java
浏览文件 @
bd790a55
...
...
@@ -374,8 +374,8 @@ public class DBUtility {
String
defaultValue
=
cursor
.
getString
(
cursor
.
getColumnIndexOrThrow
(
"dflt_value"
));
columnModel
.
setColumnName
(
name
);
columnModel
.
setColumnType
(
type
);
columnModel
.
set
Is
Nullable
(
nullable
);
columnModel
.
set
Is
Unique
(
unique
);
columnModel
.
setNullable
(
nullable
);
columnModel
.
setUnique
(
unique
);
if
(
defaultValue
!=
null
)
{
defaultValue
=
defaultValue
.
replace
(
"'"
,
""
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录