public override object Clone()
        {
            SQLiteExpression left = null;

            if (_left != null)
            {
                left = (SQLiteExpression)_left.Clone();
            }
            SQLiteExpression right = null;

            if (_right != null)
            {
                right = (SQLiteExpression)_right.Clone();
            }
            SQLiteExpression and = null;

            if (_and != null)
            {
                and = (SQLiteExpression)_and.Clone();
            }

            SQLiteBetweenExpression res = new SQLiteBetweenExpression();

            res._and     = and;
            res._between = _between;
            res._left    = left;
            res._right   = right;
            return(res);
        }
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            SQLiteBetweenExpression dst = obj as SQLiteBetweenExpression;

            if (dst == null)
            {
                return(false);
            }

            if (this._between != dst._between)
            {
                return(false);
            }

            if (!RefCompare.CompareMany(_left, dst._left, _right, dst._right, _and, dst._and))
            {
                return(false);
            }

            return(base.Equals(obj));
        }