code: public void findUnsafeOperatorsForDDL(UnsafeOperatorsForDDL ops) {
          if ( ! m_type.isSafeForDDL()) {
              ops.add(m_type.symbol());
          }
          if (m_left != null) {
              m_left.findUnsafeOperatorsForDDL(ops);
          }
          if (m_right != null) {
              m_right.findUnsafeOperatorsForDDL(ops);
          }
          if (m_args != null) {
              for (AbstractExpression arg : m_args) {
                  arg.findUnsafeOperatorsForDDL(ops);
              }
          }
      }
docs: Returns true iff this expression is allowable when creating
  materialized views on nonempty tables.  We have marked all
  the ExpressionType enumerals and all the function id integers
  which are safe.  These are marked statically.  So we just
  recurse through the tree, looking at operation types and
  function types until we find something we don't like.  If
  we get all the way through the search we are happy, and
  return true.