code: def test_sql_ddl(self):
      self.t_env.execute_sql(
          "create temporary function func1 as "
          "'pyflink.table.tests.test_udf.add' language python"
      )
      table = (
          self.t_env.from_elements([(1, 2)])
          .alias("a", "b")
          .select(expr.call("func1", expr.col("a"), expr.col("b")))
      )
      plan = table.explain()
      self.assertGreaterEqual(
          plan.find("== Optimized Physical Plan =="), 0
      )
      self.assertGreaterEqual(
          plan.find("PythonCalc(select=[func1(f0, f1) AS _c0])"), 0
      )
  
      plan = table.explain(ExplainDetail.PLAN_ADVICE)
      self.assertGreaterEqual(
          plan.find("== Optimized Physical Plan With Advice =="), 0
      )
      self.assertGreaterEqual(plan.find("No available advice..."), 0)
  
file_path: flink/flink-python/pyflink/table/tests/test_sql.py
imports: import glob
  import os
  import subprocess
  from pyflink.find_flink_home import _find_flink_source_root
  from pyflink.java_gateway import get_gateway
  from pyflink.table import ResultKind, ExplainDetail
  from pyflink.table import expressions
  from pyflink.testing import source_sink_utils
  from pyflink.testing.test_case_utils import PyFlinkStreamTableTestCase, PyFlinkTestCase
label_desc: Use image node_id 1 for calling the StreamSqlTests obj's underlying member method code with example usage: obj.test_sql_ddl() without return types