typenative 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/workflows/ci.yml +1 -1
  3. package/.github/workflows/npm-publish-github-packages.yml +1 -1
  4. package/CHANGELOG.md +247 -0
  5. package/CONTRIBUTION.md +1 -1
  6. package/README.md +30 -21
  7. package/bin/cli.js +3 -1
  8. package/bin/go/bridge.js +919 -0
  9. package/bin/go/convert.js +238 -0
  10. package/bin/go/metadata.js +211 -0
  11. package/bin/go/overrides.js +68 -0
  12. package/bin/go/stdlib.generated.js +175 -0
  13. package/bin/index.js +98 -6
  14. package/bin/main.js +4 -1
  15. package/bin/node/assert.js +344 -0
  16. package/bin/node/async_hooks.js +273 -0
  17. package/bin/node/buffer.js +765 -0
  18. package/bin/node/child_process.js +600 -0
  19. package/bin/node/cluster.js +1002 -0
  20. package/bin/node/console.js +121 -0
  21. package/bin/node/core.js +111 -0
  22. package/bin/node/crypto.js +414 -0
  23. package/bin/node/crypto_keys.js +2685 -0
  24. package/bin/node/dgram.js +388 -0
  25. package/bin/node/diagnostics_channel.js +534 -0
  26. package/bin/node/dns.js +635 -0
  27. package/bin/node/events.js +743 -0
  28. package/bin/node/fetch.js +737 -0
  29. package/bin/node/fs.js +998 -0
  30. package/bin/node/http.js +1500 -0
  31. package/bin/node/http2.js +688 -0
  32. package/bin/node/net.js +1143 -0
  33. package/bin/node/os.js +257 -0
  34. package/bin/node/path.js +758 -0
  35. package/bin/node/process.js +316 -0
  36. package/bin/node/punycode.js +195 -0
  37. package/bin/node/querystring.js +143 -0
  38. package/bin/node/readline.js +299 -0
  39. package/bin/node/registry.js +161 -0
  40. package/bin/node/sqlite.js +1142 -0
  41. package/bin/node/stream.js +1221 -0
  42. package/bin/node/stream_web.js +2259 -0
  43. package/bin/node/string_decoder.js +101 -0
  44. package/bin/node/system_extra.js +661 -0
  45. package/bin/node/test.js +1068 -0
  46. package/bin/node/timers.js +250 -0
  47. package/bin/node/tls.js +719 -0
  48. package/bin/node/url.js +861 -0
  49. package/bin/node/util.js +1311 -0
  50. package/bin/node/util_extra.js +599 -0
  51. package/bin/node/worker_threads.js +745 -0
  52. package/bin/node/zlib.js +263 -0
  53. package/bin/parse-native.js +3 -2
  54. package/bin/parse-node.js +18 -2
  55. package/bin/transpiler.js +3529 -597
  56. package/bin/version.js +2 -0
  57. package/conformance.md +724 -258
  58. package/govendor/github.com/ncruces/go-sqlite3/LICENSE +21 -0
  59. package/govendor/github.com/ncruces/go-sqlite3/README.md +121 -0
  60. package/govendor/github.com/ncruces/go-sqlite3/backup.go +132 -0
  61. package/govendor/github.com/ncruces/go-sqlite3/blob.go +266 -0
  62. package/govendor/github.com/ncruces/go-sqlite3/config.go +397 -0
  63. package/govendor/github.com/ncruces/go-sqlite3/conn.go +540 -0
  64. package/govendor/github.com/ncruces/go-sqlite3/conn_127.go +93 -0
  65. package/govendor/github.com/ncruces/go-sqlite3/const.go +436 -0
  66. package/govendor/github.com/ncruces/go-sqlite3/context.go +222 -0
  67. package/govendor/github.com/ncruces/go-sqlite3/error.go +182 -0
  68. package/govendor/github.com/ncruces/go-sqlite3/ext.go +153 -0
  69. package/govendor/github.com/ncruces/go-sqlite3/func.go +309 -0
  70. package/govendor/github.com/ncruces/go-sqlite3/go.mod +3 -0
  71. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go +29 -0
  72. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go +13 -0
  73. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go +57 -0
  74. package/govendor/github.com/ncruces/go-sqlite3/internal/errutil/error.go +41 -0
  75. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/alloc.go +128 -0
  76. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/const.go +122 -0
  77. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/error.go +77 -0
  78. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem.go +116 -0
  79. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_other.go +34 -0
  80. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_unix.go +87 -0
  81. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_windows.go +149 -0
  82. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_unix.go +80 -0
  83. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_windows.go +129 -0
  84. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/sys_windows.go +60 -0
  85. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap.go +82 -0
  86. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_sys.go +113 -0
  87. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_vfs.go +181 -0
  88. package/govendor/github.com/ncruces/go-sqlite3/internal/testenv/env.go +55 -0
  89. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json.go +54 -0
  90. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json_v2.go +54 -0
  91. package/govendor/github.com/ncruces/go-sqlite3/internal/util/math.go +29 -0
  92. package/govendor/github.com/ncruces/go-sqlite3/internal/util/page.go +5 -0
  93. package/govendor/github.com/ncruces/go-sqlite3/internal/util/parse.go +142 -0
  94. package/govendor/github.com/ncruces/go-sqlite3/internal/util/pointer.go +3 -0
  95. package/govendor/github.com/ncruces/go-sqlite3/internal/util/reflect.go +10 -0
  96. package/govendor/github.com/ncruces/go-sqlite3/json.go +100 -0
  97. package/govendor/github.com/ncruces/go-sqlite3/json_v2.go +116 -0
  98. package/govendor/github.com/ncruces/go-sqlite3/pointer.go +13 -0
  99. package/govendor/github.com/ncruces/go-sqlite3/quote.go +140 -0
  100. package/govendor/github.com/ncruces/go-sqlite3/stmt.go +692 -0
  101. package/govendor/github.com/ncruces/go-sqlite3/time.go +360 -0
  102. package/govendor/github.com/ncruces/go-sqlite3/txn.go +374 -0
  103. package/govendor/github.com/ncruces/go-sqlite3/value.go +212 -0
  104. package/govendor/github.com/ncruces/go-sqlite3/vfs/README.md +133 -0
  105. package/govendor/github.com/ncruces/go-sqlite3/vfs/api.go +239 -0
  106. package/govendor/github.com/ncruces/go-sqlite3/vfs/cksm.go +143 -0
  107. package/govendor/github.com/ncruces/go-sqlite3/vfs/const.go +256 -0
  108. package/govendor/github.com/ncruces/go-sqlite3/vfs/file.go +260 -0
  109. package/govendor/github.com/ncruces/go-sqlite3/vfs/filename.go +187 -0
  110. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock.go +128 -0
  111. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock_other.go +23 -0
  112. package/govendor/github.com/ncruces/go-sqlite3/vfs/map.go +63 -0
  113. package/govendor/github.com/ncruces/go-sqlite3/vfs/map_other.go +13 -0
  114. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +110 -0
  115. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go +131 -0
  116. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +140 -0
  117. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_f2fs_linux.go +56 -0
  118. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +117 -0
  119. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go +59 -0
  120. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std.go +50 -0
  121. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_alloc.go +19 -0
  122. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_atomic.go +9 -0
  123. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_rw.go +13 -0
  124. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_sync.go +9 -0
  125. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_temp.go +16 -0
  126. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_unix.go +108 -0
  127. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_windows.go +180 -0
  128. package/govendor/github.com/ncruces/go-sqlite3/vfs/registry.go +48 -0
  129. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm.go +26 -0
  130. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +258 -0
  131. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_copy.go +90 -0
  132. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +168 -0
  133. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go +52 -0
  134. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go +185 -0
  135. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_other.go +21 -0
  136. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_windows.go +124 -0
  137. package/govendor/github.com/ncruces/go-sqlite3/vfs/vfs.go +455 -0
  138. package/govendor/github.com/ncruces/go-sqlite3/vtab.go +677 -0
  139. package/govendor/github.com/ncruces/go-sqlite3/wrap.go +48 -0
  140. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/LICENSE +18 -0
  141. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/README.md +11 -0
  142. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/go.mod +3 -0
  143. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/libc.go +215 -0
  144. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.dat +0 -0
  145. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.go +157903 -0
  146. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/tools.sh +38 -0
  147. package/govendor/github.com/ncruces/julianday/LICENSE +21 -0
  148. package/govendor/github.com/ncruces/julianday/README.md +9 -0
  149. package/govendor/github.com/ncruces/julianday/go.mod +3 -0
  150. package/govendor/github.com/ncruces/julianday/julianday.go +124 -0
  151. package/govendor/golang.org/x/sys/LICENSE +27 -0
  152. package/govendor/golang.org/x/sys/PATENTS +22 -0
  153. package/govendor/golang.org/x/sys/go.mod +3 -0
  154. package/govendor/golang.org/x/sys/unix/README.md +184 -0
  155. package/govendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  156. package/govendor/golang.org/x/sys/unix/aliases.go +13 -0
  157. package/govendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  158. package/govendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  159. package/govendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  160. package/govendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  161. package/govendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  162. package/govendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  163. package/govendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  164. package/govendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  165. package/govendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  166. package/govendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  167. package/govendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  168. package/govendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  169. package/govendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  170. package/govendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  171. package/govendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  172. package/govendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  173. package/govendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  174. package/govendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  175. package/govendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  176. package/govendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  177. package/govendor/golang.org/x/sys/unix/auxv.go +36 -0
  178. package/govendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  179. package/govendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  180. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  181. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  182. package/govendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  183. package/govendor/golang.org/x/sys/unix/constants.go +13 -0
  184. package/govendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  185. package/govendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  186. package/govendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  187. package/govendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  188. package/govendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  189. package/govendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  190. package/govendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  191. package/govendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  192. package/govendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  193. package/govendor/golang.org/x/sys/unix/dirent.go +102 -0
  194. package/govendor/golang.org/x/sys/unix/endian_big.go +9 -0
  195. package/govendor/golang.org/x/sys/unix/endian_little.go +9 -0
  196. package/govendor/golang.org/x/sys/unix/env_unix.go +31 -0
  197. package/govendor/golang.org/x/sys/unix/fcntl.go +36 -0
  198. package/govendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  199. package/govendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  200. package/govendor/golang.org/x/sys/unix/fdset.go +27 -0
  201. package/govendor/golang.org/x/sys/unix/gccgo.go +59 -0
  202. package/govendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  203. package/govendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  204. package/govendor/golang.org/x/sys/unix/ifreq_linux.go +145 -0
  205. package/govendor/golang.org/x/sys/unix/ioctl_linux.go +341 -0
  206. package/govendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  207. package/govendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  208. package/govendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  209. package/govendor/golang.org/x/sys/unix/mkall.sh +250 -0
  210. package/govendor/golang.org/x/sys/unix/mkerrors.sh +807 -0
  211. package/govendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  212. package/govendor/golang.org/x/sys/unix/mremap.go +57 -0
  213. package/govendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  214. package/govendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  215. package/govendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  216. package/govendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  217. package/govendor/golang.org/x/sys/unix/race.go +30 -0
  218. package/govendor/golang.org/x/sys/unix/race0.go +25 -0
  219. package/govendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  220. package/govendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  221. package/govendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  222. package/govendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  223. package/govendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  224. package/govendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  225. package/govendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  226. package/govendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  227. package/govendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  228. package/govendor/golang.org/x/sys/unix/syscall.go +86 -0
  229. package/govendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  230. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  231. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  232. package/govendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  233. package/govendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  234. package/govendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  235. package/govendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  236. package/govendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  237. package/govendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  238. package/govendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  239. package/govendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  240. package/govendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  241. package/govendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  242. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  243. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  244. package/govendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  245. package/govendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  246. package/govendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  247. package/govendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  248. package/govendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  249. package/govendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  250. package/govendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  251. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  252. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  253. package/govendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  254. package/govendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  255. package/govendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  256. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  257. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  258. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  259. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  260. package/govendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  261. package/govendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  262. package/govendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  263. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  264. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  265. package/govendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  266. package/govendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  267. package/govendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  268. package/govendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  269. package/govendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  270. package/govendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  271. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  272. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  273. package/govendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  274. package/govendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  275. package/govendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  276. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  277. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  278. package/govendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  279. package/govendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  280. package/govendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  281. package/govendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  282. package/govendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  283. package/govendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  284. package/govendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  285. package/govendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  286. package/govendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  287. package/govendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  288. package/govendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  289. package/govendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  290. package/govendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  291. package/govendor/golang.org/x/sys/unix/timestruct.go +76 -0
  292. package/govendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  293. package/govendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  294. package/govendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  295. package/govendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  296. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  297. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  298. package/govendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  299. package/govendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  300. package/govendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  301. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  302. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  303. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  304. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  305. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  306. package/govendor/golang.org/x/sys/unix/zerrors_linux.go +4209 -0
  307. package/govendor/golang.org/x/sys/unix/zerrors_linux_386.go +882 -0
  308. package/govendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +882 -0
  309. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm.go +887 -0
  310. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +884 -0
  311. package/govendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +874 -0
  312. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips.go +888 -0
  313. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +888 -0
  314. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +888 -0
  315. package/govendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +888 -0
  316. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +940 -0
  317. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +944 -0
  318. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +944 -0
  319. package/govendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +884 -0
  320. package/govendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +943 -0
  321. package/govendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +992 -0
  322. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  323. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  324. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  325. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  326. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  327. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  328. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  329. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  330. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  331. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  332. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  333. package/govendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  334. package/govendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  335. package/govendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  336. package/govendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  337. package/govendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  338. package/govendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  339. package/govendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  340. package/govendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  341. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  342. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  343. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  344. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  345. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  346. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  347. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  348. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  349. package/govendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  350. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  351. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  352. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  353. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  354. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  355. package/govendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  356. package/govendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  357. package/govendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  358. package/govendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  359. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  360. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  361. package/govendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  362. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  363. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  364. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  365. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  366. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  367. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  368. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  369. package/govendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  370. package/govendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  371. package/govendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  372. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  373. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  374. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  375. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  376. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  377. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  378. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  379. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  380. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  381. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  382. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  383. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  384. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  385. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  386. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  387. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  388. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  389. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  390. package/govendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  391. package/govendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  392. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  393. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  394. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  395. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  396. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  397. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  398. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  399. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  400. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  401. package/govendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  402. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  403. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  404. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  405. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  406. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  407. package/govendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  408. package/govendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  409. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  410. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  411. package/govendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  412. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  413. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  414. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  415. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  416. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  417. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  418. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  419. package/govendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  420. package/govendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  421. package/govendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  422. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  423. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  424. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  425. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  426. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  427. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  428. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  429. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  430. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  431. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  432. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  433. package/govendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  434. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  435. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  436. package/govendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  437. package/govendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  438. package/govendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  439. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  440. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  441. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  442. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  443. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  444. package/govendor/golang.org/x/sys/unix/ztypes_linux.go +6547 -0
  445. package/govendor/golang.org/x/sys/unix/ztypes_linux_386.go +747 -0
  446. package/govendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +761 -0
  447. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm.go +741 -0
  448. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +740 -0
  449. package/govendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +741 -0
  450. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips.go +746 -0
  451. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +743 -0
  452. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +743 -0
  453. package/govendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +746 -0
  454. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +754 -0
  455. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +749 -0
  456. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +749 -0
  457. package/govendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +828 -0
  458. package/govendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +763 -0
  459. package/govendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +744 -0
  460. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  461. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  462. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  463. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  464. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  465. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  466. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  467. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  468. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  469. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  470. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  471. package/govendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  472. package/govendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  473. package/govendor/golang.org/x/sys/windows/aliases.go +13 -0
  474. package/govendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  475. package/govendor/golang.org/x/sys/windows/env_windows.go +57 -0
  476. package/govendor/golang.org/x/sys/windows/eventlog.go +20 -0
  477. package/govendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  478. package/govendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  479. package/govendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  480. package/govendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  481. package/govendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  482. package/govendor/golang.org/x/sys/windows/race.go +30 -0
  483. package/govendor/golang.org/x/sys/windows/race0.go +25 -0
  484. package/govendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  485. package/govendor/golang.org/x/sys/windows/service.go +257 -0
  486. package/govendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  487. package/govendor/golang.org/x/sys/windows/str.go +22 -0
  488. package/govendor/golang.org/x/sys/windows/syscall.go +104 -0
  489. package/govendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  490. package/govendor/golang.org/x/sys/windows/types_windows.go +4058 -0
  491. package/govendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  492. package/govendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  493. package/govendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  494. package/govendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  495. package/govendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  496. package/govendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  497. package/govendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  498. package/govendor/manifest.txt +7 -0
  499. package/package.json +6 -1
  500. package/tsparser/main.go +37 -3
  501. package/tsparser/tsparser.exe +2 -2
  502. package/types/typenative-go.d.ts +15159 -5
  503. package/types/typenative-npm.d.ts +2637 -30
  504. package/types/typenative.d.ts +1092 -56
@@ -0,0 +1,256 @@
1
+ package vfs
2
+
3
+ import "github.com/ncruces/go-sqlite3/internal/sqlite3_wrap"
4
+
5
+ const (
6
+ _MAX_NAME = 1e6 // Self-imposed limit for most NUL terminated strings.
7
+ _MAX_SQL_LENGTH = 1e9
8
+ _MAX_PATHNAME = 1024
9
+ _DEFAULT_SECTOR_SIZE = 4096
10
+
11
+ ptrlen = sqlite3_wrap.PtrLen
12
+ )
13
+
14
+ type ptr_t = sqlite3_wrap.Ptr_t
15
+
16
+ // https://sqlite.org/rescode.html
17
+ type _ErrorCode uint32
18
+
19
+ func (e _ErrorCode) Error() string {
20
+ return sqlite3_wrap.ErrorCodeString(e)
21
+ }
22
+
23
+ const (
24
+ _OK = sqlite3_wrap.OK
25
+ _ERROR _ErrorCode = sqlite3_wrap.ERROR
26
+ _PERM _ErrorCode = sqlite3_wrap.PERM
27
+ _BUSY _ErrorCode = sqlite3_wrap.BUSY
28
+ _READONLY _ErrorCode = sqlite3_wrap.READONLY
29
+ _IOERR _ErrorCode = sqlite3_wrap.IOERR
30
+ _NOTFOUND _ErrorCode = sqlite3_wrap.NOTFOUND
31
+ _FULL _ErrorCode = sqlite3_wrap.FULL
32
+ _CANTOPEN _ErrorCode = sqlite3_wrap.CANTOPEN
33
+ _IOERR_READ _ErrorCode = sqlite3_wrap.IOERR_READ
34
+ _IOERR_SHORT_READ _ErrorCode = sqlite3_wrap.IOERR_SHORT_READ
35
+ _IOERR_WRITE _ErrorCode = sqlite3_wrap.IOERR_WRITE
36
+ _IOERR_FSYNC _ErrorCode = sqlite3_wrap.IOERR_FSYNC
37
+ _IOERR_DIR_FSYNC _ErrorCode = sqlite3_wrap.IOERR_DIR_FSYNC
38
+ _IOERR_TRUNCATE _ErrorCode = sqlite3_wrap.IOERR_TRUNCATE
39
+ _IOERR_FSTAT _ErrorCode = sqlite3_wrap.IOERR_FSTAT
40
+ _IOERR_UNLOCK _ErrorCode = sqlite3_wrap.IOERR_UNLOCK
41
+ _IOERR_RDLOCK _ErrorCode = sqlite3_wrap.IOERR_RDLOCK
42
+ _IOERR_DELETE _ErrorCode = sqlite3_wrap.IOERR_DELETE
43
+ _IOERR_NOMEM _ErrorCode = sqlite3_wrap.IOERR_NOMEM
44
+ _IOERR_ACCESS _ErrorCode = sqlite3_wrap.IOERR_ACCESS
45
+ _IOERR_CHECKRESERVEDLOCK _ErrorCode = sqlite3_wrap.IOERR_CHECKRESERVEDLOCK
46
+ _IOERR_LOCK _ErrorCode = sqlite3_wrap.IOERR_LOCK
47
+ _IOERR_CLOSE _ErrorCode = sqlite3_wrap.IOERR_CLOSE
48
+ _IOERR_SHMOPEN _ErrorCode = sqlite3_wrap.IOERR_SHMOPEN
49
+ _IOERR_SHMSIZE _ErrorCode = sqlite3_wrap.IOERR_SHMSIZE
50
+ _IOERR_SHMLOCK _ErrorCode = sqlite3_wrap.IOERR_SHMLOCK
51
+ _IOERR_SHMMAP _ErrorCode = sqlite3_wrap.IOERR_SHMMAP
52
+ _IOERR_SEEK _ErrorCode = sqlite3_wrap.IOERR_SEEK
53
+ _IOERR_DELETE_NOENT _ErrorCode = sqlite3_wrap.IOERR_DELETE_NOENT
54
+ _IOERR_MMAP _ErrorCode = sqlite3_wrap.IOERR_MMAP
55
+ _IOERR_GETTEMPPATH _ErrorCode = sqlite3_wrap.IOERR_GETTEMPPATH
56
+ _IOERR_BEGIN_ATOMIC _ErrorCode = sqlite3_wrap.IOERR_BEGIN_ATOMIC
57
+ _IOERR_COMMIT_ATOMIC _ErrorCode = sqlite3_wrap.IOERR_COMMIT_ATOMIC
58
+ _IOERR_ROLLBACK_ATOMIC _ErrorCode = sqlite3_wrap.IOERR_ROLLBACK_ATOMIC
59
+ _IOERR_DATA _ErrorCode = sqlite3_wrap.IOERR_DATA
60
+ _IOERR_CORRUPTFS _ErrorCode = sqlite3_wrap.IOERR_CORRUPTFS
61
+ _BUSY_SNAPSHOT _ErrorCode = sqlite3_wrap.BUSY_SNAPSHOT
62
+ _CANTOPEN_FULLPATH _ErrorCode = sqlite3_wrap.CANTOPEN_FULLPATH
63
+ _CANTOPEN_ISDIR _ErrorCode = sqlite3_wrap.CANTOPEN_ISDIR
64
+ _READONLY_CANTINIT _ErrorCode = sqlite3_wrap.READONLY_CANTINIT
65
+ _READONLY_DIRECTORY _ErrorCode = sqlite3_wrap.READONLY_DIRECTORY
66
+ _OK_SYMLINK _ErrorCode = sqlite3_wrap.OK_SYMLINK
67
+ )
68
+
69
+ // OpenFlag is a flag for the [VFS] Open method.
70
+ //
71
+ // https://sqlite.org/c3ref/c_open_autoproxy.html
72
+ type OpenFlag uint32
73
+
74
+ const (
75
+ OPEN_READONLY OpenFlag = 0x00000001 /* Ok for sqlite3_open_v2() */
76
+ OPEN_READWRITE OpenFlag = 0x00000002 /* Ok for sqlite3_open_v2() */
77
+ OPEN_CREATE OpenFlag = 0x00000004 /* Ok for sqlite3_open_v2() */
78
+ OPEN_DELETEONCLOSE OpenFlag = 0x00000008 /* VFS only */
79
+ OPEN_EXCLUSIVE OpenFlag = 0x00000010 /* VFS only */
80
+ OPEN_AUTOPROXY OpenFlag = 0x00000020 /* VFS only */
81
+ OPEN_URI OpenFlag = 0x00000040 /* Ok for sqlite3_open_v2() */
82
+ OPEN_MEMORY OpenFlag = 0x00000080 /* Ok for sqlite3_open_v2() */
83
+ OPEN_MAIN_DB OpenFlag = 0x00000100 /* VFS only */
84
+ OPEN_TEMP_DB OpenFlag = 0x00000200 /* VFS only */
85
+ OPEN_TRANSIENT_DB OpenFlag = 0x00000400 /* VFS only */
86
+ OPEN_MAIN_JOURNAL OpenFlag = 0x00000800 /* VFS only */
87
+ OPEN_TEMP_JOURNAL OpenFlag = 0x00001000 /* VFS only */
88
+ OPEN_SUBJOURNAL OpenFlag = 0x00002000 /* VFS only */
89
+ OPEN_SUPER_JOURNAL OpenFlag = 0x00004000 /* VFS only */
90
+ OPEN_NOMUTEX OpenFlag = 0x00008000 /* Ok for sqlite3_open_v2() */
91
+ OPEN_FULLMUTEX OpenFlag = 0x00010000 /* Ok for sqlite3_open_v2() */
92
+ OPEN_SHAREDCACHE OpenFlag = 0x00020000 /* Ok for sqlite3_open_v2() */
93
+ OPEN_PRIVATECACHE OpenFlag = 0x00040000 /* Ok for sqlite3_open_v2() */
94
+ OPEN_WAL OpenFlag = 0x00080000 /* VFS only */
95
+ OPEN_NOFOLLOW OpenFlag = 0x01000000 /* Ok for sqlite3_open_v2() */
96
+ _FLAG_ATOMIC OpenFlag = 0x10000000
97
+ _FLAG_KEEP_WAL OpenFlag = 0x20000000
98
+ _FLAG_PSOW OpenFlag = 0x40000000
99
+ _FLAG_SYNC_DIR OpenFlag = 0x80000000
100
+ )
101
+
102
+ // AccessFlag is a flag for the [VFS] Access method.
103
+ //
104
+ // https://sqlite.org/c3ref/c_access_exists.html
105
+ type AccessFlag uint32
106
+
107
+ const (
108
+ ACCESS_EXISTS AccessFlag = 0
109
+ ACCESS_READWRITE AccessFlag = 1 /* Used by PRAGMA temp_store_directory */
110
+ ACCESS_READ AccessFlag = 2 /* Unused */
111
+ )
112
+
113
+ // SyncFlag is a flag for the [File] Sync method.
114
+ //
115
+ // https://sqlite.org/c3ref/c_sync_dataonly.html
116
+ type SyncFlag uint32
117
+
118
+ const (
119
+ SYNC_NORMAL SyncFlag = 0x00002
120
+ SYNC_FULL SyncFlag = 0x00003
121
+ SYNC_DATAONLY SyncFlag = 0x00010
122
+ )
123
+
124
+ // LockLevel is a value used with [File] Lock and Unlock methods.
125
+ //
126
+ // https://sqlite.org/c3ref/c_lock_exclusive.html
127
+ type LockLevel uint32
128
+
129
+ const (
130
+ // No locks are held on the database.
131
+ // The database may be neither read nor written.
132
+ // Any internally cached data is considered suspect and subject to
133
+ // verification against the database file before being used.
134
+ // Other processes can read or write the database as their own locking
135
+ // states permit.
136
+ // This is the default state.
137
+ LOCK_NONE LockLevel = 0 /* xUnlock() only */
138
+
139
+ // The database may be read but not written.
140
+ // Any number of processes can hold SHARED locks at the same time,
141
+ // hence there can be many simultaneous readers.
142
+ // But no other thread or process is allowed to write to the database file
143
+ // while one or more SHARED locks are active.
144
+ LOCK_SHARED LockLevel = 1 /* xLock() or xUnlock() */
145
+
146
+ // A RESERVED lock means that the process is planning on writing to the
147
+ // database file at some point in the future but that it is currently just
148
+ // reading from the file.
149
+ // Only a single RESERVED lock may be active at one time,
150
+ // though multiple SHARED locks can coexist with a single RESERVED lock.
151
+ // RESERVED differs from PENDING in that new SHARED locks can be acquired
152
+ // while there is a RESERVED lock.
153
+ LOCK_RESERVED LockLevel = 2 /* xLock() only */
154
+
155
+ // A PENDING lock means that the process holding the lock wants to write to
156
+ // the database as soon as possible and is just waiting on all current
157
+ // SHARED locks to clear so that it can get an EXCLUSIVE lock.
158
+ // No new SHARED locks are permitted against the database if a PENDING lock
159
+ // is active, though existing SHARED locks are allowed to continue.
160
+ LOCK_PENDING LockLevel = 3 /* internal use only */
161
+
162
+ // An EXCLUSIVE lock is needed in order to write to the database file.
163
+ // Only one EXCLUSIVE lock is allowed on the file and no other locks of any
164
+ // kind are allowed to coexist with an EXCLUSIVE lock.
165
+ // In order to maximize concurrency, SQLite works to minimize the amount of
166
+ // time that EXCLUSIVE locks are held.
167
+ LOCK_EXCLUSIVE LockLevel = 4 /* xLock() only */
168
+ )
169
+
170
+ // DeviceCharacteristic is a flag retuned by the [File] DeviceCharacteristics method.
171
+ //
172
+ // https://sqlite.org/c3ref/c_iocap_atomic.html
173
+ type DeviceCharacteristic uint32
174
+
175
+ const (
176
+ IOCAP_ATOMIC DeviceCharacteristic = 0x00000001
177
+ IOCAP_ATOMIC512 DeviceCharacteristic = 0x00000002
178
+ IOCAP_ATOMIC1K DeviceCharacteristic = 0x00000004
179
+ IOCAP_ATOMIC2K DeviceCharacteristic = 0x00000008
180
+ IOCAP_ATOMIC4K DeviceCharacteristic = 0x00000010
181
+ IOCAP_ATOMIC8K DeviceCharacteristic = 0x00000020
182
+ IOCAP_ATOMIC16K DeviceCharacteristic = 0x00000040
183
+ IOCAP_ATOMIC32K DeviceCharacteristic = 0x00000080
184
+ IOCAP_ATOMIC64K DeviceCharacteristic = 0x00000100
185
+ IOCAP_SAFE_APPEND DeviceCharacteristic = 0x00000200
186
+ IOCAP_SEQUENTIAL DeviceCharacteristic = 0x00000400
187
+ IOCAP_UNDELETABLE_WHEN_OPEN DeviceCharacteristic = 0x00000800
188
+ IOCAP_POWERSAFE_OVERWRITE DeviceCharacteristic = 0x00001000
189
+ IOCAP_IMMUTABLE DeviceCharacteristic = 0x00002000
190
+ IOCAP_BATCH_ATOMIC DeviceCharacteristic = 0x00004000
191
+ IOCAP_SUBPAGE_READ DeviceCharacteristic = 0x00008000
192
+ )
193
+
194
+ // https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html
195
+ type _FcntlOpcode uint32
196
+
197
+ const (
198
+ _FCNTL_LOCKSTATE _FcntlOpcode = 1
199
+ _FCNTL_GET_LOCKPROXYFILE _FcntlOpcode = 2
200
+ _FCNTL_SET_LOCKPROXYFILE _FcntlOpcode = 3
201
+ _FCNTL_LAST_ERRNO _FcntlOpcode = 4
202
+ _FCNTL_SIZE_HINT _FcntlOpcode = 5
203
+ _FCNTL_CHUNK_SIZE _FcntlOpcode = 6
204
+ _FCNTL_FILE_POINTER _FcntlOpcode = 7
205
+ _FCNTL_SYNC_OMITTED _FcntlOpcode = 8
206
+ _FCNTL_WIN32_AV_RETRY _FcntlOpcode = 9
207
+ _FCNTL_PERSIST_WAL _FcntlOpcode = 10
208
+ _FCNTL_OVERWRITE _FcntlOpcode = 11
209
+ _FCNTL_VFSNAME _FcntlOpcode = 12
210
+ _FCNTL_POWERSAFE_OVERWRITE _FcntlOpcode = 13
211
+ _FCNTL_PRAGMA _FcntlOpcode = 14
212
+ _FCNTL_BUSYHANDLER _FcntlOpcode = 15
213
+ _FCNTL_TEMPFILENAME _FcntlOpcode = 16
214
+ _FCNTL_MMAP_SIZE _FcntlOpcode = 18
215
+ _FCNTL_TRACE _FcntlOpcode = 19
216
+ _FCNTL_HAS_MOVED _FcntlOpcode = 20
217
+ _FCNTL_SYNC _FcntlOpcode = 21
218
+ _FCNTL_COMMIT_PHASETWO _FcntlOpcode = 22
219
+ _FCNTL_WIN32_SET_HANDLE _FcntlOpcode = 23
220
+ _FCNTL_WAL_BLOCK _FcntlOpcode = 24
221
+ _FCNTL_ZIPVFS _FcntlOpcode = 25
222
+ _FCNTL_RBU _FcntlOpcode = 26
223
+ _FCNTL_VFS_POINTER _FcntlOpcode = 27
224
+ _FCNTL_JOURNAL_POINTER _FcntlOpcode = 28
225
+ _FCNTL_WIN32_GET_HANDLE _FcntlOpcode = 29
226
+ _FCNTL_PDB _FcntlOpcode = 30
227
+ _FCNTL_BEGIN_ATOMIC_WRITE _FcntlOpcode = 31
228
+ _FCNTL_COMMIT_ATOMIC_WRITE _FcntlOpcode = 32
229
+ _FCNTL_ROLLBACK_ATOMIC_WRITE _FcntlOpcode = 33
230
+ _FCNTL_LOCK_TIMEOUT _FcntlOpcode = 34
231
+ _FCNTL_DATA_VERSION _FcntlOpcode = 35
232
+ _FCNTL_SIZE_LIMIT _FcntlOpcode = 36
233
+ _FCNTL_CKPT_DONE _FcntlOpcode = 37
234
+ _FCNTL_RESERVE_BYTES _FcntlOpcode = 38
235
+ _FCNTL_CKPT_START _FcntlOpcode = 39
236
+ _FCNTL_EXTERNAL_READER _FcntlOpcode = 40
237
+ _FCNTL_CKSM_FILE _FcntlOpcode = 41
238
+ _FCNTL_RESET_CACHE _FcntlOpcode = 42
239
+ _FCNTL_NULL_IO _FcntlOpcode = 43
240
+ _FCNTL_BLOCK_ON_CONNECT _FcntlOpcode = 44
241
+ _FCNTL_FILESTAT _FcntlOpcode = 45
242
+ )
243
+
244
+ // https://sqlite.org/c3ref/c_shm_exclusive.html
245
+ type _ShmFlag uint32
246
+
247
+ const (
248
+ _SHM_UNLOCK _ShmFlag = 1
249
+ _SHM_LOCK _ShmFlag = 2
250
+ _SHM_SHARED _ShmFlag = 4
251
+ _SHM_EXCLUSIVE _ShmFlag = 8
252
+
253
+ _SHM_NLOCK = 8
254
+ _SHM_BASE = (22 + _SHM_NLOCK) * 4
255
+ _SHM_DMS = _SHM_BASE + _SHM_NLOCK
256
+ )
@@ -0,0 +1,260 @@
1
+ package vfs
2
+
3
+ import (
4
+ "errors"
5
+ "io"
6
+ "io/fs"
7
+ "os"
8
+ "path/filepath"
9
+ "runtime"
10
+ "syscall"
11
+ )
12
+
13
+ type vfsOS struct{}
14
+
15
+ func (vfsOS) FullPathname(path string) (string, error) {
16
+ link, err := evalSymlinks(path)
17
+ if err != nil {
18
+ return "", err
19
+ }
20
+ full, err := filepath.Abs(link)
21
+ if err == nil && link != path {
22
+ err = _OK_SYMLINK
23
+ }
24
+ return full, err
25
+ }
26
+
27
+ func evalSymlinks(path string) (string, error) {
28
+ var file string
29
+ _, err := os.Lstat(path)
30
+ if errors.Is(err, fs.ErrNotExist) {
31
+ path, file = filepath.Split(path)
32
+ }
33
+ path, err = filepath.EvalSymlinks(path)
34
+ if err != nil {
35
+ return "", err
36
+ }
37
+ return filepath.Join(path, file), nil
38
+ }
39
+
40
+ func (vfsOS) Delete(path string, syncDir bool) error {
41
+ err := os.Remove(path)
42
+ if errors.Is(err, fs.ErrNotExist) {
43
+ return sysError{err, _IOERR_DELETE_NOENT}
44
+ }
45
+ if err != nil {
46
+ return err
47
+ }
48
+ if isUnix && syncDir {
49
+ f, err := os.Open(filepath.Dir(path))
50
+ if err != nil {
51
+ return nil
52
+ }
53
+ defer f.Close()
54
+ err = osSync(f, 0, SYNC_FULL)
55
+ if err != nil {
56
+ return sysError{err, _IOERR_DIR_FSYNC}
57
+ }
58
+ }
59
+ return nil
60
+ }
61
+
62
+ func (vfsOS) Access(name string, flags AccessFlag) (bool, error) {
63
+ err := osAccess(name, flags)
64
+ if flags == ACCESS_EXISTS {
65
+ if errors.Is(err, fs.ErrNotExist) {
66
+ return false, nil
67
+ }
68
+ } else {
69
+ if errors.Is(err, fs.ErrPermission) {
70
+ return false, nil
71
+ }
72
+ }
73
+ return err == nil, err
74
+ }
75
+
76
+ func (vfsOS) Open(name string, flags OpenFlag) (File, OpenFlag, error) {
77
+ // notest // OpenFilename is called instead
78
+ if name == "" {
79
+ return vfsOS{}.OpenFilename(nil, flags)
80
+ }
81
+ return nil, 0, _CANTOPEN
82
+ }
83
+
84
+ func (vfsOS) OpenFilename(name *Filename, flags OpenFlag) (File, OpenFlag, error) {
85
+ oflags := _O_NOFOLLOW
86
+ if flags&OPEN_EXCLUSIVE != 0 {
87
+ oflags |= os.O_EXCL
88
+ }
89
+ if flags&OPEN_CREATE != 0 {
90
+ oflags |= os.O_CREATE
91
+ }
92
+ if flags&OPEN_READONLY != 0 {
93
+ oflags |= os.O_RDONLY
94
+ }
95
+ if flags&OPEN_READWRITE != 0 {
96
+ oflags |= os.O_RDWR
97
+ }
98
+
99
+ isCreate := flags&(OPEN_CREATE) != 0
100
+ isJournl := flags&(OPEN_MAIN_JOURNAL|OPEN_SUPER_JOURNAL|OPEN_WAL) != 0
101
+
102
+ var err error
103
+ var f *os.File
104
+ if name == nil {
105
+ f, err = osCreateTemp(flags)
106
+ } else {
107
+ f, err = os.OpenFile(name.String(), oflags, 0666)
108
+ if errors.Is(err, syscall.EISDIR) {
109
+ return nil, flags, sysError{err, _CANTOPEN_ISDIR}
110
+ }
111
+ if isCreate && isJournl && errors.Is(err, fs.ErrPermission) &&
112
+ osAccess(name.String(), ACCESS_EXISTS) != nil {
113
+ return nil, flags, sysError{err, _READONLY_DIRECTORY}
114
+ }
115
+ }
116
+ if err != nil {
117
+ return nil, flags, err
118
+ }
119
+
120
+ if modeof := name.URIParameter("modeof"); modeof != "" {
121
+ if err = osSetMode(f, modeof); err != nil {
122
+ f.Close()
123
+ return nil, flags, sysError{err, _IOERR_FSTAT}
124
+ }
125
+ }
126
+
127
+ file := vfsFile{
128
+ File: f,
129
+ flags: flags | _FLAG_PSOW,
130
+ mmap: NewMemoryMapper(f, flags),
131
+ }
132
+ if osBatchAtomic(f) {
133
+ file.flags |= _FLAG_ATOMIC
134
+ }
135
+ if isUnix && isCreate && isJournl {
136
+ file.flags |= _FLAG_SYNC_DIR
137
+ }
138
+ if name.String() != "" {
139
+ file.shm = NewSharedMemory(name.String()+"-shm", flags)
140
+ }
141
+ return &file, flags, nil
142
+ }
143
+
144
+ type vfsFile struct {
145
+ *os.File
146
+ shm SharedMemory
147
+ mmap MemoryMapper
148
+ lock LockLevel
149
+ flags OpenFlag
150
+ }
151
+
152
+ var (
153
+ // Ensure these interfaces are implemented:
154
+ _ FileLockState = &vfsFile{}
155
+ _ FileHasMoved = &vfsFile{}
156
+ _ FileSizeHint = &vfsFile{}
157
+ _ FilePersistWAL = &vfsFile{}
158
+ _ FilePowersafeOverwrite = &vfsFile{}
159
+ )
160
+
161
+ func (f *vfsFile) Close() error {
162
+ if !isUnix && f.flags&OPEN_DELETEONCLOSE != 0 {
163
+ defer os.Remove(f.Name())
164
+ }
165
+ if f.shm != nil {
166
+ f.shm.Close()
167
+ }
168
+ f.Unlock(LOCK_NONE)
169
+ return f.File.Close()
170
+ }
171
+
172
+ func (f *vfsFile) ReadAt(p []byte, off int64) (n int, err error) {
173
+ return osReadAt(f.File, p, off)
174
+ }
175
+
176
+ func (f *vfsFile) WriteAt(p []byte, off int64) (n int, err error) {
177
+ return osWriteAt(f.File, p, off)
178
+ }
179
+
180
+ func (f *vfsFile) Sync(flags SyncFlag) error {
181
+ err := osSync(f.File, f.flags, flags)
182
+ if err != nil {
183
+ return err
184
+ }
185
+ if isUnix && f.flags&_FLAG_SYNC_DIR != 0 {
186
+ f.flags ^= _FLAG_SYNC_DIR
187
+ d, err := os.Open(filepath.Dir(f.File.Name()))
188
+ if err != nil {
189
+ return nil
190
+ }
191
+ defer d.Close()
192
+ err = osSync(f.File, f.flags, flags)
193
+ if err != nil {
194
+ return sysError{err, _IOERR_DIR_FSYNC}
195
+ }
196
+ }
197
+ return nil
198
+ }
199
+
200
+ func (f *vfsFile) Size() (int64, error) {
201
+ return f.Seek(0, io.SeekEnd)
202
+ }
203
+
204
+ func (f *vfsFile) SectorSize() int {
205
+ return _DEFAULT_SECTOR_SIZE
206
+ }
207
+
208
+ func (f *vfsFile) DeviceCharacteristics() DeviceCharacteristic {
209
+ ret := IOCAP_SUBPAGE_READ
210
+ if f.flags&_FLAG_ATOMIC != 0 {
211
+ ret |= IOCAP_BATCH_ATOMIC
212
+ }
213
+ if f.flags&_FLAG_PSOW != 0 {
214
+ ret |= IOCAP_POWERSAFE_OVERWRITE
215
+ }
216
+ if runtime.GOOS == "windows" {
217
+ ret |= IOCAP_UNDELETABLE_WHEN_OPEN
218
+ }
219
+ return ret
220
+ }
221
+
222
+ func (f *vfsFile) SizeHint(size int64) error {
223
+ return osAllocate(f.File, size)
224
+ }
225
+
226
+ func (f *vfsFile) HasMoved() (bool, error) {
227
+ if runtime.GOOS == "windows" {
228
+ return false, nil
229
+ }
230
+ fi, err := f.Stat()
231
+ if err != nil {
232
+ return false, err
233
+ }
234
+ pi, err := os.Stat(f.Name())
235
+ if errors.Is(err, fs.ErrNotExist) {
236
+ return true, nil
237
+ }
238
+ if err != nil {
239
+ return false, err
240
+ }
241
+ return !os.SameFile(fi, pi), nil
242
+ }
243
+
244
+ func (f *vfsFile) LockState() LockLevel { return f.lock }
245
+ func (f *vfsFile) PowersafeOverwrite() bool { return f.flags&_FLAG_PSOW != 0 }
246
+ func (f *vfsFile) PersistWAL() bool { return f.flags&_FLAG_KEEP_WAL != 0 }
247
+
248
+ func (f *vfsFile) SetPowersafeOverwrite(psow bool) {
249
+ f.flags &^= _FLAG_PSOW
250
+ if psow {
251
+ f.flags |= _FLAG_PSOW
252
+ }
253
+ }
254
+
255
+ func (f *vfsFile) SetPersistWAL(keepWAL bool) {
256
+ f.flags &^= _FLAG_KEEP_WAL
257
+ if keepWAL {
258
+ f.flags |= _FLAG_KEEP_WAL
259
+ }
260
+ }
@@ -0,0 +1,187 @@
1
+ package vfs
2
+
3
+ import (
4
+ "net/url"
5
+ "strconv"
6
+
7
+ "github.com/ncruces/go-sqlite3/internal/sqlite3_wrap"
8
+ "github.com/ncruces/go-sqlite3/internal/util"
9
+ )
10
+
11
+ // Filename is used by SQLite to pass filenames
12
+ // to the Open method of a VFS.
13
+ //
14
+ // https://sqlite.org/c3ref/filename.html
15
+ type Filename struct {
16
+ wrp *sqlite3_wrap.Wrapper
17
+ zPath ptr_t
18
+ flags OpenFlag
19
+ }
20
+
21
+ // GetFilename is an internal API users should not call directly.
22
+ func GetFilename(wrp *sqlite3_wrap.Wrapper, id ptr_t, flags OpenFlag) *Filename {
23
+ if id == 0 {
24
+ return nil
25
+ }
26
+ return &Filename{
27
+ wrp: wrp,
28
+ zPath: id,
29
+ flags: flags,
30
+ }
31
+ }
32
+
33
+ // String returns this filename as a string.
34
+ func (n *Filename) String() string {
35
+ if n == nil || n.zPath == 0 {
36
+ return ""
37
+ }
38
+ return n.wrp.ReadString(n.zPath, _MAX_PATHNAME)
39
+ }
40
+
41
+ // Database returns the name of the corresponding database file.
42
+ //
43
+ // https://sqlite.org/c3ref/filename_database.html
44
+ func (n *Filename) Database() string {
45
+ if n == nil || n.zPath == 0 {
46
+ return ""
47
+ }
48
+ return n.path(n.wrp.Xsqlite3_filename_database)
49
+ }
50
+
51
+ // Journal returns the name of the corresponding rollback journal file.
52
+ //
53
+ // https://sqlite.org/c3ref/filename_database.html
54
+ func (n *Filename) Journal() string {
55
+ if n == nil || n.zPath == 0 {
56
+ return ""
57
+ }
58
+ return n.path(n.wrp.Xsqlite3_filename_journal)
59
+ }
60
+
61
+ // WAL returns the name of the corresponding WAL file.
62
+ //
63
+ // https://sqlite.org/c3ref/filename_database.html
64
+ func (n *Filename) WAL() string {
65
+ if n == nil || n.zPath == 0 {
66
+ return ""
67
+ }
68
+ return n.path(n.wrp.Xsqlite3_filename_wal)
69
+ }
70
+
71
+ func (n *Filename) path(fn func(int32) int32) string {
72
+ if n.flags&(OPEN_MAIN_DB|OPEN_MAIN_JOURNAL|OPEN_WAL) == 0 {
73
+ return ""
74
+ }
75
+ name := ptr_t(fn(int32(n.zPath)))
76
+ return n.wrp.ReadString(name, _MAX_PATHNAME)
77
+ }
78
+
79
+ // DatabaseFile returns the main database [File] corresponding to a journal.
80
+ //
81
+ // https://sqlite.org/c3ref/database_file_object.html
82
+ func (n *Filename) DatabaseFile() File {
83
+ if n == nil || n.zPath == 0 {
84
+ return nil
85
+ }
86
+ if n.flags&(OPEN_MAIN_DB|OPEN_MAIN_JOURNAL|OPEN_WAL) == 0 {
87
+ return nil
88
+ }
89
+
90
+ pFile := ptr_t(n.wrp.Xsqlite3_database_file_object(int32(n.zPath)))
91
+ file, _ := vfsFileGet(n.wrp, ptr_t(pFile)).(File)
92
+ return file
93
+ }
94
+
95
+ // URIParameter returns the value of a URI parameter.
96
+ //
97
+ // https://sqlite.org/c3ref/uri_boolean.html
98
+ func (n *Filename) URIParameter(key string) string {
99
+ if n == nil || n.zPath == 0 {
100
+ return ""
101
+ }
102
+
103
+ ptr := ptr_t(n.wrp.Xsqlite3_uri_key(int32(n.zPath), 0))
104
+ if ptr == 0 {
105
+ return ""
106
+ }
107
+
108
+ // Parse the format from:
109
+ // https://github.com/sqlite/sqlite/blob/41fda52/src/pager.c#L4821-L4864
110
+ // This avoids having to alloc/free the key just to find a value.
111
+ mem := n.wrp.Memory
112
+ for {
113
+ k := mem.ReadString(ptr, _MAX_NAME)
114
+ if k == "" {
115
+ return ""
116
+ }
117
+ ptr += ptr_t(len(k)) + 1
118
+
119
+ v := mem.ReadString(ptr, _MAX_NAME)
120
+ if k == key {
121
+ return v
122
+ }
123
+ ptr += ptr_t(len(v)) + 1
124
+ }
125
+ }
126
+
127
+ // URIParameters obtains values for URI parameters.
128
+ //
129
+ // https://sqlite.org/c3ref/uri_boolean.html
130
+ func (n *Filename) URIParameters() url.Values {
131
+ if n == nil || n.zPath == 0 {
132
+ return nil
133
+ }
134
+
135
+ ptr := ptr_t(n.wrp.Xsqlite3_uri_key(int32(n.zPath), 0))
136
+ if ptr == 0 {
137
+ return nil
138
+ }
139
+
140
+ var params url.Values
141
+
142
+ // Parse the format from:
143
+ // https://github.com/sqlite/sqlite/blob/41fda52/src/pager.c#L4821-L4864
144
+ // This is the only way to support multiple valued keys.
145
+ mem := n.wrp.Memory
146
+ for {
147
+ k := mem.ReadString(ptr, _MAX_NAME)
148
+ if k == "" {
149
+ return params
150
+ }
151
+ ptr += ptr_t(len(k)) + 1
152
+
153
+ v := mem.ReadString(ptr, _MAX_NAME)
154
+ if params == nil {
155
+ params = url.Values{}
156
+ }
157
+ params.Add(k, v)
158
+ ptr += ptr_t(len(v)) + 1
159
+ }
160
+ }
161
+
162
+ // URIBoolean returns the value of a URI parameter as a boolean.
163
+ //
164
+ // https://sqlite.org/c3ref/uri_boolean.html
165
+ func (n *Filename) URIBoolean(key string, def bool) bool {
166
+ b, ok := util.ParseBool(n.URIParameter(key))
167
+ if ok {
168
+ return b
169
+ }
170
+ return def
171
+ }
172
+
173
+ // URIInt64 returns the value of a URI parameter converted
174
+ // to a 64-bit signed integer.
175
+ //
176
+ // https://sqlite.org/c3ref/uri_boolean.html
177
+ func (n *Filename) URIInt64(key string, def int64) int64 {
178
+ s := n.URIParameter(key)
179
+ if s == "" {
180
+ return def
181
+ }
182
+ i, err := strconv.ParseInt(s, 10, 64)
183
+ if err != nil {
184
+ return def
185
+ }
186
+ return i
187
+ }