Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RNET-1145, RNET-1143: Fix reading schema from native #3601

Merged
merged 4 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
## vNext (TBD)

### Enhancements
* None
* Added support for `Migration.FindInNewRealm` which is a helper that allows you to lookup the object in the post-migration Realm that corresponds to an object from the pre-migration Realm. (Issue [#3600](https://github.com/realm/realm-dotnet/issues/3600))

### Fixed
* None
* Fixed an issue that would cause `RealmObject.DynamicApi.GetList/Set/Dictionary` to fail when the collection contains primitive values. (Issue [#3597](https://github.com/realm/realm-dotnet/issues/3597))

### Compatibility
* Realm Studio: 15.0.0 or later.
Expand Down
18 changes: 18 additions & 0 deletions Realm/Realm/Handles/SharedRealmHandle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ public static extern void rename_property(SharedRealmHandle sharedRealm,
[DllImport(InteropConfig.DLL_NAME, EntryPoint = "shared_realm_get_operating_system", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr get_operating_system(IntPtr buffer, IntPtr buffer_length);

[DllImport(InteropConfig.DLL_NAME, EntryPoint = "shared_realm_get_object_for_object", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr get_object_for_object(SharedRealmHandle realmHandle, ObjectHandle handle, out NativeException ex);

#pragma warning restore SA1121 // Use built-in type alias
#pragma warning restore IDE0049 // Use built-in type alias
}
Expand Down Expand Up @@ -677,6 +680,21 @@ public bool TryFindObject(TableKey tableKey, in RealmValue id, [MaybeNullWhen(fa
return true;
}

public bool TryFindObject(ObjectHandle handle, [MaybeNullWhen(false)] out ObjectHandle objectHandle)
{
var result = NativeMethods.get_object_for_object(this, handle, out var ex);
ex.ThrowIfNecessary();

if (result == IntPtr.Zero)
{
objectHandle = null;
return false;
}

objectHandle = new ObjectHandle(this, result);
return true;
}

public void RenameProperty(string typeName, string oldName, string newName, IntPtr migrationSchema)
{
NativeMethods.rename_property(this, typeName, (IntPtr)typeName.Length,
Expand Down
22 changes: 22 additions & 0 deletions Realm/Realm/Migration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,27 @@ public void RenameProperty(string typeName, string oldPropertyName, string newPr

NewRealm.SharedRealmHandle.RenameProperty(typeName, oldPropertyName, newPropertyName, _migrationSchema);
}

/// <summary>
/// Finds an object obtained from <see cref="OldRealm"/> in <see cref="NewRealm"/>.
/// </summary>
/// <typeparam name="T">The type of the object in the new realm.</typeparam>
/// <param name="obj">The object obtained from the old realm.</param>
/// <returns>The corresponding object post-migration or <c>null</c> if the object no longer exists in the new realm.</returns>
/// <example>
/// <code>
/// foreach (var oldPerson in migration.OldRealm.DynamicApi.All("Person"))
/// {
/// var newPerson = migration.FindInNewRealm&lt;Person&gt;(oldPerson)
/// newPerson.Name = $"{oldPerson.DynamicApi.Get&lt;string&gt;("FirstName")} {oldPerson.DynamicApi.Get&lt;string&gt;("LastName")}";
/// }
/// </code>
/// </example>
public T? FindInNewRealm<T>(IRealmObject obj)
where T : IRealmObject
{
Argument.Ensure(obj.IsManaged, "Only managed RealmObject instances can be looked up in the new Realm", nameof(obj));
return NewRealm.FindExisting<T>(obj);
}
}
}
7 changes: 6 additions & 1 deletion Realm/Realm/Native/PrimitiveValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,12 @@ public static StringValue AllocateFrom(string? value, Arena arena)

public static implicit operator bool(in StringValue value) => value.data != null;

public static implicit operator string?(in StringValue value) => !value ? null : Encoding.UTF8.GetString(value.data, (int)value.size);
public static implicit operator string?(in StringValue value) => value.ToDotnetString();

public readonly string? ToDotnetString(bool treatEmptyAsNull = false)
=> data == null || (size == 0 && treatEmptyAsNull)
? null
: Encoding.UTF8.GetString(data, (int)size);
}

[StructLayout(LayoutKind.Sequential)]
Expand Down
23 changes: 19 additions & 4 deletions Realm/Realm/Realm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1111,6 +1111,21 @@ internal IQueryable<T> AllEmbedded<T>()
return default;
}

// This is only used during migrations. obj here is the object in the old realm, and we're trying to find
// its counterpart post-migration.
internal T? FindExisting<T>(IRealmObject obj)
{
ThrowIfDisposed();
Argument.Ensure(obj.IsManaged, "Only managed objects can be used in FindExisting", nameof(obj));
if (SharedRealmHandle.TryFindObject(obj.GetObjectHandle()!, out var objectHandle))
{
var metadata = Metadata[typeof(T).GetMappedOrOriginalName()];
return (T)MakeObject(metadata, objectHandle);
}

return default;
}

#endregion Quick Find using primary key

#region Thread Handover
Expand Down Expand Up @@ -1589,7 +1604,7 @@ internal Dynamic(Realm realm)
public IRealmObjectBase CreateObject(string className) => CreateObjectCore(className, primaryKey: null);

/// <summary>
/// Factory for a managed object without a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// Factory for a managed object with a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// </summary>
/// <returns>A dynamically-accessed Realm object.</returns>
/// <param name="className">The type of object to create as defined in the schema.</param>
Expand All @@ -1609,7 +1624,7 @@ internal Dynamic(Realm realm)
public IRealmObjectBase CreateObject(string className, long? primaryKey) => CreateObjectCore(className, primaryKey);

/// <summary>
/// Factory for a managed object without a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// Factory for a managed object with a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// </summary>
/// <returns>A dynamically-accessed Realm object.</returns>
/// <param name="className">The type of object to create as defined in the schema.</param>
Expand All @@ -1629,7 +1644,7 @@ internal Dynamic(Realm realm)
public IRealmObjectBase CreateObject(string className, string? primaryKey) => CreateObjectCore(className, primaryKey);

/// <summary>
/// Factory for a managed object without a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// Factory for a managed object with a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// </summary>
/// <returns>A dynamically-accessed Realm object.</returns>
/// <param name="className">The type of object to create as defined in the schema.</param>
Expand All @@ -1649,7 +1664,7 @@ internal Dynamic(Realm realm)
public IRealmObjectBase CreateObject(string className, ObjectId? primaryKey) => CreateObjectCore(className, primaryKey);

/// <summary>
/// Factory for a managed object without a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// Factory for a managed object with a primary key in a realm. Only valid within a write <see cref="Transaction"/>.
/// </summary>
/// <returns>A dynamically-accessed Realm object.</returns>
/// <param name="className">The type of object to create as defined in the schema.</param>
Expand Down
7 changes: 3 additions & 4 deletions Realm/Realm/Schema/Property.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,10 @@ public Property(string name, PropertyType type, string? objectType = null, strin
internal Property(in SchemaProperty nativeProperty)
{
Name = nativeProperty.name!;
string? managedName = nativeProperty.managed_name;
ManagedName = !string.IsNullOrEmpty(managedName) ? managedName! : Name;
ManagedName = nativeProperty.managed_name.ToDotnetString(treatEmptyAsNull: true) ?? Name;
Type = nativeProperty.type;
ObjectType = nativeProperty.object_type;
LinkOriginPropertyName = nativeProperty.link_origin_property_name;
ObjectType = nativeProperty.object_type.ToDotnetString(treatEmptyAsNull: true);
LinkOriginPropertyName = nativeProperty.link_origin_property_name.ToDotnetString(treatEmptyAsNull: true);
IsPrimaryKey = nativeProperty.is_primary;
IndexType = nativeProperty.index;
}
Expand Down
129 changes: 129 additions & 0 deletions Tests/Realm.Tests/Database/MigrationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,113 @@
Assert.That(newRealm.AllEmbedded<ObjectEmbedded>().Count(), Is.EqualTo(1));
Assert.That(newRealm.AllEmbedded<ObjectEmbedded>().Any(e => e.Value == "bar"), Is.False);
}

[Test]
public void Migration_FindInNewRealm_WhenObjectIsDeleted_ReturnsNull()
{
var oldConfig = new RealmConfiguration(Guid.NewGuid().ToString())
{
Schema = new[]
{
typeof(Dotnet_3597_Old)
}
};

using (var oldRealm = GetRealm(oldConfig))
{
oldRealm.Write(() =>
{
oldRealm.Add(new Dotnet_3597_Old { FloatProp = 1, IntProp = 1 });
oldRealm.Add(new Dotnet_3597_Old { FloatProp = 2, IntProp = 2 });
});
}

var newConfig = new RealmConfiguration(oldConfig.DatabasePath)
{
Schema = new[]
{
typeof(Dotnet_3597)
},
SchemaVersion = 2,
MigrationCallback = (migration, version) =>
{
var oldObjects = migration.OldRealm.DynamicApi.All(nameof(Dotnet_3597)).ToArray();
var old1 = oldObjects.First(o => o.DynamicApi.Get<int>("IntProp") == 1);
var old2 = oldObjects.First(o => o.DynamicApi.Get<int>("IntProp") == 2);

var newObjects = migration.NewRealm.All<Dotnet_3597>().ToArray();
var new1 = newObjects.First(o => o.IntProp == 1);
var new2 = newObjects.First(o => o.IntProp == 2);

Assert.That(migration.FindInNewRealm<Dotnet_3597>(old1), Is.EqualTo(new1));
Assert.That(migration.FindInNewRealm<Dotnet_3597>(old2), Is.EqualTo(new2));

migration.NewRealm.Remove(new1);

Assert.That(migration.FindInNewRealm<Dotnet_3597>(old1), Is.Null);
}
};

var newRealm = GetRealm(newConfig);
Assert.That(newRealm.All<Dotnet_3597>().Count(), Is.EqualTo(1));
}

// Test for https://github.com/realm/realm-dotnet/issues/3597
[Test]
public void Migration_MigratesListOfFloats()
{
var oldConfig = new RealmConfiguration(Guid.NewGuid().ToString())
{
Schema = new[]
{
typeof(Dotnet_3597_Old)
}
};

using (var oldRealm = GetRealm(oldConfig))
{
oldRealm.Write(() =>
{
oldRealm.Add(new Dotnet_3597_Old
{
FloatProp = 3.14f,
FloatList =
{
1,
2,
-1.23f
}
});
});
}

var newConfig = new RealmConfiguration(oldConfig.DatabasePath)
{
Schema = new[]
{
typeof(Dotnet_3597)
},
SchemaVersion = 2,
MigrationCallback = (migration, version) =>
{
foreach (var item in migration.OldRealm.DynamicApi.All(nameof(Dotnet_3597)))
{
var newItem = migration.FindInNewRealm<Dotnet_3597>(item)!;
newItem.FloatProp = item.DynamicApi.Get<float?>("FloatProp").ToString()!;
foreach (var floatValue in item.DynamicApi.GetList<float?>("FloatList"))
{
newItem.FloatList.Add(floatValue.ToString()!);
}
}
}
};

var newRealm = GetRealm(newConfig);

var obj = newRealm.All<Dotnet_3597>().Single();
Assert.That(obj.FloatProp, Is.EqualTo("3.14"));
CollectionAssert.AreEqual(obj.FloatList, new[] { "1", "2", "-1.23" });
}
}

[Explicit]
Expand Down Expand Up @@ -884,4 +991,26 @@
{
public string? Value { get; set; }
}

[Explicit]
[MapTo("Dotnet_3597")]
public partial class Dotnet_3597_Old : TestRealmObject
{
public int IntProp { get; set; }

public float? FloatProp { get; set; }

public IList<float?> FloatList { get; }

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, linux-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-arm64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / .NET Framework

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net461]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, win-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Woven classes

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.macOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.iOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.tvOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / UWP

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Code Coverage

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/home/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.Android

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.Android

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.iOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1003 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.MacCatalyst

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
}

[Explicit]
[MapTo("Dotnet_3597")]
public partial class Dotnet_3597 : TestRealmObject
{
public int IntProp { get; set; }

public string FloatProp { get; set; }

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, linux-x64

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-arm64

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / .NET Framework

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net461]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, win-x64

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Woven classes

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.macOS

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-x64

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.iOS

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.tvOS

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / UWP

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Code Coverage

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/home/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.Android

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.Android

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.iOS

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1012 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.MacCatalyst

Non-nullable property 'FloatProp' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

public IList<string> FloatList { get; }

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, linux-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-arm64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / .NET Framework

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net461]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, win-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Woven classes

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.macOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / net8.0, osx-x64

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.iOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.tvOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/Users/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / UWP

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Code Coverage

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [/home/runner/work/realm-dotnet/realm-dotnet/Tests/Realm.Tests/Realm.Tests.csproj::TargetFramework=net8.0]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Xamarin.Android

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [D:\a\realm-dotnet\realm-dotnet\Tests\Realm.Tests\Realm.Tests.csproj::TargetFramework=netstandard2.0]

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.Android

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.iOS

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 1014 in Tests/Realm.Tests/Database/MigrationTests.cs

View workflow job for this annotation

GitHub Actions / Test / Maui.MacCatalyst

Non-nullable property 'FloatList' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
}
}
Loading
Loading