Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 86 additions & 2 deletions contributing-workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ We use and recommend the following workflow:
### Commit Guidelines

- It is OK for your PR to include a large number of commits.
- Once your change is accepted, you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged.
- PRs are merged via the default "Squash and Merge" strategy (see [Merging Pull Requests](#merging-pull-requests)), so your commit history is automatically collapsed into a single commit at merge time.
- If the PR is planned NOT to follow the default squash-and-merge path (for example, when the author requests "Merge and Commit" to preserve a meaningful commit series), you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged.

## PR - CI Process

Expand All @@ -63,13 +64,95 @@ If the CI build fails for any reason, the PR issue will be updated with a link t

- **Build failures**: Check the CI logs for specific error messages.
- **Test failures**: Ensure all tests pass locally before pushing.
- **Merge conflicts**: Rebase your branch against the latest main branch.
- **Merge conflicts**:
- *Before review has started*: Rebase your branch against the latest `main` branch to keep history clean.
- *After a reviewer has started reviewing*: Do **not** rebase. Rebasing rewrites commit history and makes it impossible for reviewers to tell which commits they have already reviewed, forcing them to start over. Instead, resolve conflicts by merging the latest `main` into your branch (`git merge main`) so that previously reviewed commits remain intact and reviewers can pick up where they left off.
Comment thread
paulmedynski marked this conversation as resolved.

### Getting Help

- Comment on your PR if you're stuck.
- Reach out in [GitHub Discussions](https://github.com/dotnet/SqlClient/discussions) for broader questions.

## Tracking PRs in the GitHub Project

The [SqlClient Board](https://github.com/orgs/dotnet/projects/588) (dotnet org project #588) is the team's triage board for tracking issues and PRs. When a PR is linked to an issue, its progress is tracked through the project's fields described below.

### Project Fields

| Field | Type | Values | Purpose |
|-------|------|--------|---------|
| **Status** | Single select | `To triage`, `Waiting for customer`, `In progress`, `In review`, `In validation`, `Done` | Tracks the current workflow stage of the item |
| **Priority** | Single select | `P0`, `P1`, `P2`, `P3` | Indicates urgency and scheduling priority |
| **Size** | Single select | `XS`, `S`, `M`, `L`, `XL` | Estimates effort/complexity of the work |
| **API Impact** | Single select | `Breaking Change`, `New API`, `None` | Flags whether the change affects public API surface |
| **PM Approved** | Single select | `N/A`, `Pending`, `Approved` | Tracks product manager sign-off for API or behavioral changes |
| **Assignees** | Field | *(GitHub users)* | Who is responsible for the work |
| **Labels** | Field | *(GitHub labels)* | Categorization and area tags |
| **Reviewers** | Field | *(GitHub users)* | Assigned code reviewers |
| **Milestone** | Field | *(GitHub milestones)* | Target release version |
| **Linked pull requests** | Field | *(PR references)* | PRs associated with the issue |
| **Parent issue** | Field | *(issue reference)* | Epic or parent tracking issue |
| **Sub-issues progress** | Field | *(auto-calculated)* | Completion progress of child issues |
| **Comment** | Text | *(free text)* | Additional context or notes |
| **AB-Link** | Text | *(URL)* | Link to Azure Boards work item (if applicable) |

### Status Stages for PRs

PRs (and their linked issues) move through the **Status** field to communicate reviewability and progress:

| Status | What it means for a PR |
|--------|------------------------|
| **To triage** | PR just opened or linked issue is awaiting initial assessment. Maintainers will review scope, assign reviewers, and set priority. |
| **In progress** | Author is actively developing the change. PR may be in Draft state. |
| **In review** | PR is ready for code review. Reviewers are assigned and the author considers the implementation complete. |
| **Waiting for customer** | Review feedback has been given; the PR author needs to respond or push changes. When a reviewer requests changes, they will also apply the **`Author attention needed`** label so the PR is easy to surface in queries and dashboards. Once the author addresses the feedback, they should remove the `Author attention needed` label and move the PR back to `In review`. |
Comment thread
cheenamalhotra marked this conversation as resolved.
Comment thread
paulmedynski marked this conversation as resolved.
| **In validation** | PR is approved and being validated (CI, manual testing, integration checks) before merge. |
| **Done** | PR has been merged and the associated work is complete. |

### Status Transitions

When a reviewer leaves feedback that needs author action, they move the PR to `Waiting for customer` **and** apply the `Author Attention Needed` label. The author removes the label (and updates Status back to `In review`/`In progress`) once the feedback is addressed.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At one point I think there was a view that only reviewers should resolve their own feedback comments, is that still the case?


```
┌────────────┐ ┌─────────────┐ ┌───────────────────────┐ ┌───────────────┐ ┌──────┐
│ To triage │──────▶│ In progress │──────▶│ In review │──────▶│ In validation │──────▶│ Done │
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this render properly?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Appears fine to me! Can you paste your screenshot if you see an issue?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

I see slight mis-rendering of the boxes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ▶ is not the same width as original ASCII characters (<128). It's wider than a space, so it messes up the alignment with the other lines.

└────────────┘ └─────────────┘ └───────────┬───────────┘ └───────────────┘ └──────┘
▲ │ ▲
│ │ changes │ author addresses
│ │ requested│ feedback (minor) +
│ │ + label │ removes label
│ ▼ │
│ ┌────────────────────────┐
│ │ Waiting for customer │
│ │ + Author Attention │
│ │ Needed (label) │
│ └────────────────────────┘
│ │
│ │ major rework needed
└────────────────────┘
```

### Additional Field Usage

- **Priority**: `P0` items are critical fixes that should be reviewed and merged urgently. `P1` items are high priority for the current milestone. `P2`/`P3` items are scheduled as capacity allows.
- **Size**: Helps reviewers estimate review effort. `XS`/`S` PRs should get faster turnaround. `L`/`XL` PRs may need multiple reviewers or phased review.
- **API Impact**: PRs marked `Breaking Change` or `New API` require **PM Approved = Approved** before merge. `ref/` project updates must accompany these PRs.
- **PM Approved**: Set to `Pending` when a PR introduces API changes. Must reach `Approved` before the PR can be merged. `N/A` for internal or non-API changes.

### Guidelines for Contributors

1. **Link your PR to an issue** — This ensures the PR appears on the project board and is tracked through the workflow.
2. **Keep Status current** — If you're the author, move your linked issue to `In review` when your PR is ready for feedback.
3. **Respond promptly** — When status is `Waiting for customer` and the **`Author Attention Needed`** label is applied, the team is blocked on your response. Address the feedback, push the updates, **remove the `Author Attention Needed` label**, and move Status back to `In review` (or `In progress` for major rework) so reviewers know the PR is ready for another pass.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've never been able to actually do most of this - the list of labels applied to my PRs have always been read-only, and I can't set field values in the project board. I've assumed that this needs triage access. Do I need to do something differently?

4. **Flag API changes early** — Set **API Impact** appropriately so PM review can happen in parallel with code review.
5. **Don't skip validation** — Even after approval, the PR stays in `In validation` until CI passes and any manual verification is complete.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new PR pipeline should be able to run without maintainer intervention. In that case, can we ask that contributors leave their PRs in Draft until validation passes. We don't want PRs appearing ready for review without passing checks.


### Guidelines for Reviewers

1. **Signal that author action is required** — When your review requests changes (whether via formal "Request changes" or a comment that requires author follow-up), apply the **`Author Attention Needed`** label to the PR and move its linked issue to `Waiting for customer`. This pair (label + status) is what the team uses to find PRs that are blocked on the author versus those still awaiting review.
2. **Don't remove the label yourself** — Leave the `Author Attention Needed` label in place until the author pushes updates addressing the feedback; the author is responsible for removing it when they hand the PR back for review.
3. **Re-review promptly** — Once the author removes the label and Status returns to `In review`, pick the PR back up so it doesn't stall.

## Stale PR Management

The SqlClient repository uses automated workflows to manage inactive pull requests and maintain repository hygiene.
Expand Down Expand Up @@ -111,6 +194,7 @@ One or more Microsoft team members will review every PR prior to merge. They wil
- Address all review comments before the PR can be merged.
- Feel free to ask questions if feedback is unclear.
- Push additional commits to address feedback (these will be squashed later).
- When a reviewer leaves feedback that needs your action, they will set Status to `Waiting for customer` and apply the **`Author Attention Needed`** label. After you push updates, **remove the `Author Attention Needed` label** and move Status back to `In review` so reviewers know the PR is ready for another pass.

## Merging Pull Requests

Expand Down
123 changes: 112 additions & 11 deletions roadmap.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,131 @@
# Microsoft.Data.SqlClient Roadmap
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do you get to this page? Do we need to update the readme too?


The Microsoft.Data.SqlClient roadmap communicates project priorities for evolving and extending the scope of the product. We encourage the community to work with us to improve SqlClient driver for these scenarios and extend it for others.
The Microsoft.Data.SqlClient roadmap communicates project priorities for evolving and extending the scope of the product. We encourage the community to work with us to improve the SqlClient driver for these scenarios and extend it for others.

> **Last updated:** May 2026
>
> This roadmap is a living document. Priorities and timelines may shift based on community feedback, engineering constraints, and business needs. We update this page regularly to reflect the current state of development.

---

## Release Milestones

For active release milestones, their target dates, and the changes included, see [SqlClient milestones](https://github.com/dotnet/SqlClient/milestones).

---

## Current Focus Areas

Our team is actively working on the following high-level themes:

- **Active** — Currently in development
- **Planned** — Committed for a future milestone with estimated delivery
- **Backlog** — On our radar for future months, not yet scheduled

### Performance & Reliability

| Feature | Status | ETA |
|---------|--------|-----|
| Connection pool performance improvements | Active | June 2026 |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these tables include a link to the parent Issue, where one exists?

| Performance benchmarking suite | Active | June 2026 |
| Phase 1 - Unix async performance — thread starvation in parallel `ExecuteReaderAsync` | Active | September 2026 |
| Phase 2 - Async usage analysis and optimization | Planned | — |

### New Data Type Support

| Feature | Status | ETA |
|---------|--------|-----|
| Vector subtype support — `float16` (`Half`) | Active | August 2026 |

### Observability & Diagnostics

| Feature | Status | ETA |
|---------|--------|-----|
| OpenTelemetry support | Planned | — |
| Logging improvements | Planned | — |
| Integrate with / expose MSAL logging | Planned | — |

### API Improvements

| Feature | Status | ETA |
|---------|--------|-----|
| Expose connection encryption information to clients | Planned | September 2026 |
| Throw `TaskCanceledException` instead of `SqlException` for cancellations | Planned | September 2026 |
| `BeginTransactionAsync` API on `SqlConnection` | Planned | — |

### Security & Architecture

| Feature | Status | ETA |
|---------|--------|-----|
| Security hardening activities | Active | Ongoing internally |

### AI & Developer Tooling

| Feature | Status | ETA |
|---------|--------|-----|
| `System.Data.SqlClient` → `Microsoft.Data.SqlClient` migration via Modernize with Copilot | Active | September 2026 |
| Modernize SqlClient repository with AI | Active | Ongoing |

### Engineering & Infrastructure

| Feature | Status | ETA |
|---------|--------|-----|
| CI/CD pipeline redesign | Active | August 2026 |
| Add SQL Server 2025 to test matrix | Planned | August 2026 |
| Add .NET 10 to test matrix | Planned | August 2026 |
| Converting existing traditional pipelines to Yaml | Active | August 2026 |
| Performance benchmarking pipeline (Internal) | Planned | September 2026 |
---

## Released Versions

- [Release Notes](release-notes/README.md) - For detailed release notes summarizing of all changes/features released.
- [GitHub Releases](https://github.com/dotnet/sqlclient/releases) - For downloading NuGet Packages and identifying driver releases with changelog notes.
- [Release Notes](release-notes/README.md) — Detailed release notes summarizing all changes and features released.
- [GitHub Releases](https://github.com/dotnet/sqlclient/releases) — NuGet packages and changelog notes for each release.
Comment thread
cheenamalhotra marked this conversation as resolved.

---

## Community Contributions
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the remaining sections belong elsewhere, maybe in the CONTRBUTING.md file?


We welcome and value community contributions to Microsoft.Data.SqlClient! To ensure we can maintain quality and alignment with our roadmap, please follow these guidelines:

### Submitting Pull Requests

- **New features from community PRs must be driven by creating a GitHub issue first.** Discuss the proposal in the issue before starting implementation. This helps avoid wasted effort and ensures alignment with project goals.
- **Community contributions must not derail the project roadmap.** We prioritize features and fixes according to our published milestones. PRs that conflict with or distract from active roadmap items may be deferred.
- **Our maintainers reserve the right to reject PRs** that do not meet the required criteria to qualify for review. This includes PRs that:
- Lack a corresponding approved issue
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the approved issue the one which is meant to be approved in the Github Project?

- Introduce breaking changes without prior discussion
- Do not follow the project's coding standards and conventions
- Are missing adequate test coverage
- Conflict with work already in progress by the team
- **Bug fixes and small improvements** are generally welcome without a prior issue, but a linked issue helps us triage and prioritize your contribution.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we still have the requirement to open an issue to explain the intention of a change, instead of direct PRs?

Since reviews require time, and intentions specified in the issue would greatly help. Such a practice would allow for contributions to be reviewed effectively and efficiently and reduce cognitive overload on the reviewer. mssql-python has made this a mandatory requirement in their workflows. Something to consider.


### What Makes a Great Contribution

1. **Start with an issue** — File a [feature request](https://github.com/dotnet/SqlClient/issues/new?template=feature_request.md) or [bug report](https://github.com/dotnet/SqlClient/issues/new?template=bug-report.md) and wait for maintainer feedback
2. **Follow the conventions** — See [CONTRIBUTING.md](CONTRIBUTING.md) and [coding guidelines](policy/coding-style.md)
3. **Include tests** — Both unit tests and integration tests where applicable
4. **Keep scope focused** — One feature or fix per PR
5. **Update documentation** — For any public API changes

## Upcoming Ship Dates
### Contribution Workflow

For upcoming release dates, see [SqlClient milestones](https://github.com/dotnet/SqlClient/milestones).
See [contributing-workflow.md](contributing-workflow.md) for details on how PRs are tracked through our review process.

[SqlClient Projects](https://github.com/dotnet/SqlClient/projects) are used by our development team to define roadmap of prioritized work. SqlClient Boards contain issues, pull requests, and other features, development activities that are categorized as cards. Our goal is to be transparent over priorities, work in progress and deliverables.
---

## Feedback

The best way to give feedback is to create issues in the [dotnet/sqlclient](https://github.com/dotnet/sqlclient) repo.
The best way to give feedback is to create issues in the [dotnet/SqlClient](https://github.com/dotnet/SqlClient) repo.

Although mostly obvious, please give us feedback that will give us insight on the following points:
Please give us feedback that will provide insight on the following:

- Existing features are missing some capability or otherwise don't work well enough.
- Existing features that are missing some capability or otherwise don't work well enough.
- Missing features that should be added to the product.
- Design choices for a feature that is currently in-progress.

Some important caveats / notes:
Some important caveats:

- It is best to give design feedback quickly for improvements that are in-development. We're unlikely to hold a feature being part of a release on late feedback.
- It is best to give design feedback quickly for improvements that are in development. We're unlikely to hold a feature from a release on late feedback.
- We are most likely to include improvements that either have a positive impact on a broad scenario or have very significant positive impact on a niche scenario. This means that we are unlikely to prioritize modest improvements to niche scenarios.
- Compatibility will almost always be given a higher priority than improvements.
Loading