Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zhaoyufei133
litepal
提交
c3cbc0fe
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 搜索 >>
提交
c3cbc0fe
编写于
5月 13, 2020
作者:
G
guolindev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Optimize TableModel find and remove ColumnModel mechanism. Use HashMap to speed up finding process.
上级
2b08ba45
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
26 addition
and
49 deletion
+26
-49
core/src/main/java/org/litepal/tablemanager/AssociationCreator.java
...ain/java/org/litepal/tablemanager/AssociationCreator.java
+6
-5
core/src/main/java/org/litepal/tablemanager/AssociationUpdater.java
...ain/java/org/litepal/tablemanager/AssociationUpdater.java
+3
-3
core/src/main/java/org/litepal/tablemanager/Upgrader.java
core/src/main/java/org/litepal/tablemanager/Upgrader.java
+4
-4
core/src/main/java/org/litepal/tablemanager/model/TableModel.java
.../main/java/org/litepal/tablemanager/model/TableModel.java
+11
-36
sample/src/main/java/org/litepal/litepalsample/activity/TableStructureActivity.java
...itepal/litepalsample/activity/TableStructureActivity.java
+2
-1
未找到文件。
core/src/main/java/org/litepal/tablemanager/AssociationCreator.java
浏览文件 @
c3cbc0fe
...
...
@@ -75,7 +75,7 @@ public abstract class AssociationCreator extends Generator {
* an auto increment id.
* @return A generated create table SQL.
*/
protected
String
generateCreateTableSQL
(
String
tableName
,
List
<
ColumnModel
>
columnModels
,
protected
String
generateCreateTableSQL
(
String
tableName
,
Collection
<
ColumnModel
>
columnModels
,
boolean
autoIncrementId
)
{
StringBuilder
createTableSQL
=
new
StringBuilder
(
"create table "
);
createTableSQL
.
append
(
tableName
).
append
(
" ("
);
...
...
@@ -429,10 +429,11 @@ public abstract class AssociationCreator extends Generator {
* List contains model fields.
* @return If ColumnModel list is empty or contains only id, _id field, return true. Otherwise return false.
*/
private
boolean
isContainsOnlyIdField
(
List
<
ColumnModel
>
columnModels
)
{
return
columnModels
.
size
()
==
0
||
(
columnModels
.
size
()
==
1
&&
isIdColumn
(
columnModels
.
get
(
0
).
getColumnName
()))
||
(
columnModels
.
size
()
==
2
&&
isIdColumn
(
columnModels
.
get
(
0
).
getColumnName
())
&&
isIdColumn
(
columnModels
.
get
(
1
).
getColumnName
()));
private
boolean
isContainsOnlyIdField
(
Collection
<
ColumnModel
>
columnModels
)
{
for
(
ColumnModel
columnModel
:
columnModels
)
{
if
(!
columnModel
.
isIdColumn
())
return
false
;
}
return
true
;
}
}
core/src/main/java/org/litepal/tablemanager/AssociationUpdater.java
浏览文件 @
c3cbc0fe
...
...
@@ -86,8 +86,8 @@ public abstract class AssociationUpdater extends Creator {
*/
protected
List
<
String
>
getForeignKeyColumns
(
TableModel
tableModel
)
{
List
<
String
>
foreignKeyColumns
=
new
ArrayList
<
String
>();
List
<
ColumnModel
>
columnModelList
=
getTableModelFromDB
(
tableModel
.
getTableName
()).
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
List
)
{
Collection
<
ColumnModel
>
columnModels
=
getTableModelFromDB
(
tableModel
.
getTableName
()).
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
s
)
{
String
columnName
=
columnModel
.
getColumnName
();
if
(
isForeignKeyColumnFormat
(
columnModel
.
getColumnName
()))
{
if
(!
tableModel
.
containsColumn
(
columnName
))
{
...
...
@@ -357,7 +357,7 @@ public abstract class AssociationUpdater extends Creator {
*/
protected
String
generateDataMigrationSQL
(
TableModel
tableModel
)
{
String
tableName
=
tableModel
.
getTableName
();
List
<
ColumnModel
>
columnModels
=
tableModel
.
getColumnModels
();
Collection
<
ColumnModel
>
columnModels
=
tableModel
.
getColumnModels
();
if
(!
columnModels
.
isEmpty
())
{
StringBuilder
sql
=
new
StringBuilder
();
sql
.
append
(
"insert into "
).
append
(
tableName
).
append
(
"("
);
...
...
core/src/main/java/org/litepal/tablemanager/Upgrader.java
浏览文件 @
c3cbc0fe
...
...
@@ -104,8 +104,8 @@ public class Upgrader extends AssociationUpdater {
* @return True if has new unique or not null column. False otherwise.
*/
private
boolean
hasNewUniqueOrNotNullColumn
()
{
List
<
ColumnModel
>
columnModelList
=
mTableModel
.
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
List
)
{
Collection
<
ColumnModel
>
columnModels
=
mTableModel
.
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
s
)
{
if
(
columnModel
.
isIdColumn
())
continue
;
// id don't check unique or nullable, we never upgrade it.
ColumnModel
columnModelDB
=
mTableModelDB
.
getColumnModelByName
(
columnModel
.
getColumnName
());
if
(
columnModel
.
isUnique
())
{
...
...
@@ -153,8 +153,8 @@ public class Upgrader extends AssociationUpdater {
private
List
<
String
>
findColumnsToRemove
()
{
String
tableName
=
mTableModel
.
getTableName
();
List
<
String
>
removeColumns
=
new
ArrayList
<
String
>();
List
<
ColumnModel
>
columnModelList
=
mTableModelDB
.
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
List
)
{
Collection
<
ColumnModel
>
columnModels
=
mTableModelDB
.
getColumnModels
();
for
(
ColumnModel
columnModel
:
columnModel
s
)
{
String
dbColumnName
=
columnModel
.
getColumnName
();
if
(
isNeedToRemove
(
dbColumnName
))
{
removeColumns
.
add
(
dbColumnName
);
...
...
core/src/main/java/org/litepal/tablemanager/model/TableModel.java
浏览文件 @
c3cbc0fe
...
...
@@ -16,10 +16,9 @@
package
org.litepal.tablemanager.model
;
import
android.text.TextUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* This is a model class for tables. It stores a table name and a HashMap for
...
...
@@ -36,9 +35,9 @@ public class TableModel {
private
String
tableName
;
/**
* A
list
contains all column models with column name, type and constraints.
* A
map
contains all column models with column name, type and constraints.
*/
private
List
<
ColumnModel
>
columnModels
=
new
ArrayList
<
ColumnModel
>();
private
Map
<
String
,
ColumnModel
>
columnModelMap
=
new
HashMap
<
>();
/**
* Class name for the table name. This value might be null. Don't rely on it.
...
...
@@ -90,15 +89,15 @@ public class TableModel {
* A column model contains name, type and constraints.
*/
public
void
addColumnModel
(
ColumnModel
columnModel
)
{
columnModel
s
.
add
(
columnModel
);
columnModel
Map
.
put
(
columnModel
.
getColumnName
(),
columnModel
);
}
/**
* Find all the column models of the current table model.
* @return A list contains all column models.
*/
public
List
<
ColumnModel
>
getColumnModels
()
{
return
columnModel
s
;
public
Collection
<
ColumnModel
>
getColumnModels
()
{
return
columnModel
Map
.
values
()
;
}
/**
...
...
@@ -108,12 +107,7 @@ public class TableModel {
* @return A ColumnModel which can map the column name passed in. Or null.
*/
public
ColumnModel
getColumnModelByName
(
String
columnName
)
{
for
(
ColumnModel
columnModel
:
columnModels
)
{
if
(
columnModel
.
getColumnName
().
equalsIgnoreCase
(
columnName
))
{
return
columnModel
;
}
}
return
null
;
return
columnModelMap
.
get
(
columnName
);
}
/**
...
...
@@ -122,20 +116,7 @@ public class TableModel {
* Name of the column to remove.
*/
public
void
removeColumnModelByName
(
String
columnName
)
{
if
(
TextUtils
.
isEmpty
(
columnName
))
{
return
;
}
int
indexToRemove
=
-
1
;
for
(
int
i
=
0
;
i
<
columnModels
.
size
();
i
++)
{
ColumnModel
columnModel
=
columnModels
.
get
(
i
);
if
(
columnName
.
equalsIgnoreCase
(
columnModel
.
getColumnName
()))
{
indexToRemove
=
i
;
break
;
}
}
if
(
indexToRemove
!=
-
1
)
{
columnModels
.
remove
(
indexToRemove
);
}
columnModelMap
.
remove
(
columnName
);
}
/**
...
...
@@ -145,13 +126,7 @@ public class TableModel {
* @return True if matches a column in the table model. False otherwise.
*/
public
boolean
containsColumn
(
String
columnName
)
{
for
(
int
i
=
0
;
i
<
columnModels
.
size
();
i
++)
{
ColumnModel
columnModel
=
columnModels
.
get
(
i
);
if
(
columnName
.
equalsIgnoreCase
(
columnModel
.
getColumnName
()))
{
return
true
;
}
}
return
false
;
return
columnModelMap
.
containsKey
(
columnName
);
}
}
sample/src/main/java/org/litepal/litepalsample/activity/TableStructureActivity.java
浏览文件 @
c3cbc0fe
...
...
@@ -35,6 +35,7 @@ import org.litepal.tablemanager.model.TableModel;
import
org.litepal.util.DBUtility
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
public
class
TableStructureActivity
extends
AppCompatActivity
{
...
...
@@ -65,7 +66,7 @@ public class TableStructureActivity extends AppCompatActivity {
private
void
analyzeTableStructure
()
{
TableModel
tableMode
=
DBUtility
.
findPragmaTableInfo
(
mTableName
,
Connector
.
getDatabase
());
List
<
ColumnModel
>
columnModelList
=
tableMode
.
getColumnModels
();
Collection
<
ColumnModel
>
columnModelList
=
tableMode
.
getColumnModels
();
mList
.
addAll
(
columnModelList
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录