Skip to content

Commit

Permalink
feat: easyQueryClient支持SQLFunction,concat增加单个参数表达式
Browse files Browse the repository at this point in the history
  • Loading branch information
xuejmnet committed Feb 19, 2024
1 parent f6792e5 commit 50cae4c
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import com.easy.query.core.basic.jdbc.parameter.DefaultToSQLContext;
import com.easy.query.core.basic.jdbc.parameter.ToSQLContext;
import com.easy.query.core.expression.lambda.SQLExpression1;
import com.easy.query.core.expression.parser.core.available.TableAvailable;
import com.easy.query.core.expression.parser.core.base.ColumnSetter;
import com.easy.query.core.expression.parser.core.base.WherePredicate;
import com.easy.query.core.expression.parser.core.base.scec.SQLNativePropertyExpressionContext;
import com.easy.query.core.expression.sql.TableContext;
import com.easy.query.core.expression.sql.builder.ExpressionContext;
import com.easy.query.core.func.SQLFunction;

import java.util.Collection;

Expand Down Expand Up @@ -107,6 +109,16 @@ default ClientExpressionUpdatable<T> setSQLSegment(String property, String sqlSe
ClientExpressionUpdatable<T> setSQLSegment(boolean condition, String property, String sqlSegment, SQLExpression1<SQLNativePropertyExpressionContext> contextConsume);
// endregion

default ClientExpressionUpdatable<T> setSQLFunction(String property, SQLFunction sqlFunction){
return setSQLFunction(true,property,sqlFunction);
}
default ClientExpressionUpdatable<T> setSQLFunction(boolean condition, String property, SQLFunction sqlFunction){
TableAvailable table = getColumnSetter().getTable();
return setSQLSegment(condition,property,sqlFunction.sqlSegment(table),c->{
sqlFunction.consume(c.getSQLNativeChainExpressionContext());
});
}

default ClientExpressionUpdatable<T> where(SQLExpression1<WherePredicate<T>> whereExpression) {
return where(true, whereExpression);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.easy.query.core.func.SQLFunc;
import com.easy.query.core.func.SQLFunction;
import com.easy.query.core.func.column.ColumnFuncSelector;
import com.easy.query.core.proxy.PropTypeColumn;
import com.easy.query.core.proxy.core.EntitySQLContext;
import com.easy.query.core.proxy.extension.ColumnFuncComparableExpression;
import com.easy.query.core.proxy.extension.functions.cast.ColumnFunctionCastBooleanAvailable;
Expand All @@ -31,6 +32,22 @@ public interface ColumnStringFunctionAvailable<TProperty> extends ColumnObjectFu
ColumnFunctionCastDateTimeAvailable<TProperty>,
ColumnFunctionCastBooleanAvailable<TProperty> {

/**
* 链接表列
* @param propTypeColumn
* @return
*/
default ColumnFunctionComparableStringChainExpression<TProperty> concat(PropTypeColumn<String> propTypeColumn) {
return concat(x->x.expression(propTypeColumn));
}
/**
* 链接常量
* @param value
* @return
*/
default ColumnFunctionComparableStringChainExpression<TProperty> concat(String value) {
return concat(x->x.value(value));
}
/**
* 链接多个片段可以是表列,函数,片段,常量
* @param stringExpressions
Expand Down
31 changes: 22 additions & 9 deletions sql-test/src/main/java/com/easy/query/test/RelationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -991,14 +991,15 @@ public void schoolTest8() {
Assert.assertEquals("%小明%(String),%13%(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
// SQLFunc fx = easyQueryClient.getRuntimeContext().fx();
// SQLFunction subString = fx.subString("title", 1, 10);
// SQLFunction concat = fx.concat(x -> x.sqlFunc(subString).value("123"));
// easyQueryClient.updatable(Topic.class)
// .setSQLSegment("name","subString({0},1)",c->c.expression("name"))
// easyEntityQuery.updatable(Topic.class)
// .setColumns(t -> {
// t.title().set(t.title().subString(1,10).concat(x->x.value("123")));
// }).asTable("a123123")
// .setSQLFunction("title",concat)
// .asTable("a123123")
// .whereById("123zzzxxx")
// .executeRows();

}

@Test
Expand All @@ -1022,16 +1023,13 @@ public void testSub1(){

easyEntityQuery.queryable(SchoolStudent.class)
.where(s -> s.name().like("123"))
.select(s -> new StringProxy(s.schoolClass().name().toLower())).toList();
.select(s -> new StringProxy(s.schoolClass().name())).toList();
Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArg());
JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArg();
Assert.assertEquals("SELECT t1.`name` FROM `school_student` t LEFT JOIN `school_class` t1 ON t.`class_id` = t1.`id` WHERE t.`name` LIKE ?", jdbcExecuteAfterArg.getBeforeArg().getSql());
Assert.assertEquals("%123%(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();

List<String> list1 = easyEntityQuery.queryable(SchoolStudent.class)
.where(s -> s.schoolClass().name().like("123"))
.select(s -> s.schoolClass().name()).toList();
}

@Test
Expand All @@ -1048,4 +1046,19 @@ public void testSub2(){
Assert.assertEquals("%123%(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
@Test
public void testSub3(){
ListenerContext listenerContext = new ListenerContext();
listenerContextManager.startListen(listenerContext);

easyEntityQuery.queryable(SchoolStudent.class)
.where(s -> s.name().like("123"))
.select(s -> new StringProxy(s.schoolClass().name().toLower())).toList();
Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArg());
JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArg();
Assert.assertEquals("SELECT LOWER(t1.`name`) FROM `school_student` t LEFT JOIN `school_class` t1 ON t.`class_id` = t1.`id` WHERE t.`name` LIKE ?", jdbcExecuteAfterArg.getBeforeArg().getSql());
Assert.assertEquals("%123%(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();

}
}
63 changes: 63 additions & 0 deletions sql-test/src/main/java/com/easy/query/test/UpdateTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1612,4 +1612,67 @@ public void updateTrackParameterTest1() {
Assert.assertEquals(newTitle+"(String),7(String),"+ oldTitle+"(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
@Test
public void updateSetFuncTest1() {
ListenerContext listenerContext = new ListenerContext();
listenerContextManager.startListen(listenerContext);
try {
easyEntityQuery.updatable(Topic.class)
.setColumns(t -> {
t.title().set(t.title().subString(1,10).concat(t.id()));
}).asTable("a123123")
.whereById("123zzzxxx")
.executeRows();
}catch (Exception ex){
Assert.assertNotNull(ex);
}

Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArg());
JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArg();
Assert.assertEquals("UPDATE `a123123` SET `title` = CONCAT(SUBSTR(`title`,2,10),`id`) WHERE `id` = ?", jdbcExecuteAfterArg.getBeforeArg().getSql());
Assert.assertEquals("123zzzxxx(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
@Test
public void updateSetFuncTest2() {
ListenerContext listenerContext = new ListenerContext();
listenerContextManager.startListen(listenerContext);
try {
easyEntityQuery.updatable(Topic.class)
.setColumns(t -> {
t.title().set(t.title().subString(1,10).concat("123"));
}).asTable("a123123")
.whereById("123zzzxxx")
.executeRows();
}catch (Exception ex){
Assert.assertNotNull(ex);
}

Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArg());
JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArg();
Assert.assertEquals("UPDATE `a123123` SET `title` = CONCAT(SUBSTR(`title`,2,10),?) WHERE `id` = ?", jdbcExecuteAfterArg.getBeforeArg().getSql());
Assert.assertEquals("123(String),123zzzxxx(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
@Test
public void updateSetFuncTest3() {
ListenerContext listenerContext = new ListenerContext();
listenerContextManager.startListen(listenerContext);
try {
easyEntityQuery.updatable(Topic.class)
.setColumns(t -> {
t.title().set(t.title().subString(1,10).concat(t.id().toLower()));
}).asTable("a123123")
.whereById("123zzzxxx")
.executeRows();
}catch (Exception ex){
Assert.assertNotNull(ex);
}

Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArg());
JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArg();
Assert.assertEquals("UPDATE `a123123` SET `title` = CONCAT(SUBSTR(`title`,2,10),LOWER(`id`)) WHERE `id` = ?", jdbcExecuteAfterArg.getBeforeArg().getSql());
Assert.assertEquals("123zzzxxx(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0)));
listenerContextManager.clear();
}
}

0 comments on commit 50cae4c

Please sign in to comment.