Skip to content

Commit 3b3ba65

Browse files
committed
add metaData.addUpdateTableMateList(String tableName);
1 parent fb13a66 commit 3b3ba65

16 files changed

+161
-36
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,16 @@ List<DBMetaData> metaDataList = DBStreamContext.getInstance().metaDataList();
174174
// 通过 jdbcKey 获取指定数据库的元数据信息
175175
DBMetaData metaData = DBStreamContext.getInstance().getMetaData(String jdbcKey);
176176

177+
// 主动更新表的元数据信息,在使用改变时将会先更新metadata然后再执行业务。(动态更新表的元数据)
178+
metaData.addUpdateTableMateList(String tableName);
179+
177180
// 获取所有已缓存的数据库连接 jdbcKey 列表
178181
List<String> dbKeys = DBStreamContext.getInstance().loadDbKeys();
179182

180-
// 清理指定数据库的元数据缓存(清空后下次访问会自动重新加载)
183+
// 清理指定数据库的元数据缓存(清空后下次访问会自动重新加载,动态更新表的元数据
181184
DBStreamContext.getInstance().clear(String jdbcKey);
182185

183-
// 清理所有数据库的元数据缓存
186+
// 清理所有数据库的元数据缓存(动态更新表的元数据)
184187
DBStreamContext.getInstance().clearAll();
185188
```
186189

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.codingapi.dbstream</groupId>
66
<artifactId>dbstream-driver</artifactId>
7-
<version>1.0.2</version>
7+
<version>1.0.3</version>
88

99
<url>https://github.com/codingapi/dbstream-driver</url>
1010
<name>dbstream-driver</name>

src/main/java/com/codingapi/dbstream/DBStreamContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public void addListener(SQLExecuteListener sqlExecuteListener) {
4242

4343
/**
4444
* 是否支持SQL 拦截代理分析
45-
* @param info 数据库连接信息
45+
*
46+
* @param info 数据库连接信息
4647
* @param dbTable 数据库表信息
4748
* @return 是否支持
4849
*/

src/main/java/com/codingapi/dbstream/driver/DBStreamProxyDriver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ public class DBStreamProxyDriver implements Driver {
2727

2828
@Override
2929
public Connection connect(String url, Properties info) throws SQLException {
30-
if(this.driver==null){
30+
if (this.driver == null) {
3131
this.acceptsURL(url);
3232
}
3333
Connection connection = driver.connect(url, info);
3434
info.setProperty(DBMetaData.KEY_JDBC_URL, url);
3535
String jdbcKey = info.getProperty(DBMetaData.KEY_JDBC_KEY);
3636
DBMetaData metaData = DBMetaContext.getInstance().getMetaData(jdbcKey);
3737
if (metaData == null) {
38-
DBScanner scanner = new DBScanner(connection,info);
38+
DBScanner scanner = new DBScanner(connection, info);
3939
metaData = scanner.loadMetadata();
4040
DBMetaContext.getInstance().update(metaData);
4141
}

src/main/java/com/codingapi/dbstream/interceptor/SQLExecuteState.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.codingapi.dbstream.proxy.ConnectionProxy;
44
import com.codingapi.dbstream.scanner.DBMetaData;
5+
import com.codingapi.dbstream.scanner.DBScanner;
56
import com.codingapi.dbstream.scanner.DbColumn;
67
import com.codingapi.dbstream.scanner.DbTable;
78
import lombok.Getter;
@@ -127,19 +128,6 @@ public void setParam(int index, Object value) {
127128
}
128129

129130

130-
/**
131-
* 获取表的元数据数据信息
132-
*
133-
* @param tableName 表名称 不区分大小写
134-
* @return 表数据
135-
*/
136-
public DbTable getTable(String tableName) {
137-
if (metaData == null) {
138-
return null;
139-
}
140-
return metaData.getTable(tableName);
141-
}
142-
143131
/**
144132
* 元数据中是否存在表
145133
*
@@ -172,7 +160,7 @@ public List<Map<String, Object>> query(String sql, List<Object> params) throws S
172160
PreparedStatement preparedStatement = connection.prepareStatement(sql);
173161
for (int i = 0; i < params.size(); i++) {
174162
Object param = params.get(i);
175-
preparedStatement.setObject(i + 1,param);
163+
preparedStatement.setObject(i + 1, param);
176164
}
177165
ResultSet resultSet = preparedStatement.executeQuery();
178166
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
@@ -216,18 +204,39 @@ public List<Map<String, Object>> getStatementGenerateKeys(DbTable dbTable) {
216204
}
217205

218206

219-
public Properties getDriverProperties(){
207+
/**
208+
* 获取驱动配置信息
209+
* @return Properties
210+
*/
211+
public Properties getDriverProperties() {
220212
if (metaData == null) {
221213
return null;
222214
}
223215
return this.metaData.getProperties();
224216
}
225217

226218

219+
/**
220+
* 获取数据库的jdbcUrl
221+
* @return jdbcUrl
222+
*/
227223
public String getJdbcUrl() {
228224
if (metaData == null) {
229225
return null;
230226
}
231227
return metaData.getJdbcUrl();
232228
}
229+
230+
231+
/**
232+
* 更新数据库的元数据信息
233+
* @param tableName 表名
234+
*/
235+
public void updateMetaData(String tableName) throws SQLException {
236+
// 当前表需要更新时,将会连同所有带更新的表一次性全部更新
237+
if (this.metaData.isUpdateTableMeta(tableName)) {
238+
DBScanner dbScanner = new DBScanner(connection, getDriverProperties());
239+
dbScanner.updateMetadata(this.metaData);
240+
}
241+
}
233242
}

src/main/java/com/codingapi/dbstream/listener/SQLDeleteExecuteListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
2828
Statement parserStatement = CCJSqlParserUtil.parse(sql);
2929
Delete delete = (Delete) parserStatement;
3030
Table table = delete.getTable();
31+
executeState.updateMetaData(table.getName());
3132
DbTable dbTable = executeState.getDbTable(table.getName());
3233
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
3334
DeleteDBEventParser dataParser = new DeleteDBEventParser(executeState, delete, table, dbTable);

src/main/java/com/codingapi/dbstream/listener/SQLInsertExecuteListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
2828
Statement parserStatement = CCJSqlParserUtil.parse(sql);
2929
Insert insert = (Insert) parserStatement;
3030
Table table = insert.getTable();
31+
executeState.updateMetaData(table.getName());
3132
DbTable dbTable = executeState.getDbTable(table.getName());
3233
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
3334
InsertDBEventParser dataParser = new InsertDBEventParser(executeState, insert, table, dbTable);

src/main/java/com/codingapi/dbstream/listener/SQLUpdateExecuteListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
2828
Statement parserStatement = CCJSqlParserUtil.parse(sql);
2929
Update update = (Update) parserStatement;
3030
Table table = update.getTable();
31+
executeState.updateMetaData(table.getName());
3132
DbTable dbTable = executeState.getDbTable(table.getName());
3233
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
3334
UpdateDBEventParser dataParser = new UpdateDBEventParser(executeState, update, table, dbTable);

src/main/java/com/codingapi/dbstream/parser/InsertDBEventParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,13 @@ private List<DBEvent> loadDefaultInsertEvent() {
115115

116116

117117
private List<String> loadInsertColumns() {
118-
ExpressionList<?> values = this.insert.getValues().getExpressions();
118+
ExpressionList<?> values = this.insert.getValues().getExpressions();
119119
ExpressionList<Column> columns = this.insert.getColumns();
120120
List<String> columnList = new ArrayList<>();
121-
for (int i=0;i<columns.size();i++) {
121+
for (int i = 0; i < columns.size(); i++) {
122122
Column column = columns.get(i);
123123
Expression expression = values.get(i);
124-
if(expression instanceof JdbcParameter) {
124+
if (expression instanceof JdbcParameter) {
125125
columnList.add(column.getColumnName());
126126
}
127127
}

src/main/java/com/codingapi/dbstream/provider/DefaultDBTableSupportProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class DefaultDBTableSupportProvider implements DBTableSupportProvider {
88

99
@Override
1010
public boolean support(Properties info, DbTable dbTable) {
11-
if(dbTable.hasColumns() && dbTable.hasPrimaryKeys()) {
11+
if (dbTable.hasColumns() && dbTable.hasPrimaryKeys()) {
1212
return true;
1313
}
1414
return false;

0 commit comments

Comments
 (0)