SqliteExtensions.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Globalization;
  3. using MediaBrowser.Model.IO;
  4. using MediaBrowser.Model.Serialization;
  5. using SQLitePCL.pretty;
  6. namespace Emby.Server.Implementations.Data
  7. {
  8. public static class SqliteExtensions
  9. {
  10. public static void RunQueries(this SQLiteDatabaseConnection connection, string[] queries)
  11. {
  12. if (queries == null)
  13. {
  14. throw new ArgumentNullException("queries");
  15. }
  16. connection.RunInTransaction(conn =>
  17. {
  18. //foreach (var query in queries)
  19. //{
  20. // conn.Execute(query);
  21. //}
  22. conn.ExecuteAll(string.Join(";", queries));
  23. });
  24. }
  25. public static byte[] ToGuidParamValue(this string str)
  26. {
  27. return ToGuidParamValue(new Guid(str));
  28. }
  29. public static byte[] ToGuidParamValue(this Guid guid)
  30. {
  31. return guid.ToByteArray();
  32. }
  33. public static Guid ReadGuid(this IResultSetValue result)
  34. {
  35. return new Guid(result.ToBlob());
  36. }
  37. public static string ToDateTimeParamValue(this DateTime dateValue)
  38. {
  39. var kind = DateTimeKind.Utc;
  40. return (dateValue.Kind == DateTimeKind.Unspecified)
  41. ? DateTime.SpecifyKind(dateValue, kind).ToString(
  42. GetDateTimeKindFormat(kind),
  43. CultureInfo.InvariantCulture)
  44. : dateValue.ToString(
  45. GetDateTimeKindFormat(dateValue.Kind),
  46. CultureInfo.InvariantCulture);
  47. }
  48. private static string GetDateTimeKindFormat(
  49. DateTimeKind kind)
  50. {
  51. return (kind == DateTimeKind.Utc) ? _datetimeFormatUtc : _datetimeFormatLocal;
  52. }
  53. /// <summary>
  54. /// An array of ISO-8601 DateTime formats that we support parsing.
  55. /// </summary>
  56. private static string[] _datetimeFormats = new string[] {
  57. "THHmmssK",
  58. "THHmmK",
  59. "HH:mm:ss.FFFFFFFK",
  60. "HH:mm:ssK",
  61. "HH:mmK",
  62. "yyyy-MM-dd HH:mm:ss.FFFFFFFK", /* NOTE: UTC default (5). */
  63. "yyyy-MM-dd HH:mm:ssK",
  64. "yyyy-MM-dd HH:mmK",
  65. "yyyy-MM-ddTHH:mm:ss.FFFFFFFK",
  66. "yyyy-MM-ddTHH:mmK",
  67. "yyyy-MM-ddTHH:mm:ssK",
  68. "yyyyMMddHHmmssK",
  69. "yyyyMMddHHmmK",
  70. "yyyyMMddTHHmmssFFFFFFFK",
  71. "THHmmss",
  72. "THHmm",
  73. "HH:mm:ss.FFFFFFF",
  74. "HH:mm:ss",
  75. "HH:mm",
  76. "yyyy-MM-dd HH:mm:ss.FFFFFFF", /* NOTE: Non-UTC default (19). */
  77. "yyyy-MM-dd HH:mm:ss",
  78. "yyyy-MM-dd HH:mm",
  79. "yyyy-MM-ddTHH:mm:ss.FFFFFFF",
  80. "yyyy-MM-ddTHH:mm",
  81. "yyyy-MM-ddTHH:mm:ss",
  82. "yyyyMMddHHmmss",
  83. "yyyyMMddHHmm",
  84. "yyyyMMddTHHmmssFFFFFFF",
  85. "yyyy-MM-dd",
  86. "yyyyMMdd",
  87. "yy-MM-dd"
  88. };
  89. private static string _datetimeFormatUtc = _datetimeFormats[5];
  90. private static string _datetimeFormatLocal = _datetimeFormats[19];
  91. public static DateTime ReadDateTime(this IResultSetValue result)
  92. {
  93. var dateText = result.ToString();
  94. return DateTime.ParseExact(
  95. dateText, _datetimeFormats,
  96. DateTimeFormatInfo.InvariantInfo,
  97. DateTimeStyles.None).ToUniversalTime();
  98. }
  99. /// <summary>
  100. /// Serializes to bytes.
  101. /// </summary>
  102. /// <returns>System.Byte[][].</returns>
  103. /// <exception cref="System.ArgumentNullException">obj</exception>
  104. public static byte[] SerializeToBytes(this IJsonSerializer json, object obj, IMemoryStreamFactory streamProvider)
  105. {
  106. if (obj == null)
  107. {
  108. throw new ArgumentNullException("obj");
  109. }
  110. using (var stream = streamProvider.CreateNew())
  111. {
  112. json.SerializeToStream(obj, stream);
  113. return stream.ToArray();
  114. }
  115. }
  116. }
  117. }