File util_front.c¶
File List > cubrid > src > executables > util_front.c
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed 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.
*
*/
/*
* util_front.c : a front-end of old utilities for compatibility
*/
#ident "$Id$"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <errno.h>
#include <unistd.h>
#include "utility.h"
#include "error_code.h"
typedef struct
{
const char *old_arg;
const char *long_arg;
} ARG_MAP_TABLE;
static ARG_MAP_TABLE ua_Create_map[] = {
{"-p", "--" CREATE_PAGES_L},
{"-c", "--" CREATE_COMMENT_L},
{"-f", "--" CREATE_FILE_PATH_L},
{"-l", "--" CREATE_LOG_PATH_L},
{"-s", "--" CREATE_SERVER_NAME_L},
{"-r", "--" CREATE_REPLACE_L},
{"-mv", "--" CREATE_MORE_VOLUME_FILE_L},
{"-u", "--" CREATE_USER_DEFINITION_FILE_L},
{"-i", "--" CREATE_CSQL_INITIALIZATION_FILE_L},
{"-o", "--" CREATE_OUTPUT_FILE_L},
{"-v", "--" CREATE_VERBOSE_L},
{"-n", "--" CREATE_CHARSET_L},
{"-lp", "--" CREATE_LOG_PAGE_COUNT_L},
{"-ps", "--" CREATE_PAGE_SIZE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Rename_map[] = {
{"-e", "--" RENAME_EXTENTED_VOLUME_PATH_L},
{"-tf", "--" RENAME_CONTROL_FILE_L},
{"-f", "--" RENAME_DELETE_BACKUP_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Copy_map[] = {
{"-s", "--" COPY_SERVER_NAME_L},
{"-f", "--" COPY_FILE_PATH_L},
{"-l", "--" COPY_LOG_PATH_L},
{"-e", "--" COPY_EXTENTED_VOLUME_PATH_L},
{"-tf", "--" COPY_CONTROL_FILE_L},
{"-r", "--" COPY_REPLACE_L},
{"-m", "--" COPY_DELETE_SOURCE_L},
{"-B", "--" COPY_LOB_PATH_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Delete_map[] = {
{"-o", "--" DELETE_OUTPUT_FILE_L},
{"-f", "--" DELETE_DELETE_BACKUP_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Backup_map[] = {
{"-l", "--" BACKUP_DESTINATION_PATH_L},
{"-r", "--" BACKUP_REMOVE_ARCHIVE_L},
{"-lv", "--" BACKUP_LEVEL_L},
{"-o", "--" BACKUP_OUTPUT_FILE_L},
{"-sa", "--" BACKUP_SA_MODE_L},
{"-cs", "--" BACKUP_CS_MODE_L},
{"-nc", "--" BACKUP_NO_CHECK_L},
{"-mt", "--" BACKUP_THREAD_COUNT_L},
{"-zip", "--" BACKUP_COMPRESS_L},
{"-nozip", "--" BACKUP_NO_COMPRESS_L},
{"-ni", "--" BACKUP_EXCEPT_ACTIVE_LOG_L},
{"-c", (char *) -1},
{0, 0}
};
static ARG_MAP_TABLE ua_Restore_map[] = {
{"-d", "--" RESTORE_UP_TO_DATE_L},
{"-t", "--" RESTORE_LIST_L},
{"-l", "--" RESTORE_BACKUP_FILE_PATH_L},
{"-lv", "--" RESTORE_LEVEL_L},
{"-p", "--" RESTORE_PARTIAL_RECOVERY_L},
{"-o", "--" RESTORE_OUTPUT_FILE_L},
{"-n", "--" RESTORE_USE_DATABASE_LOCATION_PATH_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Addvol_map[] = {
{"-n", "--" ADDVOL_VOLUME_NAME_L},
{"-f", "--" ADDVOL_FILE_PATH_L},
{"-c", "--" ADDVOL_COMMENT_L},
{"-pu", "--" ADDVOL_PURPOSE_L},
{"-sa", "--" ADDVOL_SA_MODE_L},
{"-cs", "--" ADDVOL_CS_MODE_L},
{0, 0}
};
#if 0
static ARG_MAP_TABLE ua_Delvol_map[] = {
{"-i", "--" DELVOL_VOLUME_ID_L},
{"-f", "--" DELVOL_FORCE_L},
{"-c", "--" DELVOL_CLEAR_CACHE_L},
{"-p", "--" DELVOL_DBA_PASSWORD_L},
{"-sa", "--" DELVOL_SA_MODE_L},
{"-cs", "--" DELVOL_CS_MODE_L},
{0, 0}
};
#endif
static ARG_MAP_TABLE ua_Space_map[] = {
{"-o", "--" SPACE_OUTPUT_FILE_L},
{"-sa", "--" SPACE_SA_MODE_L},
{"-cs", "--" SPACE_CS_MODE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Lock_map[] = {
{"-o", "--" LOCK_OUTPUT_FILE_L},
{"-c", "--" LOCK_DISPLAY_CONTENTION_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Optimize_map[] = {
{"-c", "--" OPTIMIZE_CLASS_NAME_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Install_map[] = {
{"-s", "--" INSTALL_SERVER_NAME_L},
{"-f", "--" INSTALL_FILE_PATH_L},
{"-l", "--" INSTALL_LOG_PATH_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Diag_map[] = {
{"-d", "--" DIAG_DUMP_TYPE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Check_map[] = {
{"-sa", "--" CHECK_SA_MODE_L},
{"-cs", "--" CHECK_CS_MODE_L},
{"-r", "--" CHECK_REPAIR_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Tranlist_map[] = {
#if defined(NEED_PRIVILEGE_PASSWORD)
{"-u", "--" TRANLIST_USER_L},
{"-p", "--" TRANLIST_PASSWORD_L},
#endif
{"-s", "--" TRANLIST_SUMMARY_L},
{"-k", "--" TRANLIST_SORT_KEY_L},
{"-r", "--" TRANLIST_REVERSE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Killtran_map[] = {
{"-t", "--" KILLTRAN_KILL_TRANSACTION_INDEX_L},
{"-u", "--" KILLTRAN_KILL_USER_NAME_L},
{"-h", "--" KILLTRAN_KILL_HOST_NAME_L},
{"-pg", "--" KILLTRAN_KILL_PROGRAM_NAME_L},
{"-s", "--" KILLTRAN_KILL_SQL_ID_L},
{"-p", "--" KILLTRAN_DBA_PASSWORD_L},
{"-d", "--" KILLTRAN_DISPLAY_INFORMATION_L},
{"-q", "--" KILLTRAN_DISPLAY_QUERY_INFO_L},
{"-v", "--" KILLTRAN_FORCE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Load_map[] = {
{"-u", "--" LOAD_USER_L},
{"-p", "--" LOAD_PASSWORD_L},
{"-s", "--" LOAD_CHECK_ONLY_L},
{"-l", "--" LOAD_LOAD_ONLY_L},
{"-e", "--" LOAD_ESTIMATED_SIZE_L},
{"-v", "--" LOAD_VERBOSE_L},
{"-ns", "--" LOAD_NO_STATISTICS_L},
{"-c", "--" LOAD_PERIODIC_COMMIT_L},
{"-noref", "--" LOAD_NO_OID_L},
{"-sf", "--" LOAD_SCHEMA_FILE_L},
{"-if", "--" LOAD_INDEX_FILE_L},
{"-tf", "--" LOAD_TRIGGER_FILE_L},
{"-of", "--" LOAD_DATA_FILE_L},
{"-ef", "--" LOAD_ERROR_CONTROL_FILE_L},
{"-nl", "--" LOAD_IGNORE_LOGGING_L},
{"-vc", (char *) -1},
{0, 0}
};
static ARG_MAP_TABLE ua_Unload_map[] = {
{"-i", "--" UNLOAD_INPUT_CLASS_FILE_L},
{"-ir", "--" UNLOAD_INCLUDE_REFERENCE_L},
{"-io", "--" UNLOAD_INPUT_CLASS_ONLY_L},
{"-loc", "--" UNLOAD_LO_COUNT_L},
{"-e", "--" UNLOAD_ESTIMATED_SIZE_L},
{"-n", "--" UNLOAD_CACHED_PAGES_L},
{"-od", "--" UNLOAD_OUTPUT_PATH_L},
{"-so", "--" UNLOAD_SCHEMA_ONLY_L},
{"-oo", "--" UNLOAD_DATA_ONLY_L},
{"-li", "--" UNLOAD_LATEST_IMAGE_L},
{"-p", "--" UNLOAD_OUTPUT_PREFIX_L},
{"-f", "--" UNLOAD_HASH_FILE_L},
{"-v", "--" UNLOAD_VERBOSE_L},
{"-di", "--" UNLOAD_USE_DELIMITER_L},
{"-sa", "--" UNLOAD_SA_MODE_L},
{"-cs", "--" UNLOAD_CS_MODE_L},
{"-dpc", "--" UNLOAD_DATAFILE_PER_CLASS_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Compact_map[] = {
{"-v", "--" COMPACT_VERBOSE_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Sqlx_map[] = {
{"-sa", "--" CSQL_SA_MODE_L},
{"-cs", "--" CSQL_CS_MODE_L},
{"-u", "--" CSQL_USER_L},
{"-p", "--" CSQL_PASSWORD_L},
{"-e", "--" CSQL_ERROR_CONTINUE_L},
{"-i", "--" CSQL_INPUT_FILE_L},
{"-o", "--" CSQL_OUTPUT_FILE_L},
{"-s", "--" CSQL_SINGLE_LINE_L},
{"-c", "--" CSQL_COMMAND_L},
{"-lo", "--" CSQL_LINE_OUTPUT_L},
{"-noac", "--" CSQL_NO_AUTO_COMMIT_L},
{"-nopager", "--" CSQL_NO_PAGER_L},
{"-nosl", "--" CSQL_NO_SINGLE_LINE_L},
{"-co", (char *) -1},
{0, 0}
};
static ARG_MAP_TABLE us_Commdb_map[] = {
{"-P", "--" COMMDB_SERVER_LIST_L},
{"-O", "--" COMMDB_ALL_LIST_L},
{"-S", "--" COMMDB_SHUTDOWN_SERVER_L},
{"-I", "--" COMMDB_SHUTDOWN_SERVER_L},
{"-A", "--" COMMDB_SHUTDOWN_ALL_L},
{"-h", "--" COMMDB_HOST_L},
{0, 0}
};
static ARG_MAP_TABLE ua_Acldb_map[] = {
{"-r", "--" ACLDB_RELOAD_L},
{0, 0}
};
typedef struct
{
const char *app_name;
const char *util_name;
ARG_MAP_TABLE *match_table;
} UTIL_MAP_TABLE;
UTIL_MAP_TABLE ua_Util_table[] = {
{"createdb", UTIL_OPTION_CREATEDB, ua_Create_map},
{"renamedb", UTIL_OPTION_RENAMEDB, ua_Rename_map},
{"copydb", UTIL_OPTION_COPYDB, ua_Copy_map},
{"deletedb", UTIL_OPTION_DELETEDB, ua_Delete_map},
{"backupdb", UTIL_OPTION_BACKUPDB, ua_Backup_map},
{"restoredb", UTIL_OPTION_RESTOREDB, ua_Restore_map},
{"addvoldb", UTIL_OPTION_ADDVOLDB, ua_Addvol_map},
#if 0
{"delvoldb", UTIL_OPTION_DELVOLDB, ua_Delvol_map},
#endif
{"spacedb", UTIL_OPTION_SPACEDB, ua_Space_map},
{"lockdb", UTIL_OPTION_LOCKDB, ua_Lock_map},
{"optimizedb", UTIL_OPTION_OPTIMIZEDB, ua_Optimize_map},
{"installdb", UTIL_OPTION_INSTALLDB, ua_Install_map},
{"diagdb", UTIL_OPTION_DIAGDB, ua_Diag_map},
{"cleanfiledb", UTIL_OPTION_CLEANFILEDB, ua_cleanfiledb_map},
{"checkdb", UTIL_OPTION_CHECKDB, ua_Check_map},
{"killtran", UTIL_OPTION_KILLTRAN, ua_Killtran_map},
{"loaddb", UTIL_OPTION_LOADDB, ua_Load_map},
{"unloaddb", UTIL_OPTION_UNLOADDB, ua_Unload_map},
{"compactdb", UTIL_OPTION_COMPACTDB, ua_Compact_map},
{"acldb", UTIL_OPTION_ACLDB, ua_Acldb_map},
{"tranlist", UTIL_OPTION_TRANLIST, ua_Tranlist_map},
{0, 0, 0}
};
/*
* get_long_arg_by_old_arg() - get new argument with long format
* return: argument string with long format
* old_arg(in): old argument string
* match_table(in): a mapping table of arguments
*/
static char *
get_long_arg_by_old_arg (char *old_arg, ARG_MAP_TABLE * match_table)
{
int i;
for (i = 0; match_table[i].old_arg != 0; i++)
{
if (strcmp (old_arg, match_table[i].old_arg) == 0)
{
return (char *) match_table[i].long_arg;
}
}
return NULL;
}
/*
* make_argv() - convert old arguments to new arguments with long format
* return:
* argc(in): size of the array
* argv(out): an array of new arguments
* match_table(in): a mapping table of arguments
*/
static int
convert_argv (int argc, char **argv, ARG_MAP_TABLE * match_table)
{
int i, idx;
char *new_arg;
for (i = 0, idx = 0; i < argc && argv[i] != NULL; i++)
{
new_arg = get_long_arg_by_old_arg (argv[i], match_table);
if (new_arg == NULL && argv[i][0] == '-')
{
fprintf (stderr, "invalid option: %s\n", argv[i]);
return ER_FAILED;
}
else if (new_arg == (char *) -1)
{
continue;
}
else if (new_arg != NULL)
{
argv[idx++] = new_arg;
}
else
{
argv[idx++] = argv[i];
}
}
argv[idx] = 0;
return NO_ERROR;
}
/*
* main() - csql main module.
* return: EXIT_SUCCESS or EXIT_FAILURE
*/
int
main (int argc, char **argv)
{
char *program_name = basename (argv[0]);
int i, argc_index = 0;
char **admin_argv = NULL;
/* validate the number of arguments to avoid klocwork's error message */
if (argc < 0 || argc > 1024)
{
goto failure;
}
if (strcmp (program_name, UTIL_SQLX_NAME) == 0)
{
admin_argv = (char **) malloc ((argc + 1) * sizeof (char *));
if (admin_argv == NULL)
{
goto failure;
}
memcpy (admin_argv, argv, argc * sizeof (char *));
if (convert_argv (argc, &admin_argv[1], ua_Sqlx_map) != NO_ERROR)
{
goto failure;
}
if (execvp (UTIL_CSQL_NAME, admin_argv) == -1)
{
perror ("execvp");
}
}
else if (strcmp (program_name, UTIL_OLD_COMMDB_NAME) == 0)
{
admin_argv = (char **) malloc ((argc + 1) * sizeof (char *));
if (admin_argv == NULL)
{
goto failure;
}
memcpy (admin_argv, argv, argc * sizeof (char *));
if (convert_argv (argc, &admin_argv[1], us_Commdb_map) != NO_ERROR)
{
goto failure;
}
if (execvp (UTIL_COMMDB_NAME, argv) == -1)
{
perror ("execvp");
}
}
else
{
for (i = 0; ua_Util_table[i].app_name != 0; i++)
{
if (strcmp (ua_Util_table[i].app_name, program_name) == 0)
{
admin_argv = (char **) malloc ((argc + 2) * sizeof (char *));
if (admin_argv == NULL)
{
goto failure;
}
admin_argv[argc_index++] = (char *) UTIL_CUBRID;
admin_argv[argc_index++] = (char *) ua_Util_table[i].util_name;
memcpy (&admin_argv[argc_index], &argv[1], (argc - 1) * sizeof (char *));
if (convert_argv (argc, &admin_argv[argc_index], ua_Util_table[i].match_table) != NO_ERROR)
{
goto failure;
}
break;
}
}
if (argc_index == 0)
{
goto failure;
}
if (execvp (UTIL_ADMIN_NAME, admin_argv) == -1)
{
perror ("execvp");
}
}
if (admin_argv)
{
free (admin_argv);
}
return EXIT_SUCCESS;
failure:
fprintf (stderr, "This utility is deprecated. Use 'cubrid' utility.\n");
if (admin_argv)
{
free (admin_argv);
}
return EXIT_FAILURE;
}