System.Data.SQLite
View Ticket
Not logged in
Ticket UUID: c5cc2fb334c9a9c920d156d8ae16d825b1ea32b7
Title: Duplicate test for DbType.SByte in SQLiteDataReader.VerifyType()
Status: Closed Type: Code_Defect
Severity: Minor Priority: Medium
Subsystem: Data_Reader Resolution: Fixed
Last Modified: 2014-09-22 20:10:04
Version Found In: trunk
User Comments:
anonymous added on 2014-09-22 16:46:43:
In SQLiteDataReader.VerifyType(int i, DbType typ) DbType.SByte is tested for twice for TypeAffinity.Text:

...
        case TypeAffinity.Text:
-->       if (typ == DbType.SByte) return affinity;
          if (typ == DbType.String) return affinity;
-->       if (typ == DbType.SByte) return affinity;
          if (typ == DbType.Guid) return affinity;
          if (typ == DbType.DateTime) return affinity;
          if (typ == DbType.Decimal) return affinity;
          break;
...

Given that the combination of TypeAffinity.Text and DbType.String is more likely than TypeAffinity.Text and DbType.SByte, I would suggest removing the first test for DbType.SByte. In fact I would probably reorder the tests like this:

        case TypeAffinity.Text:
          if (typ == DbType.String) return affinity;
          if (typ == DbType.DateTime) return affinity;
          if (typ == DbType.Decimal) return affinity;
          if (typ == DbType.Guid) return affinity;
          if (typ == DbType.SByte) return affinity;
          break;

Maybe the other case statements could be optimized too...

mistachkin added on 2014-09-22 17:56:26:
Note: This duplicate check has existed since the file was originally added, here:
[0cd344ea4924e4aabe9ee63cd85450c98c0f6ae7].

mistachkin added on 2014-09-22 17:59:06:
Also, I'm starting to think that the SByte case should be part of the Int64
affinity.  There is a small risk of breaking compatibility; however, I think
the risk is quite small (i.e. it should be limited to columns that are
explicitly declared with SQL data types that mapped to SByte).

mistachkin added on 2014-09-22 20:10:04:
Fixed on trunk via check-in [24b429ba4d].