Skip to content

Merge | Align BitConverter/BinaryPrimitives usage netfx/netcore - #2963

Merged
benrr101 merged 1 commit into
dotnet:mainfrom
MichelZ:merge-tdsparser-bitconverter-binaryprimitives
Nov 25, 2024
Merged

Merge | Align BitConverter/BinaryPrimitives usage netfx/netcore#2963
benrr101 merged 1 commit into
dotnet:mainfrom
MichelZ:merge-tdsparser-bitconverter-binaryprimitives

Conversation

@MichelZ

Copy link
Copy Markdown
Contributor

This uses System.Buffers.Binary types instead of BitConverter to align netfx with netcore

Part of #2953

@MichelZMichelZ mentioned this pull request Nov 2, 2024

@benrr101benrr101 left a comment

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.

It's worth explicitly calling out that the the behavior of BitConverter and BinaryPrimitives is not the same (BinaryPrimitives require specifying the endianness while BitConverter uses the system's endianness). For netcore, it makes sense to specify little-endian conversion since netcore can be expected to run on big-endian systems. For netfx, it made sense to use the system endianness since it wasn't expected that netfx would run on big-endian systems (though I'm not sure how accurate that expectation is). Thus, bringing the netcore implementation to the netfx codebase should be safe.

@benrr101benrr101 added the Common Project 🚮 Things that relate to the common project project label Nov 4, 2024
@benrr101

Copy link
Copy Markdown
Contributor

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@MichelZ

Copy link
Copy Markdown
ContributorAuthor

Grrr AZD

@MichelZ
MichelZforce-pushed the merge-tdsparser-bitconverter-binaryprimitives branch from 590cd5f to a2a39e4CompareNovember 6, 2024 20:13
@codecov

codecovBot commented Nov 6, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 33.33333% with 2 lines in your changes missing coverage. Please review.

Project coverage is 72.44%. Comparing base (9d5ca32) to head (a2a39e4).
Report is 51 commits behind head on main.

Files with missing linesPatch %Lines
...nt/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs33.33%2 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #2963 +/- ##
==========================================
+ Coverage 72.31% 72.44% +0.12% 
==========================================
Files 288 288 Lines 59660 59529 -131 ==========================================
- Hits 43145 43125 -20 + Misses 16515 16404 -111 
FlagCoverage Δ
addons92.58% <ø> (ø)
netcore75.36% <ø> (-0.07%)⬇️
netfx70.92% <33.33%> (+0.23%)⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@MichelZ

Copy link
Copy Markdown
ContributorAuthor

Anything I can do to move this along?

@MichelZMichelZ changed the title Align BitConverter/BinaryPrimitives usage netfx/netcoreMerge | Align BitConverter/BinaryPrimitives usage netfx/netcoreNov 24, 2024
@mdaigle

mdaigle commented Nov 25, 2024

Copy link
Copy Markdown
Contributor

It's worth explicitly calling out that the the behavior of BitConverter and BinaryPrimitives is not the same (BinaryPrimitives require specifying the endianness while BitConverter uses the system's endianness). For netcore, it makes sense to specify little-endian conversion since netcore can be expected to run on big-endian systems. For netfx, it made sense to use the system endianness since it wasn't expected that netfx would run on big-endian systems (though I'm not sure how accurate that expectation is). Thus, bringing the netcore implementation to the netfx codebase should be safe.

In fact, all integer values in TDS should be represented in little endian unless it's specifically mentioned that they should be big endian. The only fields with special treatment are:

  • VERSION in PL_OPTION_TOKEN
  • PL_OFFSET and PL_OPTION_LENGTH in PRELOGIN
  • SPID and Length in the packet header

It looks like we only touch the fed auth options packet and row level data field parsing in this PR, so little endian should be correct.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Common Project 🚮Things that relate to the common project project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@MichelZ@benrr101@mdaigle@ErikEJ@cheenamalhotra