提交 a8f87e92 编写于 作者: S Serge Rider

#12 RDB model refactoring


Former-commit-id: acfb06fc
上级 325d7aee
......@@ -22,10 +22,8 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.DBPNamedObject2;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCColumnKeyType;
import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTableColumn;
import org.jkiss.dbeaver.model.meta.IPropertyValueListProvider;
import org.jkiss.dbeaver.model.meta.Property;
......@@ -40,46 +38,27 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* PostgreTableColumn
* PostgreAttribute
*/
public class PostgreTableColumn extends JDBCTableColumn<PostgreTableBase> implements DBSTableColumn, DBPNamedObject2
public class PostgreAttribute extends JDBCTableColumn<PostgreClass> implements DBSTableColumn, DBPNamedObject2
{
static final Log log = Log.getLog(PostgreTableColumn.class);
static final Log log = Log.getLog(PostgreAttribute.class);
private static Pattern enumPattern = Pattern.compile("'([^']*)'");
public enum KeyType implements JDBCColumnKeyType {
PRI,
UNI,
MUL;
@Override
public boolean isInUniqueKey()
{
return this == PRI || this == UNI;
}
@Override
public boolean isInReferenceKey()
{
return this == MUL;
}
}
private String comment;
private long charLength;
private KeyType keyType;
private String extraInfo;
private String fullTypeName;
private List<String> enumValues;
public PostgreTableColumn(PostgreTableBase table)
public PostgreAttribute(PostgreTableBase table)
{
super(table, false);
}
public PostgreTableColumn(
public PostgreAttribute(
PostgreTableBase table,
ResultSet dbResult)
throws DBException
......@@ -95,14 +74,6 @@ public class PostgreTableColumn extends JDBCTableColumn<PostgreTableBase> implem
setOrdinalPosition(JDBCUtils.safeGetInt(dbResult, "attnum"));
String typeName = JDBCUtils.safeGetString(dbResult, PostgreConstants.COL_DATA_TYPE);
assert typeName != null;
String keyTypeName = JDBCUtils.safeGetString(dbResult, PostgreConstants.COL_COLUMN_KEY);
if (!CommonUtils.isEmpty(keyTypeName)) {
try {
keyType = KeyType.valueOf(keyTypeName);
} catch (IllegalArgumentException e) {
log.debug(e);
}
}
setTypeName(typeName);
//setValueType(PostgreUtils.typeNameToValueType(typeName));
DBSDataType dataType = getDataSource().getDataType(typeName);
......@@ -232,13 +203,6 @@ public class PostgreTableColumn extends JDBCTableColumn<PostgreTableBase> implem
this.extraInfo = extraInfo;
}
@Override
@Property(viewable = true, order = 60)
public KeyType getKeyType()
{
return keyType;
}
public List<String> getEnumValues()
{
return enumValues;
......@@ -261,14 +225,14 @@ public class PostgreTableColumn extends JDBCTableColumn<PostgreTableBase> implem
return getComment();
}
public static class CharsetListProvider implements IPropertyValueListProvider<PostgreTableColumn> {
public static class CharsetListProvider implements IPropertyValueListProvider<PostgreAttribute> {
@Override
public boolean allowCustomValue()
{
return false;
}
@Override
public Object[] getPossibleValues(PostgreTableColumn object)
public Object[] getPossibleValues(PostgreAttribute object)
{
return object.getDataSource().getCharsets().toArray();
}
......
......@@ -20,12 +20,14 @@ package org.jkiss.dbeaver.ext.postgresql.model;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.DBPNamedObject2;
import org.jkiss.dbeaver.model.DBPRefreshableObject;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSTable;
/**
* PostgreClass
*/
public interface PostgreClass extends PostgreObject,DBSObject,DBPNamedObject2,DBPRefreshableObject
public interface PostgreClass extends PostgreObject,DBSEntity,DBPRefreshableObject
{
enum RelKind {
r,// ordinary table
......
......@@ -255,7 +255,7 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
return PostgreConstants.INFO_SCHEMA_NAME.equalsIgnoreCase(getName()) || PostgreConstants.CATALOG_SCHEMA_NAME.equalsIgnoreCase(getName());
}
public class ClassCache extends JDBCStructCache<PostgreSchema, PostgreTableBase, PostgreTableColumn> {
public class ClassCache extends JDBCStructCache<PostgreSchema, PostgreTableBase, PostgreAttribute> {
protected ClassCache()
{
......@@ -317,10 +317,10 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
}
@Override
protected PostgreTableColumn fetchChild(@NotNull JDBCSession session, @NotNull PostgreSchema owner, @NotNull PostgreTableBase table, @NotNull ResultSet dbResult)
protected PostgreAttribute fetchChild(@NotNull JDBCSession session, @NotNull PostgreSchema owner, @NotNull PostgreTableBase table, @NotNull ResultSet dbResult)
throws SQLException, DBException
{
return new PostgreTableColumn(table, dbResult);
return new PostgreAttribute(table, dbResult);
}
}
......@@ -389,7 +389,7 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
String ascOrDesc = JDBCUtils.safeGetStringTrimmed(dbResult, PostgreConstants.COL_COLLATION);
boolean nullable = "YES".equals(JDBCUtils.safeGetStringTrimmed(dbResult, PostgreConstants.COL_NULLABLE));
PostgreTableColumn tableColumn = parent.getAttribute(session.getProgressMonitor(), columnName);
PostgreAttribute tableColumn = parent.getAttribute(session.getProgressMonitor(), columnName);
if (tableColumn == null) {
log.debug("Column '" + columnName + "' not found in table '" + parent.getName() + "' for index '" + object.getName() + "'");
return null;
......@@ -460,7 +460,7 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
throws SQLException, DBException
{
String columnName = JDBCUtils.safeGetString(dbResult, PostgreConstants.COL_COLUMN_NAME);
PostgreTableColumn column = parent.getAttribute(session.getProgressMonitor(), columnName);
PostgreAttribute column = parent.getAttribute(session.getProgressMonitor(), columnName);
if (column == null) {
log.warn("Column '" + columnName + "' not found in table '" + parent.getFullQualifiedName() + "'");
return null;
......
......@@ -288,12 +288,12 @@ public class PostgreTable extends PostgreTableBase
log.warn("Can't find FK table " + fkTableName);
continue;
}
PostgreTableColumn pkColumn = pkTable.getAttribute(monitor, pkColumnName);
PostgreAttribute pkColumn = pkTable.getAttribute(monitor, pkColumnName);
if (pkColumn == null) {
log.warn("Can't find PK table " + pkTable.getFullQualifiedName() + " column " + pkColumnName);
continue;
}
PostgreTableColumn fkColumn = fkTable.getAttribute(monitor, fkColumnName);
PostgreAttribute fkColumn = fkTable.getAttribute(monitor, fkColumnName);
if (fkColumn == null) {
log.warn("Can't find FK table " + fkTable.getFullQualifiedName() + " column " + fkColumnName);
continue;
......
......@@ -73,14 +73,14 @@ public abstract class PostgreTableBase extends JDBCTable<PostgreDataSource, Post
}
@Override
public Collection<PostgreTableColumn> getAttributes(DBRProgressMonitor monitor)
public Collection<PostgreAttribute> getAttributes(DBRProgressMonitor monitor)
throws DBException
{
return getContainer().classCache.getChildren(monitor, getContainer(), this);
}
@Override
public PostgreTableColumn getAttribute(DBRProgressMonitor monitor, String attributeName)
public PostgreAttribute getAttribute(DBRProgressMonitor monitor, String attributeName)
throws DBException
{
return getContainer().classCache.getChild(monitor, getContainer(), this, attributeName);
......
......@@ -29,10 +29,10 @@ import org.jkiss.dbeaver.model.meta.Property;
public class PostgreTableConstraintColumn extends AbstractTableConstraintColumn
{
private AbstractTableConstraint<PostgreTable> constraint;
private PostgreTableColumn tableColumn;
private PostgreAttribute tableColumn;
private int ordinalPosition;
public PostgreTableConstraintColumn(AbstractTableConstraint<PostgreTable> constraint, PostgreTableColumn tableColumn, int ordinalPosition)
public PostgreTableConstraintColumn(AbstractTableConstraint<PostgreTable> constraint, PostgreAttribute tableColumn, int ordinalPosition)
{
this.constraint = constraint;
this.tableColumn = tableColumn;
......@@ -50,7 +50,7 @@ public class PostgreTableConstraintColumn extends AbstractTableConstraintColumn
@NotNull
@Override
@Property(id = "name", viewable = true, order = 1)
public PostgreTableColumn getAttribute()
public PostgreAttribute getAttribute()
{
return tableColumn;
}
......
......@@ -25,13 +25,13 @@ import org.jkiss.dbeaver.model.struct.rdb.DBSTableForeignKeyColumn;
*/
public class PostgreTableForeignKeyColumnTable extends PostgreTableConstraintColumn implements DBSTableForeignKeyColumn
{
private PostgreTableColumn referencedColumn;
private PostgreAttribute referencedColumn;
public PostgreTableForeignKeyColumnTable(
PostgreTableForeignKey constraint,
PostgreTableColumn tableColumn,
PostgreAttribute tableColumn,
int ordinalPosition,
PostgreTableColumn referencedColumn)
PostgreAttribute referencedColumn)
{
super(constraint, tableColumn, ordinalPosition);
this.referencedColumn = referencedColumn;
......@@ -39,7 +39,7 @@ public class PostgreTableForeignKeyColumnTable extends PostgreTableConstraintCol
@Override
@Property(id = "reference", viewable = true, order = 4)
public PostgreTableColumn getReferencedColumn()
public PostgreAttribute getReferencedColumn()
{
return referencedColumn;
}
......
......@@ -28,14 +28,14 @@ import org.jkiss.dbeaver.model.meta.Property;
public class PostgreTableIndexColumn extends AbstractTableIndexColumn
{
private PostgreTableIndex index;
private PostgreTableColumn tableColumn;
private PostgreAttribute tableColumn;
private int ordinalPosition;
private boolean ascending;
private boolean nullable;
public PostgreTableIndexColumn(
PostgreTableIndex index,
PostgreTableColumn tableColumn,
PostgreAttribute tableColumn,
int ordinalPosition,
boolean ascending,
boolean nullable)
......@@ -72,7 +72,7 @@ public class PostgreTableIndexColumn extends AbstractTableIndexColumn
@Override
@Property(id = "name", viewable = true, order = 1)
public PostgreTableColumn getTableColumn()
public PostgreAttribute getTableColumn()
{
return tableColumn;
}
......
......@@ -25,6 +25,7 @@ import org.jkiss.dbeaver.model.DBPSaveableObject;
import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableColumn;
import org.jkiss.dbeaver.model.meta.IPropertyValueListProvider;
import org.jkiss.utils.CommonUtils;
......@@ -35,7 +36,7 @@ import java.util.TreeSet;
/**
* JDBC abstract table column
*/
public abstract class JDBCTableColumn<TABLE_TYPE extends JDBCTable> extends JDBCColumn implements DBSTableColumn, DBPSaveableObject {
public abstract class JDBCTableColumn<TABLE_TYPE extends DBSEntity> extends JDBCColumn implements DBSTableColumn, DBPSaveableObject {
private final TABLE_TYPE table;
private boolean persisted;
......
......@@ -18,6 +18,7 @@
package org.jkiss.dbeaver.model.struct.rdb;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
/**
......@@ -27,6 +28,6 @@ public interface DBSTableColumn extends DBSEntityAttribute
{
@NotNull
@Override
DBSTable getParentObject();
DBSEntity getParentObject();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册