Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,7 @@
ComponentSenseId
SnapshotId Unique
ComplexFormEntryId, ComponentEntryId Unique
Annotations:
Relational:Filter: ComponentSenseId IS NULL
ComplexFormEntryId, ComponentEntryId, ComponentSenseId Unique
Annotations:
Relational:Filter: ComponentSenseId IS NOT NULL
Annotations:
DiscriminatorProperty:
Relational:FunctionName:
Expand Down Expand Up @@ -270,7 +266,7 @@
Order (double) Required
SnapshotId (no field, Guid?) Shadow FK Index
Type (WritingSystemType) Required Index
WsId (WritingSystemId) Required Index
WsId (WritingSystemId) Required Index Sentinel:default
Keys:
Id PK
Foreign keys:
Expand Down Expand Up @@ -308,6 +304,13 @@
DateTime (DateTimeOffset) Required
Annotations:
Relational:ColumnName: DateTime
Annotations:
Relational:FunctionName:
Relational:Schema:
Relational:SqlQuery:
Relational:TableName: Commits
Relational:ViewName:
Relational:ViewSchema:
Keys:
Id PK
Annotations:
Expand Down
140 changes: 140 additions & 0 deletions backend/FwLite/LcmCrdt/CompiledModels/ChangeEntityEntityType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
// <auto-generated />
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Storage.Json;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using SIL.Harmony.Changes;
using SIL.Harmony.Core;
using SIL.Harmony.Db.EntityConfig;

#pragma warning disable 219, 612, 618
#nullable disable

namespace LcmCrdt.CompiledModels
{
internal partial class ChangeEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"SIL.Harmony.Core.ChangeEntity<SIL.Harmony.Changes.IChange>",
typeof(ChangeEntity<IChange>),
baseEntityType);

var commitId = runtimeEntityType.AddProperty(
"CommitId",
typeof(Guid),
propertyInfo: typeof(ChangeEntity<IChange>).GetProperty("CommitId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ChangeEntity<IChange>).GetField("<CommitId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
commitId.TypeMapping = SqliteGuidTypeMapping.Default;

var index = runtimeEntityType.AddProperty(
"Index",
typeof(int),
propertyInfo: typeof(ChangeEntity<IChange>).GetProperty("Index", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ChangeEntity<IChange>).GetField("<Index>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: 0);
index.TypeMapping = IntTypeMapping.Default.Clone(
comparer: new ValueComparer<int>(
(int v1, int v2) => v1 == v2,
(int v) => v,
(int v) => v),
keyComparer: new ValueComparer<int>(
(int v1, int v2) => v1 == v2,
(int v) => v,
(int v) => v),
providerValueComparer: new ValueComparer<int>(
(int v1, int v2) => v1 == v2,
(int v) => v,
(int v) => v),
mappingInfo: new RelationalTypeMappingInfo(
storeTypeName: "INTEGER"));

var change = runtimeEntityType.AddProperty(
"Change",
typeof(IChange),
propertyInfo: typeof(ChangeEntity<IChange>).GetProperty("Change", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ChangeEntity<IChange>).GetField("<Change>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
change.TypeMapping = SqliteStringTypeMapping.Default.Clone(
comparer: new ValueComparer<IChange>(
(IChange v1, IChange v2) => object.Equals(v1, v2),
(IChange v) => v.GetHashCode(),
(IChange v) => v),
keyComparer: new ValueComparer<IChange>(
(IChange v1, IChange v2) => object.Equals(v1, v2),
(IChange v) => v.GetHashCode(),
(IChange v) => v),
providerValueComparer: new ValueComparer<string>(
(string v1, string v2) => v1 == v2,
(string v) => v.GetHashCode(),
(string v) => v),
mappingInfo: new RelationalTypeMappingInfo(
storeTypeName: "jsonb"),
converter: new ValueConverter<IChange, string>(
(IChange change) => ChangeEntityConfig.SerializeChange(change, null),
(string json) => ChangeEntityConfig.DeserializeChange(json, null)),
jsonValueReaderWriter: new JsonConvertedValueReaderWriter<IChange, string>(
JsonStringReaderWriter.Instance,
new ValueConverter<IChange, string>(
(IChange change) => ChangeEntityConfig.SerializeChange(change, null),
(string json) => ChangeEntityConfig.DeserializeChange(json, null))));
change.AddAnnotation("Relational:ColumnType", "jsonb");

var entityId = runtimeEntityType.AddProperty(
"EntityId",
typeof(Guid),
propertyInfo: typeof(ChangeEntity<IChange>).GetProperty("EntityId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ChangeEntity<IChange>).GetField("<EntityId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
entityId.TypeMapping = SqliteGuidTypeMapping.Default;

var key = runtimeEntityType.AddKey(
new[] { commitId, index });
runtimeEntityType.SetPrimaryKey(key);

return runtimeEntityType;
}

public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType)
{
var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("CommitId") },
principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }),
principalEntityType,
deleteBehavior: DeleteBehavior.Cascade,
required: true);

var changeEntities = principalEntityType.AddNavigation("ChangeEntities",
runtimeForeignKey,
onDependent: false,
typeof(List<ChangeEntity<IChange>>),
propertyInfo: typeof(CommitBase<IChange>).GetProperty("ChangeEntities", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(CommitBase<IChange>).GetField("<ChangeEntities>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

return runtimeForeignKey;
}

public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", null);
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "ChangeEntities");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);

Customize(runtimeEntityType);
}

static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}
187 changes: 187 additions & 0 deletions backend/FwLite/LcmCrdt/CompiledModels/CommitEntityType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal;
using Microsoft.EntityFrameworkCore.Sqlite.Storage.Json.Internal;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Storage.Json;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using SIL.Harmony;
using SIL.Harmony.Core;
using SIL.Harmony.Db.EntityConfig;

#pragma warning disable 219, 612, 618
#nullable disable

namespace LcmCrdt.CompiledModels
{
internal partial class CommitEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"SIL.Harmony.Commit",
typeof(Commit),
baseEntityType);

var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(CommitBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(CommitBase).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.TypeMapping = SqliteGuidTypeMapping.Default;

var clientId = runtimeEntityType.AddProperty(
"ClientId",
typeof(Guid),
propertyInfo: typeof(CommitBase).GetProperty("ClientId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(CommitBase).GetField("<ClientId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
clientId.TypeMapping = SqliteGuidTypeMapping.Default;

var hash = runtimeEntityType.AddProperty(
"Hash",
typeof(string),
propertyInfo: typeof(Commit).GetProperty("Hash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Commit).GetField("<Hash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
hash.TypeMapping = SqliteStringTypeMapping.Default;

var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(CommitMetadata),
propertyInfo: typeof(CommitBase).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(CommitBase).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.TypeMapping = SqliteStringTypeMapping.Default.Clone(
comparer: new ValueComparer<CommitMetadata>(
(CommitMetadata v1, CommitMetadata v2) => object.Equals(v1, v2),
(CommitMetadata v) => v.GetHashCode(),
(CommitMetadata v) => v),
keyComparer: new ValueComparer<CommitMetadata>(
(CommitMetadata v1, CommitMetadata v2) => object.Equals(v1, v2),
(CommitMetadata v) => v.GetHashCode(),
(CommitMetadata v) => v),
providerValueComparer: new ValueComparer<string>(
(string v1, string v2) => v1 == v2,
(string v) => v.GetHashCode(),
(string v) => v),
mappingInfo: new RelationalTypeMappingInfo(
storeTypeName: "jsonb"),
converter: new ValueConverter<CommitMetadata, string>(
(CommitMetadata m) => CommitEntityConfig.Serialize(m, null),
(string json) => CommitEntityConfig.Deserialize(json, null) ?? new CommitMetadata()),
jsonValueReaderWriter: new JsonConvertedValueReaderWriter<CommitMetadata, string>(
JsonStringReaderWriter.Instance,
new ValueConverter<CommitMetadata, string>(
(CommitMetadata m) => CommitEntityConfig.Serialize(m, null),
(string json) => CommitEntityConfig.Deserialize(json, null) ?? new CommitMetadata())));
metadata.AddAnnotation("Relational:ColumnType", "jsonb");

var parentHash = runtimeEntityType.AddProperty(
"ParentHash",
typeof(string),
propertyInfo: typeof(Commit).GetProperty("ParentHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Commit).GetField("<ParentHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
parentHash.TypeMapping = SqliteStringTypeMapping.Default;

HybridDateTimeComplexProperty.Create(runtimeEntityType);
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);

return runtimeEntityType;
}

private static class HybridDateTimeComplexProperty
{
public static RuntimeComplexProperty Create(RuntimeEntityType declaringType)
{
var complexProperty = declaringType.AddComplexProperty("HybridDateTime",
typeof(HybridDateTime),
"SIL.Harmony.Commit.HybridDateTime#HybridDateTime",
typeof(HybridDateTime),
propertyInfo: typeof(CommitBase).GetProperty("HybridDateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(CommitBase).GetField("<HybridDateTime>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

var complexType = complexProperty.ComplexType;
var counter = complexType.AddProperty(
"Counter",
typeof(long),
propertyInfo: typeof(HybridDateTime).GetProperty("Counter", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(HybridDateTime).GetField("<Counter>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0L);
counter.TypeMapping = LongTypeMapping.Default.Clone(
comparer: new ValueComparer<long>(
(long v1, long v2) => v1 == v2,
(long v) => v.GetHashCode(),
(long v) => v),
keyComparer: new ValueComparer<long>(
(long v1, long v2) => v1 == v2,
(long v) => v.GetHashCode(),
(long v) => v),
providerValueComparer: new ValueComparer<long>(
(long v1, long v2) => v1 == v2,
(long v) => v.GetHashCode(),
(long v) => v),
mappingInfo: new RelationalTypeMappingInfo(
storeTypeName: "INTEGER"));
counter.AddAnnotation("Relational:ColumnName", "Counter");

var dateTime = complexType.AddProperty(
"DateTime",
typeof(DateTimeOffset),
propertyInfo: typeof(HybridDateTime).GetProperty("DateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(HybridDateTime).GetField("<DateTime>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
dateTime.TypeMapping = SqliteDateTimeTypeMapping.Default.Clone(
comparer: new ValueComparer<DateTimeOffset>(
(DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2),
(DateTimeOffset v) => v.GetHashCode(),
(DateTimeOffset v) => v),
keyComparer: new ValueComparer<DateTimeOffset>(
(DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2),
(DateTimeOffset v) => v.GetHashCode(),
(DateTimeOffset v) => v),
providerValueComparer: new ValueComparer<DateTime>(
(DateTime v1, DateTime v2) => v1.Equals(v2),
(DateTime v) => v.GetHashCode(),
(DateTime v) => v),
converter: new ValueConverter<DateTimeOffset, DateTime>(
(DateTimeOffset d) => d.UtcDateTime,
(DateTime d) => new DateTimeOffset(d.Ticks, TimeSpan.Zero)),
jsonValueReaderWriter: new JsonConvertedValueReaderWriter<DateTimeOffset, DateTime>(
SqliteJsonDateTimeReaderWriter.Instance,
new ValueConverter<DateTimeOffset, DateTime>(
(DateTimeOffset d) => d.UtcDateTime,
(DateTime d) => new DateTimeOffset(d.Ticks, TimeSpan.Zero))));
dateTime.SetSentinelFromProviderValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc));
dateTime.AddAnnotation("Relational:ColumnName", "DateTime");

complexType.AddAnnotation("Relational:FunctionName", null);
complexType.AddAnnotation("Relational:Schema", null);
complexType.AddAnnotation("Relational:SqlQuery", null);
complexType.AddAnnotation("Relational:TableName", "Commits");
complexType.AddAnnotation("Relational:ViewName", null);
complexType.AddAnnotation("Relational:ViewSchema", null);
return complexProperty;
}
}

public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", null);
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "Commits");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);

Customize(runtimeEntityType);
}

static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}
Loading
Loading