mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix NamedSql bug
This commit is contained in:
@@ -78,7 +78,7 @@ public class NamedSql {
|
||||
return;
|
||||
}
|
||||
|
||||
int len = namedSql.length();
|
||||
final int len = namedSql.length();
|
||||
|
||||
final StrBuilder name = StrUtil.strBuilder();
|
||||
final StrBuilder sqlBuilder = StrUtil.strBuilder();
|
||||
@@ -87,10 +87,9 @@ public class NamedSql {
|
||||
for (int i = 0; i < len; i++) {
|
||||
c = namedSql.charAt(i);
|
||||
if (ArrayUtil.contains(NAME_START_CHARS, c)) {
|
||||
nameStartChar = c;
|
||||
|
||||
// 新的变量开始符出现,要处理之前的变量
|
||||
replaceVar(nameStartChar, name, sqlBuilder, paramMap);
|
||||
nameStartChar = c;
|
||||
} else if (null != nameStartChar) {
|
||||
// 变量状态
|
||||
if (isGenerateChar(c)) {
|
||||
@@ -126,6 +125,10 @@ public class NamedSql {
|
||||
*/
|
||||
private void replaceVar(Character nameStartChar, StrBuilder name, StrBuilder sqlBuilder, Map<String, Object> paramMap){
|
||||
if(name.isEmpty()){
|
||||
if(null != nameStartChar){
|
||||
// 类似于:的情况,需要补上:
|
||||
sqlBuilder.append(nameStartChar);
|
||||
}
|
||||
// 无变量,按照普通字符处理
|
||||
return;
|
||||
}
|
||||
|
@@ -60,6 +60,19 @@ public class NamedSqlTest {
|
||||
Assert.assertEquals(sql, namedSql.getSql());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseTest4() {
|
||||
// 测试postgre中形如data_value::numeric是否出错
|
||||
String sql = "select device_key, min(data_value::numeric) as data_value from device";
|
||||
|
||||
Map<String, Object> paramMap = MapUtil
|
||||
.builder("name1", (Object)"张三")
|
||||
.build();
|
||||
|
||||
NamedSql namedSql = new NamedSql(sql, paramMap);
|
||||
Assert.assertEquals(sql, namedSql.getSql());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest() throws SQLException {
|
||||
Map<String, Object> paramMap = MapUtil
|
||||
|
Reference in New Issue
Block a user