private static StorageInfo CreateSimpleStorageModel() { var storage = new StorageInfo("Storage"); // Model: // class A:Entity {int Id, int Data} // class B:A {int Id} // class C:B {int Id; A RefA; B RefB; C RefC} var tA = new TableInfo(storage, "A"); var tB = new TableInfo(storage, "B"); var tC = new TableInfo(storage, "C"); var idA = new ColumnInfo(tA, "Id", new TypeInfo(typeof(int))); var idB = new ColumnInfo(tB, "Id", new TypeInfo(typeof(int))); var idC = new ColumnInfo(tC, "Id", new TypeInfo(typeof(int))); var refCA = new ColumnInfo(tC, "RefA", new TypeInfo(typeof(int))); var refCB = new ColumnInfo(tC, "RefB", new TypeInfo(typeof(int))); var refCC = new ColumnInfo(tC, "RefC", new TypeInfo(typeof(int))); var dataA = new ColumnInfo(tA, "Data", new TypeInfo(typeof(int))); var pkA = new PrimaryIndexInfo(tA, "PK_A"); var pkB = new PrimaryIndexInfo(tB, "PK_B"); var pkC = new PrimaryIndexInfo(tC, "PK_C"); new KeyColumnRef(pkA, idA); new KeyColumnRef(pkB, idB); new KeyColumnRef(pkC, idC); pkC.PopulateValueColumns(); pkA.PopulateValueColumns(); var ixRefCA = new SecondaryIndexInfo(tC, "FK_CRefA"); new KeyColumnRef(ixRefCA, refCA); ixRefCA.PopulatePrimaryKeyColumns(); var ixRefCB = new SecondaryIndexInfo(tC, "FK_CRefB"); new KeyColumnRef(ixRefCB, refCB); ixRefCB.PopulatePrimaryKeyColumns(); var ixRefCC = new SecondaryIndexInfo(tC, "FK_CRefC"); new KeyColumnRef(ixRefCC, refCC); ixRefCC.PopulatePrimaryKeyColumns(); var fkCRefA = new ForeignKeyInfo(tC, "FK_CRefA"); fkCRefA.PrimaryKey = pkA; fkCRefA.ForeignKeyColumns.Set(ixRefCA); var fkCRefB = new ForeignKeyInfo(tC, "FK_CRefB"); fkCRefB.PrimaryKey = pkB; fkCRefB.ForeignKeyColumns.Set(ixRefCB); var fkCRefC = new ForeignKeyInfo(tC, "FK_CRefC"); fkCRefC.PrimaryKey = pkC; fkCRefC.ForeignKeyColumns.Set(ixRefCC); var fkCA = new ForeignKeyInfo(tC, "FK_CA"); fkCA.PrimaryKey = pkA; fkCA.ForeignKeyColumns.Set(pkC); var fkBA = new ForeignKeyInfo(tB, "FK_BA"); fkBA.PrimaryKey = pkA; fkBA.ForeignKeyColumns.Set(pkB); storage.Validate(); return(storage); }
private static StorageInfo CreateSimpleStorageModel() { var storage = new StorageInfo("Storage"); // Types table var t = new TableInfo(storage, "Types"); var tId = new ColumnInfo(t, "Id") { Type = new TypeInfo(typeof(int), false) }; var tValue = new ColumnInfo(t, "Value") { Type = new TypeInfo(typeof(string), 1024) }; var tData = new ColumnInfo(t, "Data") { Type = new TypeInfo(typeof(byte[]), 1024 * 1024) }; var tiPk = new PrimaryIndexInfo(t, "PK_Types"); new KeyColumnRef(tiPk, tId); tiPk.PopulateValueColumns(); var tiValue = new SecondaryIndexInfo(t, "IX_Value"); new KeyColumnRef(tiValue, tValue); tiValue.PopulatePrimaryKeyColumns(); var tiFt = new FullTextIndexInfo(t, "FT_Index"); new FullTextColumnRef(tiFt, tValue); // Objects table var o = new TableInfo(storage, "Objects"); var oId = new ColumnInfo(o, "Id") { Type = new TypeInfo(typeof(long), false) }; var oTypeId = new ColumnInfo(o, "TypeId") { Type = new TypeInfo(typeof(int), false) }; var oValue = new ColumnInfo(o, "Value") { Type = new TypeInfo(typeof(string), 1024) }; var oiPk = new PrimaryIndexInfo(o, "PK_Objects"); new KeyColumnRef(oiPk, oId); oiPk.PopulateValueColumns(); var oiTypeId = new SecondaryIndexInfo(o, "IX_TypeId"); new KeyColumnRef(oiTypeId, oTypeId); oiTypeId.PopulatePrimaryKeyColumns(); var oiValue = new SecondaryIndexInfo(o, "IX_Value"); new KeyColumnRef(oiValue, oValue); new IncludedColumnRef(oiValue, oTypeId); oiValue.PopulatePrimaryKeyColumns(); var ofkTypeId = new ForeignKeyInfo(o, "FK_TypeId") { PrimaryKey = tiPk, }; ofkTypeId.ForeignKeyColumns.Set(oiTypeId); storage.Validate(); return(storage); }