public async Task Test_StringIntern_Example() { using (var db = await OpenTestPartitionAsync()) { var stringSpace = db.Partition.ByKey("Strings"); var dataSpace = db.Partition.ByKey("Data"); // clear all previous data await DeleteSubspace(db, stringSpace); await DeleteSubspace(db, dataSpace); var stringTable = new FdbStringIntern(stringSpace); // insert a bunch of strings using (var tr = db.BeginTransaction(this.Cancellation)) { tr.Set(dataSpace.Keys.Encode("a"), await stringTable.InternAsync(tr, "testing 123456789")); tr.Set(dataSpace.Keys.Encode("b"), await stringTable.InternAsync(tr, "dog")); tr.Set(dataSpace.Keys.Encode("c"), await stringTable.InternAsync(tr, "testing 123456789")); tr.Set(dataSpace.Keys.Encode("d"), await stringTable.InternAsync(tr, "cat")); tr.Set(dataSpace.Keys.Encode("e"), await stringTable.InternAsync(tr, "cat")); await tr.CommitAsync(); } #if DEBUG await DumpSubspace(db, stringSpace); await DumpSubspace(db, dataSpace); #endif // check the contents of the data using (var tr = db.BeginTransaction(this.Cancellation)) { var uid_a = await tr.GetAsync(dataSpace.Keys.Encode("a")); var uid_b = await tr.GetAsync(dataSpace.Keys.Encode("b")); var uid_c = await tr.GetAsync(dataSpace.Keys.Encode("c")); var uid_d = await tr.GetAsync(dataSpace.Keys.Encode("d")); var uid_e = await tr.GetAsync(dataSpace.Keys.Encode("e")); // a, b, d should be different Assert.That(uid_b, Is.Not.EqualTo(uid_a)); Assert.That(uid_d, Is.Not.EqualTo(uid_a)); // a should equal c Assert.That(uid_c, Is.EqualTo(uid_a)); // d should equal e Assert.That(uid_e, Is.EqualTo(uid_d)); // perform a lookup var str_a = await stringTable.LookupAsync(tr, uid_a); var str_b = await stringTable.LookupAsync(tr, uid_b); var str_c = await stringTable.LookupAsync(tr, uid_c); var str_d = await stringTable.LookupAsync(tr, uid_d); var str_e = await stringTable.LookupAsync(tr, uid_e); Assert.That(str_a, Is.EqualTo("testing 123456789")); Assert.That(str_b, Is.EqualTo("dog")); Assert.That(str_c, Is.EqualTo(str_a)); Assert.That(str_d, Is.EqualTo("cat")); Assert.That(str_e, Is.EqualTo(str_d)); } stringTable.Dispose(); } }
public async Task Test_StringIntern_Example() { using (var db = await OpenTestPartitionAsync()) { var stringSpace = db.Partition.ByKey("Strings"); var dataSpace = db.Partition.ByKey("Data"); // clear all previous data await DeleteSubspace(db, stringSpace); await DeleteSubspace(db, dataSpace); var stringTable = new FdbStringIntern(stringSpace); // insert a bunch of strings using (var tr = db.BeginTransaction(this.Cancellation)) { tr.Set(dataSpace.Keys.Encode("a"), await stringTable.InternAsync(tr, "testing 123456789")); tr.Set(dataSpace.Keys.Encode("b"), await stringTable.InternAsync(tr, "dog")); tr.Set(dataSpace.Keys.Encode("c"), await stringTable.InternAsync(tr, "testing 123456789")); tr.Set(dataSpace.Keys.Encode("d"), await stringTable.InternAsync(tr, "cat")); tr.Set(dataSpace.Keys.Encode("e"), await stringTable.InternAsync(tr, "cat")); await tr.CommitAsync(); } #if DEBUG await DumpSubspace(db, stringSpace); await DumpSubspace(db, dataSpace); #endif // check the contents of the data using (var tr = db.BeginTransaction(this.Cancellation)) { var uid_a = await tr.GetAsync(dataSpace.Keys.Encode("a")); var uid_b = await tr.GetAsync(dataSpace.Keys.Encode("b")); var uid_c = await tr.GetAsync(dataSpace.Keys.Encode("c")); var uid_d = await tr.GetAsync(dataSpace.Keys.Encode("d")); var uid_e = await tr.GetAsync(dataSpace.Keys.Encode("e")); // a, b, d should be different Assert.That(uid_b, Is.Not.EqualTo(uid_a)); Assert.That(uid_d, Is.Not.EqualTo(uid_a)); // a should equal c Assert.That(uid_c, Is.EqualTo(uid_a)); // d should equal e Assert.That(uid_e, Is.EqualTo(uid_d)); // perform a lookup var str_a = await stringTable.LookupAsync(tr, uid_a); var str_b = await stringTable.LookupAsync(tr, uid_b); var str_c = await stringTable.LookupAsync(tr, uid_c); var str_d = await stringTable.LookupAsync(tr, uid_d); var str_e = await stringTable.LookupAsync(tr, uid_e); Assert.That(str_a, Is.EqualTo("testing 123456789")); Assert.That(str_b, Is.EqualTo("dog")); Assert.That(str_c, Is.EqualTo(str_a)); Assert.That(str_d, Is.EqualTo("cat")); Assert.That(str_e, Is.EqualTo(str_d)); } stringTable.Dispose(); } }
public async Task Test_StringIntern_Example() { using (var db = await OpenTestPartitionAsync()) { var location = db.Root["StringInterning"]; await CleanLocation(db, location); var stringSpace = location.ByKey("Strings"); var dataSpace = location.ByKey("Data").AsTyped <string>(); var stringTable = new FdbStringIntern(stringSpace); // insert a bunch of strings await stringTable.WriteAsync(db, async (tr, table) => { Assert.That(table, Is.Not.Null); var va = await table.InternAsync(tr, "testing 123456789"); var vb = await table.InternAsync(tr, "dog"); var vc = await table.InternAsync(tr, "testing 123456789"); var vd = await table.InternAsync(tr, "cat"); var ve = await table.InternAsync(tr, "cat"); var subspace = await dataSpace.Resolve(tr); tr.Set(subspace["a"], va); tr.Set(subspace["b"], vb); tr.Set(subspace["c"], vc); tr.Set(subspace["d"], vd); tr.Set(subspace["e"], ve); }, this.Cancellation); #if DEBUG await DumpSubspace(db, stringSpace); await DumpSubspace(db, dataSpace); #endif // check the contents of the data await stringTable.ReadAsync(db, async (tr, table) => { var subspace = await dataSpace.Resolve(tr); var uid_a = await tr.GetAsync(subspace["a"]); var uid_b = await tr.GetAsync(subspace["b"]); var uid_c = await tr.GetAsync(subspace["c"]); var uid_d = await tr.GetAsync(subspace["d"]); var uid_e = await tr.GetAsync(subspace["e"]); // a, b, d should be different Assert.That(uid_b, Is.Not.EqualTo(uid_a)); Assert.That(uid_d, Is.Not.EqualTo(uid_a)); // a should equal c Assert.That(uid_c, Is.EqualTo(uid_a)); // d should equal e Assert.That(uid_e, Is.EqualTo(uid_d)); // perform a lookup var str_a = await table.LookupAsync(tr, uid_a); var str_b = await table.LookupAsync(tr, uid_b); var str_c = await table.LookupAsync(tr, uid_c); var str_d = await table.LookupAsync(tr, uid_d); var str_e = await table.LookupAsync(tr, uid_e); Assert.That(str_a, Is.EqualTo("testing 123456789")); Assert.That(str_b, Is.EqualTo("dog")); Assert.That(str_c, Is.EqualTo(str_a)); Assert.That(str_d, Is.EqualTo("cat")); Assert.That(str_e, Is.EqualTo(str_d)); }, this.Cancellation); stringTable.Dispose(); } }