提交 162e190d authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Use DataType.isLargeObject() and isStringType() in more places

上级 4dac32b2
...@@ -17,6 +17,7 @@ import org.h2.table.Column; ...@@ -17,6 +17,7 @@ import org.h2.table.Column;
import org.h2.table.Table; import org.h2.table.Table;
import org.h2.table.TableType; import org.h2.table.TableType;
import org.h2.util.StatementBuilder; import org.h2.util.StatementBuilder;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueInt; import org.h2.value.ValueInt;
import org.h2.value.ValueNull; import org.h2.value.ValueNull;
...@@ -104,8 +105,7 @@ public class Analyze extends DefineCommand { ...@@ -104,8 +105,7 @@ public class Analyze extends DefineCommand {
StatementBuilder buff = new StatementBuilder("SELECT "); StatementBuilder buff = new StatementBuilder("SELECT ");
for (Column col : columns) { for (Column col : columns) {
buff.appendExceptFirst(", "); buff.appendExceptFirst(", ");
int type = col.getType(); if (DataType.isLargeObject(col.getType())) {
if (type == Value.BLOB || type == Value.CLOB) {
// can not index LOB columns, so calculating // can not index LOB columns, so calculating
// the selectivity is not required // the selectivity is not required
buff.append("MAX(NULL)"); buff.append("MAX(NULL)");
......
...@@ -50,6 +50,7 @@ import org.h2.util.ColumnNamerConfiguration; ...@@ -50,6 +50,7 @@ import org.h2.util.ColumnNamerConfiguration;
import org.h2.util.CurrentTimestamp; import org.h2.util.CurrentTimestamp;
import org.h2.util.SmallLRUCache; import org.h2.util.SmallLRUCache;
import org.h2.util.Utils; import org.h2.util.Utils;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueArray; import org.h2.value.ValueArray;
import org.h2.value.ValueLong; import org.h2.value.ValueLong;
...@@ -1701,7 +1702,7 @@ public class Session extends SessionWithState implements TransactionStore.Rollba ...@@ -1701,7 +1702,7 @@ public class Session extends SessionWithState implements TransactionStore.Rollba
@Override @Override
public void addTemporaryLob(Value v) { public void addTemporaryLob(Value v) {
if (v.getType() != Value.CLOB && v.getType() != Value.BLOB) { if (!DataType.isLargeObject(v.getType())) {
return; return;
} }
if (v.getTableId() == LobStorageFrontend.TABLE_RESULT if (v.getTableId() == LobStorageFrontend.TABLE_RESULT
......
...@@ -15,6 +15,7 @@ import org.h2.message.DbException; ...@@ -15,6 +15,7 @@ import org.h2.message.DbException;
import org.h2.table.ColumnResolver; import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter; import org.h2.table.TableFilter;
import org.h2.value.CompareMode; import org.h2.value.CompareMode;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueBoolean; import org.h2.value.ValueBoolean;
import org.h2.value.ValueNull; import org.h2.value.ValueNull;
...@@ -198,9 +199,7 @@ public class CompareLike extends Condition { ...@@ -198,9 +199,7 @@ public class CompareLike extends Condition {
// can't use an index // can't use an index
return; return;
} }
int dataType = l.getColumn().getType(); if (!DataType.isStringType(l.getColumn().getType())) {
if (dataType != Value.STRING && dataType != Value.STRING_IGNORECASE &&
dataType != Value.STRING_FIXED) {
// column is not a varchar - can't use the index // column is not a varchar - can't use the index
return; return;
} }
......
...@@ -23,6 +23,7 @@ import org.h2.table.Table; ...@@ -23,6 +23,7 @@ import org.h2.table.Table;
import org.h2.table.TableFilter; import org.h2.table.TableFilter;
import org.h2.util.StatementBuilder; import org.h2.util.StatementBuilder;
import org.h2.util.StringUtils; import org.h2.util.StringUtils;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueNull; import org.h2.value.ValueNull;
...@@ -72,8 +73,7 @@ public abstract class BaseIndex extends SchemaObjectBase implements Index { ...@@ -72,8 +73,7 @@ public abstract class BaseIndex extends SchemaObjectBase implements Index {
*/ */
protected static void checkIndexColumnTypes(IndexColumn[] columns) { protected static void checkIndexColumnTypes(IndexColumn[] columns) {
for (IndexColumn c : columns) { for (IndexColumn c : columns) {
int type = c.column.getType(); if (DataType.isLargeObject(c.column.getType())) {
if (type == Value.CLOB || type == Value.BLOB) {
throw DbException.getUnsupportedException( throw DbException.getUnsupportedException(
"Index on BLOB or CLOB column: " + c.column.getCreateSQL()); "Index on BLOB or CLOB column: " + c.column.getCreateSQL());
} }
......
...@@ -23,6 +23,7 @@ import org.h2.table.Column; ...@@ -23,6 +23,7 @@ import org.h2.table.Column;
import org.h2.table.IndexColumn; import org.h2.table.IndexColumn;
import org.h2.table.Table; import org.h2.table.Table;
import org.h2.util.TempFileDeleter; import org.h2.util.TempFileDeleter;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueNull; import org.h2.value.ValueNull;
...@@ -118,7 +119,7 @@ public class ResultTempTable implements ResultExternal { ...@@ -118,7 +119,7 @@ public class ResultTempTable implements ResultExternal {
for (int i = 0; i < expressions.length; i++) { for (int i = 0; i < expressions.length; i++) {
int type = expressions[i].getType(); int type = expressions[i].getType();
Column col = new Column(COLUMN_NAME + i, type); Column col = new Column(COLUMN_NAME + i, type);
if (type == Value.CLOB || type == Value.BLOB) { if (DataType.isLargeObject(type)) {
containsLob = true; containsLob = true;
} }
data.columns.add(col); data.columns.add(col);
......
...@@ -13,6 +13,7 @@ import org.h2.engine.Session; ...@@ -13,6 +13,7 @@ import org.h2.engine.Session;
import org.h2.store.Data; import org.h2.store.Data;
import org.h2.store.FileStore; import org.h2.store.FileStore;
import org.h2.util.Utils; import org.h2.util.Utils;
import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
/** /**
...@@ -63,7 +64,7 @@ public class RowList { ...@@ -63,7 +64,7 @@ public class RowList {
buff.writeByte((byte) 0); buff.writeByte((byte) 0);
} else { } else {
buff.writeByte((byte) 1); buff.writeByte((byte) 1);
if (v.getType() == Value.CLOB || v.getType() == Value.BLOB) { if (DataType.isLargeObject(v.getType())) {
// need to keep a reference to temporary lobs, // need to keep a reference to temporary lobs,
// otherwise the temp file is deleted // otherwise the temp file is deleted
if (v.getSmall() == null && v.getTableId() == 0) { if (v.getSmall() == null && v.getTableId() == 0) {
......
...@@ -37,6 +37,7 @@ import org.h2.store.LobStorageInterface; ...@@ -37,6 +37,7 @@ import org.h2.store.LobStorageInterface;
import org.h2.util.IOUtils; import org.h2.util.IOUtils;
import org.h2.util.SmallLRUCache; import org.h2.util.SmallLRUCache;
import org.h2.util.SmallMap; import org.h2.util.SmallMap;
import org.h2.value.DataType;
import org.h2.value.Transfer; import org.h2.value.Transfer;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueLobDb; import org.h2.value.ValueLobDb;
...@@ -572,7 +573,7 @@ public class TcpServerThread implements Runnable { ...@@ -572,7 +573,7 @@ public class TcpServerThread implements Runnable {
} }
private void writeValue(Value v) throws IOException { private void writeValue(Value v) throws IOException {
if (v.getType() == Value.CLOB || v.getType() == Value.BLOB) { if (DataType.isLargeObject(v.getType())) {
if (v instanceof ValueLobDb) { if (v instanceof ValueLobDb) {
ValueLobDb lob = (ValueLobDb) v; ValueLobDb lob = (ValueLobDb) v;
if (lob.isStored()) { if (lob.isStored()) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论