diff --git a/src/org/redkale/source/DataJdbcSource.java b/src/org/redkale/source/DataJdbcSource.java index 0962b7a41..e625577f3 100644 --- a/src/org/redkale/source/DataJdbcSource.java +++ b/src/org/redkale/source/DataJdbcSource.java @@ -207,7 +207,7 @@ public class DataJdbcSource extends DataSqlSource { } @Override - protected CompletableFuture clearTableDB(EntityInfo info, String sql) { + protected CompletableFuture clearTableDB(EntityInfo info, final String table, String sql) { Connection conn = null; try { conn = writePool.poll(); @@ -228,7 +228,7 @@ public class DataJdbcSource extends DataSqlSource { } @Override - protected CompletableFuture dropTableDB(EntityInfo info, String sql) { + protected CompletableFuture dropTableDB(EntityInfo info, final String table, String sql) { Connection conn = null; try { conn = writePool.poll(); @@ -237,6 +237,10 @@ public class DataJdbcSource extends DataSqlSource { final Statement stmt = conn.createStatement(); int c = stmt.executeUpdate(sql); stmt.close(); + if (info.getTableStrategy() != null) { + String tablekey = table.indexOf('.') > 0 ? table : (conn.getCatalog() + '.' + table); + info.removeDisTable(tablekey); + } return CompletableFuture.completedFuture(c); } catch (SQLException e) { if (info.isTableNotExist(e)) return CompletableFuture.completedFuture(-1); diff --git a/src/org/redkale/source/DataMemorySource.java b/src/org/redkale/source/DataMemorySource.java index 8fee91d50..2eba78f06 100644 --- a/src/org/redkale/source/DataMemorySource.java +++ b/src/org/redkale/source/DataMemorySource.java @@ -94,12 +94,12 @@ public class DataMemorySource extends DataSqlSource { } @Override - protected CompletableFuture clearTableDB(EntityInfo info, String sql) { + protected CompletableFuture clearTableDB(EntityInfo info, final String table, String sql) { return CompletableFuture.completedFuture(0); } @Override - protected CompletableFuture dropTableDB(EntityInfo info, String sql) { + protected CompletableFuture dropTableDB(EntityInfo info, final String table, String sql) { return CompletableFuture.completedFuture(0); } diff --git a/src/org/redkale/source/DataSqlSource.java b/src/org/redkale/source/DataSqlSource.java index 927c20e4b..bc595bbf9 100644 --- a/src/org/redkale/source/DataSqlSource.java +++ b/src/org/redkale/source/DataSqlSource.java @@ -137,10 +137,10 @@ public abstract class DataSqlSource extends AbstractService implement protected abstract CompletableFuture deleteDB(final EntityInfo info, Flipper flipper, final String sql); //清空表 - protected abstract CompletableFuture clearTableDB(final EntityInfo info, final String sql); + protected abstract CompletableFuture clearTableDB(final EntityInfo info, final String table, final String sql); //删除表 - protected abstract CompletableFuture dropTableDB(final EntityInfo info, final String sql); + protected abstract CompletableFuture dropTableDB(final EntityInfo info, final String table, final String sql); //更新纪录 protected abstract CompletableFuture updateDB(final EntityInfo info, T... entitys); @@ -608,9 +608,10 @@ public abstract class DataSqlSource extends AbstractService implement } protected CompletableFuture clearTableCompose(final EntityInfo info, final FilterNode node) { - String sql = "TRUNCATE TABLE " + info.getTable(node); + final String table = info.getTable(node); + String sql = "TRUNCATE TABLE " + table; if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " clearTable sql=" + sql); - return clearTableDB(info, sql); + return clearTableDB(info, table, sql); } //----------------------------- dropTableCompose ----------------------------- @@ -660,9 +661,10 @@ public abstract class DataSqlSource extends AbstractService implement } protected CompletableFuture dropTableCompose(final EntityInfo info, final FilterNode node) { - String sql = "DROP TABLE " + info.getTable(node); + final String table = info.getTable(node); + String sql = "DROP TABLE " + table; if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " dropTable sql=" + sql); - return dropTableDB(info, sql); + return dropTableDB(info, table, sql); } protected int clearTableCache(final EntityInfo info, FilterNode node) { diff --git a/src/org/redkale/source/EntityInfo.java b/src/org/redkale/source/EntityInfo.java index 39f401591..edf7fdd54 100644 --- a/src/org/redkale/source/EntityInfo.java +++ b/src/org/redkale/source/EntityInfo.java @@ -9,7 +9,7 @@ import java.io.Serializable; import java.lang.reflect.*; import java.sql.*; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.function.*; import java.util.logging.*; @@ -95,7 +95,7 @@ public final class EntityInfo { private final String tablecopySQL; //用于存在database.table_20160202类似这种分布式表 - private final Set tables = new HashSet<>(); + private final Set tables = new CopyOnWriteArraySet<>(); //分表 策略 private final DistributeTableStrategy tableStrategy; @@ -522,6 +522,10 @@ public final class EntityInfo { tables.add(tablekey); } + public boolean removeDisTable(String tablekey) { + return tables.remove(tablekey); + } + public String getTableNotExistSqlStates2() { return tablenotexistSqlstates; }