Fix SQLChecker for bind in lists and Bindable sql params
This commit is contained in:
parent
1766a9af6d
commit
168186d43f
|
@ -654,7 +654,20 @@ public class JdbcMapperProcessor extends AbstractProcessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlChecker.checkSql(processingEnv, genClass, mapper, databaseType, eeMethod, sqlStatement, bindParams, arrayInList);
|
// todo: fix these awful hacks...
|
||||||
|
String sqlStatementToCheck = sqlStatement;
|
||||||
|
if (bindInList) {
|
||||||
|
// remove this bit entirely
|
||||||
|
sqlStatementToCheck = sqlStatementToCheck.replace("REPLACEMEWITHUNQUOTEDQUOTEPLZ + com.moparisthebest.jdbc.util.InListUtil.toInList(REPLACEMEWITHUNQUOTEDQUOTEPLZ", "");
|
||||||
|
// replace this with a bind in list that expects 1 param...
|
||||||
|
sqlStatementToCheck = sqlStatementToCheck.replaceAll("REPLACEMEWITHUNQUOTEDQUOTEPLZ, [^)]+\\) \\+ REPLACEMEWITHUNQUOTEDQUOTEPLZ", " IN (?) ");
|
||||||
|
}
|
||||||
|
if (sqlParam) {
|
||||||
|
// remove this entirely, like a blank string being sent in
|
||||||
|
sqlStatementToCheck = sqlStatementToCheck.replaceAll("REPLACEMEWITHUNQUOTEDQUOTEPLZ \\+ [^ ]+ \\+ REPLACEMEWITHUNQUOTEDQUOTEPLZ", "");
|
||||||
|
}
|
||||||
|
// end awful hacks
|
||||||
|
sqlChecker.checkSql(processingEnv, genClass, mapper, databaseType, eeMethod, sqlStatementToCheck, bindParams, arrayInList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.moparisthebest.jdbc.codegen;
|
||||||
|
|
||||||
import com.moparisthebest.jdbc.ArrayInList;
|
import com.moparisthebest.jdbc.ArrayInList;
|
||||||
import com.moparisthebest.jdbc.QueryMapper;
|
import com.moparisthebest.jdbc.QueryMapper;
|
||||||
|
import com.moparisthebest.jdbc.util.Bindable;
|
||||||
|
|
||||||
import javax.annotation.processing.Messager;
|
import javax.annotation.processing.Messager;
|
||||||
import javax.annotation.processing.ProcessingEnvironment;
|
import javax.annotation.processing.ProcessingEnvironment;
|
||||||
|
@ -104,6 +105,7 @@ public class SimpleSQLChecker implements SQLChecker {
|
||||||
if (param instanceof SpecialVariableElement) {
|
if (param instanceof SpecialVariableElement) {
|
||||||
final SpecialVariableElement specialParam = (SpecialVariableElement) param;
|
final SpecialVariableElement specialParam = (SpecialVariableElement) param;
|
||||||
switch (specialParam.specialType) {
|
switch (specialParam.specialType) {
|
||||||
|
case BIND_IN_LIST:
|
||||||
case IN_LIST: {
|
case IN_LIST: {
|
||||||
final TypeMirror componentType;
|
final TypeMirror componentType;
|
||||||
if (o.getKind() == TypeKind.ARRAY) {
|
if (o.getKind() == TypeKind.ARRAY) {
|
||||||
|
@ -115,10 +117,11 @@ public class SimpleSQLChecker implements SQLChecker {
|
||||||
getMessager().printMessage(Diagnostic.Kind.MANDATORY_WARNING, "invalid in-list-variable type, returning null", ((SpecialVariableElement) param).delegate);
|
getMessager().printMessage(Diagnostic.Kind.MANDATORY_WARNING, "invalid in-list-variable type, returning null", ((SpecialVariableElement) param).delegate);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
// if arrayInList is null here, it's a BindInList, in which case we need to return 1 object to bind...
|
||||||
if (types.isAssignable(componentType, numberType)) {
|
if (types.isAssignable(componentType, numberType)) {
|
||||||
return arrayInList.toArray(conn, true, new Long[]{0L}); // todo: not quite right, oh well for now
|
return arrayInList == null ? 0L : arrayInList.toArray(conn, true, new Long[]{0L}); // todo: not quite right, oh well for now
|
||||||
} else if (types.isAssignable(componentType, stringType) || types.isAssignable(componentType, enumType)) {
|
} else if (types.isAssignable(componentType, stringType) || types.isAssignable(componentType, enumType)) {
|
||||||
return arrayInList.toArray(conn, false, new String[]{defaultString});
|
return arrayInList == null ? defaultString : arrayInList.toArray(conn, false, new String[]{defaultString});
|
||||||
} else {
|
} else {
|
||||||
getMessager().printMessage(Diagnostic.Kind.MANDATORY_WARNING, "invalid in-list-variable type, returning null", ((SpecialVariableElement) param).delegate);
|
getMessager().printMessage(Diagnostic.Kind.MANDATORY_WARNING, "invalid in-list-variable type, returning null", ((SpecialVariableElement) param).delegate);
|
||||||
return null;
|
return null;
|
||||||
|
@ -129,7 +132,7 @@ public class SimpleSQLChecker implements SQLChecker {
|
||||||
case CLOB:
|
case CLOB:
|
||||||
return new StringReader(defaultString);
|
return new StringReader(defaultString);
|
||||||
case SQL:
|
case SQL:
|
||||||
return specialParam.blobStringCharset == null ? "" : specialParam.blobStringCharset;
|
return Bindable.empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// end special behavior
|
// end special behavior
|
||||||
|
|
|
@ -136,7 +136,7 @@ class SpecialVariableElement implements VariableElement {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "InListVariableElement{" +
|
return "SpecialVariableElement{" +
|
||||||
"delegate=" + delegate +
|
"delegate=" + delegate +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue