提交 567915fe 编写于 作者: S serge-rider

Table manager model fix (support non-relational tables)

上级 e60d5168
......@@ -1881,4 +1881,7 @@ public final class DBUtils {
return targetType.cast(result);
}
public static boolean isView(DBSEntity table) {
return table instanceof DBSView || table instanceof DBSTable && ((DBSTable) table).isView();
}
}
......@@ -94,6 +94,12 @@ public abstract class AbstractObjectCache<OWNER extends DBSObject, OBJECT extend
}
}
public int getCacheSize() {
synchronized (this) {
return objectList == null ? 0 : objectList.size();
}
}
@Override
public void cacheObject(@NotNull OBJECT object)
{
......
......@@ -24,13 +24,13 @@ import org.jkiss.dbeaver.model.edit.prop.DBECommandComposite;
import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import org.jkiss.dbeaver.model.impl.edit.DBECommandAbstract;
import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction;
import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable;
import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTableColumn;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.messages.ModelMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.model.struct.rdb.DBSTable;
import org.jkiss.utils.CommonUtils;
......@@ -38,9 +38,9 @@ import java.util.List;
import java.util.Map;
/**
* JDBC table column manager
* Table column manager. Fits for all composite entities including NoSQL.
*/
public abstract class SQLTableColumnManager<OBJECT_TYPE extends JDBCTableColumn<TABLE_TYPE>, TABLE_TYPE extends JDBCTable>
public abstract class SQLTableColumnManager<OBJECT_TYPE extends DBSEntityAttribute, TABLE_TYPE extends DBSEntity>
extends SQLObjectEditor<OBJECT_TYPE, TABLE_TYPE>
{
public static final long DDL_FEATURE_OMIT_COLUMN_CLAUSE_IN_DROP = 1;
......@@ -117,8 +117,8 @@ public abstract class SQLTableColumnManager<OBJECT_TYPE extends JDBCTableColumn<
@Override
public boolean canEditObject(OBJECT_TYPE object)
{
TABLE_TYPE table = object.getParentObject();
return table != null && !table.isView();
DBSEntity table = object.getParentObject();
return table != null && !DBUtils.isView(table);
}
@Override
......@@ -152,11 +152,11 @@ public abstract class SQLTableColumnManager<OBJECT_TYPE extends JDBCTableColumn<
@Override
protected void addObjectCreateActions(DBRProgressMonitor monitor, List<DBEPersistAction> actions, ObjectCreateCommand command, Map<String, Object> options)
{
final TABLE_TYPE table = command.getObject().getTable();
final TABLE_TYPE table = (TABLE_TYPE) command.getObject().getParentObject();
actions.add(
new SQLDatabasePersistAction(
ModelMessages.model_jdbc_create_new_table_column,
"ALTER TABLE " + table.getFullyQualifiedName(DBPEvaluationContext.DDL) + " ADD " + getNestedDeclaration(monitor, table, command, options)) );
"ALTER TABLE " + DBUtils.getObjectFullName(table, DBPEvaluationContext.DDL) + " ADD " + getNestedDeclaration(monitor, table, command, options)) );
}
@Override
......@@ -164,7 +164,7 @@ public abstract class SQLTableColumnManager<OBJECT_TYPE extends JDBCTableColumn<
{
actions.add(
new SQLDatabasePersistAction(
ModelMessages.model_jdbc_drop_table_column, "ALTER TABLE " + command.getObject().getTable().getFullyQualifiedName(DBPEvaluationContext.DDL) + //$NON-NLS-2$
ModelMessages.model_jdbc_drop_table_column, "ALTER TABLE " + DBUtils.getObjectFullName(command.getObject(), DBPEvaluationContext.DDL) + //$NON-NLS-2$
" DROP " + (hasDDLFeature(command.getObject(), DDL_FEATURE_OMIT_COLUMN_CLAUSE_IN_DROP) ? "" : "COLUMN ") + DBUtils.getQuotedIdentifier(command.getObject())) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
);
}
......@@ -179,7 +179,7 @@ public abstract class SQLTableColumnManager<OBJECT_TYPE extends JDBCTableColumn<
if (!exists) {
// Check for new columns (they are present only within command context)
for (DBPObject contextObject : context.getEditedObjects()) {
if (contextObject instanceof JDBCTableColumn && ((JDBCTableColumn) contextObject).getTable() == table && name.equalsIgnoreCase(((JDBCTableColumn) contextObject).getName())) {
if (contextObject instanceof DBSEntityAttribute && ((DBSEntityAttribute) contextObject).getParentObject() == table && name.equalsIgnoreCase(((DBSEntityAttribute) contextObject).getName())) {
exists = true;
break;
}
......
......@@ -29,14 +29,8 @@ import org.jkiss.dbeaver.model.messages.ModelMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLDataSource;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSEntityAssociation;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.model.struct.rdb.DBSTable;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraint;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableForeignKey;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.rdb.*;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
......@@ -45,7 +39,7 @@ import java.util.*;
/**
* JDBC table manager
*/
public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TYPE extends DBSObjectContainer>
public abstract class SQLTableManager<OBJECT_TYPE extends DBSEntity, CONTAINER_TYPE extends DBSObjectContainer>
extends SQLStructEditor<OBJECT_TYPE, CONTAINER_TYPE>
{
......@@ -89,7 +83,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
return;
}
final String tableName = CommonUtils.getOption(options, DBPScriptObject.OPTION_FULLY_QUALIFIED_NAMES, true) ?
table.getFullyQualifiedName(DBPEvaluationContext.DDL) : DBUtils.getQuotedIdentifier(table);
DBUtils.getObjectFullName(table, DBPEvaluationContext.DDL) : DBUtils.getQuotedIdentifier(table);
final String slComment = SQLUtils.getDialectFromObject(table).getSingleLineComments()[0];
final String lineSeparator = GeneralUtils.getDefaultLineSeparator();
......@@ -146,7 +140,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
}
protected String getCreateTableType(OBJECT_TYPE table) {
return table.isView() ? "VIEW" : "TABLE";
return DBUtils.isView(table) ? "VIEW" : "TABLE";
}
protected boolean excludeFromDDL(NestedObjectCommand command, Collection<NestedObjectCommand> orderedCommands) {
......@@ -158,13 +152,13 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
{
OBJECT_TYPE object = command.getObject();
final String tableName = CommonUtils.getOption(options, DBPScriptObject.OPTION_FULLY_QUALIFIED_NAMES, true) ?
object.getFullyQualifiedName(DBPEvaluationContext.DDL) : DBUtils.getQuotedIdentifier(object);
DBUtils.getObjectFullName(object, DBPEvaluationContext.DDL) : DBUtils.getQuotedIdentifier(object);
actions.add(
new SQLDatabasePersistAction(
ModelMessages.model_jdbc_drop_table,
"DROP " + getCreateTableType(object) + //$NON-NLS-2$
" " + tableName + //$NON-NLS-2$
(!object.isView() && CommonUtils.getOption(options, OPTION_DELETE_CASCADE) ? " CASCADE" : "") //$NON-NLS-2$
(!DBUtils.isView(object) && CommonUtils.getOption(options, OPTION_DELETE_CASCADE) ? " CASCADE" : "") //$NON-NLS-2$
)
);
}
......@@ -200,7 +194,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
final DBERegistry editorsRegistry = table.getDataSource().getContainer().getPlatform().getEditorsRegistry();
SQLObjectEditor<DBSEntityAttribute, OBJECT_TYPE> tcm = getObjectEditor(editorsRegistry, DBSEntityAttribute.class);
SQLObjectEditor<DBSTableConstraint, OBJECT_TYPE> pkm = getObjectEditor(editorsRegistry, DBSTableConstraint.class);
SQLObjectEditor<DBSEntityConstraint, OBJECT_TYPE> pkm = getObjectEditor(editorsRegistry, DBSEntityConstraint.class);
SQLObjectEditor<DBSTableForeignKey, OBJECT_TYPE> fkm = getObjectEditor(editorsRegistry, DBSTableForeignKey.class);
SQLObjectEditor<DBSTableIndex, OBJECT_TYPE> im = getObjectEditor(editorsRegistry, DBSTableIndex.class);
......@@ -255,7 +249,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
}
if (pkm != null) {
try {
for (DBSTableConstraint constraint : CommonUtils.safeCollection(table.getConstraints(monitor))) {
for (DBSEntityConstraint constraint : CommonUtils.safeCollection(table.getConstraints(monitor))) {
if (DBUtils.isHiddenObject(constraint) || DBUtils.isInheritedObject(constraint)) {
continue;
}
......@@ -282,9 +276,9 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
log.debug(e);
}
}
if (im != null) {
if (im != null && table instanceof DBSTable) {
try {
for (DBSTableIndex index : CommonUtils.safeCollection(table.getIndexes(monitor))) {
for (DBSTableIndex index : CommonUtils.safeCollection(((DBSTable)table).getIndexes(monitor))) {
if (!isIncludeIndexInDDL(index)) {
continue;
}
......@@ -298,7 +292,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends DBSTable, CONTAINER_TY
addExtraDDLCommands(monitor, table, options, command);
Collections.addAll(actions, command.getPersistActions(monitor, options));
return actions.toArray(new DBEPersistAction[actions.size()]);
return actions.toArray(new DBEPersistAction[0]);
}
protected void addExtraDDLCommands(DBRProgressMonitor monitor, OBJECT_TYPE table, Map<String, Object> options, StructCreateCommand createCommand) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册