Unless I am mistaken, this implements the same functionality as the pipemap table. It queries tables in sequence, not in parallel.
Wietse +static const char *dict_join_lookup(DICT *dict, const char *query) +{ + const char myname[] = "dict_join_lookup"; + DICT_JOIN *dict_join = (DICT_JOIN *) dict; + DICT *map; + char **cpp; + char *dict_type_name; + const char *result = 0; + + vstring_strcpy(dict_join->qr_buf, query); + for (cpp = dict_join->map_join->argv; (dict_type_name = *cpp) != 0; cpp++) { + if ((map = dict_handle(dict_type_name)) == 0) + msg_panic("%s: dictionary \"%s\" not found", myname, dict_type_name); + if ((result = dict_get(map, STR(dict_join->qr_buf))) == 0) + DICT_ERR_VAL_RETURN(dict, map->error, result); + vstring_strcpy(dict_join->qr_buf, result); + } + DICT_ERR_VAL_RETURN(dict, DICT_ERR_NONE, STR(dict_join->qr_buf)); +}