3.7.0-rc 3.6.0 (latest) 3.5.0 3.4.0 3.3.0 3.2.0 2.48.0-rc 2.47.1 2.46.0 2.45.0 2.44.0 2.43.0 2.42.0 2.41.0 2.40.0 2.39.0 2.38.0 2.37.0 2.36.0 2.35.0 2.34.0 2.33.0 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.0 2.26.0 2.25.1 2.24.0 2.23.0 2.22.1 2.21.0 2.20.0 2.19.0 2.18.0 2.17.0 2.16.0 2.15.1 2.14.0 2.13.0 2.12.0 2.11.0 Represents the result and profile stats of a data modifying operation using [`spanner::Client::ProfileDml()`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Client#classgoogle_1_1cloud_1_1spanner_1_1Client_1a5628f7c60f46d6d49408245cd9fe8fc1).
This class encapsulates the result of a Cloud Spanner DML operation, i.e., `INSERT`, `UPDATE`, or `DELETE`.

> [!NOTE]
> **Note:** [`ProfileDmlResult`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1ProfileDmlResult) returns the number of rows modified, execution statistics, and query plan.

###### Example:

      spanner::ProfileDmlResult dml_result;
      auto commit_result = client.Commit(
          [&client,
           &dml_result](spanner::Transaction txn) -> StatusOr<spanner::Mutations> {
            auto update = client.ProfileDml(
                std::move(txn),
                spanner::SqlStatement(
                    "UPDATE Albums SET MarketingBudget = MarketingBudget * 2"
                    "  WHERE SingerId = 1 AND AlbumId = 1"));
            if (!update) return std::move(update).status();
            dml_result = *std::move(update);
            return spanner::Mutations{};
          });
      if (!commit_result) throw std::move(commit_result).status();

      // Stats only available after statement has been executed.
      std::cout << "Rows modified: " << dml_result.RowsModified();
      auto execution_stats = dml_result.ExecutionStats();
      if (execution_stats) {
        for (auto const& stat : *execution_stats) {
          std::cout << stat.first << ":\t" << stat.second << "\n";
        }
      }

## Constructors

### ProfileDmlResult()

### ProfileDmlResult(std::unique_ptr\< ResultSourceInterface \>)

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `source` | `std::unique_ptr< ResultSourceInterface >` |

### ProfileDmlResult(ProfileDmlResult \&\&)

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `ProfileDmlResult &&` |

## Operators

### operator=(ProfileDmlResult \&\&)

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `ProfileDmlResult &&` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `ProfileDmlResult &` |   |

## Functions

### RowsModified() const

Returns the number of rows modified by the DML statement.

> [!NOTE]
> **Note:** Partitioned DML only provides a lower bound of the rows modified, all other DML statements provide an exact count.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `std::int64_t` |   |

### ExecutionStats() const

Returns a collection of key value pair statistics for the SQL statement execution.

> [!NOTE]
> **Note:** Only available when the SQL statement is executed.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `std::optional< std::unordered_map< std::string, std::string > >` |   |

### ExecutionPlan() const

Returns the plan of execution for the SQL statement.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `std::optional< spanner::ExecutionPlan >` |   |