Skip to content

Commit 84b734d

Browse files
authored
Fix NativeAOT warnings in Microsoft.Data.Sqlite.Core
Part of #29761
1 parent 5274ba3 commit 84b734d

File tree

18 files changed

+182
-83
lines changed

18 files changed

+182
-83
lines changed

All.sln

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,14 +334,14 @@ Global
334334
{F1B2E5A0-8C74-414A-B262-353FEE325E9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
335335
{F1B2E5A0-8C74-414A-B262-353FEE325E9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
336336
{F1B2E5A0-8C74-414A-B262-353FEE325E9F}.Release|Any CPU.Build.0 = Release|Any CPU
337+
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
338+
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Release|Any CPU.ActiveCfg = Release|Any CPU
337339
{1FE385D8-8F8B-4EC9-A1A9-AFCC38B8546C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
338340
{1FE385D8-8F8B-4EC9-A1A9-AFCC38B8546C}.Debug|Any CPU.Build.0 = Debug|Any CPU
339341
{1FE385D8-8F8B-4EC9-A1A9-AFCC38B8546C}.Release|Any CPU.ActiveCfg = Release|Any CPU
340342
{1FE385D8-8F8B-4EC9-A1A9-AFCC38B8546C}.Release|Any CPU.Build.0 = Release|Any CPU
341343
{2487950B-403A-482C-8ED3-CCF31E9E677F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
342-
{2487950B-403A-482C-8ED3-CCF31E9E677F}.Debug|Any CPU.Build.0 = Debug|Any CPU
343344
{2487950B-403A-482C-8ED3-CCF31E9E677F}.Release|Any CPU.ActiveCfg = Release|Any CPU
344-
{2487950B-403A-482C-8ED3-CCF31E9E677F}.Release|Any CPU.Build.0 = Release|Any CPU
345345
{8F722A02-71A4-4787-ACD8-FB7D5B7AE648}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
346346
{8F722A02-71A4-4787-ACD8-FB7D5B7AE648}.Debug|Any CPU.Build.0 = Debug|Any CPU
347347
{8F722A02-71A4-4787-ACD8-FB7D5B7AE648}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -358,10 +358,6 @@ Global
358358
{2AC6A8AC-5C0A-422A-B21A-CDC8D75F20A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
359359
{2AC6A8AC-5C0A-422A-B21A-CDC8D75F20A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
360360
{2AC6A8AC-5C0A-422A-B21A-CDC8D75F20A3}.Release|Any CPU.Build.0 = Release|Any CPU
361-
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
362-
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Debug|Any CPU.Build.0 = Debug|Any CPU
363-
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Release|Any CPU.ActiveCfg = Release|Any CPU
364-
{59C1CEDE-AA45-41FE-8098-6279A72C421A}.Release|Any CPU.Build.0 = Release|Any CPU
365361
EndGlobalSection
366362
GlobalSection(SolutionProperties) = preSolution
367363
HideSolutionNode = FALSE
@@ -415,13 +411,13 @@ Global
415411
{F956A344-5C8D-4015-A3BF-7A8304C58BE4} = {258D5057-81B9-40EC-A872-D21E27452749}
416412
{CC93C465-F5AC-4CB9-A064-3675955962F4} = {258D5057-81B9-40EC-A872-D21E27452749}
417413
{F1B2E5A0-8C74-414A-B262-353FEE325E9F} = {258D5057-81B9-40EC-A872-D21E27452749}
414+
{59C1CEDE-AA45-41FE-8098-6279A72C421A} = {258D5057-81B9-40EC-A872-D21E27452749}
418415
{1FE385D8-8F8B-4EC9-A1A9-AFCC38B8546C} = {CE6B50B2-34AE-44C9-940A-4E48C3E1B3BC}
419416
{2487950B-403A-482C-8ED3-CCF31E9E677F} = {258D5057-81B9-40EC-A872-D21E27452749}
420417
{8F722A02-71A4-4787-ACD8-FB7D5B7AE648} = {CE6B50B2-34AE-44C9-940A-4E48C3E1B3BC}
421418
{01F86E65-6448-424C-AAB5-9C6427EF6FD4} = {258D5057-81B9-40EC-A872-D21E27452749}
422419
{3D935B7D-80BD-49AD-BDC9-E1B0C9D9494F} = {CE6B50B2-34AE-44C9-940A-4E48C3E1B3BC}
423420
{2AC6A8AC-5C0A-422A-B21A-CDC8D75F20A3} = {258D5057-81B9-40EC-A872-D21E27452749}
424-
{59C1CEDE-AA45-41FE-8098-6279A72C421A} = {258D5057-81B9-40EC-A872-D21E27452749}
425421
EndGlobalSection
426422
GlobalSection(ExtensibilityGlobals) = postSolution
427423
SolutionGuid = {285A5EB4-BCF4-40EB-B9E1-DF6DBCB5E705}

eng/testing/linker/SupportFiles/.editorconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ dotnet_analyzer_diagnostic.category-AOT.severity = error
99
dotnet_analyzer_diagnostic.category-Trimming.severity = error
1010
dotnet_diagnostic.SA0001.severity = none
1111
dotnet_diagnostic.SA1516.severity = none
12-

eng/testing/linker/trimmingTests.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
<PropertyGroup>
7171
<_additionalProjectReferencesString>@(_additionalProjectReference, '%0a ')</_additionalProjectReferencesString>
7272
</PropertyGroup>
73-
73+
7474
<ItemGroup Condition="'@(PackageReference)' != ''">
7575
<PackageReference Condition="'%(PackageReference.PrivateAssets)' == ''">
7676
<PrivateAssets>contentfiles;analyzers;build</PrivateAssets>
@@ -150,7 +150,7 @@
150150
Outputs="_unused">
151151

152152
<Message Text="[Trimming Tests] Running test: %(TestConsoleApps.ProjectCompileItems) ..." />
153-
<Exec IgnoreExitCode="true" Command="%(TestConsoleApps.TestCommand)" StandardOutputImportance="Low" WorkingDirectory="%(TestConsoleApps.TestExecutionDirectory)">
153+
<Exec IgnoreExitCode="true" Command="%(TestConsoleApps.TestCommand)" StandardOutputImportance="Normal" WorkingDirectory="%(TestConsoleApps.TestExecutionDirectory)">
154154
<Output TaskParameter="ExitCode" PropertyName="ExecutionExitCode" />
155155
</Exec>
156156

src/EFCore/Internal/DbContextServices.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Runtime.CompilerServices;
45
using Microsoft.EntityFrameworkCore.Infrastructure.Internal;
56

67
namespace Microsoft.EntityFrameworkCore.Internal;
@@ -85,7 +86,9 @@ private IModel CreateModel(bool designTime)
8586

8687
return modelFromOptions == null
8788
|| (designTime && modelFromOptions is not Metadata.Internal.Model)
88-
? dependencies.ModelSource.GetModel(_currentContext!.Context, dependencies, designTime)
89+
? RuntimeFeature.IsDynamicCodeSupported
90+
? dependencies.ModelSource.GetModel(_currentContext!.Context, dependencies, designTime)
91+
: throw new InvalidOperationException(CoreStrings.NativeAotNoCompiledModel)
8992
: dependencies.ModelRuntimeInitializer.Initialize(modelFromOptions, designTime, dependencies.ValidationLogger);
9093
}
9194
finally

src/EFCore/Properties/CoreStrings.Designer.cs

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/EFCore/Properties/CoreStrings.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,9 @@
10831083
<data name="NamedIndexWrongType" xml:space="preserve">
10841084
<value>The index with name {indexName} cannot be removed from the entity type '{entityType}' because no such index exists on that entity type.</value>
10851085
</data>
1086+
<data name="NativeAotNoCompiledModel" xml:space="preserve">
1087+
<value>Model building is not supported when publishing with NativeAOT. Use a compiled model.</value>
1088+
</data>
10861089
<data name="NavigationArray" xml:space="preserve">
10871090
<value>The type of navigation '{1_entityType}.{0_navigation}' is '{foundType}' which is an array type. Collection navigations cannot be arrays.</value>
10881091
</data>

src/Microsoft.Data.Sqlite.Core/Microsoft.Data.Sqlite.Core.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ Microsoft.Data.Sqlite.SqliteException
1515
Microsoft.Data.Sqlite.SqliteFactory
1616
Microsoft.Data.Sqlite.SqliteParameter
1717
Microsoft.Data.Sqlite.SqliteTransaction</Description>
18-
<TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
18+
<TargetFrameworks>$(DefaultNetCoreTargetFramework);netstandard2.0;net6.0</TargetFrameworks>
1919
<MinClientVersion>3.6</MinClientVersion>
2020
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2121
<CodeAnalysisRuleSet>Microsoft.Data.Sqlite.Core.ruleset</CodeAnalysisRuleSet>
2222
<PackageTags>SQLite;Data;ADO.NET</PackageTags>
2323
<PackageProjectUrl>https://docs.microsoft.com/dotnet/standard/data/sqlite/</PackageProjectUrl>
24+
<IsAotCompatible>true</IsAotCompatible>
2425
</PropertyGroup>
2526

2627
<ItemGroup>

src/Microsoft.Data.Sqlite.Core/SqliteDataReader.cs

Lines changed: 72 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public override string GetDataTypeName(int ordinal)
315315
/// </summary>
316316
/// <param name="ordinal">The zero-based column ordinal.</param>
317317
/// <returns>The data type of the column.</returns>
318-
#if NET6_0_OR_GREATER
318+
#if NET8_0_OR_GREATER
319319
[return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
320320
#endif
321321
public override Type GetFieldType(int ordinal)
@@ -623,75 +623,74 @@ public override DataTable GetSchemaTable()
623623

624624
var schemaTable = new DataTable("SchemaTable");
625625

626-
var ColumnName = new DataColumn(SchemaTableColumn.ColumnName, typeof(string));
627-
var ColumnOrdinal = new DataColumn(SchemaTableColumn.ColumnOrdinal, typeof(int));
628-
var ColumnSize = new DataColumn(SchemaTableColumn.ColumnSize, typeof(int));
629-
var NumericPrecision = new DataColumn(SchemaTableColumn.NumericPrecision, typeof(short));
630-
var NumericScale = new DataColumn(SchemaTableColumn.NumericScale, typeof(short));
631-
632-
var DataType = new DataColumn(SchemaTableColumn.DataType, typeof(Type));
633-
var DataTypeName = new DataColumn("DataTypeName", typeof(string));
626+
var columnNameColumn = new DataColumn(SchemaTableColumn.ColumnName, typeof(string));
627+
var columnOrdinalColumn = new DataColumn(SchemaTableColumn.ColumnOrdinal, typeof(int));
628+
var columnSizeColumn = new DataColumn(SchemaTableColumn.ColumnSize, typeof(int));
629+
var numericPrecisionColumn = new DataColumn(SchemaTableColumn.NumericPrecision, typeof(short));
630+
var numericScaleColumn = new DataColumn(SchemaTableColumn.NumericScale, typeof(short));
631+
var dataTypeColumn = CreateDataTypeColumn();
632+
var dataTypeNameColumn = new DataColumn("DataTypeName", typeof(string));
634633

635-
var IsLong = new DataColumn(SchemaTableColumn.IsLong, typeof(bool));
636-
var AllowDBNull = new DataColumn(SchemaTableColumn.AllowDBNull, typeof(bool));
634+
var isLongColumn = new DataColumn(SchemaTableColumn.IsLong, typeof(bool));
635+
var allowDBNullColumn = new DataColumn(SchemaTableColumn.AllowDBNull, typeof(bool));
637636

638-
var IsUnique = new DataColumn(SchemaTableColumn.IsUnique, typeof(bool));
639-
var IsKey = new DataColumn(SchemaTableColumn.IsKey, typeof(bool));
640-
var IsAutoIncrement = new DataColumn(SchemaTableOptionalColumn.IsAutoIncrement, typeof(bool));
637+
var isUniqueColumn = new DataColumn(SchemaTableColumn.IsUnique, typeof(bool));
638+
var isKeyColumn = new DataColumn(SchemaTableColumn.IsKey, typeof(bool));
639+
var isAutoIncrementColumn = new DataColumn(SchemaTableOptionalColumn.IsAutoIncrement, typeof(bool));
641640

642-
var BaseCatalogName = new DataColumn(SchemaTableOptionalColumn.BaseCatalogName, typeof(string));
643-
var BaseSchemaName = new DataColumn(SchemaTableColumn.BaseSchemaName, typeof(string));
644-
var BaseTableName = new DataColumn(SchemaTableColumn.BaseTableName, typeof(string));
645-
var BaseColumnName = new DataColumn(SchemaTableColumn.BaseColumnName, typeof(string));
641+
var baseCatalogNameColumn = new DataColumn(SchemaTableOptionalColumn.BaseCatalogName, typeof(string));
642+
var baseSchemaNameColumn = new DataColumn(SchemaTableColumn.BaseSchemaName, typeof(string));
643+
var baseTableNameColumn = new DataColumn(SchemaTableColumn.BaseTableName, typeof(string));
644+
var baseColumnNameColumn = new DataColumn(SchemaTableColumn.BaseColumnName, typeof(string));
646645

647-
var BaseServerName = new DataColumn(SchemaTableOptionalColumn.BaseServerName, typeof(string));
648-
var IsAliased = new DataColumn(SchemaTableColumn.IsAliased, typeof(bool));
649-
var IsExpression = new DataColumn(SchemaTableColumn.IsExpression, typeof(bool));
646+
var baseServerNameColumn = new DataColumn(SchemaTableOptionalColumn.BaseServerName, typeof(string));
647+
var isAliasedColumn = new DataColumn(SchemaTableColumn.IsAliased, typeof(bool));
648+
var isExpressionColumn = new DataColumn(SchemaTableColumn.IsExpression, typeof(bool));
650649

651650
var columns = schemaTable.Columns;
652651

653-
columns.Add(ColumnName);
654-
columns.Add(ColumnOrdinal);
655-
columns.Add(ColumnSize);
656-
columns.Add(NumericPrecision);
657-
columns.Add(NumericScale);
658-
columns.Add(IsUnique);
659-
columns.Add(IsKey);
660-
columns.Add(BaseServerName);
661-
columns.Add(BaseCatalogName);
662-
columns.Add(BaseColumnName);
663-
columns.Add(BaseSchemaName);
664-
columns.Add(BaseTableName);
665-
columns.Add(DataType);
666-
columns.Add(DataTypeName);
667-
columns.Add(AllowDBNull);
668-
columns.Add(IsAliased);
669-
columns.Add(IsExpression);
670-
columns.Add(IsAutoIncrement);
671-
columns.Add(IsLong);
652+
columns.Add(columnNameColumn);
653+
columns.Add(columnOrdinalColumn);
654+
columns.Add(columnSizeColumn);
655+
columns.Add(numericPrecisionColumn);
656+
columns.Add(numericScaleColumn);
657+
columns.Add(isUniqueColumn);
658+
columns.Add(isKeyColumn);
659+
columns.Add(baseServerNameColumn);
660+
columns.Add(baseCatalogNameColumn);
661+
columns.Add(baseColumnNameColumn);
662+
columns.Add(baseSchemaNameColumn);
663+
columns.Add(baseTableNameColumn);
664+
columns.Add(dataTypeColumn);
665+
columns.Add(dataTypeNameColumn);
666+
columns.Add(allowDBNullColumn);
667+
columns.Add(isAliasedColumn);
668+
columns.Add(isExpressionColumn);
669+
columns.Add(isAutoIncrementColumn);
670+
columns.Add(isLongColumn);
672671

673672
for (var i = 0; i < FieldCount; i++)
674673
{
675674
var schemaRow = schemaTable.NewRow();
676-
schemaRow[ColumnName] = GetName(i);
677-
schemaRow[ColumnOrdinal] = i;
678-
schemaRow[ColumnSize] = -1;
679-
schemaRow[NumericPrecision] = DBNull.Value;
680-
schemaRow[NumericScale] = DBNull.Value;
681-
schemaRow[BaseServerName] = _command.Connection!.DataSource;
675+
schemaRow[columnNameColumn] = GetName(i);
676+
schemaRow[columnOrdinalColumn] = i;
677+
schemaRow[columnSizeColumn] = -1;
678+
schemaRow[numericPrecisionColumn] = DBNull.Value;
679+
schemaRow[numericScaleColumn] = DBNull.Value;
680+
schemaRow[baseServerNameColumn] = _command.Connection!.DataSource;
682681
var databaseName = sqlite3_column_database_name(_record.Handle, i).utf8_to_string();
683-
schemaRow[BaseCatalogName] = databaseName;
682+
schemaRow[baseCatalogNameColumn] = databaseName;
684683
var columnName = sqlite3_column_origin_name(_record.Handle, i).utf8_to_string();
685-
schemaRow[BaseColumnName] = columnName;
686-
schemaRow[BaseSchemaName] = DBNull.Value;
684+
schemaRow[baseColumnNameColumn] = columnName;
685+
schemaRow[baseSchemaNameColumn] = DBNull.Value;
687686
var tableName = sqlite3_column_table_name(_record.Handle, i).utf8_to_string();
688-
schemaRow[BaseTableName] = tableName;
689-
schemaRow[DataType] = GetFieldType(i);
687+
schemaRow[baseTableNameColumn] = tableName;
688+
schemaRow[dataTypeColumn] = GetFieldType(i);
690689
var dataTypeName = GetDataTypeName(i);
691-
schemaRow[DataTypeName] = dataTypeName;
692-
schemaRow[IsAliased] = columnName != GetName(i);
693-
schemaRow[IsExpression] = columnName == null;
694-
schemaRow[IsLong] = DBNull.Value;
690+
schemaRow[dataTypeNameColumn] = dataTypeName;
691+
schemaRow[isAliasedColumn] = columnName != GetName(i);
692+
schemaRow[isExpressionColumn] = columnName == null;
693+
schemaRow[isLongColumn] = DBNull.Value;
695694

696695
var eponymousVirtualTable = false;
697696
if (tableName != null
@@ -708,7 +707,7 @@ public override DataTable GetSchemaTable()
708707
command.Parameters.AddWithValue("$column", columnName);
709708

710709
var cnt = (long)command.ExecuteScalar()!;
711-
schemaRow[IsUnique] = cnt != 0;
710+
schemaRow[isUniqueColumn] = cnt != 0;
712711

713712
command.Parameters.Clear();
714713
var columnType = "typeof(\"" + columnName.Replace("\"", "\"\"") + "\")";
@@ -721,7 +720,7 @@ public override DataTable GetSchemaTable()
721720
.AppendLine("LIMIT 1;").ToString();
722721

723722
var type = (string?)command.ExecuteScalar();
724-
schemaRow[DataType] =
723+
schemaRow[dataTypeColumn] =
725724
(type != null)
726725
? SqliteDataRecord.GetFieldType(type)
727726
: SqliteDataRecord.GetFieldTypeFromSqliteType(
@@ -741,16 +740,29 @@ public override DataTable GetSchemaTable()
741740
out var notNull, out var primaryKey, out var autoInc);
742741
SqliteException.ThrowExceptionForRC(rc, _command.Connection.Handle);
743742

744-
schemaRow[IsKey] = primaryKey != 0;
745-
schemaRow[AllowDBNull] = notNull == 0;
746-
schemaRow[IsAutoIncrement] = autoInc != 0;
743+
schemaRow[isKeyColumn] = primaryKey != 0;
744+
schemaRow[allowDBNullColumn] = notNull == 0;
745+
schemaRow[isAutoIncrementColumn] = autoInc != 0;
747746
}
748747
}
749748

750749
schemaTable.Rows.Add(schemaRow);
751750
}
752751

753752
return schemaTable;
753+
754+
#if NET6_0_OR_GREATER
755+
[UnconditionalSuppressMessage("Trimming", "IL2111:Method with parameters or return value with `DynamicallyAccessedMembersAttribute`"
756+
+ " is accessed via reflection. Trimmer can't guarantee availability of the requirements of the method.",
757+
Justification = "This is about System.Type.TypeInitializer.get. It is accessed via reflection"
758+
+ " as the type parameter in DataColumn is annotated with DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.PublicProperties" +
759+
" However, reflection is only used for nullable columns.")]
760+
#endif
761+
static DataColumn CreateDataTypeColumn()
762+
=> new(SchemaTableColumn.DataType, typeof(Type))
763+
{
764+
AllowDBNull = false
765+
};
754766
}
755767
}
756768
}

test/EFCore.NativeAotTests/CompiledModels/NativeAotContextModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// <auto-generated />
1+
// <auto-generated />
22
using Microsoft.EntityFrameworkCore.Infrastructure;
33
using Microsoft.EntityFrameworkCore.Metadata;
44
using Microsoft.EntityFrameworkCore.NativeAotTests.Models;

test/EFCore.NativeAotTests/CompiledModels/NativeAotContextModelBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// <auto-generated />
1+
// <auto-generated />
22
using Microsoft.EntityFrameworkCore.Metadata;
33

44
#pragma warning disable 219, 612, 618

0 commit comments

Comments
 (0)