/**********************************************************************
// @@@ 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 EXP_LOB_ENUMS_H
#define EXP_LOB_ENUMS_H

#include "ComSmallDefs.h"
#include "ComAnsiNamePart.h"
#define LOB_HANDLE_LEN 1024
#define LOB_NAME_LEN 50 // LOBP_<objectUid>_<LOBnum>  
                         //      <---20----> <--4--->Need 30 bytes -  allocating extra.
#define MAX_LOB_FILE_NAME_LEN 256
#define MAX_BLACK_BOX_LEN 2048
#define LOB_DESC_HEADER_KEY 1
#define NUM_WORKER_THREADS 2
#define LOB_LOCK_ID_SIZE 12
 
// 2 threads at most, one to read and the other to pick up next read from preOpen

#define LOB_CURSOR_PREFETCH_BYTES_MAX (1 << 27) // 128MB
// IMPORTANT //
// If an enum is added here, make sure that a corresponding entry is
// made in lobErrorEnumStr that follows this enum list.
typedef enum {
  LOB_MIN_ERROR_NUM = 500,
  LOB_OPER_OK = LOB_MIN_ERROR_NUM,
  LOB_INIT_ERROR,
  LOB_GLOB_PTR_ERROR,
  LOB_DIR_UNDEFINED,
  LOB_DATA_FILE_FULL_ERROR,
  LOB_DESC_FILE_CREATE_ERROR,
  LOB_DATA_FILE_CREATE_ERROR,
  LOB_DESC_FILE_OPEN_ERROR,
  LOB_DATA_FILE_OPEN_ERROR,
  LOB_DESC_FILE_WRITE_ERROR,
  LOB_DATA_FILE_WRITE_ERROR =510,
  LOB_DESC_FILE_LOCK_ERROR,
  LOB_DATA_FILE_LOCK_ERROR,
  LOB_DESC_HEADER_READ_ERROR,
  LOB_DESC_HEADER_WRITE_ERROR,
  LOB_DESC_WRITE_ERROR,
  LOB_DATA_WRITE_ERROR,
  LOB_DATA_FILE_DELETE_ERROR,
  LOB_DEST_FILE_OPEN_ERROR,
  LOB_DESC_FILE_DELETE_ERROR,
  LOB_SOURCE_FILE_LOCK_ERROR =520,
  LOB_SOURCE_FILE_STAT_ERROR ,
  LOB_SOURCE_FILE_OPEN_ERROR,
  LOB_SOURCE_FILE_READ_ERROR,
  LOB_SOURCE_DATA_ALLOC_ERROR,
  LOB_SOURCE_DATA_ERROR,
  LOB_TARGET_FILE_OPEN_ERROR,
  LOB_TARGET_FILE_WRITE_ERROR,
  LOB_DESC_READ_ERROR,
  LOB_DATA_READ_ERROR,
  LOB_DATA_READ_SIZE_ERROR =530,
  LOB_ALLOC_ERROR,
  LOB_PTR_ERROR ,
  LOB_OPER_ERROR,
  LOB_SUBOPER_ERROR,
  LOB_DIR_NAME_ERROR,
  LOB_STORAGE_TYPE_ERROR,
  LOB_DESC_SIZE_ERROR,
  LOB_REQUEST_UNDEFINED_ERROR,
  LOB_SEND_MSG_ERROR,
  LOB_OPER_REQ_IN_PROGRESS = 540,
  LOB_OPER_REQ_DONE,
  LOB_SERVER_OPEN_ERROR ,
  LOB_DESC_APPEND_ERROR,
  LOB_CURSOR_NOT_OPEN,
  LOB_DESC_UPDATE_ERROR,
  LOB_HANDLE_IN_LEN_ERROR,
  LOB_HANDLE_OUT_LEN_ERROR,
  LOB_BLACK_BOX_LEN_ERROR,
  LOB_DATA_FLUSH_ERROR ,
  LOB_HDFS_CONNECT_ERROR =550,
  LOB_HDFS_THREAD_CREATE_ERROR,
  LOB_HDFS_THREAD_SIGMASK_ERROR,
  LOB_HDFS_REQUEST_UNKNOWN,
  LOB_DATA_FILE_NOT_FOUND_ERROR,
  LOB_DATA_FILE_NOT_EMPTY_ERROR,
  LOB_DATA_FILE_POSITION_ERROR,
  LOB_CURSOR_NOT_OPEN_ERROR,
  LOB_OPER_CONTINUE,
  LOB_INVALID_ERROR_VAL,
  LOB_MAX_LIMIT_ERROR = 560,
  LOB_TARGET_FILE_EXISTS_ERROR,
  LOB_DATA_MOD_CHECK_ERROR,
  LOB_DATA_EMPTY_ERROR,
  LOB_MAX_ERROR_NUM     // keep this as the last element in enum list.
} Ex_Lob_Error;

static const char * const lobErrorEnumStr[] =
  {
  "LOB_OPER_OK",
  "LOB_INIT_ERROR",
  "LOB_GLOB_PTR_ERROR",
  "LOB_DIR_UNDEFINED",
  "LOB_DATA_FILE_FULL_ERROR",
  "LOB_DESC_FILE_CREATE_ERROR",
  "LOB_DATA_FILE_CREATE_ERROR",
  "LOB_DESC_FILE_OPEN_ERROR",
  "LOB_DATA_FILE_OPEN_ERROR",
  "LOB_DESC_FILE_WRITE_ERROR", 
  "LOB_DATA_FILE_WRITE_ERROR",//510
  "LOB_DESC_FILE_LOCK_ERROR",
  "LOB_DATA_FILE_LOCK_ERROR",
  "LOB_DESC_HEADER_READ_ERROR",
  "LOB_DESC_HEADER_WRITE_ERROR",
  "LOB_DESC_WRITE_ERROR",
  "LOB_DATA_WRITE_ERROR",
  "LOB_DATA_FILE_DELETE_ERROR", 
  "LOB_DEST_FILE_OPEN_ERROR",
  "LOB_DESC_FILE_DELETE_ERROR",
  "LOB_SOURCE_FILE_LOCK_ERROR", //520
  "LOB_SOURCE_FILE_STAT_ERROR",
  "LOB_SOURCE_FILE_OPEN_ERROR",
  "LOB_SOURCE_FILE_READ_ERROR",
  "LOB_SOURCE_DATA_ALLOC_ERROR",
  "LOB_SOURCE_DATA_ERROR",
  "LOB_TARGET_FILE_OPEN_ERROR",
  "LOB_TARGET_FILE_WRITE_ERROR",
  "LOB_DESC_READ_ERROR", 
  "LOB_DATA_READ_ERROR", 
  "LOB_DATA_READ_SIZE_ERROR", //530
  "LOB_ALLOC_ERROR",
  "LOB_PTR_ERROR",
  "LOB_OPER_ERROR",
  "LOB_SUBOPER_ERROR",
  "LOB_DIR_NAME_ERROR",
  "LOB_STORAGE_TYPE_ERROR",
  "LOB_DESC_SIZE_ERROR",
  "LOB_REQUEST_UNDEFINED_ERROR",
  "LOB_SEND_MSG_ERROR",
  "LOB_OPER_REQ_IN_PROGRESS",//540
  "LOB_OPER_REQ_DONE",
  "LOB_SERVER_OPEN_ERROR",
  "LOB_DESC_APPEND_ERROR",
  "LOB_CURSOR_NOT_OPEN",
  "LOB_DESC_UPDATE_ERROR",
  "LOB_HANDLE_IN_LEN_ERROR",
  "LOB_HANDLE_OUT_LEN_ERROR",
  "LOB_BLACK_BOX_LEN_ERROR",
  "LOB_DATA_FLUSH_ERROR", 
  "LOB_HDFS_CONNECT_ERROR", //550
  "LOB_HDFS_THREAD_CREATE_ERROR",
  "LOB_HDFS_THREAD_SIGMASK_ERROR",
  "LOB_HDFS_REQUEST_UNKNOWN",
  "LOB_DATA_FILE_NOT_FOUND_ERROR",
  "LOB_DATA_FILE_NOT_EMPTY_ERROR",
  "LOB_DATA_FILE_POSITION_ERROR",
  "LOB_CURSOR_NOT_OPEN_ERROR",
  "LOB_OPER_CONTINUE",
  "LOB_INVALID_ERROR_VAL", 
  "LOB_MAX_LIMIT_ERROR", //560
  "LOB_TGT_FILE_EXISTS_ERROR",
  "LOB_DATA_MOD_CHECK_ERROR",
  "LOB_DATA_EMPTY_ERROR",
  "LOB_MAX_ERROR_NUM"     // keep this as the last element in enum list.
};

typedef enum {
  EX_LOB_CREATE = 500,
  EX_LOB_RW
} Ex_Lob_Mode;

typedef ComLobsStorage LobsStorage;

typedef enum {
   Lob_None,
   Lob_File,
   Lob_Memory,
   Lob_Buffer,
   Lob_Lob, // tranfer from lob column of one table to another
   Lob_External_Lob,//transfer from external lob of one table to another
   Lob_External_File // link external hdfs file into traf lob column without an hdfs copy. 
} LobsSubOper;

typedef enum {
  HDFS_FILE, // specified with "hdfs:///<dir>/<file>" syntax
  CURL_FILE, // external http file specified "http://www.xyz.com" or "file:///<dir>/<filename>"syntax
  LOCAL_FILE // specifiled with simple /dir/filename syntax
 
} LobInputOutputFileType;

typedef enum {
    EX_LOB_DATA_INITIALIZING = 1000,
    EX_LOB_DATA_WRITING,
    EX_LOB_DATA_WRITTEN,
    EX_LOB_DATA_DELETED
} Ex_Lob_Data_State;

typedef enum {
   Lob_Init,
   Lob_Create,
   Lob_Insert,
   Lob_InsertDesc,
   Lob_InsertData,
   Lob_InsertDataSimple,

   Lob_InsSel,
   Lob_Delete,
   Lob_Purge,
   Lob_Append,
   Lob_Update,

   Lob_Read,
   Lob_ReadDesc,
   Lob_ReadData,
   Lob_ReadDataSimple,

   Lob_OpenCursor,
   Lob_ReadCursor,
   Lob_CloseCursor,

   Lob_OpenDescCursor,
   Lob_ReadDescCursor,
   Lob_CloseDescCursor,

   Lob_OpenDataCursor,
   Lob_ReadDataCursor,
   Lob_CloseDataCursor,

   Lob_OpenDataCursorSimple,
   Lob_ReadDataCursorSimple,
   Lob_CloseDataCursorSimple,

   Lob_CloseFile,

   Lob_Drop,
   Lob_Check_Status,

   Lob_Print, // debugging purposes

   Lob_Empty_Directory,
   Lob_Data_Mod_Check,

   Lob_Cleanup, // destroy everything under globals
   Lob_PerformGC,
   Lob_RestoreLobDataFile,
   Lob_PurgeBackupLobDataFile,
   Lob_GetLength,
   Lob_GetFileName,
   Lob_GetOffset
   
} LobsOper;

typedef enum {
   Lob_Commit,
   Lob_UnCommit,
   Lob_Rollback
} LobsTrans;

typedef enum {
    Lob_Req_Invalid,
    Lob_Req_Allocate_Desc,
    Lob_Req_Delete,
    Lob_Req_Read,
    Lob_Req_Append,
    Lob_Req_Update,
    Lob_Req_Create,
    Lob_Req_Get_Desc,
    Lob_Req_Put_Desc,
    Lob_Req_Del_Desc,
    Lob_Req_Purge_Desc,
    Lob_Req_Select_Cursor,
    Lob_Req_Fetch_Cursor,
    Lob_Req_Print
} LobsRequest;

typedef enum {
   Lob_Hdfs_Cursor_Prefetch,
   Lob_Hdfs_Read,
   Lob_Hdfs_Write,
   Lob_Hdfs_Shutdown
} LobsHdfsRequestType;

typedef enum {
   Lob_Cursor_Simple
} LobsCursorType;

typedef enum { 
  Lob_Append_Or_Error =0,
  Lob_Truncate_Or_Error,
  Lob_Truncate_Or_Create,
  Lob_Error_Or_Create,
  Lob_Append_Or_Create
     
} LobTgtFileFlags;
#endif
