packages feed

clickhouse-haskell-0.1.2.0: src/Database/ClickHouseDriver/Error.hs

-- Copyright (c) 2020-present, EMQX, Inc.
-- All rights reserved.
--
-- This source code is distributed under the terms of a MIT license,
-- found in the LICENSE file.
---------------------------------------------------------------------------
-- This file contains the details of handling error messages from server.
-- For internal use only
{-# LANGUAGE OverloadedStrings #-}

module Database.ClickHouseDriver.Error
  ( readException,
    ClickhouseException (..),
    _UNEXPECTED_PACKET_FROM_SERVER,
    _UNKNOWN_PACKET_FROM_SERVER,
  )
where

import Database.ClickHouseDriver.IO.BufferedReader
  ( Reader,
    readBinaryInt32,
    readBinaryStr,
    readBinaryUInt8,
  )
import Data.ByteString.Char8 (unpack)

--import           Debug.Trace

data ClickhouseException = ServerException
  { message :: String,
    code :: !Integer,
    nested :: Maybe ClickhouseException
  }

instance Show ClickhouseException where
  show (ServerException message code nested) =
    "Code " ++ show code ++ "."
      ++ ( case nested of
             Nothing -> ""
             Just s -> show s
         )
      ++ " "
      ++ message

readException :: Maybe String -> Reader ClickhouseException
readException additional = do
  code <- readBinaryInt32
  name <- readBinaryStr
  messange <- readBinaryStr
  stack_trace <- readBinaryStr
  has_nested <- (== 1) <$> readBinaryUInt8
  let hasAdditional =
        ( case additional of
            Nothing -> ""
            Just msg -> msg ++ "."
        )
          ++ if name /= "DB::Exception"
            then unpack name
            else "" ++ "."
  let new_message = hasAdditional <> show messange <> ". Stack trace:\n\n" <> show stack_trace
  if has_nested
    then do
      nested <- readException Nothing
      return $ ServerException new_message (fromIntegral code) (Just nested)
    else do
      return $ ServerException new_message (fromIntegral code) Nothing

_UNSUPPORTED_METHOD = 1

_UNSUPPORTED_PARAMETER = 2

_UNEXPECTED_END_OF_FILE = 3

_EXPECTED_END_OF_FILE = 4

_CANNOT_PARSE_TEXT = 6

_INCORRECT_NUMBER_OF_COLUMNS = 7

_THERE_IS_NO_COLUMN = 8

_SIZES_OF_COLUMNS_DOESNT_MATCH = 9

_NOT_FOUND_COLUMN_IN_BLOCK = 10

_POSITION_OUT_OF_BOUND = 11

_PARAMETER_OUT_OF_BOUND = 12

_SIZES_OF_COLUMNS_IN_TUPLE_DOESNT_MATCH = 13

_DUPLICATE_COLUMN = 15

_NO_SUCH_COLUMN_IN_TABLE = 16

_DELIMITER_IN_STRING_LITERAL_DOESNT_MATCH = 17

_CANNOT_INSERT_ELEMENT_INTO_CONSTANT_COLUMN = 18

_SIZE_OF_FIXED_STRING_DOESNT_MATCH = 19

_NUMBER_OF_COLUMNS_DOESNT_MATCH = 20

_CANNOT_READ_ALL_DATA_FROM_TAB_SEPARATED_INPUT = 21

_CANNOT_PARSE_ALL_VALUE_FROM_TAB_SEPARATED_INPUT = 22

_CANNOT_READ_FROM_ISTREAM = 23

_CANNOT_WRITE_TO_OSTREAM = 24

_CANNOT_PARSE_ESCAPE_SEQUENCE = 25

_CANNOT_PARSE_QUOTED_STRING = 26

_CANNOT_PARSE_INPUT_ASSERTION_FAILED = 27

_CANNOT_PRINT_FLOAT_OR_DOUBLE_NUMBER = 28

_CANNOT_PRINT_INTEGER = 29

_CANNOT_READ_SIZE_OF_COMPRESSED_CHUNK = 30

_CANNOT_READ_COMPRESSED_CHUNK = 31

_ATTEMPT_TO_READ_AFTER_EOF = 32

_CANNOT_READ_ALL_DATA = 33

_TOO_MANY_ARGUMENTS_FOR_FUNCTION = 34

_TOO_LESS_ARGUMENTS_FOR_FUNCTION = 35

_BAD_ARGUMENTS = 36

_UNKNOWN_ELEMENT_IN_AST = 37

_CANNOT_PARSE_DATE = 38

_TOO_LARGE_SIZE_COMPRESSED = 39

_CHECKSUM_DOESNT_MATCH = 40

_CANNOT_PARSE_DATETIME = 41

_NUMBER_OF_ARGUMENTS_DOESNT_MATCH = 42

_ILLEGAL_TYPE_OF_ARGUMENT = 43

_ILLEGAL_COLUMN = 44

_ILLEGAL_NUMBER_OF_RESULT_COLUMNS = 45

_UNKNOWN_FUNCTION = 46

_UNKNOWN_IDENTIFIER = 47

_NOT_IMPLEMENTED = 48

_LOGICAL_ERROR = 49

_UNKNOWN_TYPE = 50

_EMPTY_LIST_OF_COLUMNS_QUERIED = 51

_COLUMN_QUERIED_MORE_THAN_ONCE = 52

_TYPE_MISMATCH = 53

_STORAGE_DOESNT_ALLOW_PARAMETERS = 54

_STORAGE_REQUIRES_PARAMETER = 55

_UNKNOWN_STORAGE = 56

_TABLE_ALREADY_EXISTS = 57

_TABLE_METADATA_ALREADY_EXISTS = 58

_ILLEGAL_TYPE_OF_COLUMN_FOR_FILTER = 59

_UNKNOWN_TABLE = 60

_ONLY_FILTER_COLUMN_IN_BLOCK = 61

_SYNTAX_ERROR = 62

_UNKNOWN_AGGREGATE_FUNCTION = 63

_CANNOT_READ_AGGREGATE_FUNCTION_FROM_TEXT = 64

_CANNOT_WRITE_AGGREGATE_FUNCTION_AS_TEXT = 65

_NOT_A_COLUMN = 66

_ILLEGAL_KEY_OF_AGGREGATION = 67

_CANNOT_GET_SIZE_OF_FIELD = 68

_ARGUMENT_OUT_OF_BOUND = 69

_CANNOT_CONVERT_TYPE = 70

_CANNOT_WRITE_AFTER_END_OF_BUFFER = 71

_CANNOT_PARSE_NUMBER = 72

_UNKNOWN_FORMAT = 73

_CANNOT_READ_FROM_FILE_DESCRIPTOR = 74

_CANNOT_WRITE_TO_FILE_DESCRIPTOR = 75

_CANNOT_OPEN_FILE = 76

_CANNOT_CLOSE_FILE = 77

_UNKNOWN_TYPE_OF_QUERY = 78

_INCORRECT_FILE_NAME = 79

_INCORRECT_QUERY = 80

_UNKNOWN_DATABASE = 81

_DATABASE_ALREADY_EXISTS = 82

_DIRECTORY_DOESNT_EXIST = 83

_DIRECTORY_ALREADY_EXISTS = 84

_FORMAT_IS_NOT_SUITABLE_FOR_INPUT = 85

_RECEIVED_ERROR_FROM_REMOTE_IO_SERVER = 86

_CANNOT_SEEK_THROUGH_FILE = 87

_CANNOT_TRUNCATE_FILE = 88

_UNKNOWN_COMPRESSION_METHOD = 89

_EMPTY_LIST_OF_COLUMNS_PASSED = 90

_SIZES_OF_MARKS_FILES_ARE_INCONSISTENT = 91

_EMPTY_DATA_PASSED = 92

_UNKNOWN_AGGREGATED_DATA_VARIANT = 93

_CANNOT_MERGE_DIFFERENT_AGGREGATED_DATA_VARIANTS = 94

_CANNOT_READ_FROM_SOCKET = 95

_CANNOT_WRITE_TO_SOCKET = 96

_CANNOT_READ_ALL_DATA_FROM_CHUNKED_INPUT = 97

_CANNOT_WRITE_TO_EMPTY_BLOCK_OUTPUT_STREAM = 98

_UNKNOWN_PACKET_FROM_CLIENT = 99

_UNKNOWN_PACKET_FROM_SERVER = 100

_UNEXPECTED_PACKET_FROM_CLIENT = 101

_UNEXPECTED_PACKET_FROM_SERVER = 102

_RECEIVED_DATA_FOR_WRONG_QUERY_ID = 103

_TOO_SMALL_BUFFER_SIZE = 104

_CANNOT_READ_HISTORY = 105

_CANNOT_APPEND_HISTORY = 106

_FILE_DOESNT_EXIST = 107

_NO_DATA_TO_INSERT = 108

_CANNOT_BLOCK_SIGNAL = 109

_CANNOT_UNBLOCK_SIGNAL = 110

_CANNOT_MANIPULATE_SIGSET = 111

_CANNOT_WAIT_FOR_SIGNAL = 112

_THERE_IS_NO_SESSION = 113

_CANNOT_CLOCK_GETTIME = 114

_UNKNOWN_SETTING = 115

_THERE_IS_NO_DEFAULT_VALUE = 116

_INCORRECT_DATA = 117

_ENGINE_REQUIRED = 119

_CANNOT_INSERT_VALUE_OF_DIFFERENT_SIZE_INTO_TUPLE = 120

_UNKNOWN_SET_DATA_VARIANT = 121

_INCOMPATIBLE_COLUMNS = 122

_UNKNOWN_TYPE_OF_AST_NODE = 123

_INCORRECT_ELEMENT_OF_SET = 124

_INCORRECT_RESULT_OF_SCALAR_SUBQUERY = 125

_CANNOT_GET_RETURN_TYPE = 126

_ILLEGAL_INDEX = 127

_TOO_LARGE_ARRAY_SIZE = 128

_FUNCTION_IS_SPECIAL = 129

_CANNOT_READ_ARRAY_FROM_TEXT = 130

_TOO_LARGE_STRING_SIZE = 131

_CANNOT_CREATE_TABLE_FROM_METADATA = 132

_AGGREGATE_FUNCTION_DOESNT_ALLOW_PARAMETERS = 133

_PARAMETERS_TO_AGGREGATE_FUNCTIONS_MUST_BE_LITERALS = 134

_ZERO_ARRAY_OR_TUPLE_INDEX = 135

_UNKNOWN_ELEMENT_IN_CONFIG = 137

_EXCESSIVE_ELEMENT_IN_CONFIG = 138

_NO_ELEMENTS_IN_CONFIG = 139

_ALL_REQUESTED_COLUMNS_ARE_MISSING = 140

_SAMPLING_NOT_SUPPORTED = 141

_NOT_FOUND_NODE = 142

_FOUND_MORE_THAN_ONE_NODE = 143

_FIRST_DATE_IS_BIGGER_THAN_LAST_DATE = 144

_UNKNOWN_OVERFLOW_MODE = 145

_QUERY_SECTION_DOESNT_MAKE_SENSE = 146

_NOT_FOUND_FUNCTION_ELEMENT_FOR_AGGREGATE = 147

_NOT_FOUND_RELATION_ELEMENT_FOR_CONDITION = 148

_NOT_FOUND_RHS_ELEMENT_FOR_CONDITION = 149

_NO_ATTRIBUTES_LISTED = 150

_INDEX_OF_COLUMN_IN_SORT_CLAUSE_IS_OUT_OF_RANGE = 151

_UNKNOWN_DIRECTION_OF_SORTING = 152

_ILLEGAL_DIVISION = 153

_AGGREGATE_FUNCTION_NOT_APPLICABLE = 154

_UNKNOWN_RELATION = 155

_DICTIONARIES_WAS_NOT_LOADED = 156

_ILLEGAL_OVERFLOW_MODE = 157

_TOO_MANY_ROWS = 158

_TIMEOUT_EXCEEDED = 159

_TOO_SLOW = 160

_TOO_MANY_COLUMNS = 161

_TOO_DEEP_SUBQUERIES = 162

_TOO_DEEP_PIPELINE = 163

_READONLY = 164

_TOO_MANY_TEMPORARY_COLUMNS = 165

_TOO_MANY_TEMPORARY_NON_CONST_COLUMNS = 166

_TOO_DEEP_AST = 167

_TOO_BIG_AST = 168

_BAD_TYPE_OF_FIELD = 169

_BAD_GET = 170

_BLOCKS_HAVE_DIFFERENT_STRUCTURE = 171

_CANNOT_CREATE_DIRECTORY = 172

_CANNOT_ALLOCATE_MEMORY = 173

_CYCLIC_ALIASES = 174

_CHUNK_NOT_FOUND = 176

_DUPLICATE_CHUNK_NAME = 177

_MULTIPLE_ALIASES_FOR_EXPRESSION = 178

_MULTIPLE_EXPRESSIONS_FOR_ALIAS = 179

_THERE_IS_NO_PROFILE = 180

_ILLEGAL_FINAL = 181

_ILLEGAL_PREWHERE = 182

_UNEXPECTED_EXPRESSION = 183

_ILLEGAL_AGGREGATION = 184

_UNSUPPORTED_MYISAM_BLOCK_TYPE = 185

_UNSUPPORTED_COLLATION_LOCALE = 186

_COLLATION_COMPARISON_FAILED = 187

_UNKNOWN_ACTION = 188

_TABLE_MUST_NOT_BE_CREATED_MANUALLY = 189

_SIZES_OF_ARRAYS_DOESNT_MATCH = 190

_SET_SIZE_LIMIT_EXCEEDED = 191

_UNKNOWN_USER = 192

_WRONG_PASSWORD = 193

_REQUIRED_PASSWORD = 194

_IP_ADDRESS_NOT_ALLOWED = 195

_UNKNOWN_ADDRESS_PATTERN_TYPE = 196

_SERVER_REVISION_IS_TOO_OLD = 197

_DNS_ERROR = 198

_UNKNOWN_QUOTA = 199

_QUOTA_DOESNT_ALLOW_KEYS = 200

_QUOTA_EXPIRED = 201

_TOO_MANY_SIMULTANEOUS_QUERIES = 202

_NO_FREE_CONNECTION = 203

_CANNOT_FSYNC = 204

_NESTED_TYPE_TOO_DEEP = 205

_ALIAS_REQUIRED = 206

_AMBIGUOUS_IDENTIFIER = 207

_EMPTY_NESTED_TABLE = 208

_SOCKET_TIMEOUT = 209

_NETWORK_ERROR = 210

_EMPTY_QUERY = 211

_UNKNOWN_LOAD_BALANCING = 212

_UNKNOWN_TOTALS_MODE = 213

_CANNOT_STATVFS = 214

_NOT_AN_AGGREGATE = 215

_QUERY_WITH_SAME_ID_IS_ALREADY_RUNNING = 216

_CLIENT_HAS_CONNECTED_TO_WRONG_PORT = 217

_TABLE_IS_DROPPED = 218

_DATABASE_NOT_EMPTY = 219

_DUPLICATE_INTERSERVER_IO_ENDPOINT = 220

_NO_SUCH_INTERSERVER_IO_ENDPOINT = 221

_ADDING_REPLICA_TO_NON_EMPTY_TABLE = 222

_UNEXPECTED_AST_STRUCTURE = 223

_REPLICA_IS_ALREADY_ACTIVE = 224

_NO_ZOOKEEPER = 225

_NO_FILE_IN_DATA_PART = 226

_UNEXPECTED_FILE_IN_DATA_PART = 227

_BAD_SIZE_OF_FILE_IN_DATA_PART = 228

_QUERY_IS_TOO_LARGE = 229

_NOT_FOUND_EXPECTED_DATA_PART = 230

_TOO_MANY_UNEXPECTED_DATA_PARTS = 231

_NO_SUCH_DATA_PART = 232

_BAD_DATA_PART_NAME = 233

_NO_REPLICA_HAS_PART = 234

_DUPLICATE_DATA_PART = 235

_ABORTED = 236

_NO_REPLICA_NAME_GIVEN = 237

_FORMAT_VERSION_TOO_OLD = 238

_CANNOT_MUNMAP = 239

_CANNOT_MREMAP = 240

_MEMORY_LIMIT_EXCEEDED = 241

_TABLE_IS_READ_ONLY = 242

_NOT_ENOUGH_SPACE = 243

_UNEXPECTED_ZOOKEEPER_ERROR = 244

_CORRUPTED_DATA = 246

_INCORRECT_MARK = 247

_INVALID_PARTITION_VALUE = 248

_NOT_ENOUGH_BLOCK_NUMBERS = 250

_NO_SUCH_REPLICA = 251

_TOO_MANY_PARTS = 252

_REPLICA_IS_ALREADY_EXIST = 253

_NO_ACTIVE_REPLICAS = 254

_TOO_MANY_RETRIES_TO_FETCH_PARTS = 255

_PARTITION_ALREADY_EXISTS = 256

_PARTITION_DOESNT_EXIST = 257

_UNION_ALL_RESULT_STRUCTURES_MISMATCH = 258

_CLIENT_OUTPUT_FORMAT_SPECIFIED = 260

_UNKNOWN_BLOCK_INFO_FIELD = 261

_BAD_COLLATION = 262

_CANNOT_COMPILE_CODE = 263

_INCOMPATIBLE_TYPE_OF_JOIN = 264

_NO_AVAILABLE_REPLICA = 265

_MISMATCH_REPLICAS_DATA_SOURCES = 266

_STORAGE_DOESNT_SUPPORT_PARALLEL_REPLICAS = 267

_CPUID_ERROR = 268

_INFINITE_LOOP = 269

_CANNOT_COMPRESS = 270

_CANNOT_DECOMPRESS = 271

_AIO_SUBMIT_ERROR = 272

_AIO_COMPLETION_ERROR = 273

_AIO_READ_ERROR = 274

_AIO_WRITE_ERROR = 275

_INDEX_NOT_USED = 277

_LEADERSHIP_LOST = 278

_ALL_CONNECTION_TRIES_FAILED = 279

_NO_AVAILABLE_DATA = 280

_DICTIONARY_IS_EMPTY = 281

_INCORRECT_INDEX = 282

_UNKNOWN_DISTRIBUTED_PRODUCT_MODE = 283

_UNKNOWN_GLOBAL_SUBQUERIES_METHOD = 284

_TOO_LESS_LIVE_REPLICAS = 285

_UNSATISFIED_QUORUM_FOR_PREVIOUS_WRITE = 286

_UNKNOWN_FORMAT_VERSION = 287

_DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED = 288

_REPLICA_IS_NOT_IN_QUORUM = 289

_LIMIT_EXCEEDED = 290

_DATABASE_ACCESS_DENIED = 291

_LEADERSHIP_CHANGED = 292

_MONGODB_CANNOT_AUTHENTICATE = 293

_INVALID_BLOCK_EXTRA_INFO = 294

_RECEIVED_EMPTY_DATA = 295

_NO_REMOTE_SHARD_FOUND = 296

_SHARD_HAS_NO_CONNECTIONS = 297

_CANNOT_PIPE = 298

_CANNOT_FORK = 299

_CANNOT_DLSYM = 300

_CANNOT_CREATE_CHILD_PROCESS = 301

_CHILD_WAS_NOT_EXITED_NORMALLY = 302

_CANNOT_SELECT = 303

_CANNOT_WAITPID = 304

_TABLE_WAS_NOT_DROPPED = 305

_TOO_DEEP_RECURSION = 306

_TOO_MANY_BYTES = 307

_UNEXPECTED_NODE_IN_ZOOKEEPER = 308

_FUNCTION_CANNOT_HAVE_PARAMETERS = 309

_INVALID_SHARD_WEIGHT = 317

_INVALID_CONFIG_PARAMETER = 318

_UNKNOWN_STATUS_OF_INSERT = 319

_VALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE = 321

_BARRIER_TIMEOUT = 335

_UNKNOWN_DATABASE_ENGINE = 336

_DDL_GUARD_IS_ACTIVE = 337

_UNFINISHED = 341

_METADATA_MISMATCH = 342

_SUPPORT_IS_DISABLED = 344

_TABLE_DIFFERS_TOO_MUCH = 345

_CANNOT_CONVERT_CHARSET = 346

_CANNOT_LOAD_CONFIG = 347

_CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN = 349

_INCOMPATIBLE_SOURCE_TABLES = 350

_AMBIGUOUS_TABLE_NAME = 351

_AMBIGUOUS_COLUMN_NAME = 352

_INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE = 353

_ZLIB_INFLATE_FAILED = 354

_ZLIB_DEFLATE_FAILED = 355

_BAD_LAMBDA = 356

_RESERVED_IDENTIFIER_NAME = 357

_INTO_OUTFILE_NOT_ALLOWED = 358

_TABLE_SIZE_EXCEEDS_MAX_DROP_SIZE_LIMIT = 359

_CANNOT_CREATE_CHARSET_CONVERTER = 360

_SEEK_POSITION_OUT_OF_BOUND = 361

_CURRENT_WRITE_BUFFER_IS_EXHAUSTED = 362

_CANNOT_CREATE_IO_BUFFER = 363

_RECEIVED_ERROR_TOO_MANY_REQUESTS = 364

_OUTPUT_IS_NOT_SORTED = 365

_SIZES_OF_NESTED_COLUMNS_ARE_INCONSISTENT = 366

_TOO_MANY_FETCHES = 367

_BAD_CAST = 368

_ALL_REPLICAS_ARE_STALE = 369

_DATA_TYPE_CANNOT_BE_USED_IN_TABLES = 370

_INCONSISTENT_CLUSTER_DEFINITION = 371

_SESSION_NOT_FOUND = 372

_SESSION_IS_LOCKED = 373

_INVALID_SESSION_TIMEOUT = 374

_CANNOT_DLOPEN = 375

_CANNOT_PARSE_UUID = 376

_ILLEGAL_SYNTAX_FOR_DATA_TYPE = 377

_DATA_TYPE_CANNOT_HAVE_ARGUMENTS = 378

_UNKNOWN_STATUS_OF_DISTRIBUTED_DDL_TASK = 379

_CANNOT_KILL = 380

_HTTP_LENGTH_REQUIRED = 381

_CANNOT_LOAD_CATBOOST_MODEL = 382

_CANNOT_APPLY_CATBOOST_MODEL = 383

_PART_IS_TEMPORARILY_LOCKED = 384

_MULTIPLE_STREAMS_REQUIRED = 385

_NO_COMMON_TYPE = 386

_EXTERNAL_LOADABLE_ALREADY_EXISTS = 387

_CANNOT_ASSIGN_OPTIMIZE = 388

_INSERT_WAS_DEDUPLICATED = 389

_CANNOT_GET_CREATE_TABLE_QUERY = 390

_EXTERNAL_LIBRARY_ERROR = 391

_QUERY_IS_PROHIBITED = 392

_THERE_IS_NO_QUERY = 393

_QUERY_WAS_CANCELLED = 394

_FUNCTION_THROW_IF_VALUE_IS_NON_ZERO = 395

_TOO_MANY_ROWS_OR_BYTES = 396

_QUERY_IS_NOT_SUPPORTED_IN_MATERIALIZED_VIEW = 397

_CANNOT_PARSE_DOMAIN_VALUE_FROM_STRING = 441

_KEEPER_EXCEPTION = 999

_POCO_EXCEPTION = 1000

_STD_EXCEPTION = 1001

_UNKNOWN_EXCEPTION = 1002

_CONDITIONAL_TREE_PARENT_NOT_FOUND = 2001

_ILLEGAL_PROJECTION_MANIPULATOR = 2002