DEF_STR(table),
DEF_STR(username_field),
DEF_STR(value_field),
+ DEF_STR(value_type),
DEF_BOOL(value_hexblob),
{ 0, NULL, 0 }
return "Missing setting: table";
if (ctx->cur_map.value_field == NULL)
return "Missing setting: value_field";
+ if (ctx->cur_map.value_type != NULL) {
+ if (strcmp(ctx->cur_map.value_type, "string") != 0 &&
+ strcmp(ctx->cur_map.value_type, "hexblob") != 0 &&
+ strcmp(ctx->cur_map.value_type, "uint") != 0)
+ return "Invalid value in value_type";
+ }
if (ctx->cur_map.username_field == NULL) {
/* not all queries require this */
return str_c(str);
}
+static enum dict_sql_type
+sql_dict_map_type(const struct dict_sql_map *map)
+{
+ if (map->value_type != NULL) {
+ if (strcmp(map->value_type, "string") == 0)
+ return DICT_SQL_TYPE_STRING;
+ if (strcmp(map->value_type, "hexblob") == 0)
+ return DICT_SQL_TYPE_HEXBLOB;
+ if (strcmp(map->value_type, "uint") == 0)
+ return DICT_SQL_TYPE_UINT;
+ i_unreached(); /* should have checked already at parsing */
+ }
+ return map->value_hexblob ? DICT_SQL_TYPE_HEXBLOB : DICT_SQL_TYPE_STRING;
+}
+
static const char *
sql_dict_result_unescape_value(const struct dict_sql_map *map, pool_t pool,
struct sql_result *result)
{
- enum dict_sql_type value_type = map->value_hexblob ?
- DICT_SQL_TYPE_HEXBLOB : DICT_SQL_TYPE_STRING;
- return sql_dict_result_unescape(value_type, pool, result, 0);
+ return sql_dict_result_unescape(sql_dict_map_type(map), pool, result, 0);
}
static const char *
if (build->inc)
str_append(suffix, fields[i].value);
else {
- enum dict_sql_type value_type = fields[i].map->value_hexblob ?
- DICT_SQL_TYPE_HEXBLOB : DICT_SQL_TYPE_STRING;
+ enum dict_sql_type value_type =
+ sql_dict_map_type(fields[i].map);
if (sql_dict_value_escape(suffix, dict, value_type,
"value", fields[i].value, "", error_r) < 0)
return -1;
fields[i].map->value_field,
fields[i].value);
} else {
- enum dict_sql_type value_type = fields[i].map->value_hexblob ?
- DICT_SQL_TYPE_HEXBLOB : DICT_SQL_TYPE_STRING;
+ enum dict_sql_type value_type =
+ sql_dict_map_type(fields[i].map);
if (sql_dict_value_escape(prefix, dict, value_type,
"value", fields[i].value, "", error_r) < 0)
return -1;