openflags.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright (c) 2018 David Crawshaw <david@zentus.com>
  2. //
  3. // Permission to use, copy, modify, and distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. package sqlite
  15. // #include <sqlite3.h>
  16. import "C"
  17. import (
  18. "fmt"
  19. "strings"
  20. )
  21. // OpenFlags are flags used when opening a Conn.
  22. //
  23. // https://www.sqlite.org/c3ref/c_open_autoproxy.html
  24. type OpenFlags int
  25. const (
  26. SQLITE_OPEN_READONLY OpenFlags = C.SQLITE_OPEN_READONLY
  27. SQLITE_OPEN_READWRITE OpenFlags = C.SQLITE_OPEN_READWRITE
  28. SQLITE_OPEN_CREATE OpenFlags = C.SQLITE_OPEN_CREATE
  29. SQLITE_OPEN_DELETEONCLOSE OpenFlags = C.SQLITE_OPEN_DELETEONCLOSE
  30. SQLITE_OPEN_EXCLUSIVE OpenFlags = C.SQLITE_OPEN_EXCLUSIVE
  31. SQLITE_OPEN_AUTOPROXY OpenFlags = C.SQLITE_OPEN_AUTOPROXY
  32. SQLITE_OPEN_URI OpenFlags = C.SQLITE_OPEN_URI
  33. SQLITE_OPEN_MEMORY OpenFlags = C.SQLITE_OPEN_MEMORY
  34. SQLITE_OPEN_MAIN_DB OpenFlags = C.SQLITE_OPEN_MAIN_DB
  35. SQLITE_OPEN_TEMP_DB OpenFlags = C.SQLITE_OPEN_TEMP_DB
  36. SQLITE_OPEN_TRANSIENT_DB OpenFlags = C.SQLITE_OPEN_TRANSIENT_DB
  37. SQLITE_OPEN_MAIN_JOURNAL OpenFlags = C.SQLITE_OPEN_MAIN_JOURNAL
  38. SQLITE_OPEN_TEMP_JOURNAL OpenFlags = C.SQLITE_OPEN_TEMP_JOURNAL
  39. SQLITE_OPEN_SUBJOURNAL OpenFlags = C.SQLITE_OPEN_SUBJOURNAL
  40. SQLITE_OPEN_MASTER_JOURNAL OpenFlags = C.SQLITE_OPEN_MASTER_JOURNAL
  41. SQLITE_OPEN_NOMUTEX OpenFlags = C.SQLITE_OPEN_NOMUTEX
  42. SQLITE_OPEN_FULLMUTEX OpenFlags = C.SQLITE_OPEN_FULLMUTEX
  43. SQLITE_OPEN_SHAREDCACHE OpenFlags = C.SQLITE_OPEN_SHAREDCACHE
  44. SQLITE_OPEN_PRIVATECACHE OpenFlags = C.SQLITE_OPEN_PRIVATECACHE
  45. SQLITE_OPEN_WAL OpenFlags = C.SQLITE_OPEN_WAL
  46. SQLITE_OPEN_NOFOLLOW OpenFlags = C.SQLITE_OPEN_NOFOLLOW
  47. OpenFlagsDefault = SQLITE_OPEN_READWRITE |
  48. SQLITE_OPEN_CREATE |
  49. SQLITE_OPEN_WAL |
  50. SQLITE_OPEN_URI |
  51. SQLITE_OPEN_NOMUTEX
  52. )
  53. var allOpenFlags = []OpenFlags{
  54. SQLITE_OPEN_READONLY,
  55. SQLITE_OPEN_READWRITE,
  56. SQLITE_OPEN_CREATE,
  57. SQLITE_OPEN_DELETEONCLOSE,
  58. SQLITE_OPEN_EXCLUSIVE,
  59. SQLITE_OPEN_AUTOPROXY,
  60. SQLITE_OPEN_URI,
  61. SQLITE_OPEN_MEMORY,
  62. SQLITE_OPEN_MAIN_DB,
  63. SQLITE_OPEN_TEMP_DB,
  64. SQLITE_OPEN_TRANSIENT_DB,
  65. SQLITE_OPEN_MAIN_JOURNAL,
  66. SQLITE_OPEN_TEMP_JOURNAL,
  67. SQLITE_OPEN_SUBJOURNAL,
  68. SQLITE_OPEN_MASTER_JOURNAL,
  69. SQLITE_OPEN_NOMUTEX,
  70. SQLITE_OPEN_FULLMUTEX,
  71. SQLITE_OPEN_SHAREDCACHE,
  72. SQLITE_OPEN_PRIVATECACHE,
  73. SQLITE_OPEN_WAL,
  74. SQLITE_OPEN_NOFOLLOW,
  75. }
  76. var openFlagsStrings = map[OpenFlags]string{
  77. SQLITE_OPEN_READONLY: "SQLITE_OPEN_READONLY",
  78. SQLITE_OPEN_READWRITE: "SQLITE_OPEN_READWRITE",
  79. SQLITE_OPEN_CREATE: "SQLITE_OPEN_CREATE",
  80. SQLITE_OPEN_DELETEONCLOSE: "SQLITE_OPEN_DELETEONCLOSE",
  81. SQLITE_OPEN_EXCLUSIVE: "SQLITE_OPEN_EXCLUSIVE",
  82. SQLITE_OPEN_AUTOPROXY: "SQLITE_OPEN_AUTOPROXY",
  83. SQLITE_OPEN_URI: "SQLITE_OPEN_URI",
  84. SQLITE_OPEN_MEMORY: "SQLITE_OPEN_MEMORY",
  85. SQLITE_OPEN_MAIN_DB: "SQLITE_OPEN_MAIN_DB",
  86. SQLITE_OPEN_TEMP_DB: "SQLITE_OPEN_TEMP_DB",
  87. SQLITE_OPEN_TRANSIENT_DB: "SQLITE_OPEN_TRANSIENT_DB",
  88. SQLITE_OPEN_MAIN_JOURNAL: "SQLITE_OPEN_MAIN_JOURNAL",
  89. SQLITE_OPEN_TEMP_JOURNAL: "SQLITE_OPEN_TEMP_JOURNAL",
  90. SQLITE_OPEN_SUBJOURNAL: "SQLITE_OPEN_SUBJOURNAL",
  91. SQLITE_OPEN_MASTER_JOURNAL: "SQLITE_OPEN_MASTER_JOURNAL",
  92. SQLITE_OPEN_NOMUTEX: "SQLITE_OPEN_NOMUTEX",
  93. SQLITE_OPEN_FULLMUTEX: "SQLITE_OPEN_FULLMUTEX",
  94. SQLITE_OPEN_SHAREDCACHE: "SQLITE_OPEN_SHAREDCACHE",
  95. SQLITE_OPEN_PRIVATECACHE: "SQLITE_OPEN_PRIVATECACHE",
  96. SQLITE_OPEN_WAL: "SQLITE_OPEN_WAL",
  97. SQLITE_OPEN_NOFOLLOW: "SQLITE_OPEN_NOFOLLOW",
  98. }
  99. func (o OpenFlags) String() string {
  100. var flags []string
  101. for _, flag := range allOpenFlags {
  102. if o&flag == 0 {
  103. continue
  104. }
  105. flagStr, ok := openFlagsStrings[flag]
  106. if !ok {
  107. flagStr = fmt.Sprintf("UNKNOWN FLAG: %x", flag)
  108. }
  109. flags = append(flags, flagStr)
  110. }
  111. return strings.Join(flags, "|")
  112. }