Skip to content

Commit

Permalink
feat: [#206]草稿类型支持枚举如果查询返回的是SQLColumn
Browse files Browse the repository at this point in the history
  • Loading branch information
xuejmnet committed May 22, 2024
1 parent 4b1c725 commit d63e436
Show file tree
Hide file tree
Showing 35 changed files with 323 additions and 435 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* @author xuejiaming
*/
public interface ResultColumnMetadata {
Class<?> getPropertyType();
ColumnMetadata getColumnMetadata();
Class<?> getEntityClass();
JdbcProperty getJdbcProperty();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.easy.query.core.basic.jdbc.executor.impl.def;

import com.easy.query.core.basic.extension.conversion.ValueConverter;
import com.easy.query.core.basic.extension.encryption.EncryptionStrategy;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.internal.props.JdbcProperty;
import com.easy.query.core.basic.jdbc.types.handler.JdbcTypeHandler;
import com.easy.query.core.metadata.ColumnMetadata;

/**
* create time 2023/6/30 22:03
* 文件说明
*
* @author xuejiaming
*/
public class BasicResultColumnMetadata implements ResultColumnMetadata {
private final Class<?> propType;
private final JdbcTypeHandler jdbcTypeHandler;
private final JdbcProperty jdbcProperty;

public BasicResultColumnMetadata(Class<?> propType,JdbcTypeHandler jdbcTypeHandler, JdbcProperty jdbcProperty){
this.propType = propType;
this.jdbcTypeHandler = jdbcTypeHandler;

this.jdbcProperty =jdbcProperty;
}

@Override
public Class<?> getPropertyType() {
return propType;
}

@Override
public ColumnMetadata getColumnMetadata() {
throw new UnsupportedOperationException();
}

@Override
public Class<?> getEntityClass() {
throw new UnsupportedOperationException();
}

@Override
public JdbcProperty getJdbcProperty() {
return jdbcProperty;
}

@Override
public String getPropertyName() {
throw new UnsupportedOperationException();
}

@Override
public JdbcTypeHandler getJdbcTypeHandler() {
return jdbcTypeHandler;
}

@Override
public boolean isEncryption() {
throw new UnsupportedOperationException();
}

@Override
public EncryptionStrategy getEncryptionStrategy() {
throw new UnsupportedOperationException();
}

@Override
public ValueConverter<?, ?> getValueConverter() {
throw new UnsupportedOperationException();
}

@Override
public void setValue(Object bean, Object value) {
throw new UnsupportedOperationException();
}


@Override
public Object getValue(Object bean) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ public EntityResultColumnMetadata(int index, EntityMetadata entityMetadata, Colu
this.jdbcProperty =new ColumnJdbcProperty(index,columnMetadata);
}

@Override
public Class<?> getPropertyType() {
return getColumnMetadata().getPropertyType();
}

@Override
public ColumnMetadata getColumnMetadata() {
return this.columnMetadata;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ public RelationExtraResultColumnMetadata(int index, RelationExtraMetadata relati
this.relationExtraColumn = relationExtraColumn;
}

@Override
public Class<?> getPropertyType() {
return getColumnMetadata().getPropertyType();
}

@Override
public ColumnMetadata getColumnMetadata() {
return this.columnMetadata;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.easy.query.core.basic.jdbc.executor.impl.def;

import com.easy.query.core.basic.extension.conversion.ValueConverter;
import com.easy.query.core.basic.extension.encryption.EncryptionStrategy;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.internal.props.JdbcProperty;
import com.easy.query.core.basic.jdbc.types.handler.JdbcTypeHandler;
import com.easy.query.core.metadata.ColumnMetadata;

/**
* create time 2024/5/22 23:34
* 文件说明
*
* @author xuejiaming
*/
public class TypeResultColumnMetadata implements ResultColumnMetadata {
private final Class<?> propertyType;

public TypeResultColumnMetadata(Class<?> propertyType){

this.propertyType = propertyType;
}
@Override
public Class<?> getPropertyType() {
return propertyType;
}

@Override
public ColumnMetadata getColumnMetadata() {
throw new UnsupportedOperationException();
}

@Override
public Class<?> getEntityClass() {
throw new UnsupportedOperationException();
}

@Override
public JdbcProperty getJdbcProperty() {
throw new UnsupportedOperationException();
}

@Override
public String getPropertyName() {
throw new UnsupportedOperationException();
}

@Override
public JdbcTypeHandler getJdbcTypeHandler() {
throw new UnsupportedOperationException();
}

@Override
public boolean isEncryption() {
throw new UnsupportedOperationException();
}

@Override
public EncryptionStrategy getEncryptionStrategy() {
throw new UnsupportedOperationException();
}

@Override
public ValueConverter<?, ?> getValueConverter() {
throw new UnsupportedOperationException();
}

@Override
public void setValue(Object bean, Object value) {
throw new UnsupportedOperationException();
}

@Override
public Object getValue(Object bean) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import com.easy.query.core.annotation.Nullable;
import com.easy.query.core.basic.jdbc.executor.ExecutorContext;
import com.easy.query.core.basic.jdbc.executor.ResultBasicMetadata;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.ResultMetadata;
import com.easy.query.core.basic.jdbc.executor.impl.def.BasicResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.impl.def.EntityResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.internal.merge.result.StreamResultSet;
import com.easy.query.core.basic.jdbc.executor.internal.props.BasicJdbcProperty;
import com.easy.query.core.basic.jdbc.executor.internal.props.JdbcProperty;
import com.easy.query.core.basic.jdbc.types.JdbcTypeHandlerManager;
import com.easy.query.core.basic.jdbc.types.handler.JdbcTypeHandler;
import com.easy.query.core.util.EasyClassUtil;
import com.easy.query.core.util.EasyJdbcExecutorUtil;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;
Expand All @@ -21,7 +24,7 @@
*/
public class DraftStreamIterator extends AbstractMapToStreamIterator<DraftResult> {
private ResultSetMetaData rsmd;
private ResultBasicMetadata[] resultBasicMetadatas;
private ResultColumnMetadata[] resultBasicMetadatas;
private int mapCount = -1;

public DraftStreamIterator(ExecutorContext context, StreamResultSet streamResult, ResultMetadata<DraftResult> resultMetadata) throws SQLException {
Expand All @@ -32,11 +35,11 @@ public DraftStreamIterator(ExecutorContext context, StreamResultSet streamResult
protected void init0() throws SQLException {
rsmd = streamResultSet.getMetaData();
int columnCount = rsmd.getColumnCount();//有多少列
resultBasicMetadatas = new ResultBasicMetadata[columnCount];
resultBasicMetadatas = new ResultColumnMetadata[columnCount];
}

private @Nullable Class<?> getDraftPropType(int index) {
Class<?>[] draftPropTypes = context.getExpressionContext().getResultPropTypes();
private @Nullable ResultColumnMetadata getDraftPropType(int index) {
ResultColumnMetadata[] draftPropTypes = context.getExpressionContext().getResultPropTypes();
if (draftPropTypes != null) {
return draftPropTypes[index];
}
Expand All @@ -52,27 +55,36 @@ protected DraftResult mapTo() throws SQLException {
JdbcTypeHandlerManager easyJdbcTypeHandler = context.getRuntimeContext().getJdbcTypeHandlerManager();

if (mapCount == 0) {
resultBasicMetadatas = new ResultBasicMetadata[draft.capacity()];
resultBasicMetadatas = new ResultColumnMetadata[draft.capacity()];
}
for (int i = 0; i < resultBasicMetadatas.length; i++) {
if(!draft.readColumn(i)){
break;
}

if(mapCount==0){
Class<?> propType = getDraftPropType(i);
ResultColumnMetadata propType = getDraftPropType(i);
if(propType!=null){
JdbcTypeHandler handler = easyJdbcTypeHandler.getHandler(propType);
BasicJdbcProperty dataReader = new BasicJdbcProperty(i, propType);
resultBasicMetadatas[i] = new ResultBasicMetadata(null, dataReader, handler);
if(propType instanceof EntityResultColumnMetadata){
resultBasicMetadatas[i] = propType;
}else{
resultBasicMetadatas[i] = new BasicResultColumnMetadata(propType.getPropertyType(), easyJdbcTypeHandler.getHandler(propType.getPropertyType()), propType.getJdbcProperty());
}
}
}
ResultBasicMetadata resultBasicMetadata = resultBasicMetadatas[i];
if(resultBasicMetadata==null){
ResultColumnMetadata resultColumnMetadata = resultBasicMetadatas[i];
if(resultColumnMetadata==null){
draft.setValues(i, streamResultSet.getObject(i + 1));
}else{
Object value = resultBasicMetadata.getJdbcTypeHandler().getValue(resultBasicMetadata.getDataReader(), streamResultSet);
draft.setValues(i, value);
if(resultColumnMetadata instanceof EntityResultColumnMetadata){
JdbcTypeHandler handler = resultColumnMetadata.getJdbcTypeHandler();
JdbcProperty jdbcProperty = resultColumnMetadata.getJdbcProperty();
Object value = EasyJdbcExecutorUtil.fromValue(resultColumnMetadata, handler.getValue(jdbcProperty, streamResultSet));
draft.setValues(i, value);
}else{
Object value = resultColumnMetadata.getJdbcTypeHandler().getValue(resultColumnMetadata.getJdbcProperty(), streamResultSet);
draft.setValues(i, value);
}
}
}
return draft;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.easy.query.core.basic.jdbc.executor.ExecutorContext;
import com.easy.query.core.basic.jdbc.executor.ResultBasicMetadata;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.basic.jdbc.executor.ResultMetadata;
import com.easy.query.core.basic.jdbc.executor.internal.merge.result.StreamResultSet;
import com.easy.query.core.basic.jdbc.executor.internal.props.BasicJdbcProperty;
Expand Down Expand Up @@ -36,9 +37,9 @@ protected void init0() throws SQLException {
}

private Class<?> getPropTypeOrObjectType(int index) {
Class<?>[] mapPropTypes = context.getExpressionContext().getResultPropTypes();
ResultColumnMetadata[] mapPropTypes = context.getExpressionContext().getResultPropTypes();
if (mapPropTypes != null) {
return mapPropTypes[index];
return mapPropTypes[index].getPropertyType();
}
return Object.class;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.easy.query.core.expression.sql.builder;

import com.easy.query.core.basic.extension.interceptor.Interceptor;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.configuration.EasyQueryOption;
import com.easy.query.core.configuration.QueryConfiguration;
import com.easy.query.core.context.QueryRuntimeContext;
Expand Down Expand Up @@ -59,7 +60,7 @@ public class EasyExpressionContext implements ExpressionContext {
private Consumer<Object> forEachConfigurer;

private Map<TableAvailable, Map<String, ColumnIncludeExpression>> columnIncludeMaps;
private Class<?>[] propTypes;
private ResultColumnMetadata[] propTypes;
private Function<Class<?>, Boolean> relationLogicDelete;
private RelationExtraMetadata relationExtraMetadata;

Expand Down Expand Up @@ -341,7 +342,7 @@ public ExpressionContext cloneExpressionContext() {
easyExpressionContext.getColumnIncludeMaps().putAll(this.columnIncludeMaps);
}
if (this.propTypes != null) {
easyExpressionContext.propTypes = new Class<?>[this.propTypes.length];
easyExpressionContext.propTypes = new ResultColumnMetadata[this.propTypes.length];
System.arraycopy(this.propTypes, 0, easyExpressionContext.propTypes, 0, this.propTypes.length);
}
return easyExpressionContext;
Expand All @@ -361,12 +362,12 @@ public boolean hasDeclareExpressions() {
}

@Override
public void setResultPropTypes(Class<?>[] propTypes) {
public void setResultPropTypes(ResultColumnMetadata[] propTypes) {
this.propTypes = propTypes;
}

@Override
public Class<?>[] getResultPropTypes() {
public ResultColumnMetadata[] getResultPropTypes() {
return this.propTypes;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.easy.query.core.expression.sql.builder;

import com.easy.query.core.basic.extension.interceptor.Interceptor;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.context.QueryRuntimeContext;
import com.easy.query.core.enums.ExecuteMethodEnum;
import com.easy.query.core.enums.SQLExecuteStrategyEnum;
Expand Down Expand Up @@ -227,12 +228,12 @@ public boolean hasDeclareExpressions() {
}

@Override
public void setResultPropTypes(Class<?>[] propTypes) {
public void setResultPropTypes(ResultColumnMetadata[] propTypes) {

}

@Override
public Class<?>[] getResultPropTypes() {
public ResultColumnMetadata[] getResultPropTypes() {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.easy.query.core.expression.sql.builder;

import com.easy.query.core.basic.extension.interceptor.Interceptor;
import com.easy.query.core.basic.jdbc.executor.ResultColumnMetadata;
import com.easy.query.core.context.QueryRuntimeContext;
import com.easy.query.core.enums.ExecuteMethodEnum;
import com.easy.query.core.enums.SQLExecuteStrategyEnum;
Expand Down Expand Up @@ -91,8 +92,8 @@ default boolean hasForEach(){
boolean hasDeclareExpressions();


void setResultPropTypes(Class<?>[] propTypes);
Class<?>[] getResultPropTypes();
void setResultPropTypes(ResultColumnMetadata[] propTypes);
ResultColumnMetadata[] getResultPropTypes();

void setRelationLogicDelete(Function<Class<?>,Boolean> relationLogicDelete);
boolean hasRelationLogicDelete();
Expand Down
Loading

0 comments on commit d63e436

Please sign in to comment.