提交 2079431b authored 作者: Thomas Mueller's avatar Thomas Mueller

Large result sets now always create temporary tables instead of temporary files.

上级 595c4dd3
...@@ -46,32 +46,35 @@ public class ConditionInSelect extends Condition { ...@@ -46,32 +46,35 @@ public class ConditionInSelect extends Condition {
query.setSession(session); query.setSession(session);
query.setDistinct(true); query.setDistinct(true);
LocalResult rows = query.query(0); LocalResult rows = query.query(0);
session.addTemporaryResult(rows); try {
Value l = left.getValue(session); Value l = left.getValue(session);
if (rows.getRowCount() == 0) { if (rows.getRowCount() == 0) {
return ValueBoolean.get(all); return ValueBoolean.get(all);
} else if (l == ValueNull.INSTANCE) { } else if (l == ValueNull.INSTANCE) {
return l; return l;
} }
if (!session.getDatabase().getSettings().optimizeInSelect) { if (!session.getDatabase().getSettings().optimizeInSelect) {
return getValueSlow(rows, l); return getValueSlow(rows, l);
} }
if (all || (compareType != Comparison.EQUAL && if (all || (compareType != Comparison.EQUAL &&
compareType != Comparison.EQUAL_NULL_SAFE)) { compareType != Comparison.EQUAL_NULL_SAFE)) {
return getValueSlow(rows, l); return getValueSlow(rows, l);
} }
int dataType = rows.getColumnType(0); int dataType = rows.getColumnType(0);
if (dataType == Value.NULL) { if (dataType == Value.NULL) {
return ValueBoolean.get(false);
}
l = l.convertTo(dataType);
if (rows.containsDistinct(new Value[] { l })) {
return ValueBoolean.get(true);
}
if (rows.containsDistinct(new Value[] { ValueNull.INSTANCE })) {
return ValueNull.INSTANCE;
}
return ValueBoolean.get(false); return ValueBoolean.get(false);
} finally {
rows.close();
} }
l = l.convertTo(dataType);
if (rows.containsDistinct(new Value[] { l })) {
return ValueBoolean.get(true);
}
if (rows.containsDistinct(new Value[] { ValueNull.INSTANCE })) {
return ValueNull.INSTANCE;
}
return ValueBoolean.get(false);
} }
private Value getValueSlow(LocalResult rows, Value l) { private Value getValueSlow(LocalResult rows, Value l) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论