Files
Zinan Ren 8e7bd960bf Merged PR 1540262: [OSS] Remove helio references from sources of documentdb_core
### Does this PR have any customer impact?
No
### Type (Feature, Refactoring, Bugfix, DevOps, Testing, Perf, etc)
Refactoring
### Does it involve schema level changes? (Table, Column, Index, UDF, etc level changes)
No
### Are you introducing any new config? If yes, do you have tests with and without them being set?
No
### Release Note (Refer [Template](../docs/release_notes/pgmongo_template.md))

### Description
Remove helio from file name
Remove helio references from source content except schema reference
Start local documentdb server with the documentdb extension
Regression tests using the documentdb  extension

----
#### AI description  (iteration 1)
#### PR Classification
Code cleanup

#### PR Summary
This pull request removes references to "helio" from the `documentdb_core` source code.
- `scripts/utils.sh`: Renamed variables from `preloadExtensions` to `preloadLibraries`.
- `pg_documentdb_core/include/utils/error_utils.h`: Updated function and macro names to replace "Helio" with "DocumentDB".
- `pg_documentdb_core/include/io/helio_bson_core.h` and `pg_documentdb_core/include/query/helio_bson_compare.h`: Moved to `pg_documentdb_core/include/io/bson_core.h` and `pg_documentdb_core/include/query/bson_compare.h`.
- `pg_documentdb_core/src/collation/collation.c` and `pg_documentdb_core/src/io/pgbson.c`: Replaced error codes and messages to use "DocumentDB" instead of "Helio".
- `scripts/validate_helio_extension_state.sh`: Added exceptions for certain files to skip validation for "helio" references.
2025-01-15 07:48:40 +00:00

222 lines
6.0 KiB
C

/*-------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
*
* include/commands/parse_error.h
*
* Errors thrown for common parse errors.
*
*-------------------------------------------------------------------------
*/
#include <postgres.h>
#include "io/bson_core.h"
#include "utils/documentdb_errors.h"
#ifndef PARSE_ERROR_H
#define PARSE_ERROR_H
static inline void
ThrowTopLevelTypeMismatchError(const char *fieldName, const char *fieldTypeName,
const char *expectedTypeName)
{
ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_TYPEMISMATCH),
errmsg("BSON field '%s' is the wrong type '%s', "
"expected type '%s'",
fieldName, fieldTypeName, expectedTypeName),
errdetail_log("BSON field '%s' is the wrong type '%s', "
"expected type '%s'",
fieldName, fieldTypeName, expectedTypeName)));
}
/*
* Throw an error if type of the value that given iterator holds doesn't
* match the expected one.
*/
static inline void
EnsureTopLevelFieldType(const char *fieldName, const bson_iter_t *iter,
bson_type_t expectedType)
{
bson_type_t fieldType = bson_iter_type(iter);
if (fieldType != expectedType)
{
ThrowTopLevelTypeMismatchError(fieldName, BsonTypeName(fieldType),
BsonTypeName(expectedType));
}
}
/*
* Variant of the above with values.
*/
static inline void
EnsureTopLevelFieldValueType(const char *fieldName, const bson_value_t *value,
bson_type_t expectedType)
{
if (value->value_type != expectedType)
{
ThrowTopLevelTypeMismatchError(fieldName, BsonTypeName(value->value_type),
BsonTypeName(expectedType));
}
}
/*
* Similar to EnsureTopLevelFieldType, but null value is also ok even if
* expectedType is not "null".
*
* That means;
* - Returns true if type of the value that it holds matches the expected
* one.
* - Otherwise, returns false if iterator holds null value else throws an
* error.
*
* Mostly useful when given field being set to null implies using the default
* setting for that spec option.
*/
static inline bool
EnsureTopLevelFieldTypeNullOk(const char *fieldName, const bson_iter_t *iter,
bson_type_t expectedType)
{
if (BSON_ITER_HOLDS_NULL(iter) && expectedType != BSON_TYPE_NULL)
{
return false;
}
EnsureTopLevelFieldType(fieldName, iter, expectedType);
return true;
}
/*
* Similar to EnsureTopLevelFieldType, but null value is also ok even if
* expectedType is not "null" or "undefined".
*
* That means;
* - Returns true if type of the value that it holds matches the expected
* one.
* - Otherwise, returns false if iterator holds null value else throws an
* error.
*
* Mostly useful when given field being set to null implies using the default
* setting for that spec option.
*/
static inline bool
EnsureTopLevelFieldTypeNullOkUndefinedOK(const char *fieldName, const bson_iter_t *iter,
bson_type_t expectedType)
{
if ((BSON_ITER_HOLDS_NULL(iter) && expectedType != BSON_TYPE_NULL) ||
(BSON_ITER_HOLDS_UNDEFINED(iter) && expectedType != BSON_TYPE_UNDEFINED))
{
return false;
}
EnsureTopLevelFieldType(fieldName, iter, expectedType);
return true;
}
/*
* Throw an error if type of the value that given iterator holds cannot be
* interpreted as a boolean.
*/
static inline void
EnsureTopLevelFieldIsBooleanLike(const char *fieldName, const bson_iter_t *iter)
{
if (!BsonTypeIsNumberOrBool(bson_iter_type(iter)))
{
ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_TYPEMISMATCH),
errmsg("BSON field '%s' is the wrong type '%s', "
"expected types '[bool, long, int, decimal, "
"double']",
fieldName, BsonIterTypeName(iter)),
errdetail_log("BSON field '%s' is the wrong type '%s', "
"expected types '[bool, long, int, decimal, "
"double']",
fieldName, BsonIterTypeName(iter))));
}
}
/*
* Throw an error if type of the value that given iterator holds cannot be
* interpreted as a number.
*/
static inline void
EnsureTopLevelFieldIsNumberLike(const char *fieldName, const bson_value_t *value)
{
if (!BsonTypeIsNumber(value->value_type))
{
ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_TYPEMISMATCH),
errmsg("BSON field '%s' is the wrong type '%s', "
"expected types '[int, decimal, double, long']",
fieldName, BsonTypeName(value->value_type)),
errdetail_log("BSON field '%s' is the wrong type '%s', "
"expected types '[int, decimal, double, long']",
fieldName, BsonTypeName(value->value_type))));
}
}
/*
* Similar to EnsureTopLevelFieldIsBooleanLike, but null value is also ok.
*
* That means;
* - Returns true if type of the value that it holds can be interpreted as
* a boolean.
* - Otherwise, returns false if iterator holds null value else throws an
* error.
*
* Mostly useful when given field being set to null implies using the default
* setting for that spec option.
*/
static inline bool
EnsureTopLevelFieldIsBooleanLikeNullOk(const char *fieldName, const bson_iter_t *iter)
{
if (BSON_ITER_HOLDS_NULL(iter))
{
return false;
}
EnsureTopLevelFieldIsBooleanLike(fieldName, iter);
return true;
}
static inline void
ThrowTopLevelMissingFieldError(const char *fieldName)
{
ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
errmsg("BSON field '%s' is missing but a required field",
fieldName)));
}
static inline void
ThrowTopLevelMissingFieldErrorWithCode(const char *fieldName, int code)
{
ereport(ERROR, (errcode(code),
errmsg("BSON field '%s' is missing but a required field",
fieldName),
errdetail_log("BSON field '%s' is missing but a required field",
fieldName)));
}
static inline void
EnsureStringValueNotDollarPrefixed(const char *fieldValue, int fieldLength)
{
if (fieldLength > 0 && fieldValue[0] == '$')
{
ereport(ERROR, (
errcode(ERRCODE_DOCUMENTDB_LOCATION16410),
errmsg(
"FieldPath field names may not start with '$'. Consider using $getField or $setField.")));
}
}
#endif