MCPcopy Create free account
hub / github.com/documentdb/documentdb / ParseShardCollectionRequest

Function ParseShardCollectionRequest

pg_documentdb/src/sharding/sharding.c:1913–2006  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1911
1912
1913static void
1914ParseShardCollectionRequest(pgbson *args, ShardCollectionArgs *shardArgs)
1915{
1916 bson_iter_t argIter;
1917 PgbsonInitIterator(args, &argIter);
1918 while (bson_iter_next(&argIter))
1919 {
1920 const char *key = bson_iter_key(&argIter);
1921 if (strcmp(key, "shardCollection") == 0)
1922 {
1923 EnsureTopLevelFieldType("shardCollection", &argIter, BSON_TYPE_UTF8);
1924 ParseNamespaceName(bson_iter_utf8(&argIter, NULL), &shardArgs->databaseName,
1925 &shardArgs->collectionName);
1926 }
1927 else if (strcmp(key, "key") == 0)
1928 {
1929 EnsureTopLevelFieldType("key", &argIter, BSON_TYPE_DOCUMENT);
1930 shardArgs->shardKeyDefinition = PgbsonInitFromDocumentBsonValue(
1931 bson_iter_value(&argIter));
1932 }
1933 else if (strcmp(key, "unique") == 0)
1934 {
1935 EnsureTopLevelFieldIsBooleanLike("unique", &argIter);
1936 if (bson_iter_as_bool(&argIter))
1937 {
1938 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
1939 errmsg("hashed shard keys cannot be declared unique.")));
1940 }
1941 }
1942 else if (strcmp(key, "numInitialChunks") == 0)
1943 {
1944 EnsureTopLevelFieldIsNumberLike("numInitialChunks", bson_iter_value(
1945 &argIter));
1946 shardArgs->numChunks = BsonValueAsInt32(bson_iter_value(&argIter));
1947
1948 if (shardArgs->numChunks <= 0)
1949 {
1950 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
1951 errmsg("numInitialChunks must be a positive number")));
1952 }
1953
1954 if (shardArgs->numChunks > ShardingMaxChunks)
1955 {
1956 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_FAILEDTOPARSE),
1957 errmsg("numInitialChunks must be less than %d.",
1958 ShardingMaxChunks)));
1959 }
1960 }
1961 else if (strcmp(key, "collation") == 0)
1962 {
1963 EnsureTopLevelFieldType("collation", &argIter, BSON_TYPE_DOCUMENT);
1964 ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1965 errmsg(
1966 "Collation for sharded collections is currently unsupported")));
1967 }
1968 else if (strcmp(key, "timeseries") == 0)
1969 {
1970 EnsureTopLevelFieldType("timeseries", &argIter, BSON_TYPE_DOCUMENT);

Callers 1

command_shard_collectionFunction · 0.85

Calls 9

PgbsonInitIteratorFunction · 0.85
EnsureTopLevelFieldTypeFunction · 0.85
ParseNamespaceNameFunction · 0.85
BsonValueAsInt32Function · 0.85
IsCommonSpecIgnoredFieldFunction · 0.85
ValidateShardKeyFunction · 0.85

Tested by

no test coverage detected