提交 b9d65f7b 编写于 作者: J jurgen

Logical operator model

上级 18d5f735
......@@ -1311,4 +1311,30 @@ public final class DBUtils {
((DBDContent)value).resetContents();
}
}
public static DBCLogicalOperator[] getDefaultOperators(DBSAttributeBase attribute) {
List<DBCLogicalOperator> operators = new ArrayList<DBCLogicalOperator>();
DBPDataKind dataKind = attribute.getDataKind();
if (!attribute.isRequired()) {
operators.add(DBCLogicalOperator.IS_NULL);
operators.add(DBCLogicalOperator.IS_NOT_NULL);
}
if (dataKind == DBPDataKind.BOOLEAN) {
operators.add(DBCLogicalOperator.EQUALS);
operators.add(DBCLogicalOperator.NOT_EQUALS);
}
if (dataKind == DBPDataKind.NUMERIC || dataKind == DBPDataKind.DATETIME || dataKind == DBPDataKind.STRING) {
operators.add(DBCLogicalOperator.EQUALS);
operators.add(DBCLogicalOperator.NOT_EQUALS);
operators.add(DBCLogicalOperator.GREATER);
//operators.add(DBCLogicalOperator.GREATER_EQUALS);
operators.add(DBCLogicalOperator.LESS);
//operators.add(DBCLogicalOperator.LESS_EQUALS);
}
if (dataKind == DBPDataKind.STRING) {
operators.add(DBCLogicalOperator.LESS);
operators.add(DBCLogicalOperator.LIKE);
}
return operators.toArray(new DBCLogicalOperator[operators.size()]);
}
}
......@@ -23,10 +23,7 @@ import org.eclipse.jface.action.IContributionManager;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCResultSet;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.exec.DBCStatement;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.dbeaver.ui.properties.PropertySourceAbstract;
......@@ -162,4 +159,6 @@ public interface DBDValueHandler
DBDValueEditor createEditor(@NotNull DBDValueController controller)
throws DBException;
DBCLogicalOperator[] getSupportedOperators(@NotNull DBDAttributeBinding attribute);
}
......@@ -29,7 +29,7 @@ public class DBCLogicalOperator {
public static final DBCLogicalOperator GREATER = new DBCLogicalOperator(">", 1);
public static final DBCLogicalOperator GREATER_EQUALS = new DBCLogicalOperator(">=", 1);
public static final DBCLogicalOperator LESS = new DBCLogicalOperator("<", 1);
public static final DBCLogicalOperator LESS_EQUALS = new DBCLogicalOperator(">=", 1);
public static final DBCLogicalOperator LESS_EQUALS = new DBCLogicalOperator("<=", 1);
public static final DBCLogicalOperator IS_NULL = new DBCLogicalOperator("IS NULL", 0);
public static final DBCLogicalOperator IS_NOT_NULL = new DBCLogicalOperator("IS NOT NULL", 0);
public static final DBCLogicalOperator BETWEEN = new DBCLogicalOperator("BETWEEN", 2);
......
......@@ -27,10 +27,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCResultSet;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.exec.DBCStatement;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.dbeaver.ui.dialogs.data.TextViewDialog;
import org.jkiss.dbeaver.ui.properties.PropertySourceAbstract;
......@@ -132,4 +129,9 @@ public class DBCDefaultValueHandler implements DBDValueHandler {
}
}
@Override
public DBCLogicalOperator[] getSupportedOperators(@NotNull DBDAttributeBinding attribute) {
return DBUtils.getDefaultOperators(attribute);
}
}
......@@ -33,10 +33,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCResultSet;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.exec.DBCStatement;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
......@@ -119,6 +116,11 @@ public abstract class JDBCAbstractValueHandler implements DBDValueHandler {
Object value)
throws DBCException, SQLException;
@Override
public DBCLogicalOperator[] getSupportedOperators(@NotNull DBDAttributeBinding attribute) {
return DBUtils.getDefaultOperators(attribute);
}
protected abstract class ValueEditor<T extends Control> implements DBDValueEditor {
protected final DBDValueController valueController;
protected final T control;
......
......@@ -1520,10 +1520,11 @@ public class ResultSetViewer extends Viewer
private void fillFiltersMenu(@NotNull DBDAttributeBinding column, @NotNull IMenuManager filtersMenu)
{
if (supportsDataFilter()) {
DBPDataKind dataKind = column.getDataKind();
if (!column.isRequired()) {
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.IS_NULL, FilterByColumnType.NONE, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.IS_NOT_NULL, FilterByColumnType.NONE, column));
DBCLogicalOperator[] operators = column.getValueHandler().getSupportedOperators(column);
for (DBCLogicalOperator operator : operators) {
if (operator.getArgumentCount() == 0) {
filtersMenu.add(new FilterByColumnAction(operator, FilterByColumnType.NONE, column));
}
}
for (FilterByColumnType type : FilterByColumnType.values()) {
if (type == FilterByColumnType.NONE) {
......@@ -1535,20 +1536,10 @@ public class ResultSetViewer extends Viewer
// Null cell value - no operators can be applied
continue;
}
if (dataKind == DBPDataKind.BOOLEAN) {
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.EQUALS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.NOT_EQUALS, type, column));
} else if (dataKind == DBPDataKind.NUMERIC || dataKind == DBPDataKind.DATETIME) {
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.EQUALS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.NOT_EQUALS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.GREATER, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.LESS, type, column));
} else if (dataKind == DBPDataKind.STRING) {
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.EQUALS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.NOT_EQUALS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.GREATER, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.LESS, type, column));
filtersMenu.add(new FilterByColumnAction(DBCLogicalOperator.LIKE, type, column));
for (DBCLogicalOperator operator : operators) {
if (operator.getArgumentCount() > 0) {
filtersMenu.add(new FilterByColumnAction(operator, type, column));
}
}
}
filtersMenu.add(new Separator());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册