PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/Bundles/Raven.Bundles.UniqueConstraints/UniqueConstraintsDeleteTrigger.cs

https://github.com/kairogyn/ravendb
C# | 51 lines | 40 code | 11 blank | 0 comment | 6 complexity | d3371c003d5466e975f2d943a109cc9b MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, CC-BY-SA-3.0
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Raven.Imports.Newtonsoft.Json.Linq;
  4. namespace Raven.Bundles.UniqueConstraints
  5. {
  6. using Abstractions.Data;
  7. using Database.Plugins;
  8. using Json.Linq;
  9. using Raven.Database.Extensions;
  10. using System;
  11. public class UniqueConstraintsDeleteTrigger : AbstractDeleteTrigger
  12. {
  13. public override void OnDelete(string key, TransactionInformation transactionInformation)
  14. {
  15. if (key.StartsWith("Raven"))
  16. return;
  17. var doc = Database.Get(key, transactionInformation);
  18. if (doc == null)
  19. return;
  20. var metadata = doc.Metadata;
  21. var entityName = metadata.Value<string>(Constants.RavenEntityName) + "/";
  22. var uniqueConstraits = metadata.Value<RavenJArray>(Constants.EnsureUniqueConstraints);
  23. if (uniqueConstraits == null)
  24. return;
  25. foreach (var property in uniqueConstraits)
  26. {
  27. var constraint = Util.GetConstraint(property);
  28. var prefix = "UniqueConstraints/" + entityName + constraint.PropName+ "/"; // UniqueConstraints/EntityNamePropertyName/
  29. var prop = doc.DataAsJson[constraint.PropName];
  30. string[] uniqueValues;
  31. if (!Util.TryGetUniqueValues(prop, out uniqueValues))
  32. continue;
  33. foreach (var uniqueValue in uniqueValues)
  34. {
  35. Database.Delete(prefix + Util.EscapeUniqueValue(uniqueValue, constraint.CaseInsensitive), null, transactionInformation);
  36. }
  37. }
  38. }
  39. }
  40. }