*type_r = DICT_SQL_TYPE_INT;
else if (strcmp(value_type, "uint") == 0)
*type_r = DICT_SQL_TYPE_UINT;
+ else if (strcmp(value_type, "double") == 0)
+ *type_r = DICT_SQL_TYPE_DOUBLE;
else
return FALSE;
return TRUE;
field->variable = p_strndup(ctx->pool, value + 7,
value_len-7-1);
field->sql_field.value_type = DICT_SQL_TYPE_UINT;
+ } else if (str_begins(value, "${double:") &&
+ value[value_len-1] == '}') {
+ field->variable = p_strndup(ctx->pool, value + 9,
+ value_len-9-1);
+ field->sql_field.value_type = DICT_SQL_TYPE_DOUBLE;
} else {
field->variable = p_strdup(ctx->pool, value + 1);
}
const char *value_str;
int64_t value_int64;
+ double value_double;
const void *value_binary;
size_t value_binary_size;
};
case DICT_SQL_TYPE_UINT:
sql_statement_bind_int64(stmt, column_idx, param->value_int64);
break;
+ case DICT_SQL_TYPE_DOUBLE:
+ sql_statement_bind_double(stmt, column_idx, param->value_double);
+ break;
case DICT_SQL_TYPE_HEXBLOB:
sql_statement_bind_binary(stmt, column_idx, param->value_binary,
param->value_binary_size);
return -1;
}
return 0;
+ case DICT_SQL_TYPE_DOUBLE:
+ if (value_suffix[0] != '\0' ||
+ str_to_double(value, ¶m->value_double) < 0) {
+ *error_r = t_strdup_printf(
+ "%s field's value isn't a double: %s%s (in pattern: %s)",
+ field_name, value, value_suffix, map->pattern);
+ return -1;
+ }
+ return 0;
case DICT_SQL_TYPE_HEXBLOB:
break;
}
case DICT_SQL_TYPE_STRING:
case DICT_SQL_TYPE_INT:
case DICT_SQL_TYPE_UINT:
+ case DICT_SQL_TYPE_DOUBLE:
value = sql_result_get_field_value(result, result_idx);
return value == NULL ? "" : p_strdup(pool, value);
case DICT_SQL_TYPE_HEXBLOB: