code: public Void executeDDL(List<String> inputSql) throws SQLException {
      if (!getAutoCommit())
        commit();
      // Check for IF [NOT] EXISTS statements
      List<String> sql = getActualSql(inputSql);
      if (!sql.isEmpty()) {
        try {
          Operation<Void, UpdateDatabaseDdlMetadata> operation =
              adminClient.updateDatabaseDdl(database.instance, database.database, sql, null);
          if (asyncDdlOperations) {
            operations.addOperation(sql, operation);
          } else {
            do {
              operation = operation.waitFor();
            } while (!operation.isDone());
          }
          return operation.getResult();
        } catch (SpannerException e) {
          throw new CloudSpannerSQLException("Could not execute DDL statement(s) "
              + String.join("\n;\n", sql) + ": " + e.getMessage(), e);
        }
      }
      return null;
    }
docs: Execute one or more DDL-statements on the database and wait for it to finish or return after
  syntax check (when running in async mode). Calling this method will also automatically commit
  the currently running transaction.
  
  @param inputSql The DDL-statement(s) to execute. Some statements may end up not being sent to
  Cloud Spanner if they contain IF [NOT] EXISTS clauses. The driver will check whether the
  condition is met, and only then will it be sent to Cloud Spanner.
  @return Nothing
  @throws SQLException If an error occurs during the execution of the statement.