@@ -128,7 +128,7 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
protected abstract PoolSource < DBChannel > createPoolSource ( DataSource source , String rwtype , ArrayBlockingQueue queue , Semaphore semaphore , Properties prop ) ;
//插入纪录
protected abstract < T > CompletableFuture < Integer > insertDB ( final EntityInfo < T > info , T . . . value s) ;
protected abstract < T > CompletableFuture < Integer > insertDB ( final EntityInfo < T > info , T . . . entity s) ;
//删除记录
protected abstract < T > CompletableFuture < Integer > deleteDB ( final EntityInfo < T > info , Flipper flipper , final String sql ) ;
@@ -140,7 +140,7 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
protected abstract < T > CompletableFuture < Integer > dropTableDB ( final EntityInfo < T > info , final String sql ) ;
//更新纪录
protected abstract < T > CompletableFuture < Integer > updateDB ( final EntityInfo < T > info , T . . . value s) ;
protected abstract < T > CompletableFuture < Integer > updateDB ( final EntityInfo < T > info , T . . . entity s) ;
//更新纪录
protected abstract < T > CompletableFuture < Integer > updateDB ( final EntityInfo < T > info , Flipper flipper , final String sql , final boolean prepared , Object . . . params ) ;
@@ -256,10 +256,10 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
////检查对象是否都是同一个Entity类
protected < T > CompletableFuture checkEntity ( String action , boolean async , T . . . value s) {
if ( value s. length < 1 ) return null ;
protected < T > CompletableFuture checkEntity ( String action , boolean async , T . . . entity s) {
if ( entity s. length < 1 ) return null ;
Class clazz = null ;
for ( T val : value s) {
for ( T val : entity s) {
if ( clazz = = null ) {
clazz = val . getClass ( ) ;
continue ;
@@ -280,80 +280,80 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
/**
* 新增对象, 必须是Entity对象
*
* @param <T> Entity类泛型
* @param value s Entity对象
* @param <T> Entity类泛型
* @param entity s Entity对象
*
* @return 影响的记录条数
*/
@Override
public < T > int insert ( @RpcCall ( DataCallArrayAttribute . class ) T . . . value s) {
if ( value s. length = = 0 ) return 0 ;
checkEntity ( " insert " , false , value s) ;
final EntityInfo < T > info = loadEntityInfo ( ( Class < T > ) value s[ 0 ] . getClass ( ) ) ;
public < T > int insert ( @RpcCall ( DataCallArrayAttribute . class ) T . . . entity s) {
if ( entity s. length = = 0 ) return 0 ;
checkEntity ( " insert " , false , entity s) ;
final EntityInfo < T > info = loadEntityInfo ( ( Class < T > ) entity s[ 0 ] . getClass ( ) ) ;
if ( info . autouuid ) {
for ( T value : value s) {
for ( T value : entity s) {
info . createPrimaryValue ( value ) ;
}
}
if ( isOnlyCache ( info ) ) return insertCache ( info , value s) ;
return insertDB ( info , value s) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return insertCache ( info , entity s) ;
return insertDB ( info , entity s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
insertCache ( info , value s) ;
insertCache ( info , entity s) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > insertAsync ( @RpcCall ( DataCallArrayAttribute . class ) T . . . value s) {
if ( value s. length = = 0 ) return CompletableFuture . completedFuture ( 0 ) ;
CompletableFuture future = checkEntity ( " insert " , true , value s) ;
public < T > CompletableFuture < Integer > insertAsync ( @RpcCall ( DataCallArrayAttribute . class ) T . . . entity s) {
if ( entity s. length = = 0 ) return CompletableFuture . completedFuture ( 0 ) ;
CompletableFuture future = checkEntity ( " insert " , true , entity s) ;
if ( future ! = null ) return future ;
final EntityInfo < T > info = loadEntityInfo ( ( Class < T > ) value s[ 0 ] . getClass ( ) ) ;
final EntityInfo < T > info = loadEntityInfo ( ( Class < T > ) entity s[ 0 ] . getClass ( ) ) ;
if ( info . autouuid ) {
for ( T value : value s) {
for ( T value : entity s) {
info . createPrimaryValue ( value ) ;
}
}
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > insertCache ( info , value s) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > insertCache ( info , entity s) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return insertDB ( info , value s) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return insertDB ( info , entity s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
insertCache ( info , value s) ;
insertCache ( info , entity s) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > insertDB ( info , value s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > insertDB ( info , entity s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
insertCache ( info , value s) ;
insertCache ( info , entity s) ;
}
} ) ;
}
protected < T > int insertCache ( final EntityInfo < T > info , T . . . value s) {
protected < T > int insertCache ( final EntityInfo < T > info , T . . . entity s) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return 0 ;
int c = 0 ;
for ( final T value : value s) {
for ( final T value : entity s) {
c + = cache . insert ( value ) ;
}
if ( cacheListener ! = null ) cacheListener . insertCache ( info . getType ( ) , value s) ;
if ( cacheListener ! = null ) cacheListener . insertCache ( info . getType ( ) , entity s) ;
return c ;
}
@Override
public < T > int insertCache ( Class < T > clazz , T . . . value s) {
if ( value s. length = = 0 ) return 0 ;
public < T > int insertCache ( Class < T > clazz , T . . . entity s) {
if ( entity s. length = = 0 ) return 0 ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
int c = 0 ;
for ( T value : value s) {
for ( T value : entity s) {
c + = cache . insert ( value ) ;
}
return c ;
@@ -363,75 +363,75 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
/**
* 删除对象, 必须是Entity对象
*
* @param <T> Entity类泛型
* @param value s Entity对象
* @param <T> Entity类泛型
* @param entity s Entity对象
*
* @return 删除的数据条数
*/
@Override
public < T > int delete ( T . . . value s) {
if ( value s. length = = 0 ) return - 1 ;
checkEntity ( " delete " , false , value s) ;
final Class < T > clazz = ( Class < T > ) value s[ 0 ] . getClass ( ) ;
public < T > int delete ( T . . . entity s) {
if ( entity s. length = = 0 ) return - 1 ;
checkEntity ( " delete " , false , entity s) ;
final Class < T > clazz = ( Class < T > ) entity s[ 0 ] . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final Attribute primary = info . getPrimary ( ) ;
Serializable [ ] ids = new Serializable [ value s. length ] ;
Serializable [ ] ids = new Serializable [ entity s. length ] ;
int i = 0 ;
for ( final T value : value s) {
for ( final T value : entity s) {
ids [ i + + ] = ( Serializable ) primary . get ( value ) ;
}
return delete ( clazz , ids ) ;
}
@Override
public < T > CompletableFuture < Integer > deleteAsync ( final T . . . value s) {
if ( value s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
CompletableFuture future = checkEntity ( " delete " , true , value s) ;
public < T > CompletableFuture < Integer > deleteAsync ( final T . . . entity s) {
if ( entity s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
CompletableFuture future = checkEntity ( " delete " , true , entity s) ;
if ( future ! = null ) return future ;
final Class < T > clazz = ( Class < T > ) value s[ 0 ] . getClass ( ) ;
final Class < T > clazz = ( Class < T > ) entity s[ 0 ] . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final Attribute primary = info . getPrimary ( ) ;
Serializable [ ] ids = new Serializable [ value s. length ] ;
Serializable [ ] ids = new Serializable [ entity s. length ] ;
int i = 0 ;
for ( final T value : value s) {
for ( final T value : entity s) {
ids [ i + + ] = ( Serializable ) primary . get ( value ) ;
}
return deleteAsync ( clazz , ids ) ;
}
@Override
public < T > int delete ( Class < T > clazz , Serializable . . . id s) {
if ( id s. length = = 0 ) return - 1 ;
public < T > int delete ( Class < T > clazz , Serializable . . . pk s) {
if ( pk s. length = = 0 ) return - 1 ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return deleteCache ( info , - 1 , id s) ;
return deleteCompose ( info , id s) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return deleteCache ( info , - 1 , pk s) ;
return deleteCompose ( info , pk s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
deleteCache ( info , rs , id s) ;
deleteCache ( info , rs , pk s) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > deleteAsync ( final Class < T > clazz , final Serializable . . . id s) {
if ( id s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
public < T > CompletableFuture < Integer > deleteAsync ( final Class < T > clazz , final Serializable . . . pk s) {
if ( pk s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > deleteCache ( info , - 1 , id s) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > deleteCache ( info , - 1 , pk s) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return deleteCompose ( info , id s) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return deleteCompose ( info , pk s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
deleteCache ( info , rs , id s) ;
deleteCache ( info , rs , pk s) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > deleteCompose ( info , id s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > deleteCompose ( info , pk s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
deleteCache ( info , rs , id s) ;
deleteCache ( info , rs , pk s) ;
}
} ) ;
}
@@ -481,15 +481,15 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
} ) ;
}
protected < T > CompletableFuture < Integer > deleteCompose ( final EntityInfo < T > info , final Serializable . . . id s) {
if ( id s. length = = 1 ) {
String sql = " DELETE FROM " + info . getTable ( id s[ 0 ] ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , id s[ 0 ] ) ) ;
protected < T > CompletableFuture < Integer > deleteCompose ( final EntityInfo < T > info , final Serializable . . . pk s) {
if ( pk s. length = = 1 ) {
String sql = " DELETE FROM " + info . getTable ( pk s[ 0 ] ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , pk s[ 0 ] ) ) ;
return deleteDB ( info , null , sql ) ;
}
String sql = " DELETE FROM " + info . getTable ( id s[ 0 ] ) + " WHERE " + info . getPrimarySQLColumn ( ) + " IN ( " ;
for ( int i = 0 ; i < id s. length ; i + + ) {
String sql = " DELETE FROM " + info . getTable ( pk s[ 0 ] ) + " WHERE " + info . getPrimarySQLColumn ( ) + " IN ( " ;
for ( int i = 0 ; i < pk s. length ; i + + ) {
if ( i > 0 ) sql + = ',' ;
sql + = FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , id s[ i ] ) ) ;
sql + = FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , pk s[ i ] ) ) ;
}
sql + = " ) " ;
if ( info . isLoggable ( logger , Level . FINEST , sql ) ) logger . finest ( info . getType ( ) . getSimpleName ( ) + " delete sql= " + sql ) ;
@@ -640,25 +640,25 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
return count > = 0 ? count : ( ids = = null ? 0 : ids . length ) ;
}
protected < T > int deleteCache ( final EntityInfo < T > info , int count , Serializable . . . key s ) {
protected < T > int deleteCache ( final EntityInfo < T > info , int count , Serializable . . . p ks) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
int c = 0 ;
for ( Serializable key : key s ) {
for ( Serializable key : p ks) {
c + = cache . delete ( key ) ;
}
if ( cacheListener ! = null ) cacheListener . deleteCache ( info . getType ( ) , key s ) ;
if ( cacheListener ! = null ) cacheListener . deleteCache ( info . getType ( ) , p ks) ;
return count > = 0 ? count : c ;
}
@Override
public < T > int deleteCache ( Class < T > clazz , Serializable . . . id s) {
if ( id s. length = = 0 ) return 0 ;
public < T > int deleteCache ( Class < T > clazz , Serializable . . . pk s) {
if ( pk s. length = = 0 ) return 0 ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
int c = 0 ;
for ( Serializable id : id s) {
for ( Serializable id : pk s) {
c + = cache . delete ( id ) ;
}
return c ;
@@ -679,47 +679,47 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
/**
* 更新对象, 必须是Entity对象
*
* @param <T> Entity类泛型
* @param value s Entity对象
* @param <T> Entity类泛型
* @param entity s Entity对象
*
* @return 更新的数据条数
*/
@Override
public < T > int update ( T . . . value s) {
if ( value s. length = = 0 ) return - 1 ;
checkEntity ( " update " , false , value s) ;
final Class < T > clazz = ( Class < T > ) value s[ 0 ] . getClass ( ) ;
public < T > int update ( T . . . entity s) {
if ( entity s. length = = 0 ) return - 1 ;
checkEntity ( " update " , false , entity s) ;
final Class < T > clazz = ( Class < T > ) entity s[ 0 ] . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , value s) ;
return updateDB ( info , value s) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , entity s) ;
return updateDB ( info , entity s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , value s) ;
updateCache ( info , rs , entity s) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateAsync ( final T . . . value s) {
if ( value s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
CompletableFuture future = checkEntity ( " update " , true , value s) ;
public < T > CompletableFuture < Integer > updateAsync ( final T . . . entity s) {
if ( entity s. length = = 0 ) return CompletableFuture . completedFuture ( - 1 ) ;
CompletableFuture future = checkEntity ( " update " , true , entity s) ;
if ( future ! = null ) return future ;
final Class < T > clazz = ( Class < T > ) value s[ 0 ] . getClass ( ) ;
final Class < T > clazz = ( Class < T > ) entity s[ 0 ] . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , value s) , getExecutor ( ) ) ;
if ( isAsync ( ) ) return updateDB ( info , value s) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , entity s) , getExecutor ( ) ) ;
if ( isAsync ( ) ) return updateDB ( info , entity s) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , value s) ;
updateCache ( info , rs , entity s) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateDB ( info , value s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > updateDB ( info , entity s) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , value s) ;
updateCache ( info , rs , entity s) ;
}
} ) ;
}
@@ -729,54 +729,54 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
*
* @param <T> Entity类的泛型
* @param clazz Entity类
* @param id 主键值
* @param pk 主键值
* @param column 过滤字段名
* @param value 过滤字段值
* @param col val 过滤字段值
*
* @return 更新的数据条数
*/
@Override
public < T > int updateColumn ( Class < T > clazz , Serializable id , String column , Serializable value ) {
public < T > int updateColumn ( Class < T > clazz , Serializable pk , String column , Serializable col val) {
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , id , column , value ) ;
return updateColumnCompose ( info , id , column , value ) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , pk , column , col val) ;
return updateColumnCompose ( info , pk , column , col val) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , column , value ) ;
updateCache ( info , rs , pk , column , col val) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final Serializable id , final String column , final Serializable value ) {
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final Serializable pk , final String column , final Serializable col val) {
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , id , column , value ) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , pk , column , col val) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return updateColumnCompose ( info , id , column , value ) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return updateColumnCompose ( info , pk , column , col val) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , column , value ) ;
updateCache ( info , rs , pk , column , col val) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateColumnCompose ( info , id , column , value ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > updateColumnCompose ( info , pk , column , col val) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , column , value ) ;
updateCache ( info , rs , pk , column , col val) ;
}
} ) ;
}
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , Serializable id , String column , final Serializable value ) {
if ( value instanceof byte [ ] ) {
String sql = " UPDATE " + info . getTable ( id ) + " SET " + info . getSQLColumn ( null , column ) + " = " + prepareParamSign ( 1 ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , id ) ) ;
return updateDB ( info , null , sql , true , value ) ;
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , Serializable pk , String column , final Serializable col val) {
if ( col val instanceof byte [ ] ) {
String sql = " UPDATE " + info . getTable ( pk ) + " SET " + info . getSQLColumn ( null , column ) + " = " + prepareParamSign ( 1 ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , pk ) ) ;
return updateDB ( info , null , sql , true , col val) ;
} else {
String sql = " UPDATE " + info . getTable ( id ) + " SET " + info . getSQLColumn ( null , column ) + " = "
+ info . formatToString ( info . getSQLValue ( column , value ) ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , id ) ) ;
String sql = " UPDATE " + info . getTable ( pk ) + " SET " + info . getSQLColumn ( null , column ) + " = "
+ info . formatToString ( info . getSQLValue ( column , col val) ) + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , pk ) ) ;
return updateDB ( info , null , sql , false ) ;
}
}
@@ -787,47 +787,47 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
* @param <T> Entity类的泛型
* @param clazz Entity类
* @param column 过滤字段名
* @param value 过滤字段值
* @param col val 过滤字段值
* @param node 过滤node 不能为null
*
* @return 更新的数据条数
*/
@Override
public < T > int updateColumn ( Class < T > clazz , String column , Serializable value , FilterNode node ) {
public < T > int updateColumn ( Class < T > clazz , String column , Serializable col val, FilterNode node ) {
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , column , value , node ) ;
return DataSqlSource . this . updateColumnCompose ( info , column , value , node ) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , column , col val, node ) ;
return DataSqlSource . this . updateColumnCompose ( info , column , col val, node ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , column , value , node ) ;
updateCache ( info , rs , column , col val, node ) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final String column , final Serializable value , final FilterNode node ) {
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final String column , final Serializable col val, final FilterNode node ) {
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , column , value , node ) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , column , col val, node ) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , column , value , node ) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , column , col val, node ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , column , value , node ) ;
updateCache ( info , rs , column , col val, node ) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , column , value , node ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , column , col val, node ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , column , value , node ) ;
updateCache ( info , rs , column , col val, node ) ;
}
} ) ;
}
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final String column , final Serializable value , final FilterNode node ) {
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final String column , final Serializable col val, final FilterNode node ) {
Map < Class , String > joinTabalis = node . getJoinTabalis ( ) ;
CharSequence join = node . createSQLJoin ( this , true , joinTabalis , new HashSet < > ( ) , info ) ;
CharSequence where = node . createSQLExpress ( info , joinTabalis ) ;
@@ -840,15 +840,15 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
join2 = multisplit ( '{' , '}' , " AND " , new StringBuilder ( ) , joinstr , 0 ) ;
}
String alias = " postgresql " . equals ( writePool . dbtype ) ? null : " a " ; //postgresql的BUG, UPDATE的SET中不能含别名
if ( value instanceof byte [ ] ) {
if ( col val instanceof byte [ ] ) {
String sql = " UPDATE " + info . getTable ( node ) + " a " + ( join1 = = null ? " " : ( " , " + join1 ) )
+ " SET " + info . getSQLColumn ( alias , column ) + " = " + prepareParamSign ( 1 )
+ ( ( where = = null | | where . length ( ) = = 0 ) ? ( join2 = = null ? " " : ( " WHERE " + join2 ) )
: ( " WHERE " + where + ( join2 = = null ? " " : ( " AND " + join2 ) ) ) ) ;
return updateDB ( info , null , sql , true , value ) ;
return updateDB ( info , null , sql , true , col val) ;
} else {
String sql = " UPDATE " + info . getTable ( node ) + " a " + ( join1 = = null ? " " : ( " , " + join1 ) )
+ " SET " + info . getSQLColumn ( alias , column ) + " = " + info . formatToString ( value )
+ " SET " + info . getSQLColumn ( alias , column ) + " = " + info . formatToString ( col val)
+ ( ( where = = null | | where . length ( ) = = 0 ) ? ( join2 = = null ? " " : ( " WHERE " + join2 ) )
: ( " WHERE " + where + ( join2 = = null ? " " : ( " AND " + join2 ) ) ) ) ;
return updateDB ( info , null , sql , false ) ;
@@ -860,49 +860,49 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
*
* @param <T> Entity类的泛型
* @param clazz Entity类
* @param id 主键值
* @param pk 主键值
* @param values 字段值
*
* @return 更新的数据条数
*/
@Override
public < T > int updateColumn ( final Class < T > clazz , final Serializable id , final ColumnValue . . . values ) {
public < T > int updateColumn ( final Class < T > clazz , final Serializable pk , final ColumnValue . . . values ) {
if ( values = = null | | values . length < 1 ) return - 1 ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , id , values ) ;
return DataSqlSource . this . updateColumnCompose ( info , id , values ) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , pk , values ) ;
return DataSqlSource . this . updateColumnCompose ( info , pk , values ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , values ) ;
updateCache ( info , rs , pk , values ) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final Serializable id , final ColumnValue . . . values ) {
public < T > CompletableFuture < Integer > updateColumnAsync ( final Class < T > clazz , final Serializable pk , final ColumnValue . . . values ) {
if ( values = = null | | values . length < 1 ) return CompletableFuture . completedFuture ( - 1 ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , id , values ) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , pk , values ) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , id , values ) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , pk , values ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , values ) ;
updateCache ( info , rs , pk , values ) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , id , values ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , pk , values ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , id , values ) ;
updateCache ( info , rs , pk , values ) ;
}
} ) ;
}
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final Serializable id , final ColumnValue . . . values ) {
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final Serializable pk , final ColumnValue . . . values ) {
StringBuilder setsql = new StringBuilder ( ) ;
List < byte [ ] > blobs = null ;
int index = 0 ;
@@ -921,7 +921,7 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
}
if ( setsql . length ( ) < 1 ) return CompletableFuture . completedFuture ( 0 ) ;
String sql = " UPDATE " + info . getTable ( id ) + " SET " + setsql + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , id ) ) ;
String sql = " UPDATE " + info . getTable ( pk ) + " SET " + setsql + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( info . getSQLValue ( info . getPrimarySQLColumn ( ) , pk ) ) ;
if ( blobs = = null ) return updateDB ( info , null , sql , false ) ;
return updateDB ( info , null , sql , true , blobs . toArray ( ) ) ;
}
@@ -1022,104 +1022,104 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
@Override
public < T > int updateColumn ( final T bean , final String . . . columns ) {
return updateColumn ( bean , SelectColumn . includes ( columns ) ) ;
public < T > int updateColumn ( final T entity , final String . . . columns ) {
return updateColumn ( entity , SelectColumn . includes ( columns ) ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final T bean , final String . . . columns ) {
return updateColumnAsync ( bean , SelectColumn . includes ( columns ) ) ;
public < T > CompletableFuture < Integer > updateColumnAsync ( final T entity , final String . . . columns ) {
return updateColumnAsync ( entity , SelectColumn . includes ( columns ) ) ;
}
@Override
public < T > int updateColumn ( final T bean , final FilterNode node , final String . . . columns ) {
return updateColumn ( bean , node , SelectColumn . includes ( columns ) ) ;
public < T > int updateColumn ( final T entity , final FilterNode node , final String . . . columns ) {
return updateColumn ( entity , node , SelectColumn . includes ( columns ) ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final T bean , final FilterNode node , final String . . . columns ) {
return updateColumnAsync ( bean , node , SelectColumn . includes ( columns ) ) ;
public < T > CompletableFuture < Integer > updateColumnAsync ( final T entity , final FilterNode node , final String . . . columns ) {
return updateColumnAsync ( entity , node , SelectColumn . includes ( columns ) ) ;
}
@Override
public < T > int updateColumn ( final T bean , final SelectColumn selects ) {
if ( bean = = null | | selects = = null ) return - 1 ;
Class < T > clazz = ( Class ) bean . getClass ( ) ;
public < T > int updateColumn ( final T entity , final SelectColumn selects ) {
if ( entity = = null | | selects = = null ) return - 1 ;
Class < T > clazz = ( Class ) entity . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , false , bean , null , selects ) ;
return DataSqlSource . this . updateColumnCompose ( info , false , bean , null , selects ) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , false , entity , null , selects ) ;
return DataSqlSource . this . updateColumnCompose ( info , false , entity , null , selects ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , false , bean , null , selects ) ;
updateCache ( info , rs , false , entity , null , selects ) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final T bean , final SelectColumn selects ) {
if ( bean = = null | | selects = = null ) return CompletableFuture . completedFuture ( - 1 ) ;
Class < T > clazz = ( Class ) bean . getClass ( ) ;
public < T > CompletableFuture < Integer > updateColumnAsync ( final T entity , final SelectColumn selects ) {
if ( entity = = null | | selects = = null ) return CompletableFuture . completedFuture ( - 1 ) ;
Class < T > clazz = ( Class ) entity . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , false , bean , null , selects ) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , false , entity , null , selects ) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , false , bean , null , selects ) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , false , entity , null , selects ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , false , bean , null , selects ) ;
updateCache ( info , rs , false , entity , null , selects ) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , false , bean , null , selects ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , false , entity , null , selects ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , false , bean , null , selects ) ;
updateCache ( info , rs , false , entity , null , selects ) ;
}
} ) ;
}
@Override
public < T > int updateColumn ( final T bean , final FilterNode node , final SelectColumn selects ) {
if ( bean = = null | | node = = null | | selects = = null ) return - 1 ;
Class < T > clazz = ( Class ) bean . getClass ( ) ;
public < T > int updateColumn ( final T entity , final FilterNode node , final SelectColumn selects ) {
if ( entity = = null | | node = = null | | selects = = null ) return - 1 ;
Class < T > clazz = ( Class ) entity . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , true , bean , node , selects ) ;
return DataSqlSource . this . updateColumnCompose ( info , true , bean , node , selects ) . whenComplete ( ( rs , t ) - > {
if ( isOnlyCache ( info ) ) return updateCache ( info , - 1 , true , entity , node , selects ) ;
return DataSqlSource . this . updateColumnCompose ( info , true , entity , node , selects ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , true , bean , node , selects ) ;
updateCache ( info , rs , true , entity , node , selects ) ;
}
} ) . join ( ) ;
}
@Override
public < T > CompletableFuture < Integer > updateColumnAsync ( final T bean , final FilterNode node , final SelectColumn selects ) {
if ( bean = = null | | node = = null | | selects = = null ) return CompletableFuture . completedFuture ( - 1 ) ;
Class < T > clazz = ( Class ) bean . getClass ( ) ;
public < T > CompletableFuture < Integer > updateColumnAsync ( final T entity , final FilterNode node , final SelectColumn selects ) {
if ( entity = = null | | node = = null | | selects = = null ) return CompletableFuture . completedFuture ( - 1 ) ;
Class < T > clazz = ( Class ) entity . getClass ( ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
if ( isOnlyCache ( info ) ) {
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , true , bean , node , selects ) , getExecutor ( ) ) ;
return CompletableFuture . supplyAsync ( ( ) - > updateCache ( info , - 1 , true , entity , node , selects ) , getExecutor ( ) ) ;
}
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , true , bean , node , selects ) . whenComplete ( ( rs , t ) - > {
if ( isAsync ( ) ) return DataSqlSource . this . updateColumnCompose ( info , true , entity , node , selects ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , true , bean , node , selects ) ;
updateCache ( info , rs , true , entity , node , selects ) ;
}
} ) ;
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , true , bean , node , selects ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
return CompletableFuture . supplyAsync ( ( ) - > DataSqlSource . this . updateColumnCompose ( info , true , entity , node , selects ) . join ( ) , getExecutor ( ) ) . whenComplete ( ( rs , t ) - > {
if ( t ! = null ) {
futureCompleteConsumer . accept ( rs , t ) ;
} else {
updateCache ( info , rs , true , bean , node , selects ) ;
updateCache ( info , rs , true , entity , node , selects ) ;
}
} ) ;
}
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final boolean neednode , final T bean , final FilterNode node , final SelectColumn selects ) {
protected < T > CompletableFuture < Integer > updateColumnCompose ( final EntityInfo < T > info , final boolean neednode , final T entity , final FilterNode node , final SelectColumn selects ) {
StringBuilder setsql = new StringBuilder ( ) ;
List < byte [ ] > blobs = null ;
int index = 0 ;
@@ -1128,7 +1128,7 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
if ( ! selects . test ( attr . field ( ) ) ) continue ;
if ( setsql . length ( ) > 0 ) setsql . append ( " , " ) ;
setsql . append ( info . getSQLColumn ( alias , attr . field ( ) ) ) ;
Serializable val = info . getFieldValue ( attr , bean ) ;
Serializable val = info . getFieldValue ( attr , entity ) ;
if ( val instanceof byte [ ] ) {
if ( blobs = = null ) blobs = new ArrayList < > ( ) ;
blobs . add ( ( byte [ ] ) val ) ;
@@ -1154,14 +1154,14 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
if ( blobs = = null ) return updateDB ( info , null , sql , false ) ;
return updateDB ( info , null , sql , true , blobs . toArray ( ) ) ;
} else {
final Serializable id = info . getSQLValue ( info . getPrimary ( ) , bean ) ;
final Serializable id = info . getSQLValue ( info . getPrimary ( ) , entity ) ;
String sql = " UPDATE " + info . getTable ( id ) + " a SET " + setsql + " WHERE " + info . getPrimarySQLColumn ( ) + " = " + FilterNode . formatToString ( id ) ;
if ( blobs = = null ) return updateDB ( info , null , sql , false ) ;
return updateDB ( info , null , sql , true , blobs . toArray ( ) ) ;
}
}
protected < T > int updateCache ( final EntityInfo < T > info , int count , final boolean neednode , final T bean , final FilterNode node , final SelectColumn selects ) {
protected < T > int updateCache ( final EntityInfo < T > info , int count , final boolean neednode , final T entity , final FilterNode node , final SelectColumn selects ) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return count ;
final List < Attribute < T , Serializable > > attrs = new ArrayList < > ( ) ;
@@ -1170,11 +1170,11 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
attrs . add ( attr ) ;
}
if ( neednode ) {
T [ ] rs = cache . update ( bean , attrs , node ) ;
T [ ] rs = cache . update ( entity , attrs , node ) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , rs ) ;
return count > = 0 ? count : ( rs = = null ? 0 : rs . length ) ;
} else {
T rs = cache . update ( bean , attrs ) ;
T rs = cache . update ( entity , attrs ) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , rs ) ;
return count > = 0 ? count : ( rs = = null ? 0 : 1 ) ;
}
@@ -1197,7 +1197,7 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
return count > = 0 ? count : ( rs = = null ? 0 : 1 ) ;
}
protected < T > int updateCache ( final EntityInfo < T > info , int count , final Serializable id , final ColumnValue . . . values ) {
protected < T > int updateCache ( final EntityInfo < T > info , int count , final Serializable pk , final ColumnValue . . . values ) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return count ;
final List < Attribute < T , Serializable > > attrs = new ArrayList < > ( ) ;
@@ -1209,58 +1209,58 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
attrs . add ( attr ) ;
cols . add ( col ) ;
}
T rs = cache . updateColumn ( id , attrs , cols ) ;
T rs = cache . updateColumn ( pk , attrs , cols ) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , rs ) ;
return count > = 0 ? count : ( rs = = null ? 0 : 1 ) ;
}
protected < T > int updateCache ( final EntityInfo < T > info , int count , String column , final Serializable value , FilterNode node ) {
protected < T > int updateCache ( final EntityInfo < T > info , int count , String column , final Serializable col val, FilterNode node ) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return count ;
T [ ] rs = cache . update ( info . getAttribute ( column ) , value , node ) ;
T [ ] rs = cache . update ( info . getAttribute ( column ) , col val, node ) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , rs ) ;
return count > = 0 ? count : ( rs = = null ? 0 : 1 ) ;
}
protected < T > int updateCache ( final EntityInfo < T > info , int count , final Serializable id , final String column , final Serializable value ) {
protected < T > int updateCache ( final EntityInfo < T > info , int count , final Serializable pk , final String column , final Serializable col val) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return count ;
T rs = cache . update ( id , info . getAttribute ( column ) , value ) ;
T rs = cache . update ( pk , info . getAttribute ( column ) , col val) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , rs ) ;
return count > = 0 ? count : ( rs = = null ? 0 : 1 ) ;
}
protected < T > int updateCache ( final EntityInfo < T > info , int count , T . . . value s) {
protected < T > int updateCache ( final EntityInfo < T > info , int count , T . . . entity s) {
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
int c2 = 0 ;
for ( final T value : value s) {
for ( final T value : entity s) {
c2 + = cache . update ( value ) ;
}
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , value s) ;
if ( cacheListener ! = null ) cacheListener . updateCache ( info . getType ( ) , entity s) ;
return count > = 0 ? count : c2 ;
}
@Override
public < T > int updateCache ( Class < T > clazz , T . . . value s) {
if ( value s. length = = 0 ) return 0 ;
public < T > int updateCache ( Class < T > clazz , T . . . entity s) {
if ( entity s. length = = 0 ) return 0 ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
int c = 0 ;
for ( T value : value s) {
for ( T value : entity s) {
c + = cache . update ( value ) ;
}
return c ;
}
public < T > int reloadCache ( Class < T > clazz , Serializable . . . id s) {
public < T > int reloadCache ( Class < T > clazz , Serializable . . . pk s) {
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final EntityCache < T > cache = info . getCache ( ) ;
if ( cache = = null ) return - 1 ;
String column = info . getPrimary ( ) . field ( ) ;
int c = 0 ;
for ( Serializable id : id s) {
for ( Serializable id : pk s) {
Sheet < T > sheet = querySheetCompose ( false , true , clazz , null , FLIPPER_ONE , FilterNode . create ( column , id ) ) . join ( ) ;
T value = sheet . isEmpty ( ) ? null : sheet . list ( ) . get ( 0 ) ;
if ( value ! = null ) c + = cache . update ( value ) ;
@@ -1540,13 +1540,13 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
@Override
public < T > T find ( final Class < T > clazz , final String column , final Serializable key ) {
return find ( clazz , null , FilterNode . create ( column , key ) ) ;
public < T > T find ( final Class < T > clazz , final String column , final Serializable colval ) {
return find ( clazz , null , FilterNode . create ( column , colval ) ) ;
}
@Override
public < T > CompletableFuture < T > findAsync ( final Class < T > clazz , final String column , final Serializable key ) {
return findAsync ( clazz , null , FilterNode . create ( column , key ) ) ;
public < T > CompletableFuture < T > findAsync ( final Class < T > clazz , final String column , final Serializable colval ) {
return findAsync ( clazz , null , FilterNode . create ( column , colval ) ) ;
}
@Override
@@ -1782,13 +1782,13 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
//-----------------------list set----------------------------
@Override
public < T , V extends Serializable > HashSet < V > queryColumnSet ( final String selectedColumn , Class < T > clazz , String column , Serializable key ) {
return new LinkedHashSet < > ( queryColumnList ( selectedColumn , clazz , null , FilterNode . create ( column , key ) ) ) ;
public < T , V extends Serializable > HashSet < V > queryColumnSet ( final String selectedColumn , Class < T > clazz , String column , Serializable colval ) {
return new LinkedHashSet < > ( queryColumnList ( selectedColumn , clazz , null , FilterNode . create ( column , colval ) ) ) ;
}
@Override
public < T , V extends Serializable > CompletableFuture < HashSet < V > > queryColumnSetAsync ( final String selectedColumn , Class < T > clazz , String column , Serializable key ) {
return queryColumnListAsync ( selectedColumn , clazz , null , FilterNode . create ( column , key ) ) . thenApply ( ( list ) - > new LinkedHashSet ( list ) ) ;
public < T , V extends Serializable > CompletableFuture < HashSet < V > > queryColumnSetAsync ( final String selectedColumn , Class < T > clazz , String column , Serializable colval ) {
return queryColumnListAsync ( selectedColumn , clazz , null , FilterNode . create ( column , colval ) ) . thenApply ( ( list ) - > new LinkedHashSet ( list ) ) ;
}
@Override
@@ -1812,13 +1812,13 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
@Override
public < T , V extends Serializable > List < V > queryColumnList ( final String selectedColumn , final Class < T > clazz , final String column , final Serializable key ) {
return queryColumnList ( selectedColumn , clazz , null , FilterNode . create ( column , key ) ) ;
public < T , V extends Serializable > List < V > queryColumnList ( final String selectedColumn , final Class < T > clazz , final String column , final Serializable colval ) {
return queryColumnList ( selectedColumn , clazz , null , FilterNode . create ( column , colval ) ) ;
}
@Override
public < T , V extends Serializable > CompletableFuture < List < V > > queryColumnListAsync ( final String selectedColumn , final Class < T > clazz , final String column , final Serializable key ) {
return queryColumnListAsync ( selectedColumn , clazz , null , FilterNode . create ( column , key ) ) ;
public < T , V extends Serializable > CompletableFuture < List < V > > queryColumnListAsync ( final String selectedColumn , final Class < T > clazz , final String column , final Serializable colval ) {
return queryColumnListAsync ( selectedColumn , clazz , null , FilterNode . create ( column , colval ) ) ;
}
@Override
@@ -2028,10 +2028,10 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
public < K extends Serializable , T > CompletableFuture < Map < K , T > > queryMapAsync ( final Class < T > clazz , final SelectColumn selects , final Stream < K > keyStream ) {
if ( keyStream = = null ) return CompletableFuture . completedFuture ( new LinkedHashMap < > ( ) ) ;
final EntityInfo < T > info = loadEntityInfo ( clazz ) ;
final ArrayList < K > id s = new ArrayList < > ( ) ;
keyStream . forEach ( k - > id s. add ( k ) ) ;
final ArrayList < K > pk s = new ArrayList < > ( ) ;
keyStream . forEach ( k - > pk s. add ( k ) ) ;
final Attribute < T , Serializable > primary = info . primary ;
return queryListAsync ( clazz , FilterNode . create ( primary . field ( ) , id s) ) . thenApply ( ( List < T > rs ) - > {
return queryListAsync ( clazz , FilterNode . create ( primary . field ( ) , pk s) ) . thenApply ( ( List < T > rs ) - > {
Map < K , T > map = new LinkedHashMap < > ( ) ;
if ( rs . isEmpty ( ) ) return new LinkedHashMap < > ( ) ;
for ( T item : rs ) {
@@ -2108,18 +2108,18 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
* @param <T> Entity类的泛型
* @param clazz Entity类
* @param column 过滤字段名
* @param key 过滤字段值
* @param colval 过滤字段值
*
* @return Entity对象的集合
*/
@Override
public < T > List < T > queryList ( final Class < T > clazz , final String column , final Serializable key ) {
return queryList ( clazz , ( SelectColumn ) null , null , FilterNode . create ( column , key ) ) ;
public < T > List < T > queryList ( final Class < T > clazz , final String column , final Serializable colval ) {
return queryList ( clazz , ( SelectColumn ) null , null , FilterNode . create ( column , colval ) ) ;
}
@Override
public < T > CompletableFuture < List < T > > queryListAsync ( final Class < T > clazz , final String column , final Serializable key ) {
return queryListAsync ( clazz , ( SelectColumn ) null , null , FilterNode . create ( column , key ) ) ;
public < T > CompletableFuture < List < T > > queryListAsync ( final Class < T > clazz , final String column , final Serializable colval ) {
return queryListAsync ( clazz , ( SelectColumn ) null , null , FilterNode . create ( column , colval ) ) ;
}
@Override
@@ -2192,13 +2192,13 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
}
@Override
public < T > List < T > queryList ( final Class < T > clazz , final Flipper flipper , final String column , final Serializable key ) {
return queryList ( clazz , null , flipper , FilterNode . create ( column , key ) ) ;
public < T > List < T > queryList ( final Class < T > clazz , final Flipper flipper , final String column , final Serializable colval ) {
return queryList ( clazz , null , flipper , FilterNode . create ( column , colval ) ) ;
}
@Override
public < T > CompletableFuture < List < T > > queryListAsync ( final Class < T > clazz , final Flipper flipper , final String column , final Serializable key ) {
return queryListAsync ( clazz , null , flipper , FilterNode . create ( column , key ) ) ;
public < T > CompletableFuture < List < T > > queryListAsync ( final Class < T > clazz , final Flipper flipper , final String column , final Serializable colval ) {
return queryListAsync ( clazz , null , flipper , FilterNode . create ( column , colval ) ) ;
}
@Override