(self, predicate, rel_idx)
return attr, op, const
relax_binary_predicate returns the attribute, operation, and
        tuple attribute reference.

        :return: (attr, op, const), for example:
            ("StateAvg", "<>", 't1."StateAvg"')
relax_binary_predicate returns the attribute, operation, and
        tuple attribute reference.
relax_binary_predicate returns the attribute operation and tuple attribute reference .
def relax_binary_predicate(self, predicate, rel_idx):
        """
        relax_binary_predicate returns the attribute, operation, and
        tuple attribute reference.

        :return: (attr, op, const), for example:
            ("StateAvg", "<>", 't1."StateAvg"')
        """
        attr = predicate.components[rel_idx][1]
        op = predicate.operation
        # the latter one should flip the operation,
        # if t3.rv_val is always on the left side in query template
        if rel_idx == 1:
            op = get_flip_operation(op)
        const = '{}."{}"'.format(
                predicate.components[1-rel_idx][0],
                predicate.components[1-rel_idx][1])

        return attr, op, const
def relax_binary_predicate ( self , predicate , rel_idx ) : attr = predicate . components [ rel_idx ] [ 1 ] op = predicate . operation # the latter one should flip the operation, # if t3.rv_val is always on the left side in query template if rel_idx == 1 : op = get_flip_operation ( op ) const = '{}."{}"' . format ( predicate . components [ 1 - rel_idx ] [ 0 ] , predicate . components [ 1 - rel_idx ] [ 1 ] ) return attr , op , const