blob: 49c061a32f966ded44becacf566dbb467f94a963 [file] [log] [blame]
/*
* Copyright (c) 2014, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* this file is copied from
* https://github.com/facebook/mysql-5.6/blob/fb-mysql-5.6.35/fbson/FbsonError.h
* and modified by Doris
*/
#ifndef JSONB_JSONBERROR_H
#define JSONB_JSONBERROR_H
#include <stdint.h>
namespace doris {
/*
* Error codes
*
* When adding a new error code, you also must add a corresponding error
* message in JsonbErrMsg::getErrMsg()
*/
enum class JsonbErrType {
E_NONE = 0,
E_INVALID_VER,
E_EMPTY_DOCUMENT,
E_OUTPUT_FAIL,
E_INVALID_DOCU,
E_INVALID_TYPE,
E_INVALID_SCALAR_VALUE,
E_INVALID_KEY_STRING,
E_INVALID_KEY_LENGTH,
E_INVALID_STR,
E_INVALID_OBJ,
E_INVALID_ARR,
E_INVALID_NUMBER,
E_INVALID_HEX,
E_INVALID_OCTAL,
E_INVALID_DECIMAL,
E_INVALID_EXPONENT,
E_HEX_OVERFLOW,
E_OCTAL_OVERFLOW,
E_DECIMAL_OVERFLOW,
E_DOUBLE_OVERFLOW,
E_OUTOFMEMORY,
E_OUTOFBOUNDARY,
E_KEYNOTEXIST,
E_NOTARRAY,
E_NOTOBJ,
E_INVALID_OPER,
E_INVALID_JSONB_OBJ,
E_NESTING_LVL_OVERFLOW,
E_INVALID_DOCU_COMPAT,
E_EXCEPTION,
E_INVALID_JSON_PATH,
// new error code should always be added above
E_NUM_ERRORS
};
/*
* Error messages
*/
class JsonbErrMsg {
public:
static const char* getErrMsg(JsonbErrType err_code) {
static_assert(sizeof(err_msg_) / sizeof(char*) == (unsigned)JsonbErrType::E_NUM_ERRORS + 1,
"JsonbErrMsg::err_msg_ array doesn't match the number of error types");
return err_msg_[(unsigned)err_code];
}
private:
static const constexpr char* const err_msg_[] = {
"OK", /* E_NONE */
"Invalid document version",
"Empty document",
"Fatal error in writing JSONB",
"Invalid document",
"Invalid json value type",
"Invalid scalar value",
"Invalid key string",
"Key length exceeds maximum size allowed (64 bytes)",
"Invalid string value",
"Invalid JSON object",
"Invalid JSON array",
"Invalid number",
"Invalid HEX number",
"Invalid octal number",
"Invalid decimal number",
"Invalid exponent part of a number value",
"HEX number overflow",
"Octal number overflow",
"Decimal number overflow",
"Double number overflow",
"Fatal error: out of memory",
"Out of array boundary",
"Key not found",
"Not a JSON array value",
"Not a JSON object value",
"Invalid update operation",
"Invalid JSONB object (internal)",
"Object or array has too many nesting levels",
"Invalid document",
"Exception throwed",
"Invalid Json Path",
nullptr /* E_NUM_ERRORS */
};
};
/*
* Error Info contains position and message of the error
*/
class JsonbErrInfo {
public:
int32_t err_pos;
const char* err_msg;
JsonbErrInfo() : err_pos(0), err_msg(nullptr) {}
};
} // namespace doris
#endif // JSONB_JSONBERROR_H