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

PostgreSQL inheritance model fix

上级 aadcb6f3
......@@ -482,10 +482,8 @@ tree.partition_columns.node.name=Partition columns
tree.partitions.node.name=Partitions
tree.tablechildren.node.name=Child tables
tree.tablechildren_columns.node.name=Child Tables columns
tree.tablechildren.node.name=Child tables
tree.rules.node.name=Rules
tree.rules_columns.node.name=Rules columns
tree.rules.node.name=Rules
tree.schema.node.name=Schema
tree.schemas.node.name=Schemas
tree.sequence.node.name=Sequence
......
......@@ -490,6 +490,13 @@ tree.procedures.node.name=Procedures
tree.reference.node.name=Reference
tree.reference_columns.node.name=Reference columns
tree.references.node.name=References
tree.partition.node.name=Partition
tree.partition_columns.node.name=Partition columns
tree.partitions.node.name=Partitions
tree.tablechildren.node.name=Child tables
tree.tablechildren_columns.node.name=Child Tables columns
tree.rules.node.name=Rules
tree.rules_columns.node.name=Rules columns
tree.schema.node.name=Schema
tree.schemas.node.name=Schemas
tree.sequence.node.name=Sequence
......
......@@ -72,19 +72,15 @@
</items>
</folder>
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreTablePartition" label="%tree.partitions.node.name" icon="#folder_table" description="Table partitions" virtual="true">
<items label="%tree.partitions.node.name" path="partition" property="partitions" icon="#partition" virtual="true">
<items label="%tree.partitions_columns.node.name" itemLabel="%tree.column.node.name" path="column" property="attributePartitions" navigable="false" inline="true" virtual="true">
</items>
<items label="%tree.partitions.node.name" path="partition" property="partitions" icon="#partition" virtual="true" recursive="../..">
</items>
</folder>
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableChildren" label="%tree.tablechildren.node.name" icon="#folder_table" description="Table children" virtual="true">
<items label="%tree.tablechildren.node.name" path="tablechildren" property="tablechildren" icon="#table" virtual="true">
<items label="%tree.tablechildren_columns.node.name" itemLabel="%tree.column.node.name" path="column" property="attributeTablechildren" navigable="false" inline="true" virtual="true">
</items>
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase" label="%tree.tablechildren.node.name" icon="#folder_table" description="Table children" virtual="true">
<items label="%tree.tablechildren.node.name" path="subTables" property="subTables" icon="#table" virtual="true" recursive="../.." >
</items>
</folder>
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableRules" label="%tree.rules.node.name" icon="#triggers" description="Table rules" virtual="true">
<items label="%tree.rules.node.name" path="rules" property="rules" icon="#trigger" virtual="true">
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase" label="%tree.rules.node.name" icon="#triggers" description="Table rules" virtual="true">
<items label="%tree.rules.node.name" path="rules" property="rules" icon="#trigger" virtual="true" >
<items label="%tree.rules_columns.node.name" itemLabel="%tree.column.node.name" path="column" property="attributeRules" navigable="false" inline="true" virtual="true">
</items>
</items>
......
......@@ -51,8 +51,7 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
private static final Log log = Log.getLog(PostgreTable.class);
private SimpleObjectCache<PostgreTable, PostgreTableForeignKey> foreignKeys = new SimpleObjectCache<>();
private List<PostgreTablePartition> partitions = null;
private List<PostgreTableBase> children = null;
//private List<PostgreTablePartition> partitions = null;
private boolean hasOids;
private long tablespaceId;
......@@ -80,8 +79,7 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
super(container, source, persisted);
if (source instanceof PostgreTable) {
this.hasOids = ((PostgreTable) source).hasOids;
this.partitions = ((PostgreTable) source).partitions == null ? null : new ArrayList<>(((PostgreTable) source).partitions);
this.children = ((PostgreTable) source).children == null ? null : new ArrayList<>(((PostgreTable) source).children);
//this.partitions = ((PostgreTable) source).partitions == null ? null : new ArrayList<>(((PostgreTable) source).partitions);
}
}
......@@ -244,7 +242,7 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
try (JDBCPreparedStatement dbStat = session.prepareStatement(
"SELECT i.*,c.relnamespace " +
"FROM pg_catalog.pg_inherits i,pg_catalog.pg_class c " +
"WHERE i.inhparent=? AND c.oid=i.inhrelid")) {
"WHERE i.inhparent=? AND c.oid=i.inhrelid AND c.relispartition=false")) {
dbStat.setLong(1, getObjectId());
try (JDBCResultSet dbResult = dbStat.executeQuery()) {
while (dbResult.next()) {
......@@ -281,32 +279,16 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
}
return subTables;
}
public Collection<? extends DBSTable> getPartitions(DBRProgressMonitor monitor) throws DBException {
if (partitions == null) {
partitions = new ArrayList<>();
for(PostgreTableBase t : getSchema().tableCache.getCachedObjects())
{
if (t.isParentOf(this.getObjectId()) && t.isPartition()) {
partitions.add(new PostgreTablePartition(t.getContainer(),t,t.isPersisted()));
}
}
}
return partitions;
}
public Collection<? extends DBSTable> getTablechildren(DBRProgressMonitor monitor) throws DBException {
if (children == null) {
children = new ArrayList<>();
for(PostgreTableBase t : getSchema().tableCache.getCachedObjects())
{
if (t.isParentOf(this.getObjectId()) && !t.isPartition()) {
children.add(t);
}
}
}
return children;
@Association
public Collection<PostgreTableBase> getPartitions(DBRProgressMonitor monitor) throws DBException {
List<PostgreTableBase> partitions = new ArrayList<>();
for(PostgreTableBase t : getSchema().tableCache.getCachedObjects()) {
if (t.isParentOf(this.getObjectId()) && t.isPartition()) {
partitions.add(t);
}
}
return partitions;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册