

def _substring(translator, expr):
    op = expr.op()
    (arg, start, length) = op.args
    arg_formatted = translator.translate(arg)
    start_formatted = translator.translate(start)
    if ((length is None) or isinstance(length.op(), ir.Literal)):
        lvalue = (length.op().value if length else None)
        if lvalue:
            return 'substr({0}, {1} + 1, {2})'.format(arg_formatted, start_formatted, lvalue)
        else:
            return 'substr({0}, {1} + 1)'.format(arg_formatted, start_formatted)
    else:
        length_formatted = translator.translate(length)
        return 'substr({0}, {1} + 1, {2})'.format(arg_formatted, start_formatted, length_formatted)

dataset/ETHPy150Open cloudera/ibis/ibis/impala/compiler.py _substring/original