fix: QueryMethods.substring; close #I7T3EA

This commit is contained in:
开源海哥 2023-08-22 13:23:27 +08:00
parent 694665b96f
commit 609003d1bf
4 changed files with 67 additions and 86 deletions

View File

@ -807,85 +807,44 @@ public class QueryMethods {
/**
* 返回字符串 s 的前 n 个字符
*/
public static QueryColumn left(String columnS, String columnN) {
return new FunctionQueryColumn(LEFT, columnS, columnN);
public static QueryColumn left(String columnS, int length) {
return new FunctionQueryColumn(LEFT, string(columnS), number(length));
}
/**
* 返回字符串 s 的前 n 个字符
*/
public static QueryColumn left(QueryColumn columnS, QueryColumn columnN) {
return new FunctionQueryColumn(LEFT, columnS, columnN);
public static QueryColumn left(QueryColumn columnS, int length) {
return new FunctionQueryColumn(LEFT, columnS, number(length));
}
/**
* 返回字符串 s 的前 n 个字符
*/
public static <S, N> QueryColumn left(LambdaGetter<S> columnS, LambdaGetter<N> columnN) {
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN));
public static <S, N> QueryColumn left(LambdaGetter<S> columnS, int length) {
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), number(length));
}
/**
* 返回字符串 s 的后 length 个字符
*/
public static QueryColumn right(String columnS, int length) {
return new FunctionQueryColumn(RIGHT, string(columnS), number(length));
}
/**
* 返回字符串 s 的前 n 个字符
* 返回字符串 s length 个字符
*/
public static QueryColumn left(String columnX, Integer n) {
return new FunctionQueryColumn(LEFT, new QueryColumn(columnX), number(n));
public static QueryColumn right(QueryColumn columnS, int length) {
return new FunctionQueryColumn(RIGHT, columnS, number(length));
}
/**
* 返回字符串 s n 个字符
* 返回字符串 s length 个字符
*/
public static QueryColumn left(QueryColumn columnX, Integer n) {
return new FunctionQueryColumn(LEFT, columnX, number(n));
}
/**
* 返回字符串 s 的前 n 个字符
*/
public static <T> QueryColumn left(LambdaGetter<T> columnX, Integer n) {
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnX), number(n));
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static QueryColumn right(String columnS, String columnN) {
return new FunctionQueryColumn(RIGHT, columnS, columnN);
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static QueryColumn right(QueryColumn columnS, QueryColumn columnN) {
return new FunctionQueryColumn(RIGHT, columnS, columnN);
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static <S, N> QueryColumn right(LambdaGetter<S> columnS, LambdaGetter<N> columnN) {
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN));
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static QueryColumn right(String columnX, Integer n) {
return new FunctionQueryColumn(RIGHT, new QueryColumn(columnX), number(n));
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static QueryColumn right(QueryColumn columnX, Integer n) {
return new FunctionQueryColumn(RIGHT, columnX, number(n));
}
/**
* 返回字符串 s 的后 n 个字符
*/
public static <T> QueryColumn right(LambdaGetter<T> columnX, Integer n) {
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnX), number(n));
public static <S, N> QueryColumn right(LambdaGetter<S> columnS, int length) {
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), number(length));
}
/**
@ -1084,25 +1043,47 @@ public class QueryMethods {
return new FunctionQueryColumn(STRCMP, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2));
}
/**
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static QueryColumn substring(String columnS, String columnN, String columnLen) {
return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen);
public static QueryColumn substring(String columnS, int position) {
return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position));
}
/**
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static QueryColumn substring(QueryColumn columnS, QueryColumn columnN, QueryColumn columnLen) {
return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen);
public static QueryColumn substring(QueryColumn columnS, int position) {
return new FunctionQueryColumn(SUBSTRING, columnS, number(position));
}
/**
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, LambdaGetter<N> columnN, LambdaGetter<L> columnLen) {
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN), LambdaUtil.getQueryColumn(columnLen));
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position) {
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position));
}
/**
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static QueryColumn substring(String columnS, int position, int length) {
return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position), number(length));
}
/**
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static QueryColumn substring(QueryColumn columnS, int position, int length) {
return new FunctionQueryColumn(SUBSTRING, columnS, number(position), number(length));
}
/**
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串
*/
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position, int length) {
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position), number(length));
}
/**
@ -2326,7 +2307,7 @@ public class QueryMethods {
* 返回指定列的总行数
*/
public static FunctionQueryColumn count() {
return new FunctionQueryColumn(COUNT, new StringQueryColumn("*"));
return new FunctionQueryColumn(COUNT, new RawQueryColumn("*"));
}
/**
@ -2391,42 +2372,42 @@ public class QueryMethods {
* 构建 TRUE 常量
*/
public static QueryColumn true_() {
return new StringQueryColumn("TRUE");
return new RawQueryColumn("TRUE");
}
/**
* 构建 FALSE 常量
*/
public static QueryColumn false_() {
return new StringQueryColumn("FALSE");
return new RawQueryColumn("FALSE");
}
/**
* 构建 NULL 常量
*/
public static QueryColumn null_() {
return new StringQueryColumn("NULL");
return new RawQueryColumn("NULL");
}
/**
* 构建数字常量
*/
public static QueryColumn number(Number n) {
return new StringQueryColumn(n.toString());
return new RawQueryColumn(n);
}
/**
* 构建数字常量
*/
public static QueryColumn string(String s) {
return new StringQueryColumn("'" + s + "'");
return new RawQueryColumn("'" + s + "'");
}
/**
* 构建自定义列
*/
public static QueryColumn column(String column) {
return new StringQueryColumn(column);
return new RawQueryColumn(column);
}
/**

View File

@ -82,7 +82,7 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
public QueryWrapper select(String... columns) {
for (String column : columns) {
addSelectColumn(new StringQueryColumn(column));
addSelectColumn(new RawQueryColumn(column));
}
return this;
}

View File

@ -23,13 +23,13 @@ import java.util.List;
/**
* 自定义字符串列用于扩展
*/
public class StringQueryColumn extends QueryColumn {
public class RawQueryColumn extends QueryColumn {
protected String content;
public StringQueryColumn(String content) {
this.content = content;
public RawQueryColumn(Object content) {
this.content = String.valueOf(content);
}
@Override
@ -44,14 +44,14 @@ public class StringQueryColumn extends QueryColumn {
@Override
public String toString() {
return "StringQueryColumn{" +
return "RawQueryColumn{" +
"content='" + content + '\'' +
'}';
}
@Override
public StringQueryColumn clone() {
return (StringQueryColumn) super.clone();
public RawQueryColumn clone() {
return (RawQueryColumn) super.clone();
}
}

View File

@ -18,7 +18,7 @@ package com.mybatisflex.coretest;
import com.mybatisflex.core.query.FunctionQueryColumn;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.query.StringQueryColumn;
import com.mybatisflex.core.query.RawQueryColumn;
import org.junit.Test;
import static com.mybatisflex.core.query.QueryMethods.*;
@ -34,7 +34,7 @@ public class FunctionSqlTest {
public void test() {
String sql = QueryWrapper.create()
.select(new FunctionQueryColumn("NOW").as("n1"))
.select(new FunctionQueryColumn("NOW", new StringQueryColumn("")).as("n2"))
.select(new FunctionQueryColumn("NOW", new RawQueryColumn("")).as("n2"))
.select(new FunctionQueryColumn("CONCAT", ACCOUNT.USER_NAME, ACCOUNT.AGE).as("c1"))
.from(ACCOUNT)
.toSQL();