Skip to content

File csql.h

File List > cubrid > src > executables > csql.h

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.
 *
 */

/*
 * csql.h : header file for csql
 *
 */

#ifndef _CSQL_H_
#define _CSQL_H_

#ident "$Id$"

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/stat.h>
#include <locale.h>

#include "porting.h"
#include "language_support.h"
#include "message_catalog.h"
#include "util_func.h"
#include "misc_string.h"
#include "dbi.h"
#include "error_manager.h"
#include "memory_alloc.h"

#if defined(WINDOWS)
#define isatty(stream)  _isatty(stream)
#endif /* WINDOWS */

#define MSGCAT_CSQL_SET_CSQL      1

#ifdef __cplusplus
extern "C"
{
#endif

/*
 * MESSAGE NUMBERS
 */
  enum
  {
    CSQL_MSG_USAGE = 40,
    CSQL_MSG_BAD_MODE = 41,
    CSQL_MSG_BAD_ARGS = 42,
    CSQL_MSG_NO_ENV = 43,
    CSQL_MSG_EXEC_FAILURE = 44,
    CSQL_MSG_BOTH_MODES = 45,

    CSQL_EXECUTE_END_MSG_FORMAT = 46,
    CSQL_START_POSITION_ERR_FORMAT = 47,
    CSQL_EXACT_POSITION_ERR_FORMAT = 48,
    CSQL_INITIAL_HELP_MSG = 49,
    CSQL_ERROR_PREFIX = 50,
    CSQL_INITIAL_CSQL_TITLE = 51,
    CSQL_TRANS_TERMINATE_PROMPT_TEXT = 52,
    CSQL_TRANS_TERMINATE_PROMPT_RETRY_TEXT = 53,
    CSQL_STAT_COMMITTED_TEXT = 54,
    CSQL_STAT_ROLLBACKED_TEXT = 55,
    CSQL_STAT_EDITOR_SAVED_TEXT = 56,
    CSQL_STAT_READ_DONE_TEXT = 57,
    CSQL_STAT_EDITOR_PRINTED_TEXT = 58,
    CSQL_STAT_CD_TEXT = 59,
    CSQL_PASSWD_PROMPT_TEXT = 61,
    CSQL_RESULT_STMT_TITLE_FORMAT = 62,
    CSQL_STAT_NONSCR_EMPTY_RESULT_TEXT = 63,
    CSQL_STAT_CHECKPOINT_TEXT = 64,
    CSQL_STAT_RESTART_TEXT = 65,
    CSQL_KILLTRAN_TITLE_TEXT = 66,
    CSQL_KILLTRAN_FORMAT = 67,
    CSQL_STAT_KILLTRAN_TEXT = 68,
    CSQL_STAT_KILLTRAN_FAIL_TEXT = 69,
    CSQL_ROWS = 70,
    CSQL_ROW = 71,
    CSQL_ARG_AUTO = 75,
    CSQL_ARG_AUTO_HELP = 76,
    CSQL_PROMPT = 79,
    CSQL_NAME = 80,
    CSQL_SYSADM_PROMPT = 81,
    CSQL_TRANSACTIONS = 82,
    CSQL_TRANSACTION = 83,
    CSQL_MSG_TOO_FEW_ARGS = 84,

    CSQL_HELP_SCHEMA_TITLE_TEXT = 145,
    CSQL_HELP_NONE_TEXT = 146,
    CSQL_HELP_TRIGGER_ALL_TITLE_TEXT = 147,
    CSQL_HELP_TRIGGER_NONE_TITLE_TEXT = 148,
    CSQL_HELP_TRIGGER_TITLE_TEXT = 150,
    CSQL_HELP_SQL_TITLE_TEXT = 151,
    CSQL_HELP_SESSION_CMD_TITLE_TEXT = 152,
    CSQL_E_FILENAMEMISSED_TEXT = 178,
    CSQL_E_CANTEXECPAGER_TEXT = 179,
    CSQL_E_NOMOREMEMORY_TEXT = 180,
    CSQL_E_TOOLONGLINE_TEXT = 184,
    CSQL_E_TOOMANYLINES_TEXT = 185,
    CSQL_E_TOOMANYFILENAMES_TEXT = 188,
    CSQL_E_SESSCMDNOTFOUND_TEXT = 190,
    CSQL_E_SESSCMDAMBIGUOUS_TEXT = 191,
    CSQL_E_CSQLCMDAMBIGUOUS_TEXT = 193,
    CSQL_E_INVALIDARGCOM_TEXT = 194,
    CSQL_E_UNKNOWN_TEXT = 196,
    CSQL_E_CANT_EDIT_TEXT = 197,
    CSQL_E_FORMAT_TEXT = 198,
    CSQL_E_LANG_TEXT = 199,

    CSQL_HELP_CLASS_HEAD_TEXT = 203,
    CSQL_HELP_SUPER_CLASS_HEAD_TEXT = 204,
    CSQL_HELP_SUB_CLASS_HEAD_TEXT = 205,
    CSQL_HELP_ATTRIBUTE_HEAD_TEXT = 206,
    CSQL_HELP_CLASS_ATTRIBUTE_HEAD_TEXT = 207,
    CSQL_HELP_METHOD_HEAD_TEXT = 208,
    CSQL_HELP_CLASS_METHOD_HEAD_TEXT = 209,
    CSQL_HELP_RESOLUTION_HEAD_TEXT = 210,
    CSQL_HELP_METHFILE_HEAD_TEXT = 211,
    CSQL_HELP_QUERY_SPEC_HEAD_TEXT = 212,
    CSQL_HELP_TRIGGER_HEAD_TEXT = 213,
    CSQL_HELP_TRIGGER_NAME_TEXT = 214,
    CSQL_HELP_TRIGGER_EVENT_TEXT = 215,
    CSQL_HELP_TRIGGER_CONDITION_TIME_TEXT = 216,
    CSQL_HELP_TRIGGER_CONDITION_TEXT = 217,
    CSQL_HELP_TRIGGER_ACTION_TIME_TEXT = 218,
    CSQL_HELP_TRIGGER_ACTION_TEXT = 219,
    CSQL_HELP_TRIGGER_STATUS_TEXT = 220,
    CSQL_HELP_TRIGGER_PRIORITY_TEXT = 221,
    CSQL_HELP_SQL_NAME_HEAD_TEXT = 222,
    CSQL_HELP_SQL_DESCRIPTION_HEAD_TEXT = 223,
    CSQL_HELP_SQL_SYNTAX_HEAD_TEXT = 224,
    CSQL_HELP_SQL_EXAMPLE_HEAD_TEXT = 225,
    CSQL_HELP_SESSION_CMD_TEXT = 231,
    CSQL_HELP_CONSTRAINT_HEAD_TEXT = 232,
    CSQL_HELP_INFOCMD_TEXT = 233,
    CSQL_HELP_PARTITION_HEAD_TEXT = 235,
    CSQL_E_CLASSNAMEMISSED_TEXT = 236,
    CSQL_HELP_TRIGGER_COMMENT_TEXT = 237,
    CSQL_E_SYSTEM_CATALOG_COMPILE_FAIL_TEXT = 238,
  };

#define SCRATCH_TEXT_LEN (4096)

/* error codes defined in csql level */
  enum
  {
    CSQL_ERR_OS_ERROR = 1,
    CSQL_ERR_NO_MORE_MEMORY,
    CSQL_ERR_TOO_LONG_LINE,
    CSQL_ERR_TOO_MANY_LINES,
    CSQL_ERR_TOO_MANY_FILE_NAMES,
    CSQL_ERR_SQL_ERROR,
    CSQL_ERR_SESS_CMD_NOT_FOUND,
    CSQL_ERR_SESS_CMD_AMBIGUOUS,
    CSQL_ERR_FILE_NAME_MISSED,
    CSQL_ERR_CUBRID_STMT_NOT_FOUND,
    CSQL_ERR_CUBRID_STMT_AMBIGUOUS,
    CSQL_ERR_CANT_EXEC_PAGER,
    CSQL_ERR_INVALID_ARG_COMBINATION,
    CSQL_ERR_CANT_EDIT,
    CSQL_ERR_INFO_CMD_HELP,
    CSQL_ERR_CLASS_NAME_MISSED,
    CSQL_ERR_FORMAT,
    CSQL_ERR_SYSTEM_CATALOG_COMPILE,
  };

/* session command numbers */
  typedef enum
  {
/* File stuffs */
    S_CMD_READ,
    S_CMD_WRITE,
    S_CMD_APPEND,
    S_CMD_PRINT,
    S_CMD_SHELL,
    S_CMD_CD,
    S_CMD_EXIT,

/* Edit stuffs */
    S_CMD_CLEAR,
    S_CMD_EDIT,
    S_CMD_LIST,

/* Command stuffs */
    S_CMD_RUN,
    S_CMD_XRUN,
    S_CMD_COMMIT,
    S_CMD_ROLLBACK,
    S_CMD_AUTOCOMMIT,
    S_CMD_CHECKPOINT,
    S_CMD_KILLTRAN,
    S_CMD_RESTART,

/* Environment stuffs */
    S_CMD_SHELL_CMD,
    S_CMD_EDIT_CMD,
    S_CMD_PRINT_CMD,
    S_CMD_PAGER_CMD,
    S_CMD_NOPAGER_CMD,
    S_CMD_FORMATTER_CMD,
    S_CMD_COLUMN_WIDTH,
    S_CMD_STRING_WIDTH,

/* Help stuffs */
    S_CMD_HELP,
    S_CMD_SCHEMA,
    S_CMD_DATABASE,
    S_CMD_TRIGGER,
    S_CMD_INFO,

/* More environment stuff */
    S_CMD_SET_PARAM,
    S_CMD_GET_PARAM,
    S_CMD_PLAN_DUMP,
    S_CMD_ECHO,
    S_CMD_DATE,
    S_CMD_TIME,
    S_CMD_LINE_OUTPUT,

/* Histogram profile stuff */
    S_CMD_HISTO,
    S_CMD_CLR_HISTO,
    S_CMD_DUMP_HISTO,
    S_CMD_DUMP_CLR_HISTO,

/* cmd history stuffs */
    S_CMD_HISTORY_READ,
    S_CMD_HISTORY_LIST,

    S_CMD_TRACE,

    S_CMD_SINGLELINE,

    S_CMD_CONNECT,

    S_CMD_MIDXKEY,

/* cmd PL/CSQL stuffs */
    S_CMD_SERVER_OUTPUT
  } SESSION_CMD;

/* iq_ function return status */
  enum
  {
    CSQL_FAILURE = -1,
    CSQL_SUCCESS = 0
  };

  typedef enum
  {
    CSQL_UNKNOWN_OUTPUT = 1,
    CSQL_QUERY_OUTPUT,
    CSQL_LOADDB_OUTPUT
  } CSQL_OUTPUT_TYPE;

  typedef struct
  {
    const char *db_name;
    const char *user_name;
    const char *passwd;
    const char *in_file_name;
    const char *out_file_name;
    const char *command;
    bool sa_mode;
    bool cs_mode;
    bool single_line_execution;
    bool column_output;
    bool line_output;
    bool read_only;
    bool auto_commit;
    bool nopager;
    bool continue_on_error;
    bool sysadm;
    bool sysadm_rebuild_catalog;
    bool write_on_standby;
    bool trigger_action_flag;
    bool plain_output;
    bool skip_column_names;
    bool skip_vacuum;
    int string_width;
    bool query_output;
    char column_delimiter;
    char column_enclosure;
    bool loaddb_output;
    bool pl_server_output;
#if defined(CSQL_NO_LONGGING)
    bool no_logging;
#endif              /* CSQL_NO_LONGGING */
    bool midxkey_print;
    bool noprint_entrymsg;
  } CSQL_ARGUMENT;

  typedef struct
  {
    char *name;
    int width;
  } CSQL_COLUMN_WIDTH_INFO;

/* The file streams we are to use */
  extern FILE *csql_Input_fp;
  extern FILE *csql_Output_fp;
  extern FILE *csql_Error_fp;

  extern char csql_Editor_cmd[];
  extern char csql_Shell_cmd[];
  extern char csql_Print_cmd[];
  extern char csql_Pager_cmd[];
  extern char csql_Scratch_text[];
  extern char csql_Formatter_cmd[];
  extern int csql_Error_code;


  extern int csql_Line_lwm;
  extern int csql_Row_count;
  extern int csql_Num_failures;

  extern int (*csql_text_utf8_to_console) (const char *, const int, char **, int *);
  extern int (*csql_text_console_to_utf8) (const char *, const int, char **, int *);

  extern void csql_display_msg (const char *string);
  extern void csql_exit (int exit_status);
  extern int csql (const char *argv0, CSQL_ARGUMENT * csql_arg);

  extern const char *csql_get_message (int message_index);

  extern char *csql_get_real_path (const char *pathname);
  extern void csql_invoke_system (const char *command);
  extern int csql_invoke_formatter (void);
  extern int csql_invoke_system_editor (const char *argument);
  extern void csql_fputs (const char *str, FILE * fp);
  extern void csql_fputs_console_conv (const char *str, FILE * fp);
  extern FILE *csql_popen (const char *cmd, FILE * fd);
  extern void csql_pclose (FILE * pf, FILE * fd);
  extern void csql_display_csql_err (int line_no, int col_no);
  extern void csql_display_session_err (DB_SESSION * session, int line_no);
  extern int csql_append_more_line (int indent, const char *line);
  extern void csql_display_more_lines (const char *title);
  extern void csql_free_more_lines (void);
  extern void csql_check_server_down (void);
  extern char *csql_get_tmp_buf (size_t size);
  extern void nonscr_display_error (char *buffer, int buf_length);

  extern int csql_get_session_cmd_no (const char *input);

  extern void csql_results (const CSQL_ARGUMENT * csql_arg,
                DB_QUERY_RESULT * result,
                DB_QUERY_TYPE * attr_spec, int line_no, CUBRID_STMT_TYPE stmt_type);

  extern char *csql_edit_contents_get (void);
  extern int csql_edit_contents_append (const char *str, bool flag_append_new_line);
  extern void csql_walk_statement (const char *str);
  extern bool csql_is_statement_complete (void);
  extern bool csql_is_statement_in_block (void);
  extern void csql_edit_contents_clear (void);
  extern void csql_edit_contents_finalize (void);
  extern int csql_edit_read_file (FILE * fp);
  extern int csql_edit_write_file (FILE * fp);

  extern const char *csql_errmsg (int code);

  extern void csql_help_menu (void);
  extern void csql_help_schema (const char *class_name);
  extern void csql_help_trigger (const char *class_name);
  extern void csql_help_info (const char *command, int aucommit_flag);
  extern void csql_killtran (const char *argument);

  extern char *csql_db_value_as_string (DB_VALUE * value, int *length, const CSQL_ARGUMENT * csql_arg);

  extern char *csql_string_to_plain_string (const char *string_value, int length, int *result_length);

  extern int csql_set_column_width_info (const char *column_name, int column_width);
  extern int csql_get_column_width (const char *column_name);

  extern char *string_to_string (const char *string_value, char string_delimiter, char string_introducer, int length,
                 int *result_length, bool plain_string, bool change_single_quote);

#ifdef __cplusplus
}
#endif


#endif              /* _CSQL_H_ */