-
-
Notifications
You must be signed in to change notification settings - Fork 110
Undefined variable but used #698
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
I am using SootUp 1.1.2 to analyse https://repo1.maven.org/maven2/cn/hutool/hutool-db/5.7.18/hutool-db-5.7.18.jar.
Inside body of <cn.hutool.db.sql.SqlBuilder: cn.hutool.db.sql.SqlBuilder insert(cn.hutool.db.Entity,java.lang.String)>
tableName is used but undefined.

source code
public SqlBuilder insert(Entity entity, String dialectName) {
// 验证
validateEntity(entity);
final boolean isOracle = DialectName.ORACLE.match(dialectName);// 对Oracle的特殊处理
final StringBuilder fieldsPart = new StringBuilder();
final StringBuilder placeHolder = new StringBuilder();
entity.forEach((field, value) -> {
if (StrUtil.isNotBlank(field)) {
if (fieldsPart.length() > 0) {
// 非第一个参数,追加逗号
fieldsPart.append(", ");
placeHolder.append(", ");
}
fieldsPart.append((null != wrapper) ? wrapper.wrap(field) : field);
if (isOracle && OracleDialect.isNextVal(value)) {
// Oracle的特殊自增键,通过字段名.nextval获得下一个值
placeHolder.append(value);
} else {
// 普通字段使用占位符
placeHolder.append("?");
this.paramValues.add(value);
}
}
});
// issue#1656@Github Phoenix兼容
if (DialectName.PHOENIX.match(dialectName)) {
sql.append("UPSERT INTO ");
} else {
sql.append("INSERT INTO ");
}
String tableName = entity.getTableName();
if (null != this.wrapper) {
// 包装表名 entity = wrapper.wrap(entity);
tableName = this.wrapper.wrap(tableName);
}
sql.append(tableName)
.append(" (").append(fieldsPart).append(") VALUES (")//
.append(placeHolder).append(")");
return this;
}
jimple representation
cn.hutool.db.Entity entity;
cn.hutool.db.sql.SqlBuilder this;
java.lang.String dialectName;
unknown $stack10, $stack11, $stack12, $stack13, $stack14, $stack15, $stack16, $stack17, $stack18, $stack19, $stack20, $stack21, $stack22, $stack23, $stack24, $stack25, $stack26, $stack27, $stack28, $stack29, $stack30, $stack31, $stack32, $stack33, $stack34, $stack35, $stack36, $stack37, $stack7, $stack8, $stack9, fieldsPart, isOracle, placeHolder, tableName;
this := @this: cn.hutool.db.sql.SqlBuilder;
entity := @parameter0: cn.hutool.db.Entity;
dialectName := @parameter1: java.lang.String;
staticinvoke <cn.hutool.db.sql.SqlBuilder: void validateEntity(cn.hutool.db.Entity)>(entity);
$stack7 = <cn.hutool.db.dialect.DialectName: cn.hutool.db.dialect.DialectName ORACLE>;
isOracle = virtualinvoke $stack7.<cn.hutool.db.dialect.DialectName: boolean match(java.lang.String)>(dialectName);
$stack8 = new java.lang.StringBuilder;
specialinvoke $stack8.<java.lang.StringBuilder: void <init>()>();
fieldsPart = $stack8;
$stack9 = new java.lang.StringBuilder;
specialinvoke $stack9.<java.lang.StringBuilder: void <init>()>();
placeHolder = $stack9;
$stack10 = dynamicinvoke accept <java.util.function.BiConsumer (cn.hutool.db.sql.SqlBuilder,java.lang.StringBuilder,java.lang.StringBuilder,boolean)>(this, fieldsPart, placeHolder, isOracle) <java.lang.invoke.LambdaMetafactory: java.lang.invoke.CallSite metafactory(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.invoke.MethodType,java.lang.invoke.MethodHandle,java.lang.invoke.MethodType)>(methodtype: void __METHODTYPE__(java.lang.Object,java.lang.Object), handle: <cn.hutool.db.sql.SqlBuilder: void lambda$insert$0(java.lang.StringBuilder,java.lang.StringBuilder,boolean,java.lang.String,java.lang.Object)>, methodtype: void __METHODTYPE__(java.lang.String,java.lang.Object));
virtualinvoke entity.<cn.hutool.db.Entity: void forEach(java.util.function.BiConsumer)>($stack10);
$stack11 = <cn.hutool.db.dialect.DialectName: cn.hutool.db.dialect.DialectName PHOENIX>;
$stack12 = virtualinvoke $stack11.<cn.hutool.db.dialect.DialectName: boolean match(java.lang.String)>(dialectName);
if $stack12 == 0 goto label1;
$stack32 = this.<cn.hutool.db.sql.SqlBuilder: java.lang.StringBuilder sql>;
$stack33 = virtualinvoke $stack32.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("UPSERT INTO ");
goto label2;
label1:
$stack13 = this.<cn.hutool.db.sql.SqlBuilder: java.lang.StringBuilder sql>;
$stack14 = virtualinvoke $stack13.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("INSERT INTO ");
label2:
$stack34 = entity;
$stack35 = virtualinvoke entity.<cn.hutool.db.Entity: java.lang.String getTableName()>();
$stack37 = null;
$stack36 = this;
$stack15 = this.<cn.hutool.db.sql.SqlBuilder: cn.hutool.db.sql.Wrapper wrapper>;
if $stack37 == $stack15 goto label3;
$stack23 = this.<cn.hutool.db.sql.SqlBuilder: cn.hutool.db.sql.Wrapper wrapper>;
tableName = virtualinvoke $stack23.<cn.hutool.db.sql.Wrapper: java.lang.String wrap(java.lang.String)>(tableName);
label3:
$stack24 = this;
$stack16 = this.<cn.hutool.db.sql.SqlBuilder: java.lang.StringBuilder sql>;
$stack25 = tableName;
$stack17 = virtualinvoke $stack16.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>($stack25);
$stack26 = " (";
$stack18 = virtualinvoke $stack17.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>($stack26);
$stack27 = fieldsPart;
$stack19 = virtualinvoke $stack18.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.CharSequence)>($stack27);
$stack28 = ") VALUES (";
$stack20 = virtualinvoke $stack19.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>($stack28);
$stack29 = placeHolder;
$stack21 = virtualinvoke $stack20.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.CharSequence)>($stack29);
$stack30 = ")";
$stack22 = virtualinvoke $stack21.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>($stack30);
$stack31 = this;
return $stack31;
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working