blob: 1316101f1c306ece455c44e9f5df5e76c082b251 [file] [log] [blame]
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
#ifndef _CMP_SEABASE_MD_UPGD_H_
#define _CMP_SEABASE_MD_UPGD_H_
#include "CmpSeabaseDDLmd.h"
/*******************************************************************************************
Steps needed to upgrade metadata are listed below.
In this example:
Upgrade is being done from v23 to v30.
old MD major version = 2, old MD minor version = 3
new MD major version = 3, new MD minor version = 0
Metadata table COLUMNS is being changed.
CmpSeabaseDDLmd.h
-- move current definition of metadata table that is being changed
to START_OLD_MD_v23 section.
-- Change name to *_OLD_MD. (Ex: SEABASE_COLUMNS_OLD_MD)
-- Change definition name to seabaseOldMDv23* (Ex: seabaseOldMDv23ColumnsDDL)
-- modify current definition to reflect new definition(Ex: seabaseColumnsDDL)
CmpSeabaseDDLupgrade.h
-- in struct allMDupgradeInfo,
modify entry for the table whose definition is being changed
-- add old defn, insert/select col list, added/dropped col flag, etc.
-- see struct MDUpgradeInfo for details on what fields need to be modified.
CmpSeabaseDDL.h
-- modify enum METADATA_MAJOR/MINOR, OLD_MAJOR/MINOR versions
CmpSeabaseDDLcommon.cpp and other files:
-- modify insert/select statements that access the changed metadata table.
CmpSeabaseDDLupgrade.cpp
-- In method CmpSeabaseMDupgrade::executeSeabaseMDupgrade
-- modify CUSTOMIZE_NEW_MD case if something specified need to be done.
Ex: update new sql_data_type field in COLUMNS table
***************************************************************************************/
// structure containing information on old and new MD tables
// and how the new MD tables will be updated.
struct MDUpgradeInfo
{
// name of the new MD table.
const char * newName;
// name of the corresponding old MD table.
const char * oldName; // name of the old
// ddl stmt corresponding to the current ddl.
const QString *newDDL;
Lng32 sizeOfnewDDL;
// ddl stmt corresponding to the old ddl which is being upgraded.
// If null, then old/new ddl are the same.
const QString *oldDDL;
Lng32 sizeOfoldDDL;
// ddl stmt corresponding to index on this table, if one exists
const QString *indexDDL;
Lng32 sizeOfIndexDDL;
const NABoolean upgradeNeeded;
// if new and old col info is different, then data need to be copied using
// explicit column names in insert and select part of the query.
// insert into tgt (insertedCols) select selectedCols from src;
const char * insertedCols;
const char * selectedCols;
// any where predicate to be applied to the select part of the query
const char * wherePred;
const NABoolean addedCols;
const NABoolean droppedCols;
const NABoolean addedTable;
const NABoolean droppedTable;
const NABoolean isIndex;
// if true, indicates this objects exists in metadata only. There is no corresponding
// object in hbase.
const NABoolean mdOnly;
};
struct MDDescsInfo
{
ComTdbVirtTableTableInfo * tableInfo;
Lng32 numNewCols;
ComTdbVirtTableColumnInfo * newColInfo;
Lng32 numNewKeys;
ComTdbVirtTableKeyInfo * newKeyInfo;
Lng32 numOldCols;
ComTdbVirtTableColumnInfo * oldColInfo;
Lng32 numOldKeys;
ComTdbVirtTableKeyInfo * oldKeyInfo;
Lng32 numIndexes;
ComTdbVirtTableIndexInfo * indexInfo;
};
//////////////////////////////////////////////////////////////
// This section should reflect the upgrade steps needed to go from
// previous to current version.
// Modify it as needed.
// Currently it is set to upgrade from V30(source major version 3, minor version 0)
// to V31.
//////////////////////////////////////////////////////////////
static const MDUpgradeInfo allMDupgradeInfo[] = {
{SEABASE_AUTHS, SEABASE_AUTHS_OLD_MD,
seabaseAuthsDDL, sizeof(seabaseAuthsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_COLUMNS, SEABASE_COLUMNS_OLD_MD,
seabaseColumnsDDL, sizeof(seabaseColumnsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_DEFAULTS, SEABASE_DEFAULTS_OLD_MD,
seabaseDefaultsDDL, sizeof(seabaseDefaultsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_INDEXES, SEABASE_INDEXES_OLD_MD,
seabaseIndexesDDL, sizeof(seabaseIndexesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_KEYS, SEABASE_KEYS_OLD_MD,
seabaseKeysDDL, sizeof(seabaseKeysDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_LIBRARIES, SEABASE_LIBRARIES_OLD_MD,
seabaseLibrariesDDL, sizeof(seabaseLibrariesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_LIBRARIES_USAGE, SEABASE_LIBRARIES_USAGE_OLD_MD,
seabaseLibrariesUsageDDL, sizeof(seabaseLibrariesUsageDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_OBJECTS, SEABASE_OBJECTS_OLD_MD,
seabaseObjectsDDL, sizeof(seabaseObjectsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_OBJECTS_UNIQ_IDX, SEABASE_OBJECTS_UNIQ_IDX_OLD_MD,
seabaseObjectsUniqIdxDDL, sizeof(seabaseObjectsUniqIdxDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE},
{SEABASE_REF_CONSTRAINTS, SEABASE_REF_CONSTRAINTS_OLD_MD,
seabaseRefConstraintsDDL, sizeof(seabaseRefConstraintsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_ROUTINES, SEABASE_ROUTINES_OLD_MD,
seabaseRoutinesDDL, sizeof(seabaseRoutinesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_SEQ_GEN, SEABASE_SEQ_GEN_OLD_MD,
seabaseSeqGenDDL, sizeof(seabaseSeqGenDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TABLES, SEABASE_TABLES_OLD_MD,
seabaseTablesDDL, sizeof(seabaseTablesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TABLE_CONSTRAINTS, SEABASE_TABLE_CONSTRAINTS_OLD_MD,
seabaseTableConstraintsDDL, sizeof(seabaseTableConstraintsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TEXT, SEABASE_TEXT_OLD_MD,
seabaseTextDDL, sizeof(seabaseTextDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_UNIQUE_REF_CONSTR_USAGE, SEABASE_UNIQUE_REF_CONSTR_USAGE_OLD_MD,
seabaseUniqueRefConstrUsageDDL, sizeof(seabaseUniqueRefConstrUsageDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VERSIONS, SEABASE_VERSIONS_OLD_MD,
seabaseVersionsDDL, sizeof(seabaseVersionsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VIEWS, SEABASE_VIEWS_OLD_MD,
seabaseViewsDDL, sizeof(seabaseViewsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VIEWS_USAGE, SEABASE_VIEWS_USAGE_OLD_MD,
seabaseViewsUsageDDL, sizeof(seabaseViewsUsageDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VALIDATE_SPJ, SEABASE_VALIDATE_SPJ_OLD_MD,
NULL, 0,
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VALIDATE_LIBRARY, SEABASE_VALIDATE_LIBRARY_OLD_MD,
NULL, 0,
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE}
};
//////////////////////////////////////////////////////////////
// This struct is set up for V23 to V30 upgrade.
//////////////////////////////////////////////////////////////
static const MDUpgradeInfo allMDv23tov30TablesInfo[] = {
{SEABASE_AUTHS, SEABASE_AUTHS_OLD_MD,
seabaseAuthsDDL, sizeof(seabaseAuthsDDL),
seabaseOldMDv23AuthsDDL, sizeof(seabaseOldMDv23AuthsDDL),
NULL, 0,
TRUE,
"auth_id, auth_db_name, auth_ext_name, auth_type, auth_creator, auth_is_valid, auth_redef_time, auth_create_time, flags",
"auth_id, auth_db_name, auth_ext_name, auth_type, auth_creator, auth_is_valid, auth_redef_time, auth_create_time, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_COLUMNS, SEABASE_COLUMNS_OLD_MD,
seabaseColumnsDDL, sizeof(seabaseColumnsDDL),
seabaseOldMDv23ColumnsDDL, sizeof(seabaseOldMDv23ColumnsDDL),
NULL, 0,
TRUE,
"object_uid, column_name, column_number, column_class, fs_data_type, sql_data_type, column_size, column_precision, column_scale, datetime_start_field, datetime_end_field, is_upshifted, column_flags, nullable, character_set, default_class, default_value, column_heading, hbase_col_family, hbase_col_qualifier, direction, is_optional, flags",
"object_uid, column_name, column_number, column_class, fs_data_type, '', column_size, column_precision, column_scale, datetime_start_field, datetime_end_field, is_upshifted, column_flags, nullable, character_set, default_class, default_value, column_heading, hbase_col_family, hbase_col_qualifier, direction, is_optional, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_DEFAULTS, SEABASE_DEFAULTS_OLD_MD,
seabaseDefaultsDDL, sizeof(seabaseDefaultsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_INDEXES, SEABASE_INDEXES_OLD_MD,
seabaseIndexesDDL, sizeof(seabaseIndexesDDL),
seabaseOldMDv23IndexesDDL, sizeof(seabaseOldMDv23IndexesDDL),
NULL, 0,
TRUE,
"base_table_uid, keytag, is_unique, key_colcount, nonkey_colcount, is_explicit, index_uid, flags",
"base_table_uid, keytag, is_unique, key_colcount, nonkey_colcount, is_explicit, index_uid, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_KEYS, SEABASE_KEYS_OLD_MD,
seabaseKeysDDL, sizeof(seabaseKeysDDL),
seabaseOldMDv23KeysDDL, sizeof(seabaseOldMDv23KeysDDL),
NULL, 0,
TRUE,
"object_uid, column_name, keyseq_number, column_number, ordering, nonkeycol, flags",
"object_uid, column_name, keyseq_number, column_number, ordering, nonkeycol, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_LIBRARIES, SEABASE_LIBRARIES_OLD_MD,
seabaseLibrariesDDL, sizeof(seabaseLibrariesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_LIBRARIES_USAGE, SEABASE_LIBRARIES_USAGE_OLD_MD,
seabaseLibrariesUsageDDL, sizeof(seabaseLibrariesUsageDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_OBJECTS, SEABASE_OBJECTS_OLD_MD,
seabaseObjectsDDL, sizeof(seabaseObjectsDDL),
seabaseOldMDv23ObjectsDDL, sizeof(seabaseOldMDv23ObjectsDDL),
NULL, 0,
TRUE,
"catalog_name, schema_name, object_name, object_type, object_uid, create_time, redef_time, valid_def, droppable, object_owner, schema_owner, flags",
"catalog_name, schema_name, case when schema_name = '_MD_' then object_name || '_OLD_MD' else object_name end, object_type, object_uid, create_time, redef_time, valid_def, 'N', object_owner, "SUPER_USER_LIT", 0 ",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_OBJECTS_UNIQ_IDX, SEABASE_OBJECTS_UNIQ_IDX_OLD_MD,
seabaseObjectsUniqIdxDDL, sizeof(seabaseObjectsUniqIdxDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE},
{SEABASE_REF_CONSTRAINTS, SEABASE_REF_CONSTRAINTS_OLD_MD,
seabaseRefConstraintsDDL, sizeof(seabaseRefConstraintsDDL),
seabaseOldMDv23RefConstraintsDDL, sizeof(seabaseOldMDv23RefConstraintsDDL),
NULL, 0,
TRUE,
"ref_constraint_uid, unique_constraint_uid, match_option, update_rule, delete_rule, flags",
"ref_constraint_uid, unique_constraint_uid, match_option, update_rule, delete_rule, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_ROUTINES, SEABASE_ROUTINES_OLD_MD,
seabaseRoutinesDDL, sizeof(seabaseRoutinesDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_SEQ_GEN, SEABASE_SEQ_GEN_OLD_MD,
seabaseSeqGenDDL, sizeof(seabaseSeqGenDDL),
seabaseOldMDv23SeqGenDDL, sizeof(seabaseOldMDv23SeqGenDDL),
NULL, 0,
TRUE,
"seq_type, seq_uid, fs_data_type, start_value, increment, max_value, min_value, cycle_option, cache_size, next_value, num_calls, redef_ts, upd_ts, flags",
"seq_type, seq_uid, fs_data_type, start_value, increment, max_value, min_value, cycle_option, cache_size, next_value, num_calls, 0, 0, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TABLES, SEABASE_TABLES_OLD_MD,
seabaseTablesDDL, sizeof(seabaseTablesDDL),
seabaseOldMDv23TablesDDL, sizeof(seabaseOldMDv23TablesDDL),
NULL, 0,
TRUE,
"table_uid, row_format, is_audited, row_data_length, row_total_length, key_length, num_salt_partns, flags",
"table_uid, 'HF', is_audited, -1, -1, -1, 0, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TABLE_CONSTRAINTS, SEABASE_TABLE_CONSTRAINTS_OLD_MD,
seabaseTableConstraintsDDL, sizeof(seabaseTableConstraintsDDL),
seabaseOldMDv23TableConstraintsDDL, sizeof(seabaseOldMDv23TableConstraintsDDL),
NULL, 0,
TRUE,
"table_uid, constraint_uid, constraint_type, disabled, droppable, is_deferrable, enforced, validated, last_validated, col_count, index_uid, flags",
"table_uid, constraint_uid, constraint_type, 'N', 'N', 'N', 'Y', 'Y', juliantimestamp(current_timestamp), col_count, index_uid, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_TEXT, SEABASE_TEXT_OLD_MD,
seabaseTextDDL, sizeof(seabaseTextDDL),
seabaseOldMDv23TextDDL, sizeof(seabaseOldMDv23TextDDL),
NULL, 0,
TRUE,
"text_uid, text_type, sub_id, seq_num, flags, text",
"object_uid, 0, 0, seq_num, 0, text",
NULL, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_UNIQUE_REF_CONSTR_USAGE, SEABASE_UNIQUE_REF_CONSTR_USAGE_OLD_MD,
seabaseUniqueRefConstrUsageDDL, sizeof(seabaseUniqueRefConstrUsageDDL),
seabaseOldMDv23UniqueRefConstrUsageDDL, sizeof(seabaseOldMDv23UniqueRefConstrUsageDDL),
NULL, 0,
TRUE,
"unique_constraint_uid, foreign_constraint_uid, flags",
"unique_constraint_uid, foreign_constraint_uid, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VERSIONS, SEABASE_VERSIONS_OLD_MD,
seabaseVersionsDDL, sizeof(seabaseVersionsDDL),
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VIEWS, SEABASE_VIEWS_OLD_MD,
seabaseViewsDDL, sizeof(seabaseViewsDDL),
seabaseOldMDv23ViewsDDL, sizeof(seabaseOldMDv23ViewsDDL),
NULL, 0,
TRUE,
"view_uid, check_option, is_updatable, is_insertable, flags",
"view_uid, check_option, is_updatable, is_insertable, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VIEWS_USAGE, SEABASE_VIEWS_USAGE_OLD_MD,
seabaseViewsUsageDDL, sizeof(seabaseViewsUsageDDL),
seabaseOldMDv23ViewsUsageDDL, sizeof(seabaseOldMDv23ViewsUsageDDL),
NULL, 0,
TRUE,
"using_view_uid, used_object_uid, used_object_type, flags",
"using_view_uid, used_object_uid, used_object_type, 0",
NULL, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VALIDATE_SPJ, SEABASE_VALIDATE_SPJ_OLD_MD,
NULL, 0,
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_VALIDATE_LIBRARY, SEABASE_VALIDATE_LIBRARY_OLD_MD,
NULL, 0,
NULL, 0,
NULL, 0,
FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE}
};
class CmpSeabaseMDupgrade : public CmpSeabaseDDL
{
public:
enum Steps {
UPGRADE_START = 0,
VERSION_CHECK,
OLD_MD_DROP_PRE,
CURR_MD_BACKUP,
CURR_MD_DROP,
INITIALIZE_TRAF,
COPY_MD_TABLES_PROLOGUE,
COPY_MD_TABLES,
COPY_MD_TABLES_EPILOGUE,
CUSTOMIZE_NEW_MD,
VALIDATE_DATA_COPY,
OLD_TABLES_MD_DELETE,
OLD_MD_TABLES_HBASE_DELETE,
UPDATE_MD_VIEWS,
UPGRADE_PRIV_MGR,
UPGRADE_REPOS,
UPDATE_VERSION,
OLD_MD_DROP_POST,
METADATA_UPGRADED,
UPGRADE_DONE,
UPGRADE_FAILED,
UPGRADE_FAILED_RESTORE_OLD_MD,
UPGRADE_FAILED_DROP_OLD_MD,
GET_MD_VERSION,
GET_SW_VERSION,
DONE_RETURN
} ;
CmpSeabaseMDupgrade(NAHeap *heap)
: CmpSeabaseDDL(heap)
{};
NABoolean isOldMDtable(const NAString &objName);
NABoolean isMDUpgradeNeeded();
NABoolean isViewsUpgradeNeeded();
NABoolean isReposUpgradeNeeded();
NABoolean isPrivsUpgradeNeeded();
NABoolean isUpgradeNeeded()
{ return (isMDUpgradeNeeded() ||
isViewsUpgradeNeeded() ||
isReposUpgradeNeeded() ||
isPrivsUpgradeNeeded());
}
short dropMDtables(ExpHbaseInterface *ehi, NABoolean oldTbls,
NABoolean useOldNameForNewTables = FALSE);
short dropReposTables(ExpHbaseInterface *ehi, NABoolean oldTbls);
short restoreOldMDtables(ExpHbaseInterface *ehi);
short upgradePrivMgr(ExeCliInterface *cliInterface,
NABoolean ddlXns,
NAString &privMgrDoneMsg);
short customizeNewMD(CmpDDLwithStatusInfo *mdui, ExeCliInterface &cliInterface);
short customizeNewMDv23tov30(CmpDDLwithStatusInfo *mdui,
ExeCliInterface &cliInterface);
short executeSeabaseMDupgrade(CmpDDLwithStatusInfo *mdui,
NABoolean ddlXns,
NAString &currCatName, NAString &currSchName);
};
#endif