public void TestGetProperty() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { var r = new Random(0); var data = ""; for (var i = 0; i < 1024; i++) { data += 'a' + r.Next(26); } for (int i = 0; i < 5 * 1024; i++) { db.Set(string.Format("row{0}", i), data); } var stats = db.PropertyValue("leveldb.stats"); Assert.NotNull(stats); Assert.True(stats.Contains("Compactions")); } }
public void TestIterator() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); var expected = new[] { "London", "New York", "Tampa" }; var actual = new List<string>(); using(var iterator = db.CreateIterator(new ReadOptions())) { iterator.SeekToFirst(); while(iterator.IsValid()) { var key = iterator.GetKey(); actual.Add(key); iterator.Next(); } } Assert.Equal(expected, actual); } }
public void TestSnapshot() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Remove("New York"); using (var snapShot = db.CreateSnapshot()) { var readOptions = new ReadOptions { Snapshot = snapShot }; db.Set("New York", "blue"); Assert.Equal((string)db.Get("Tampa", readOptions), "green"); Assert.Equal((string)db.Get("London", readOptions), "red"); // Snapshot taken before key was updates Assert.Null(db.Get("New York", readOptions)); } // can see the change now Assert.Equal((string)db.Get("New York"), "blue"); } }
public void TestIterator() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); var expected = new[] { "London", "New York", "Tampa" }; var actual = new List <string>(); using (var iterator = db.CreateIterator(new ReadOptions())) { iterator.SeekToFirst(); while (iterator.IsValid()) { var key = iterator.GetKey(); actual.Add(key); iterator.Next(); } } Assert.Equal(expected, actual); } }
public void TestWriteBatch() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("NA", "Na"); using (var batch = new WriteBatch()) { batch.Remove("NA") .Set("Tampa", "Green") .Set("London", "red") .Set("New York", "blue"); db.Write(batch); } var expected = new[] { "London", "New York", "Tampa" }; var actual = from kv in db select(string) kv.Key; Assert.Equal(expected, actual.ToArray()); } }
/// <summary> /// set value /// </summary> /// <param name="key"></param> public static void Remove(string key) { CheckPath(); using (var db = new LDB(path)) { db.Remove(key); } }
/// <summary> /// exist value /// </summary> /// <param name="key"></param> public static bool Exists(string key) { CheckPath(); using (var db = new LDB(path)) { return(db.Get(key) != null); } }
/// <summary> /// set value /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void Set(string key, string value) { CheckPath(); using (var db = new LDB(path)) { db.Set(key, value); } }
/// <summary> /// get value /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static string Get(string key) { CheckPath(); using (var db = new LDB(path)) { return(db.Get(key)); } }
/// <summary> /// set value /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void Set <T>(string key, T value) { CheckPath(); using (var db = new LDB(path)) { db.Set(key, value.ToByte()); } }
public DBTests() { var tempPath = Path.GetTempPath(); var randName = Path.GetRandomFileName(); DatabasePath = Path.Combine(tempPath, randName); var options = new Options() { CreateIfMissing = true }; Database = new LDB(DatabasePath, options); }
public void Intro() { using(var database = new LDB(DatabasePath, new Options() { CreateIfMissing = true })) { database.Set("key1", "value1"); Assert.Equal("value1", (string)database.Get("key1")); Assert.True(database.Get("key1") != null); database.Remove("key1"); Assert.False(database.Get("key1") != null); Assert.Null(database.Get("key1")); } }
public void Error() { Assert.Throws<LevelDBException>(() => { var options = new Options() { CreateIfMissing = false }; var db = new LDB("non-existent", options); Assert.True(false); db.Get("key1"); }); }
public void TestOpen() { var path = CleanTestDB(); Assert.Throws<LevelDBException>(() => { using(var db = new LDB(path, new Options { CreateIfMissing = true })) { } using(var db = new LDB(path, new Options { ErrorIfExists = true })) { } }); }
public void Intro() { using (var database = new LDB(DatabasePath, new Options() { CreateIfMissing = true })) { database.Put("key1", "value1"); Assert.Equal("value1", (string)database.Get("key1")); Assert.True(database.Get("key1") != null); database.Delete("key1"); Assert.False(database.Get("key1") != null); Assert.Null(database.Get("key1")); } }
/// <summary> /// get value /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static T Get <T>(string key) where T : class, new() { CheckPath(); using (var db = new LDB(path)) { var item = db.Get(key); if (item == null) { return(new T()); } else { return(db.Get(key).ByteArray.ToModel <T>() ?? new T()); } } }
public void TestOpen() { var path = CleanTestDB(); Assert.Throws <LevelDBException>(() => { using (var db = new LDB(path, new Options { CreateIfMissing = true })) { } using (var db = new LDB(path, new Options { ErrorIfExists = true })) { } }); }
public void TestEnumerable() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); var expected = new[] { "London", "New York", "Tampa" }; var actual = from kv in db select(string) kv.Key; Assert.Equal(expected, actual.ToArray()); } }
public void ComparatorTest() { using (var database = new LDB(DatabasePath, new Options() { CreateIfMissing = true })) { for (int i = 0; i < 20; i++) { database.Put("AA:" + i, "valueA" + i); database.Put("BB:" + i, "valueB" + i); database.Put("CC:" + i, "valueC" + i); database.Put("BBX:" + i, "valueBX" + i); } } using (var database = new LDB(DatabasePath, new Options())) { using (var iter = database.CreateIterator()) { int testCount = 0; iter.Seek("BB:"); while (iter.IsValid()) { string key = iter.GetKey(); if (!key.StartsWith("BB:")) { break; } string value = iter.GetValue(); testCount++; Console.WriteLine("{0} -> {1}", key, value); iter.Next(); } Assert.Equal(20, testCount); } } }
public void TestCRUD() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); Assert.Equal((string)db.Get("Tampa"), "green"); Assert.Equal((string)db.Get("London"), "red"); Assert.Equal((string)db.Get("New York"), "blue"); db.Remove("New York"); Assert.Null(db.Get("New York")); db.Remove("New York"); } }
public void TestCRUD() { var path = CleanTestDB(); using (var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); Assert.Equal((string)db.Get("Tampa"), "green"); Assert.Equal((string)db.Get("London"), "red"); Assert.Equal((string)db.Get("New York"), "blue"); db.Remove("New York"); Assert.Null(db.Get("New York")); db.Remove("New York"); } }
public void ComparatorTest() { using(var database = new LDB(DatabasePath, new Options() { CreateIfMissing = true })) { for(int i = 0; i < 20; i++) { database.Set("AA:" + i, "valueA" + i); database.Set("BB:" + i, "valueB" + i); database.Set("CC:" + i, "valueC" + i); database.Set("BBX:" + i, "valueBX" + i); } } using(var database = new LDB(DatabasePath, new Options())) { using(var iter = database.CreateIterator()) { int testCount = 0; iter.Seek("BB:"); while(iter.IsValid()) { string key = iter.GetKey(); if(!key.StartsWith("BB:")) break; string value = iter.GetValue(); testCount++; Console.WriteLine("{0} -> {1}", key, value); iter.Next(); } Assert.Equal(20, testCount); } } }
public void TestSnapshot() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Remove("New York"); using(var snapShot = db.CreateSnapshot()) { var readOptions = new ReadOptions { Snapshot = snapShot }; db.Set("New York", "blue"); Assert.Equal((string)db.Get("Tampa", readOptions), "green"); Assert.Equal((string)db.Get("London", readOptions), "red"); // Snapshot taken before key was updates Assert.Null(db.Get("New York", readOptions)); } // can see the change now Assert.Equal((string)db.Get("New York"), "blue"); } }
public void TestGetProperty() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { var r = new Random(0); var data = ""; for(var i = 0; i < 1024; i++) { data += 'a' + r.Next(26); } for(int i = 0; i < 5 * 1024; i++) { db.Set(string.Format("row{0}", i), data); } var stats = db.PropertyValue("leveldb.stats"); Assert.NotNull(stats); Assert.True(stats.Contains("Compactions")); } }
public void TestWriteBatch() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("NA", "Na"); using(var batch = new WriteBatch()) { batch.Remove("NA") .Set("Tampa", "Green") .Set("London", "red") .Set("New York", "blue"); db.Write(batch); } var expected = new[] { "London", "New York", "Tampa" }; var actual = from kv in db select (string)kv.Key; Assert.Equal(expected, actual.ToArray()); } }
public void Cache() { Database.Dispose(); // open the DB with a cache that is not owned by LevelDB, then // close DB and then free the cache var options = new Options() { CacheSize = 64 }; Database = new LDB(DatabasePath, options); options = null; GC.Collect(); GC.WaitForPendingFinalizers(); Database.Set("key1", "value1"); Database.Dispose(); Database = null; GC.Collect(); GC.WaitForPendingFinalizers(); }
public void TestRepair() { TestCRUD(); LDB.Repair(DatabasePath, new Options()); }
public void TestEnumerable() { var path = CleanTestDB(); using(var db = new LDB(path, new Options { CreateIfMissing = true })) { db.Set("Tampa", "green"); db.Set("London", "red"); db.Set("New York", "blue"); var expected = new[] { "London", "New York", "Tampa" }; var actual = from kv in db select (string)kv.Key; Assert.Equal(expected, actual.ToArray()); } }
private WeakReference _parent; // as DB internal Snapshot(IntPtr handle, LDB parent) { _handle = handle; _parent = new WeakReference(parent); }
void Update() { if (dataLoadOver) { //根据按键更新showGUI if (Input.GetKeyDown(switchGUIKey)) { showGUI = !showGUI; } //根据showGUI更新GUI的显示 if (showGUI && !ui_StarMapToolsBasePanel.activeSelf || !showGUI && ui_StarMapToolsBasePanel.activeSelf) { ui_StarMapToolsBasePanel.SetActive(!ui_StarMapToolsBasePanel.activeSelf); } //核心内容 if (showGUI) { //判断是否处于新建游戏的状态 if (UIRoot.instance.galaxySelect.starmap.galaxyData != null) { if (SearchNext) { LoadResAmount.isOn = false; UIRoot.instance.galaxySelect.Rerand(); } //更新数据 if (galaxy != UIRoot.instance.galaxySelect.starmap.galaxyData) { TitleText.text = "新游戏模式"; galaxy = UIRoot.instance.galaxySelect.starmap.galaxyData; StarList.ClearOptions(); ResultList.ClearOptions(); foreach (StarData star in galaxy.stars) { StarList.options.Add(new Dropdown.OptionData(star.name)); } StarList.value = -1; StarList.RefreshShownValue(); if (SearchNext) { SearchButton.onClick.Invoke(); } } } //判断是否处于游戏中 else if (GameMain.galaxy != null) { SearchNext = false; //更新数据 if (galaxy != GameMain.galaxy) { TitleText.text = "读档模式"; galaxy = GameMain.galaxy; StarList.ClearOptions(); ResultList.ClearOptions(); foreach (StarData star in galaxy.stars) { StarList.options.Add(new Dropdown.OptionData(star.name)); } StarList.value = -1; StarList.RefreshShownValue(); } //传送功能 if (Input.GetKeyDown(tpKey)) { object target = galaxy.StarById(StarList.value + 1); GameMain.data.ArriveStar((StarData)target); if (PlanetList.value > 0) { target = ((StarData)target).planets[PlanetList.value - 1]; } StartCoroutine(wait(target)); } } //等待数据加载 else if (TitleText.text != "等待数据") { TitleText.text = "等待数据"; StarList.ClearOptions(); PlanetList.ClearOptions(); ResultList.ClearOptions(); InfoText.text = ""; SearchNext = false; } if (loadingStarData) { var star = galaxy.StarById(StarList.value + 1); if (star.loaded || !LoadResAmount.isOn) { loadingStarData = false; } PlanetList.value = -1; PlanetList.RefreshShownValue(); } } } //加载数据 else if (UIRoot.instance.overlayCanvas.transform != null && GameMain.instance != null) { //加载UI ui_StarMapToolsBasePanel = GameObject.Instantiate(prefab_StarMapToolsBasePanel, UIRoot.instance.overlayCanvas.transform); ui_StarMapToolsBasePanel.transform.Find("TitleText").gameObject.AddComponent <Drag>(); ui_StarMapToolsBasePanel.SetActive(false); //获取控件 TitleText = ui_StarMapToolsBasePanel.transform.Find("TitleText").GetComponent <Text>(); StarList = ui_StarMapToolsBasePanel.transform.Find("StarList").GetComponent <Dropdown>(); PlanetList = ui_StarMapToolsBasePanel.transform.Find("PlanetList").GetComponent <Dropdown>(); InfoText = ui_StarMapToolsBasePanel.transform.Find("InfoText").GetComponent <InputField>(); LoadResAmount = ui_StarMapToolsBasePanel.transform.Find("LoadResAmount").GetComponent <Toggle>(); OptionsList = ui_StarMapToolsBasePanel.transform.Find("OptionsList").GetComponent <ScrollRect>(); SearchNextToggle = ui_StarMapToolsBasePanel.transform.Find("SearchNextToggle").GetComponent <Toggle>(); DysonLuminoText = ui_StarMapToolsBasePanel.transform.Find("DysonLuminoText").GetComponent <InputField>(); DistanceText = ui_StarMapToolsBasePanel.transform.Find("DistanceText").GetComponent <InputField>(); ResultList = ui_StarMapToolsBasePanel.transform.Find("ResultList").GetComponent <Dropdown>(); SearchButton = ui_StarMapToolsBasePanel.transform.Find("SearchButton").GetComponent <Button>(); var TempToggle = OptionsList.content.Find("TempToggle").GetComponent <Toggle>(); //获取数据 var TempStarTypes = starSearcher.AllStarTypes; var TempPlanteTypes = starSearcher.AllPlanteTypes; var TempSingularityTypes = starSearcher.AllSingularityTypes; var TempVeinTypes = starSearcher.AllVeinTypes; //各种选项的列表 var StarTypesToggleList = new List <Toggle>(); var PlanteTypesToggleList = new List <Toggle>(); var SingularityTypesToggleList = new List <Toggle>(); var VeinTypesToggleList = new List <Toggle>(); //实例化 for (int i = 0; i < TempStarTypes.Count; i++) { var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>(); toggle.Find("Label").GetComponent <Text>().text = TempStarTypes[i]; toggle.GetComponent <Toggle>().isOn = true; toggle.anchorMax = new Vector2((float)0.25, (float)(1 - i * 0.1)); toggle.anchorMin = new Vector2(0, (float)(1 - (i + 1) * 0.1)); toggle.gameObject.SetActive(true); StarTypesToggleList.Add(toggle.GetComponent <Toggle>()); } for (int i = 0; i < TempPlanteTypes.Count; i++) { var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>(); toggle.Find("Label").GetComponent <Text>().text = TempPlanteTypes[i]; toggle.anchorMax = new Vector2((float)0.5, (float)(1 - i * 0.1)); toggle.anchorMin = new Vector2((float)0.25, (float)(1 - (i + 1) * 0.1)); toggle.gameObject.SetActive(true); PlanteTypesToggleList.Add(toggle.GetComponent <Toggle>()); } for (int i = 0; i < TempSingularityTypes.Count; i++) { var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>(); toggle.Find("Label").GetComponent <Text>().text = TempSingularityTypes[i]; toggle.anchorMax = new Vector2((float)0.75, (float)(1 - i * 0.1)); toggle.anchorMin = new Vector2((float)0.5, (float)(1 - (i + 1) * 0.1)); toggle.gameObject.SetActive(true); SingularityTypesToggleList.Add(toggle.GetComponent <Toggle>()); } for (int i = 0; i < TempVeinTypes.Count; i++) { var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>(); toggle.Find("Label").GetComponent <Text>().text = TempVeinTypes[i]; toggle.anchorMax = new Vector2(1, (float)(1 - i * 0.1)); toggle.anchorMin = new Vector2((float)0.75, (float)(1 - (i + 1) * 0.1)); toggle.gameObject.SetActive(true); VeinTypesToggleList.Add(toggle.GetComponent <Toggle>()); } //切换恒星事件 StarList.onValueChanged.AddListener(delegate { PlanetList.ClearOptions(); if (StarList.value >= 0 && StarList.value < galaxy.starCount) { var star = galaxy.StarById(StarList.value + 1); if (LoadResAmount.isOn && UIRoot.instance.galaxySelect.starmap.galaxyData != null && !star.loaded) { star.Load(); } PlanetList.options.Add(new Dropdown.OptionData("恒星")); foreach (PlanetData planet in star.planets) { PlanetList.options.Add(new Dropdown.OptionData(planet.name)); } PlanetList.value = -1; PlanetList.RefreshShownValue(); } }); //切换星球事件 PlanetList.onValueChanged.AddListener(delegate { var star = galaxy.StarById(StarList.value + 1); if (PlanetList.value > 0 && PlanetList.value <= star.planetCount) { var planet = star.planets[PlanetList.value - 1]; var info = planet.name + "的信息:\n"; info += "词条:" + planet.singularityString + "\n";//词条 info += "类型:" + planet.typeString + "\n"; string waterType = "未知"; switch (planet.waterItemId) { case -1: waterType = "熔岩"; break; case 0: waterType = "无"; break; default: waterType = LDB.ItemName(planet.waterItemId); break; } info += "海洋类型:" + waterType + "\n"; if (planet.type != EPlanetType.Gas && planet.veinSpotsSketch != null) { info += "矿物信息:" + "\n"; for (int i = 0; i < LDB.veins.Length; i++) { var name = LDB.veins.dataArray[i].name; object amount = planet.veinAmounts[i + 1]; if (planet.veinSpotsSketch[i + 1] == 0) { amount = "无"; } else if ((long)amount == 0) { if (!LoadResAmount.isOn) { amount = "有"; } else if (UIRoot.instance.galaxySelect.starmap.galaxyData != null) { amount = "正在加载"; loadingStarData = true; } else { amount = "未加载,靠近后显示"; } } else if (i + 1 == 7) { amount = (long)amount * (double)VeinData.oilSpeedMultiplier + " /s"; } info += " " + name + ":" + amount + "\n"; } } InfoText.text = info; } else if (PlanetList.value == 0) { var info = star.name + "星系的信息:" + (loadingStarData?"正在加载":"") + "\n"; info += "恒星类型:" + star.typeString + "\n"; info += "星球数量:" + star.planetCount + "\n"; info += "光度:" + star.dysonLumino.ToString() + "\n"; info += "距离初始星系恒星:" + ((star.uPosition - galaxy.StarById(1).uPosition).magnitude / 2400000.0).ToString() + "光年\n"; info += "星球列表:"; foreach (PlanetData planet in star.planets) { info += "-" + planet.typeString + " " + planet.singularityString; } info += "\n矿物信息:" + "\n"; for (int i = 0; i < LDB.veins.Length; i++) { var name = LDB.veins.dataArray[i].name; object amount = star.GetResourceAmount(i + 1); if (star.GetResourceSpots(i + 1) == 0) { amount = "无"; } else if ((long)amount == 0) { if (!LoadResAmount.isOn) { amount = "有"; } else if (UIRoot.instance.galaxySelect.starmap.galaxyData != null) { amount = "正在加载"; loadingStarData = true; } else { amount = "未加载,靠近后显示"; } } else if (i + 1 == 7) { amount = (long)amount * (double)VeinData.oilSpeedMultiplier + " /s"; } info += " " + name + ":" + amount + "\n"; } InfoText.text = info; } }); //搜索事件 SearchButton.onClick.AddListener(delegate { SearchNext = false; starSearcher.galaxyData = galaxy; starSearcher.Clear(); float.TryParse(DysonLuminoText.text == "" ? "0":DysonLuminoText.text, out starSearcher.dysonLumino); float.TryParse(DistanceText.text == ""?"1000": DistanceText.text, out starSearcher.distance); foreach (Toggle toggle in StarTypesToggleList) { if (toggle.isOn) { var typeString = toggle.transform.Find("Label").GetComponent <Text>().text; starSearcher.StarTypes.Add(typeString); } } foreach (Toggle toggle in PlanteTypesToggleList) { if (toggle.isOn) { var typeString = toggle.transform.Find("Label").GetComponent <Text>().text; starSearcher.PlanteTypes.Add(typeString); } } foreach (Toggle toggle in SingularityTypesToggleList) { if (toggle.isOn) { var typeString = toggle.transform.Find("Label").GetComponent <Text>().text; starSearcher.SingularityTypes.Add(typeString); } } foreach (Toggle toggle in VeinTypesToggleList) { if (toggle.isOn) { var typeString = toggle.transform.Find("Label").GetComponent <Text>().text; starSearcher.VeinTypes.Add(typeString); } } SerachResult = starSearcher.Search(); ResultList.ClearOptions(); foreach (StarData star in SerachResult) { ResultList.options.Add(new Dropdown.OptionData(star.name)); } ResultList.value = -1; ResultList.RefreshShownValue(); if (SerachResult.Count == 0 && SearchNextToggle.isOn) { SearchNext = true; } }); //切换搜索结果事件 ResultList.onValueChanged.AddListener(delegate { StarList.value = SerachResult[ResultList.value].index; StarList.RefreshShownValue(); }); dataLoadOver = true; } }