コード例 #1
0
		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();
			}
		}
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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();
            }
        }