001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.execute.rts.RealInsertResultSetStatistics
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.sql.execute.rts;
023:
024: import org.apache.derby.iapi.services.io.StoredFormatIds;
025:
026: import org.apache.derby.iapi.services.i18n.MessageService;
027: import org.apache.derby.iapi.reference.SQLState;
028:
029: import org.apache.derby.iapi.services.io.FormatableHashtable;
030:
031: import java.io.ObjectOutput;
032: import java.io.ObjectInput;
033: import java.io.IOException;
034:
035: /**
036: ResultSetStatistics implemenation for InsertResultSet.
037:
038: @author jerry
039:
040: */
041: public class RealInsertResultSetStatistics extends
042: RealNoRowsResultSetStatistics {
043:
044: /* Leave these fields public for object inspectors */
045: public int rowCount;
046: public boolean deferred;
047: public int indexesUpdated;
048: public boolean userSpecifiedBulkInsert;
049: public boolean bulkInsertPerformed;
050: public boolean tableLock;
051:
052: // CONSTRUCTORS
053:
054: /**
055: *
056: *
057: */
058: public RealInsertResultSetStatistics(int rowCount,
059: boolean deferred, int indexesUpdated,
060: boolean userSpecifiedBulkInsert,
061: boolean bulkInsertPerformed, boolean tableLock,
062: long executeTime,
063: ResultSetStatistics sourceResultSetStatistics) {
064: super (executeTime, sourceResultSetStatistics);
065: this .rowCount = rowCount;
066: this .deferred = deferred;
067: this .indexesUpdated = indexesUpdated;
068: this .userSpecifiedBulkInsert = userSpecifiedBulkInsert;
069: this .bulkInsertPerformed = bulkInsertPerformed;
070: this .tableLock = tableLock;
071: this .sourceResultSetStatistics = sourceResultSetStatistics;
072: }
073:
074: // ResultSetStatistics interface
075:
076: /**
077: * Return the statement execution plan as a String.
078: *
079: * @param depth Indentation level.
080: *
081: * @return String The statement execution plan as a String.
082: */
083: public String getStatementExecutionPlanText(int depth) {
084: initFormatInfo(depth);
085:
086: String insertMode;
087:
088: if (userSpecifiedBulkInsert) {
089: if (bulkInsertPerformed) {
090: insertMode = indent
091: + MessageService
092: .getTextMessage(SQLState.RTS_INSERT_MODE_BULK);
093: } else {
094: insertMode = indent
095: + MessageService
096: .getTextMessage(SQLState.RTS_INSERT_MODE_NOT_BULK);
097: }
098: } else {
099: insertMode = indent
100: + MessageService
101: .getTextMessage(SQLState.RTS_INSERT_MODE_NORMAL);
102: }
103:
104: insertMode += "\n";
105:
106: return indent
107: + MessageService
108: .getTextMessage(SQLState.RTS_INSERT_USING)
109: + " "
110: + MessageService
111: .getTextMessage(tableLock ? SQLState.RTS_TABLE_LOCKING
112: : SQLState.RTS_ROW_LOCKING)
113: + ":\n"
114: + indent
115: + MessageService.getTextMessage(SQLState.RTS_DEFERRED)
116: + ": "
117: + deferred
118: + "\n"
119: + insertMode
120: + indent
121: + MessageService
122: .getTextMessage(SQLState.RTS_ROWS_INSERTED)
123: + " = "
124: + rowCount
125: + "\n"
126: + indent
127: + MessageService
128: .getTextMessage(SQLState.RTS_INDEXES_UPDATED)
129: + " = "
130: + indexesUpdated
131: + "\n"
132: + dumpTimeStats(indent)
133: + ((sourceResultSetStatistics == null) ? null
134: : sourceResultSetStatistics
135: .getStatementExecutionPlanText(1));
136: }
137:
138: /**
139: * Return information on the scan nodes from the statement execution
140: * plan as a String.
141: *
142: * @param depth Indentation level.
143: * @param tableName if not NULL then print information for this table only
144: *
145: * @return String The information on the scan nodes from the
146: * statement execution plan as a String.
147: */
148: public String getScanStatisticsText(String tableName, int depth) {
149: if (sourceResultSetStatistics == null)
150: return null;
151:
152: return sourceResultSetStatistics.getScanStatisticsText(
153: tableName, depth);
154: }
155:
156: // Class implementation
157:
158: public String toString() {
159: return getStatementExecutionPlanText(0);
160: }
161:
162: /**
163: * Format for display, a name for this node.
164: *
165: */
166: public String getNodeName() {
167: return MessageService.getTextMessage(SQLState.RTS_INSERT);
168: }
169: }
|