From 2e5bf4914fb848f0fc3b850af95773f0047adf7b Mon Sep 17 00:00:00 2001 From: Wraith2 Date: Sat, 31 Jul 2021 21:40:13 +0100 Subject: [PATCH 1/2] use manual masking on state flags to avoid boxing --- .../Data/SqlClient/TdsParserStateObject.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs index 43913dcf0c..ee369ac0ac 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs @@ -1199,31 +1199,31 @@ private void SetSnapshottedState(SnapshottedStateFlags flag, bool value) internal bool HasOpenResult { - get => _snapshottedState.HasFlag(SnapshottedStateFlags.OpenResult); + get => (_snapshottedState & SnapshottedStateFlags.OpenResult) == SnapshottedStateFlags.OpenResult; set => SetSnapshottedState(SnapshottedStateFlags.OpenResult, value); } internal bool HasPendingData { - get => _snapshottedState.HasFlag(SnapshottedStateFlags.PendingData); + get => (_snapshottedState & SnapshottedStateFlags.PendingData) == SnapshottedStateFlags.PendingData; set => SetSnapshottedState(SnapshottedStateFlags.PendingData, value); } internal bool HasReceivedError { - get => _snapshottedState.HasFlag(SnapshottedStateFlags.ErrorTokenReceived); + get => (_snapshottedState & SnapshottedStateFlags.ErrorTokenReceived) == SnapshottedStateFlags.ErrorTokenReceived; set => SetSnapshottedState(SnapshottedStateFlags.ErrorTokenReceived, value); } internal bool HasReceivedAttention { - get => _snapshottedState.HasFlag(SnapshottedStateFlags.AttentionReceived); + get => (_snapshottedState & SnapshottedStateFlags.AttentionReceived) == SnapshottedStateFlags.AttentionReceived; set => SetSnapshottedState(SnapshottedStateFlags.AttentionReceived, value); } internal bool HasReceivedColumnMetadata { - get => _snapshottedState.HasFlag(SnapshottedStateFlags.ColMetaDataReceived); + get => (_snapshottedState & SnapshottedStateFlags.ColMetaDataReceived) == SnapshottedStateFlags.ColMetaDataReceived; set => SetSnapshottedState(SnapshottedStateFlags.ColMetaDataReceived, value); } @@ -4289,11 +4289,11 @@ internal void ResetSnapshotState() _stateObj._cleanupAltMetaDataSetArray = _snapshotCleanupAltMetaDataSetArray; // Make sure to go through the appropriate increment/decrement methods if changing the OpenResult flag - if (!_stateObj.HasOpenResult && _state.HasFlag(SnapshottedStateFlags.OpenResult)) + if (!_stateObj.HasOpenResult && ((_state & SnapshottedStateFlags.OpenResult) == SnapshottedStateFlags.OpenResult)) { _stateObj.IncrementAndObtainOpenResultCount(_stateObj._executedUnderTransaction); } - else if (_stateObj.HasOpenResult && !_state.HasFlag(SnapshottedStateFlags.OpenResult)) + else if (_stateObj.HasOpenResult && ((_state & SnapshottedStateFlags.OpenResult) != SnapshottedStateFlags.OpenResult)) { _stateObj.DecrementOpenResultCount(); } From 420d37b4eed6be87437932ff7b45d722a956964b Mon Sep 17 00:00:00 2001 From: Wraith2 Date: Wed, 19 Jan 2022 21:04:00 +0000 Subject: [PATCH 2/2] add and use GetSnapshottedState function --- .../Data/SqlClient/TdsParserStateObject.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs index ee369ac0ac..03f667c112 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs @@ -1197,33 +1197,38 @@ private void SetSnapshottedState(SnapshottedStateFlags flag, bool value) } } + private bool GetSnapshottedState(SnapshottedStateFlags flag) + { + return (_snapshottedState & flag) == flag; + } + internal bool HasOpenResult { - get => (_snapshottedState & SnapshottedStateFlags.OpenResult) == SnapshottedStateFlags.OpenResult; + get => GetSnapshottedState(SnapshottedStateFlags.OpenResult); set => SetSnapshottedState(SnapshottedStateFlags.OpenResult, value); } internal bool HasPendingData { - get => (_snapshottedState & SnapshottedStateFlags.PendingData) == SnapshottedStateFlags.PendingData; + get => GetSnapshottedState(SnapshottedStateFlags.PendingData); set => SetSnapshottedState(SnapshottedStateFlags.PendingData, value); } internal bool HasReceivedError { - get => (_snapshottedState & SnapshottedStateFlags.ErrorTokenReceived) == SnapshottedStateFlags.ErrorTokenReceived; + get => GetSnapshottedState(SnapshottedStateFlags.ErrorTokenReceived); set => SetSnapshottedState(SnapshottedStateFlags.ErrorTokenReceived, value); } internal bool HasReceivedAttention { - get => (_snapshottedState & SnapshottedStateFlags.AttentionReceived) == SnapshottedStateFlags.AttentionReceived; + get => GetSnapshottedState(SnapshottedStateFlags.AttentionReceived); set => SetSnapshottedState(SnapshottedStateFlags.AttentionReceived, value); } internal bool HasReceivedColumnMetadata { - get => (_snapshottedState & SnapshottedStateFlags.ColMetaDataReceived) == SnapshottedStateFlags.ColMetaDataReceived; + get => GetSnapshottedState(SnapshottedStateFlags.ColMetaDataReceived); set => SetSnapshottedState(SnapshottedStateFlags.ColMetaDataReceived, value); }