def _distill_params(multiparams, params):
    """Given arguments from the calling form *multiparams, **params,
    return a list of bind parameter structures, usually a list of
    dictionaries.

    In the case of 'raw' execution which accepts positional parameters,
    it may be a list of tuples or lists.

    """
    if not multiparams:
        if params:
            return [params]
        else:
            return []
    elif len(multiparams) == 1:
        zero = multiparams[0]
        if isinstance(zero, (list, tuple)):
            if not zero or hasattr(zero[0], '__iter__') and not hasattr(zero
                [0], 'strip'):
                return zero
            else:
                return [zero]
        elif hasattr(zero, 'keys'):
            return [zero]
        else:
            return [[zero]]
    elif hasattr(multiparams[0], '__iter__') and not hasattr(multiparams[0],
        'strip'):
        return multiparams
    else:
        return [multiparams]
