01: /*
02:
03: Derby - Class org.apache.derby.iapi.store.access.RowCountable
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to you under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21:
22: package org.apache.derby.iapi.store.access;
23:
24: import org.apache.derby.iapi.error.StandardException;
25:
26: /**
27:
28: RowCountable provides the interfaces to read and write row counts in
29: tables.
30: <p>
31: @see ScanController
32: @see StoreCostController
33:
34: **/
35:
36: public interface RowCountable {
37: /**
38: * Get the total estimated number of rows in the container.
39: * <p>
40: * The number is a rough estimate and may be grossly off. In general
41: * the server will cache the row count and then occasionally write
42: * the count unlogged to a backing store. If the system happens to
43: * shutdown before the store gets a chance to update the row count it
44: * may wander from reality.
45: * <p>
46: * For btree conglomerates this call will return the count of both
47: * user rows and internal implementaation rows. The "BTREE" implementation
48: * generates 1 internal implementation row for each page in the btree, and
49: * it generates 1 internal implementation row for each branch row. For
50: * this reason it is recommended that clients if possible use the count
51: * of rows in the heap table to estimate the number of rows in the index
52: * rather than use the index estimated row count.
53: *
54: * @return The total estimated number of rows in the conglomerate.
55: *
56: * @exception StandardException Standard exception policy.
57: **/
58: public long getEstimatedRowCount() throws StandardException;
59:
60: /**
61: * Set the total estimated number of rows in the container.
62: * <p>
63: * Often, after a scan, the client of RawStore has a much better estimate
64: * of the number of rows in the container than what store has. For
65: * instance if we implement some sort of update statistics command, or
66: * just after a create index a complete scan will have been done of the
67: * table. In this case this interface allows the client to set the
68: * estimated row count for the container, and store will use that number
69: * for all future references.
70: * <p>
71: * This routine can also be used to set the estimated row count in the
72: * index to the number of rows in the base table, another workaround for
73: * the problem that index estimated row count includes non-user rows.
74: *
75: * @param count the estimated number of rows in the container.
76: *
77: * @exception StandardException Standard exception policy.
78: **/
79: public void setEstimatedRowCount(long count)
80: throws StandardException;
81:
82: }
|