From c2dc6889aefed64cdb03e472c7f138fe9863eba2 Mon Sep 17 00:00:00 2001 From: Tom RAMBEAU Date: Fri, 9 Feb 2024 17:34:03 +0100 Subject: [PATCH 1/2] suite tp2 --- .../Migrations/20240209013745_Mg.Designer.cs | 47 ------- .../Migrations/20240209013745_Mg.cs | 36 ----- .../Migrations/20240209155948_Mg.Designer.cs | 89 ++++++++++++ .../Migrations/20240209155948_Mg.cs | 65 +++++++++ .../Migrations/StubbedContextModelSnapshot.cs | 130 ++++++++++++------ tp1/StubbedContextLib/StubbedContext.cs | 11 +- 6 files changed, 249 insertions(+), 129 deletions(-) delete mode 100644 tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs delete mode 100644 tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs create mode 100644 tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs create mode 100644 tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs diff --git a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs b/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs deleted file mode 100644 index bb016fa..0000000 --- a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubbedContext))] - [Migration("20240209013745_Mg")] - partial class Mg - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs b/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs deleted file mode 100644 index 9ac614b..0000000 --- a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - /// - public partial class Mg : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BooksSet", - columns: table => new - { - ID = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - Title = table.Column(type: "TEXT", nullable: false), - Author = table.Column(type: "TEXT", nullable: false), - Isbn = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_BooksSet", x => x.ID); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "BooksSet"); - } - } -} diff --git a/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs new file mode 100644 index 0000000..154b565 --- /dev/null +++ b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs @@ -0,0 +1,89 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubbedContext))] + [Migration("20240209155948_Mg")] + partial class Mg + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Author") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Isbn") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("OwnerId") + .HasColumnType("INTEGER"); + + b.Property("PersonId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("OwnerId"); + + b.ToTable("BooksSet"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("PersonSet"); + }); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.HasOne("Entities.PersonEntity", "Owner") + .WithMany("Books") + .HasForeignKey("OwnerId"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Navigation("Books"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs new file mode 100644 index 0000000..f03f257 --- /dev/null +++ b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs @@ -0,0 +1,65 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + /// + public partial class Mg : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "PersonSet", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + FirstName = table.Column(type: "TEXT", nullable: false), + LastName = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PersonSet", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BooksSet", + columns: table => new + { + ID = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Title = table.Column(type: "TEXT", nullable: false), + Author = table.Column(type: "TEXT", nullable: false), + Isbn = table.Column(type: "TEXT", nullable: false), + PersonId = table.Column(type: "INTEGER", nullable: false), + OwnerId = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BooksSet", x => x.ID); + table.ForeignKey( + name: "FK_BooksSet_PersonSet_OwnerId", + column: x => x.OwnerId, + principalTable: "PersonSet", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_BooksSet_OwnerId", + table: "BooksSet", + column: "OwnerId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BooksSet"); + + migrationBuilder.DropTable( + name: "PersonSet"); + } + } +} diff --git a/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs b/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs index 1454cd1..3e7e88c 100644 --- a/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs +++ b/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs @@ -1,44 +1,86 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubbedContext))] - partial class StubbedContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubbedContext))] + partial class StubbedContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Author") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Isbn") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("OwnerId") + .HasColumnType("INTEGER"); + + b.Property("PersonId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("OwnerId"); + + b.ToTable("BooksSet"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("PersonSet"); + }); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.HasOne("Entities.PersonEntity", "Owner") + .WithMany("Books") + .HasForeignKey("OwnerId"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Navigation("Books"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tp1/StubbedContextLib/StubbedContext.cs b/tp1/StubbedContextLib/StubbedContext.cs index 418364f..4f79e00 100644 --- a/tp1/StubbedContextLib/StubbedContext.cs +++ b/tp1/StubbedContextLib/StubbedContext.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -15,8 +16,14 @@ namespace StubbedContextLib public List Books { get; set; } = new List(); public StubbedContext() { - Books.Add(new BookEntity("test", "test", "test")); - Books.Add(new BookEntity("test2", "test2", "test2")); + BookEntity b0 = new BookEntity() { Title = "test", Author = "test", Isbn = "test" }; + BookEntity b1 = new BookEntity() { Title = "test2", Author = "test2", Isbn = "test2" }; + Books.Add(b0); + Books.Add(b1); + Collection CB = new Collection(); + CB.Add(b0); + CB.Add(b1); + Persons.Add(new PersonEntity() { FirstName = "coco", LastName = "test", Books = CB }); } } From 3dd8e6dcb75878f4caad2d1968bd9678721a1ebf Mon Sep 17 00:00:00 2001 From: Tom RAMBEAU Date: Fri, 9 Feb 2024 17:35:06 +0100 Subject: [PATCH 2/2] oublie push --- .../Migrations/20240209010818_Mg.Designer.cs | 47 -------- .../Migrations/20240209010818_Mg.cs | 36 ------- .../Migrations/LibraryContextModelSnapshot.cs | 44 -------- tp1/Entities/BookEntity.cs | 11 +- tp1/Entities/Entities.csproj | 13 +++ tp1/Entities/PersonEntity.cs | 5 +- tp1/TestStub/Program.cs | 102 ++++++++++++++++-- tp1/TestStub/tp.Books.db | Bin 20480 -> 28672 bytes tp1/TestStub/tp.Books.db-shm | Bin 0 -> 32768 bytes tp1/TestStub/tp.Books.db-wal | Bin 0 -> 37112 bytes 10 files changed, 113 insertions(+), 145 deletions(-) delete mode 100644 tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs delete mode 100644 tp1/DbContextLib/Migrations/20240209010818_Mg.cs delete mode 100644 tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs create mode 100644 tp1/TestStub/tp.Books.db-shm create mode 100644 tp1/TestStub/tp.Books.db-wal diff --git a/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs b/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs deleted file mode 100644 index 36c19de..0000000 --- a/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -using DbContextLib; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace DbContextLib.Migrations -{ - [DbContext(typeof(LibraryContext))] - [Migration("20240209010818_Mg")] - partial class Mg - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/DbContextLib/Migrations/20240209010818_Mg.cs b/tp1/DbContextLib/Migrations/20240209010818_Mg.cs deleted file mode 100644 index 0ce9e15..0000000 --- a/tp1/DbContextLib/Migrations/20240209010818_Mg.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DbContextLib.Migrations -{ - /// - public partial class Mg : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BooksSet", - columns: table => new - { - ID = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - Title = table.Column(type: "TEXT", nullable: false), - Author = table.Column(type: "TEXT", nullable: false), - Isbn = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_BooksSet", x => x.ID); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "BooksSet"); - } - } -} diff --git a/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs b/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs deleted file mode 100644 index 61df967..0000000 --- a/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -using DbContextLib; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace DbContextLib.Migrations -{ - [DbContext(typeof(LibraryContext))] - partial class LibraryContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/Entities/BookEntity.cs b/tp1/Entities/BookEntity.cs index 01711d6..1849e64 100644 --- a/tp1/Entities/BookEntity.cs +++ b/tp1/Entities/BookEntity.cs @@ -9,17 +9,14 @@ namespace Entities public class BookEntity { - public int ID { get; set; } + public long ID { get; set; } public string Title { get; set; } public string Author { get; set; } public string Isbn { get; set; } - public PersonEntity? Person { get; set; } + public int PersonId { get; set; } + public PersonEntity? Owner { get; set; } - public BookEntity(string title, string author, string isbn) { - Title = title; - Author = author; - Isbn = isbn; - } + } } diff --git a/tp1/Entities/Entities.csproj b/tp1/Entities/Entities.csproj index bb23fb7..0c79874 100644 --- a/tp1/Entities/Entities.csproj +++ b/tp1/Entities/Entities.csproj @@ -6,4 +6,17 @@ enable + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/tp1/Entities/PersonEntity.cs b/tp1/Entities/PersonEntity.cs index 5f0e45c..8304147 100644 --- a/tp1/Entities/PersonEntity.cs +++ b/tp1/Entities/PersonEntity.cs @@ -8,11 +8,12 @@ namespace Entities { public class PersonEntity { - public long Id { get; set; } + public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } - public ICollection Books { get; set; } + public ICollection Books { get; set; } = new List(); + } } diff --git a/tp1/TestStub/Program.cs b/tp1/TestStub/Program.cs index b2de216..3bf9e2d 100644 --- a/tp1/TestStub/Program.cs +++ b/tp1/TestStub/Program.cs @@ -2,26 +2,32 @@ using Entities; using DbContextLib; using Microsoft.Extensions.Options; +using System.Reflection; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore; // See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!"); using (var context = new LibraryContext()) { - BookEntity chewie = new BookEntity("B3", "test1", "test1"); - BookEntity yoda = new BookEntity ("B4", "test2", "test2"); - BookEntity ewok = new BookEntity ("mistake", "test3", "test3"); - BookEntity the100 = new BookEntity("the100", "test4", "test4"); + context.Database.EnsureCreated(); - context.BooksSet.Add(chewie); - context.BooksSet.Add(yoda); - context.BooksSet.Add(ewok); - context.BooksSet.Add(the100); + PersonEntity p1 = new PersonEntity() { FirstName = "Tom", LastName = "Rambeau" }; + PersonEntity p2 = new PersonEntity() { FirstName = "Erwan", LastName = "Manager" }; + BookEntity chewie = new BookEntity() { Title = "mistake", Author = "test1", Isbn ="test1"}; + BookEntity the100 = new BookEntity() { Title = "the100", Author = "test4", Isbn = "test4", Owner = p1 }; + BookEntity GOT = new BookEntity() { Title = "GOT", Author = "lastTest", Isbn = "lastTest"}; + + context.Add(p1); + context.Add(p2); + context.Add(chewie); + context.Add(GOT); + context.Add(the100); context.SaveChanges(); } - using (var context = new LibraryContext()) { foreach (var n in context.BooksSet) @@ -48,4 +54,82 @@ using (var context = new LibraryContext()) context.Remove(impostor); context.SaveChanges(); +} + +using (var context = new LibraryContext()) +{ + Console.WriteLine("All people"); + var people = context.PersonSet; + foreach(var p in people) + { + Console.WriteLine($"firstname: {p.FirstName}, lastname: {p.LastName}"); + } +} + +//emprunt +using (var context = new LibraryContext()) +{ + var books = context.BooksSet; + foreach(var book in books) + { + if (book.Owner == null) + { + book.Owner = context.PersonSet.Where(b => b.FirstName.StartsWith("E")).Include(b => b.Books).First(); + Console.WriteLine($" nouveau propriétaire du livre: {book.Owner.FirstName}"); + break; + } + } + + context.SaveChanges(); +} + + +//Rendu +using (var context = new LibraryContext()) +{ + + var books = context.BooksSet; + if (books != null) + { + foreach (var book in books) + { + //Console.WriteLine(book.Owner.FirstName); + if (book.Owner != null) + { + Console.WriteLine($" propriétaire du livre avant rendu : {book.Owner.FirstName}"); + book.Owner = null; + Console.WriteLine("propriétaire a rendu le libre"); + break; + } + else + { + Console.WriteLine("livre sans propriétaire" + book.Title); + } + } + } + + context.SaveChanges(); +} + + +//DeleteAllItem +using (var context = new LibraryContext()) +{ + var allBooks = context.BooksSet; + if ( allBooks != null) + { + foreach (var book in allBooks) + { + context.BooksSet.Remove(book); + } + } + var allPeople = context.PersonSet; + if (allBooks != null) + { + foreach (var person in allPeople) + { + context.PersonSet.Remove(person); + } + } + context.SaveChanges(); } \ No newline at end of file diff --git a/tp1/TestStub/tp.Books.db b/tp1/TestStub/tp.Books.db index e005c58e0653cf1e2d6553f766566f742d9ece41..5fb405f76408adba5e105fb0524a173130b40dfc 100644 GIT binary patch delta 864 zcmZuu%WD%s7~g4{Y)!g5iB;DUmJD;S-B1wICMfihq?52V*{z!`#Dj#byOh#AU=ykI zl2*~Pl7B$Fi%O1q@LCTZJme@I?7iScyy%z5CbechmkrjZ6Ip}EaTo}ufxWR&D|gQna~%E#^#yVbyjV>k*vke~j>X zhJb%^Gq}g$9{vHApYi%U^2x~i%9JqUi=lD$I2a0-JaF97JKV2Bd$RG+S$fX$iE|1zDcs^14}tz$QT63fR_El>$g=sw$e~xjuj{+Fb+Rco1}h=Q_i` f@fkkFr`-tY;p@?*RRFFg`lynEIq3Hx6i@yInRW1} delta 323 zcmZp8z}T>Wae_QAD+2;BP1LdBVc}iGz;}s%E$?oi%Sx- zQ$a$;U_y|Ml|c}w9IVO+BxEGYg4G0|zgVROSs}{7nhin94F#EyO;7?GA;^fKj2Eb% ck^d6||EJA@3b*(t2JrFmFfz+B!u-qu0H|VDApigX diff --git a/tp1/TestStub/tp.Books.db-shm b/tp1/TestStub/tp.Books.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..93ce7a3675f2b476acf2f1bdc5154d4b93ec11fb GIT binary patch literal 32768 zcmeI)F%AJi6b9hITDB1lk+^_{`ze)5aRsNKQaOTNK__m&8xh%7Df|7&%bQFlGnwxI zZ*rNZoFb}~(y)r&i`tEDsal@~tH}v1W zO(3OCOj;~c9|eI13KTJ4G*2TH0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly VK!5-N0t5&UAV7cs0RsOg@B+;XCLI6( literal 0 HcmV?d00001 diff --git a/tp1/TestStub/tp.Books.db-wal b/tp1/TestStub/tp.Books.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..29d122f5d7c1f43e0144fefc95230b3c5f2731f0 GIT binary patch literal 37112 zcmeI*Pe>F|9Ki86?yjrS_(WO%EmoHja}!s?)oUQ0q_U;^L{oaz%h{)Un|g;9dZfy~y*_iZ{$Bg%6OU}EEYkBzujqL_s~?y) z6a)}J009ILKmY**5I_I{1Q7VI1S)I7-RVnCve!vE=iIc6t*t5?PbK=C#A(;LP!aK~ z{1)ZSezm=Y^az+M%FP!{j7>jJKYOTcy(;qpb4t(Y1#_H&00IagfB*srAbjF%?o^*s9o)U**8nPfG2M=gGK-W1Q0*~ z0R#|0009IL@RGnz;st(=GWhd&fxJ9|i_16aLZcnawqBC;1tgEaWD$@@;H9UEu_Ax~ z0tg_000IagfB*srctzl^%?k)f{qN-wyc_=7eK+_xTBg@!UO@5)Ocnuo1YUWf7$*V< zAb3ls#U5&;Ad zKmY**5I_I{1Q0*~ft?EMYP^69rmo<+gW>NB5?Te8F*JWpkhkujdK;Q7e==HHrq?#( s1y=MI;sthkqv?+T0tg_000IagfB*srAb`NX708blkg@p93WSl)Z?p(JSO5S3 literal 0 HcmV?d00001