| 1911 | |
| 1912 | |
| 1913 | static void |
| 1914 | ParseShardCollectionRequest(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); |
no test coverage detected