/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/mysql/ast/MySQLInOperation.java
71 строка
2 KB
Manuel Rigger
Fix JavaDoc issues
21 янв 2021, 01:47
21 янв 2021, 01:47
e118824
Код
Авторство
О чём код?
package sqlancer.mysql.ast; import java.util.List; import sqlancer.IgnoreMeException; /** * @see <a href="https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_in">Comparison Functions and * Operators</a> */ public class MySQLInOperation implements MySQLExpression { private final MySQLExpression expr; private final List<MySQLExpression> listElements; private final boolean isTrue; public MySQLInOperation(MySQLExpression expr, List<MySQLExpression> listElements, boolean isTrue) { this.expr = expr; this.listElements = listElements; this.isTrue = isTrue; } public MySQLExpression getExpr() { return expr; } public List<MySQLExpression> getListElements() { return listElements; } @Override public MySQLConstant getExpectedValue() { MySQLConstant leftVal = expr.getExpectedValue(); if (leftVal.isNull()) { return MySQLConstant.createNullConstant(); } /* workaround for https://bugs.mysql.com/bug.php?id=95957 */ if (leftVal.isInt() && !leftVal.isSigned()) { throw new IgnoreMeException(); } boolean isNull = false; for (MySQLExpression rightExpr : listElements) { MySQLConstant rightVal = rightExpr.getExpectedValue(); /* workaround for https://bugs.mysql.com/bug.php?id=95957 */ if (rightVal.isInt() && !rightVal.isSigned()) { throw new IgnoreMeException(); } MySQLConstant convertedRightVal = rightVal; MySQLConstant isEquals = leftVal.isEquals(convertedRightVal); if (isEquals.isNull()) { isNull = true; } else { if (isEquals.getInt() == 1) { return MySQLConstant.createBoolean(isTrue); } } } if (isNull) { return MySQLConstant.createNullConstant(); } else { return MySQLConstant.createBoolean(!isTrue); } } public boolean isTrue() { return isTrue; } }