@@ -0,0 +1,3163 @@
+package sqlancer.databend.ast;%0A%0Aimport sqlancer.Randomly;%0Aimport sqlancer.common.ast.BinaryOperatorNode;%0Aimport sqlancer.common.ast.newast.NewBinaryOperatorNode;%0Aimport sqlancer.common.ast.newast.Node;%0A%0Apublic class DatabendBinaryLogicalOperation extends NewBinaryOperatorNode%3CDatabendExpression%3E %7B%0A%0A    public DatabendBinaryLogicalOperation(Node%3CDatabendExpression%3E left, Node%3CDatabendExpression%3E right,%0A                                          DatabendBinaryLogicalOperator op) %7B%0A        super(left,right,op);%0A    %7D%0A%0A    public enum DatabendBinaryLogicalOperator implements BinaryOperatorNode.Operator %7B%0A        AND(%22AND%22, %22and%22) %7B%0A//            @Override%0A//            public DatabendNoRECConstant apply(DatabendNoRECConstant left, DatabendNoRECConstant right) %7B%0A//                if (left.isNull() && right.isNull()) %7B%0A//                    return DatabendNoRECConstant.createNullConstant();%0A//                %7D else if (left.isNull()) %7B%0A//                    if (right.asBooleanNotNull()) %7B%0A//                        return DatabendNoRECConstant.createNullConstant();%0A//                    %7D else %7B%0A//                        return DatabendNoRECConstant.createFalse();%0A//                    %7D%0A//                %7D else if (right.isNull()) %7B%0A//                    if (left.asBooleanNotNull()) %7B%0A//                        return DatabendNoRECConstant.createNullConstant();%0A//                    %7D else %7B%0A//                        return DatabendNoRECConstant.createFalse();%0A//                    %7D%0A//                %7D else %7B%0A//                    return left.asBooleanNotNull() && right.asBooleanNotNull() ? DatabendNoRECConstant.createTrue()%0A//                            : DatabendNoRECConstant.createFalse();%0A//                %7D%0A//            %7D%0A        %7D,%0A        OR(%22OR%22, %22or%22) %7B%0A//            @Override%0A//            public ClickHouseConstant apply(ClickHouseConstant left, ClickHouseConstant right) %7B%0A//                if (!left.isNull() && left.asBooleanNotNull()) %7B%0A//                    return ClickHouseConstant.createTrue();%0A//                %7D else if (!right.isNull() && right.asBooleanNotNull()) %7B%0A//                    return ClickHouseConstant.createTrue();%0A//                %7D else if (left.isNull() %7C%7C right.isNull()) %7B%0A//                    return ClickHouseConstant.createNullConstant();%0A//                %7D else %7B%0A//                    return ClickHouseConstant.createFalse();%0A//                %7D%0A//            %7D%0A        %7D;%0A%0A        private final String%5B%5D textRepresentations;%0A%0A        DatabendBinaryLogicalOperator(String... textRepresentations) %7B%0A            this.textRepresentations = textRepresentations.clone();%0A        %7D%0A%0A        @Override%0A        public String getTextRepresentation() %7B%0A            return Randomly.fromOptions(textRepresentations);%0A        %7D%0A%0A        public DatabendBinaryLogicalOperator getRandomOp() %7B%0A            return Randomly.fromOptions(values());%0A        %7D%0A%0A//        public abstract DatabendNoRECConstant apply(DatabendNoRECConstant left, DatabendNoRECConstant right);%0A%0A        public static DatabendBinaryLogicalOperator getRandom() %7B%0A            return Randomly.fromOptions(values());%0A        %7D%0A    %7D%0A%0A%7D%0A

implement the binary logical operation