Skip to content

Commit fbfd827

Browse files
authored
Fix | Build DataTypes table in code, add json data type (#3858)
* Create structure of DataTypes static population * Remove redundant data types from metadata SqlClient cannot connect to SQL Server 2000 instances, so the minimum server version is 9.0. * Remove data type entries with a maximum version below this. * Remove the minimum version constraint where this constraint will always be true. * Populate DataTypes table from MetaType information * Add test to verify presence of data types * Add json data type to DataTypes schema collection * Use IsJsonSupported more widely This enables the JSON tests to run against SQL Server 2025. Also correct a comment in LoadDataTypesDataTables. * Plumb minimum version logic to AddStringOrBinaryType * Address MARS JSON test failure This was manually constructing a connection string, which didn't work on one CI leg.
1 parent 7a49600 commit fbfd827

8 files changed

Lines changed: 551 additions & 762 deletions

File tree

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlMetaDataFactory.DataTypes.cs

Lines changed: 438 additions & 0 deletions
Large diffs are not rendered by default.

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlMetaDataFactory.cs

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
namespace Microsoft.Data.SqlClient
1919
{
20-
internal sealed class SqlMetaDataFactory : IDisposable
20+
internal sealed partial class SqlMetaDataFactory : IDisposable
2121
{
2222
// Well-known column names
2323
private const string CollectionNameKey = "CollectionName";
@@ -713,6 +713,9 @@ private DataSet LoadDataSetFromXml(Stream XmlStream)
713713
{
714714
Locale = CultureInfo.InvariantCulture
715715
};
716+
717+
LoadDataTypesDataTables(metaDataCollectionsDataSet);
718+
716719
XmlReaderSettings settings = new()
717720
{
718721
XmlResolver = null,
@@ -762,9 +765,6 @@ private DataSet LoadDataSetFromXml(Stream XmlStream)
762765
dataTable = CreateDataSourceInformationDataTable();
763766
rowFixup = FixUpDataSourceInformationRow;
764767
break;
765-
case "DataTypesTable":
766-
dataTable = CreateDataTypesDataTable();
767-
break;
768768
case "ReservedWordsTable":
769769
dataTable = CreateReservedWordsDataTable();
770770
break;
@@ -898,38 +898,6 @@ private static DataTable CreateDataSourceInformationDataTable()
898898
}
899899
};
900900

901-
private static DataTable CreateDataTypesDataTable()
902-
=> new(DbMetaDataCollectionNames.DataTypes)
903-
{
904-
Columns =
905-
{
906-
new DataColumn(DbMetaDataColumnNames.TypeName, typeof(string)),
907-
new DataColumn(DbMetaDataColumnNames.ProviderDbType, typeof(int)),
908-
new DataColumn(DbMetaDataColumnNames.ColumnSize, typeof(long)),
909-
new DataColumn(DbMetaDataColumnNames.CreateFormat, typeof(string)),
910-
new DataColumn(DbMetaDataColumnNames.CreateParameters, typeof(string)),
911-
new DataColumn(DbMetaDataColumnNames.DataType, typeof(string)),
912-
new DataColumn(DbMetaDataColumnNames.IsAutoIncrementable, typeof(bool)),
913-
new DataColumn(DbMetaDataColumnNames.IsBestMatch, typeof(bool)),
914-
new DataColumn(DbMetaDataColumnNames.IsCaseSensitive, typeof(bool)),
915-
new DataColumn(DbMetaDataColumnNames.IsFixedLength, typeof(bool)),
916-
new DataColumn(DbMetaDataColumnNames.IsFixedPrecisionScale, typeof(bool)),
917-
new DataColumn(DbMetaDataColumnNames.IsLong, typeof(bool)),
918-
new DataColumn(DbMetaDataColumnNames.IsNullable, typeof(bool)),
919-
new DataColumn(DbMetaDataColumnNames.IsSearchable, typeof(bool)),
920-
new DataColumn(DbMetaDataColumnNames.IsSearchableWithLike, typeof(bool)),
921-
new DataColumn(DbMetaDataColumnNames.IsUnsigned, typeof(bool)),
922-
new DataColumn(DbMetaDataColumnNames.MaximumScale, typeof(short)),
923-
new DataColumn(DbMetaDataColumnNames.MinimumScale, typeof(short)),
924-
new DataColumn(DbMetaDataColumnNames.IsConcurrencyType, typeof(bool)),
925-
new DataColumn(MaximumVersionKey, typeof(string)),
926-
new DataColumn(MinimumVersionKey, typeof(string)),
927-
new DataColumn(DbMetaDataColumnNames.IsLiteralSupported, typeof(bool)),
928-
new DataColumn(DbMetaDataColumnNames.LiteralPrefix, typeof(string)),
929-
new DataColumn(DbMetaDataColumnNames.LiteralSuffix, typeof(string))
930-
}
931-
};
932-
933901
private static DataTable CreateReservedWordsDataTable()
934902
=> new(DbMetaDataCollectionNames.ReservedWords)
935903
{

0 commit comments

Comments
 (0)