code: def parse(self, ddl=None, source_database=None):
          
  
          if ddl is not None:
              self._ddl = ddl
  
          if source_database is not None:
              self.source_database = source_database
  
          if self._ddl is None:
              raise ValueError("DDL is not specified")
  
          ret = self._DDL_PARSE_EXPR.parseString(self._ddl)
          # print(ret.dump())
  
          if "schema" in ret:
              self._table.schema = ret["schema"]
  
          self._table.name = ret["table"]
          self._table.is_temp = True if "temp" in ret else False
  
          for ret_col in ret["columns"]:
  
              if ret_col.getName() == "column":
                  # add column
                  col = self._table.columns.append(
                      column_name=ret_col["name"],
                      data_type_array=ret_col["type"],
                      array_brackets=ret_col['array_brackets'] if "array_brackets" in ret_col else None)
  
                  if "constraint" in ret_col:
                      col.constraint = ret_col["constraint"]
  
              elif ret_col.getName() == "constraint":
                  # set column constraint
                  for col_name in ret_col["constraint_columns"]:
                      col = self._table.columns[col_name]
  
                      if ret_col["type"] == "PRIMARY KEY":
                          col.not_null = True
                          col.primary_key = True
                      elif ret_col["type"] in ["UNIQUE", "UNIQUE KEY"]:
                          col.unique = True
                      elif ret_col["type"] == "NOT NULL":
                          col.not_null = True
  
          return self._table
docs: Parse DDL script.
  
          :param ddl: DDL script
          :return: DdlParseTable, Parsed table define info.