001: /*
002:
003: Derby - Class org.apache.derbyTesting.functionTests.util.ConsistencyChecker
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.derbyTesting.functionTests.util;
023:
024: import org.apache.derby.iapi.error.StandardException;
025:
026: import org.apache.derby.iapi.sql.dictionary.DataDictionaryContext;
027: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
028: import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
029: import org.apache.derby.iapi.sql.dictionary.TableDescriptor;
030: import org.apache.derby.iapi.sql.dictionary.ColumnDescriptor;
031: import org.apache.derby.iapi.sql.dictionary.ConglomerateDescriptor;
032:
033: import org.apache.derby.iapi.sql.depend.DependencyManager;
034:
035: import org.apache.derby.iapi.sql.execute.ExecutionContext;
036:
037: import org.apache.derby.iapi.types.DataValueFactory;
038:
039: import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
040:
041: import org.apache.derby.iapi.store.access.TransactionController;
042: import org.apache.derby.iapi.types.RowLocation;
043: import org.apache.derby.iapi.store.access.ScanController;
044: import org.apache.derby.iapi.store.access.ConglomerateController;
045:
046: import org.apache.derby.iapi.services.context.ContextService;
047:
048: import org.apache.derby.iapi.services.io.FormatableBitSet;
049:
050: /**
051: * This class provides static methods for checking the consistency of database
052: * objects like tables.
053: */
054: public class ConsistencyChecker {
055:
056: /**
057: * Run all of the consistency checkers which do not take parameters.
058: * Actually, just run the ones that "make sense" to run. Today,
059: * that is:
060: * countOpens()
061: *
062: * @return String If an inconsistency is found, and if DEBUG is on,
063: * then a string will be returned with more info.
064: * If DEBUG is off, then a simple string will be
065: * returned stating whether or not there are open scans.
066: *
067: * @exception StandardException Thrown on error
068: * @exception java.sql.SQLException Thrown on error
069: */
070: public static String runConsistencyChecker()
071: throws StandardException, java.sql.SQLException {
072: return countOpens() + countDependencies();
073: }
074:
075: /**
076: * Check to make sure that there are no open conglomerates, scans or sorts.
077: *
078: * @return String If an inconsistency is found, and if DEBUG is on,
079: * then a string will be returned with more info.
080: * If DEBUG is off, then a simple string will be
081: * returned stating whether or not there are open scans.
082: *
083: * @exception StandardException Thrown on error
084: */
085: public static String countOpens() throws StandardException {
086: int numOpens = 0;
087: LanguageConnectionContext lcc;
088: String output = "No open scans, etc.\n";
089: TransactionController tc;
090:
091: lcc = (LanguageConnectionContext) ContextService
092: .getContext(LanguageConnectionContext.CONTEXT_ID);
093: tc = lcc.getTransactionExecute();
094:
095: numOpens = tc.countOpens(TransactionController.OPEN_TOTAL);
096:
097: if (numOpens > 0) {
098: output = numOpens
099: + " conglomerates/scans/sorts found open\n";
100:
101: }
102:
103: return output;
104: }
105:
106: /**
107: * Check to make sure that there are no active dependencies (stored or
108: * in memory).
109: *
110: * @return String If an inconsistency is found, and if DEBUG is on,
111: * then a string will be returned with more info.
112: * If DEBUG is off, then a simple string will be
113: * returned stating whether or not there are open scans.
114: *
115: * @exception StandardException Thrown on error
116: * @exception java.sql.SQLException Thrown on error
117: */
118: public static String countDependencies() throws StandardException,
119: java.sql.SQLException {
120: int numDependencies = 0;
121: DataDictionary dd;
122: DataDictionaryContext ddc;
123: DependencyManager dm;
124: StringBuffer debugBuf = new StringBuffer();
125:
126: ddc = (DataDictionaryContext) (ContextService
127: .getContext(DataDictionaryContext.CONTEXT_ID));
128:
129: dd = ddc.getDataDictionary();
130: dm = dd.getDependencyManager();
131:
132: numDependencies = dm.countDependencies();
133:
134: if (numDependencies > 0) {
135: debugBuf.append(numDependencies + " dependencies found");
136: } else {
137: debugBuf.append("No outstanding dependencies.\n");
138: }
139:
140: return debugBuf.toString();
141: }
142: }
|