49 if (strcmp(
name,
"none") == 0)
51 else if (strcmp(
name,
"gzip") == 0)
53 else if (strcmp(
name,
"lz4") == 0)
55 else if (strcmp(
name,
"zstd") == 0)
109 char *bare_level_endp;
130 psprintf(
_(
"this build does not support compression with %s"),
136 result->
level = ZSTD_CLEVEL_DEFAULT;
139 psprintf(
_(
"this build does not support compression with %s"),
148 psprintf(
_(
"this build does not support compression with %s"),
155 if (specification == NULL)
159 bare_level = strtol(specification, &bare_level_endp, 10);
160 if (specification != bare_level_endp && *bare_level_endp ==
'\0')
162 result->
level = bare_level;
180 kwstart = kwend = specification;
181 while (*kwend !=
'\0' && *kwend !=
',' && *kwend !=
'=')
183 kwlen = kwend - kwstart;
186 vstart = vend = NULL;
192 vstart = vend = kwend + 1;
193 while (*vend !=
'\0' && *vend !=
',')
195 vlen = vend - vstart;
203 pstrdup(
_(
"found empty string where a compression option was expected"));
208 keyword =
palloc(kwlen + 1);
209 memcpy(keyword, kwstart, kwlen);
210 keyword[kwlen] =
'\0';
216 memcpy(
value, vstart, vlen);
221 if (strcmp(keyword,
"level") == 0)
230 else if (strcmp(keyword,
"workers") == 0)
237 psprintf(
_(
"unrecognized compression option: \"%s\""), keyword);
253 (vend == NULL ? *kwend ==
'\0' : *vend ==
'\0'))
257 specification = vend == NULL ? kwend + 1 : vend + 1;
276 psprintf(
_(
"compression option \"%s\" requires a value"),
281 ivalue = strtol(
value, &ivalue_endp, 10);
282 if (ivalue_endp ==
value || *ivalue_endp !=
'\0')
285 psprintf(
_(
"value for compression option \"%s\" must be an integer"),
304 int default_level = 0;
328 max_level = ZSTD_maxCLevel();
329 min_level = ZSTD_minCLevel();
330 default_level = ZSTD_CLEVEL_DEFAULT;
334 if (spec->
level != 0)
335 return psprintf(
_(
"compression algorithm \"%s\" does not accept a compression level"),
340 if ((spec->
level < min_level || spec->
level > max_level) &&
341 spec->
level != default_level)
342 return psprintf(
_(
"compression algorithm \"%s\" expects a compression level between %d and %d (default at %d)"),
344 min_level, max_level, default_level);
353 return psprintf(
_(
"compression algorithm \"%s\" does not accept a worker count"),
383 result = strtol(
option, &endp, 10);
403 sep = strchr(
option,
':');
bool parse_compress_algorithm(char *name, pg_compress_algorithm *algorithm)
const char * get_compress_algorithm_name(pg_compress_algorithm algorithm)
static int expect_integer_value(char *keyword, char *value, pg_compress_specification *result)
void parse_compress_specification(pg_compress_algorithm algorithm, char *specification, pg_compress_specification *result)
char * validate_compress_specification(pg_compress_specification *spec)
#define PG_COMPRESSION_OPTION_WORKERS
void parse_compress_options(const char *option, char **algorithm, char **detail)
Assert(fmt[strlen(fmt) - 1] !='\n')
char * pstrdup(const char *in)
void pfree(void *pointer)
#define Z_DEFAULT_COMPRESSION
char * psprintf(const char *fmt,...)
pg_compress_algorithm algorithm