code: public static AdHocSQLMix processAdHocSQLStmtTypes(String sql, List<String> validatedHomogeonousSQL) {
          assert(validatedHomogeonousSQL != null);
          assert(validatedHomogeonousSQL.size() == 0);
  
          List<String> sqlStatements = SQLLexer.splitStatements(sql).getCompletelyParsedStmts();
  
          // do initial naive scan of statements for DDL, forbid mixed DDL and (DML|DQL)
          Boolean hasDDL = null;
  
          for (String stmt : sqlStatements) {
              // Simulate an unhandled exception? (ENG-7653)
              if (DEBUG_MODE.isTrue() && stmt.equals(DEBUG_EXCEPTION_DDL)) {
                  throw new IndexOutOfBoundsException(DEBUG_EXCEPTION_DDL);
              }
  
              String ddlToken = SQLLexer.extractDDLToken(stmt);
  
              if (hasDDL == null) {
                  hasDDL = (ddlToken != null) ? true : false;
              }
              else if ((hasDDL && ddlToken == null) || (!hasDDL && ddlToken != null)) {
                  return AdHocSQLMix.MIXED;
              }
  
              validatedHomogeonousSQL.add(stmt);
          }
  
          if (validatedHomogeonousSQL.isEmpty()) {
              return AdHocSQLMix.EMPTY;
          }
          assert(hasDDL != null);
          return hasDDL ? AdHocSQLMix.ALL_DDL : AdHocSQLMix.ALL_DML_OR_DQL;
      }
docs: Split a set of one or more semi-colon delimited sql statements into a list.
  Store the list in validatedHomogeonousSQL.
  Return whether the SQL is empty, all dml or dql, all ddl, or an invalid mix (AdHocSQLMix)
  
  Used by the NT adhoc procs, but also by the experimental in-proc adhoc.