*type_r = DICT_SQL_TYPE_STRING;
else if (strcmp(value_type, "hexblob") == 0)
*type_r = DICT_SQL_TYPE_HEXBLOB;
+ else if (strcmp(value_type, "int") == 0)
+ *type_r = DICT_SQL_TYPE_INT;
else if (strcmp(value_type, "uint") == 0)
*type_r = DICT_SQL_TYPE_UINT;
else
field->variable = p_strndup(ctx->pool, value + 10,
value_len-10-1);
field->sql_field.value_type = DICT_SQL_TYPE_HEXBLOB;
+ } else if (strncmp(value, "${int:", 6) == 0 &&
+ value[value_len-1] == '}') {
+ field->variable = p_strndup(ctx->pool, value + 6,
+ value_len-6-1);
+ field->sql_field.value_type = DICT_SQL_TYPE_INT;
} else if (strncmp(value, "${uint:", 7) == 0 &&
value[value_len-1] == '}') {
field->variable = p_strndup(ctx->pool, value + 7,
const char **error_r)
{
buffer_t *buf;
+ int64_t snum;
uint64_t num;
switch (value_type) {
str_printfa(str, "'%s%s'", sql_escape_string(dict->db, value),
value_suffix);
return 0;
+ case DICT_SQL_TYPE_INT:
+ if (value_suffix[0] != '\0' || str_to_int64(value, &snum) < 0) {
+ *error_r = t_strdup_printf(
+ "%s field's value isn't 64bit signed integer: %s%s (in pattern: %s)",
+ field_name, value, value_suffix, map->pattern);
+ return -1;
+ }
+ str_printfa(str, "%"PRId64, snum);
+ return 0;
case DICT_SQL_TYPE_UINT:
if (value_suffix[0] != '\0' || str_to_uint64(value, &num) < 0) {
*error_r = t_strdup_printf(
switch (type) {
case DICT_SQL_TYPE_STRING:
+ case DICT_SQL_TYPE_INT:
case DICT_SQL_TYPE_UINT:
return p_strdup(pool, sql_result_get_field_value(result, result_idx));
case DICT_SQL_TYPE_HEXBLOB: