提交 04616c4f 编写于 作者: J jurgen

Real row count for Oracle

Former-commit-id: b87c37f0
上级 2854bcbd
......@@ -24,10 +24,10 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPRefreshableObject;
import org.jkiss.dbeaver.model.DBPSystemObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCExecutionContext;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCConstants;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
......@@ -79,7 +79,7 @@ public class GenericTable extends JDBCTable<GenericDataSource, GenericStructCont
this.isView = (type.contains("VIEW"));
this.isSystem =
(type.contains("SYSTEM")) || // general rule
tableName.contains("RDB$"); // [Firebird]
tableName.contains("RDB$"); // [JDBC: Firebird]
}
}
......@@ -230,32 +230,13 @@ public class GenericTable extends JDBCTable<GenericDataSource, GenericStructCont
return null;
}
// if (indexes != null) {
// rowCount = getRowCountFromIndexes(monitor);
// }
if (rowCount == null) {
// Query row count
JDBCExecutionContext context = getDataSource().openContext(monitor, DBCExecutionPurpose.META, "Read row count");
DBCExecutionContext context = getDataSource().openContext(monitor, DBCExecutionPurpose.META, "Read row count");
try {
JDBCPreparedStatement dbStat = context.prepareStatement(
"SELECT COUNT(*) FROM " + getFullQualifiedName());
try {
// dbStat.setQueryTimeout(3);
JDBCResultSet resultSet = dbStat.executeQuery();
try {
resultSet.next();
rowCount = resultSet.getLong(1);
}
finally {
resultSet.close();
}
}
finally {
dbStat.close();
}
rowCount = countData(context, null);
}
catch (SQLException e) {
catch (DBException e) {
//throw new DBCException(e);
// do not throw this error - row count is optional info and some providers may fail
log.debug("Can't fetch row count: " + e.getMessage());
......
......@@ -281,8 +281,10 @@ meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndex.tablespace.name=Tablesp
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.ordinalPosition.name=Position
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.ascending.name=Ascending
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.tableColumn.name=Column
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.name=Row Count
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.name=Stat Row Count
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.description=Number of rows in the table (populated only if you collect statistics)
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.realRowCount.name=Real Row Count
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.realRowCount.description=Actual row count
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.tablespace.name=Tablespace
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablespace.name.name=Name
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablespace.blockSize.name=Block Size
......
......@@ -266,8 +266,10 @@ meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndex.description.name=\u0422
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.ordinalPosition.name=\u041F\u043E\u0437\u0438\u0446\u0438\u044F
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.ascending.name=\u041F\u043E \u0432\u043E\u0437\u0440\u0430\u0441\u0442\u0430\u043D\u0438\u044E
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTableIndexColumn.tableColumn.name=\u041A\u043E\u043B\u043E\u043D\u043A\u0430
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.name=\u041A\u043E\u043B-\u0432\u043E \u0441\u0442\u0440\u043E\u043A
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.description=\u041A\u043E\u043B-\u0432\u043E \u0441\u0442\u0440\u043E\u043A \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435 (\u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0412\u044B \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443)
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.name=\u0427\u0438\u0441\u043B\u043E \u0441\u0442\u0440\u043E\u043A (\u0441\u0442\u0430\u0442)
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.rowCount.description=\u0427\u0438\u0441\u043B\u043E \u0441\u0442\u0440\u043E\u043A \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435 (\u0431\u0435\u0440\u0435\u0442\u0441\u044F \u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0442\u0430\u0431\u043B\u0438\u0446\u044B)
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.realRowCount.name=\u0427\u0438\u0441\u043B\u043E \u0441\u0442\u0440\u043E\u043A
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.realRowCount.description=\u0410\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0441\u0442\u0440\u043E\u043A \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical.tablespace.name=\u0422\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablespace.name.name=\u0418\u043C\u044F
meta.org.jkiss.dbeaver.ext.oracle.model.OracleTablespace.blockSize.name=\u0420\u0430\u0437\u043C\u0435\u0440 \u0431\u043B\u043E\u043A\u0430
......
......@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.oracle.model;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCExecutionContext;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
......@@ -43,6 +44,7 @@ public abstract class OracleTablePhysical extends OracleTableBase implements DBS
//private boolean valid;
private long rowCount;
private Long realRowCount;
private Object tablespace;
private boolean partitioned;
private PartitionInfo partitionInfo;
......@@ -72,11 +74,36 @@ public abstract class OracleTablePhysical extends OracleTableBase implements DBS
return rowCount;
}
// @Property(name = "Valid", viewable = true, order = 21, description = "If a previous DROP TABLE operation failed, indicates whether the table is unusable")
// public boolean isValid()
// {
// return valid;
// }
@Property(viewable = false, expensive = true, order = 21)
public synchronized Long getRealRowCount(DBRProgressMonitor monitor)
{
if (realRowCount != null) {
return realRowCount;
}
if (!isPersisted()) {
// Do not count rows for views
return null;
}
if (realRowCount == null) {
// Query row count
DBCExecutionContext context = getDataSource().openContext(monitor, DBCExecutionPurpose.META, "Read row count");
try {
realRowCount = countData(context, null);
}
catch (DBException e) {
log.debug("Can't fetch row count", e);
}
finally {
context.close();
}
}
if (realRowCount == null) {
realRowCount = -1L;
}
return realRowCount;
}
@Override
public Object getLazyReference(Object propertyId)
......@@ -160,6 +187,7 @@ public abstract class OracleTablePhysical extends OracleTableBase implements DBS
if (partitionCache != null) {
partitionCache.clearCache();
}
realRowCount = null;
return true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册