typenative 0.1.3 → 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 (500) 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 +4 -4
  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 +294 -240
  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/transpiler.js +2650 -575
  54. package/bin/version.js +2 -0
  55. package/conformance.md +707 -241
  56. package/govendor/github.com/ncruces/go-sqlite3/LICENSE +21 -0
  57. package/govendor/github.com/ncruces/go-sqlite3/README.md +121 -0
  58. package/govendor/github.com/ncruces/go-sqlite3/backup.go +132 -0
  59. package/govendor/github.com/ncruces/go-sqlite3/blob.go +266 -0
  60. package/govendor/github.com/ncruces/go-sqlite3/config.go +397 -0
  61. package/govendor/github.com/ncruces/go-sqlite3/conn.go +540 -0
  62. package/govendor/github.com/ncruces/go-sqlite3/conn_127.go +93 -0
  63. package/govendor/github.com/ncruces/go-sqlite3/const.go +436 -0
  64. package/govendor/github.com/ncruces/go-sqlite3/context.go +222 -0
  65. package/govendor/github.com/ncruces/go-sqlite3/error.go +182 -0
  66. package/govendor/github.com/ncruces/go-sqlite3/ext.go +153 -0
  67. package/govendor/github.com/ncruces/go-sqlite3/func.go +309 -0
  68. package/govendor/github.com/ncruces/go-sqlite3/go.mod +3 -0
  69. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go +29 -0
  70. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go +13 -0
  71. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go +57 -0
  72. package/govendor/github.com/ncruces/go-sqlite3/internal/errutil/error.go +41 -0
  73. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/alloc.go +128 -0
  74. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/const.go +122 -0
  75. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/error.go +77 -0
  76. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem.go +116 -0
  77. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_other.go +34 -0
  78. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_unix.go +87 -0
  79. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_windows.go +149 -0
  80. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_unix.go +80 -0
  81. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_windows.go +129 -0
  82. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/sys_windows.go +60 -0
  83. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap.go +82 -0
  84. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_sys.go +113 -0
  85. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_vfs.go +181 -0
  86. package/govendor/github.com/ncruces/go-sqlite3/internal/testenv/env.go +55 -0
  87. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json.go +54 -0
  88. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json_v2.go +54 -0
  89. package/govendor/github.com/ncruces/go-sqlite3/internal/util/math.go +29 -0
  90. package/govendor/github.com/ncruces/go-sqlite3/internal/util/page.go +5 -0
  91. package/govendor/github.com/ncruces/go-sqlite3/internal/util/parse.go +142 -0
  92. package/govendor/github.com/ncruces/go-sqlite3/internal/util/pointer.go +3 -0
  93. package/govendor/github.com/ncruces/go-sqlite3/internal/util/reflect.go +10 -0
  94. package/govendor/github.com/ncruces/go-sqlite3/json.go +100 -0
  95. package/govendor/github.com/ncruces/go-sqlite3/json_v2.go +116 -0
  96. package/govendor/github.com/ncruces/go-sqlite3/pointer.go +13 -0
  97. package/govendor/github.com/ncruces/go-sqlite3/quote.go +140 -0
  98. package/govendor/github.com/ncruces/go-sqlite3/stmt.go +692 -0
  99. package/govendor/github.com/ncruces/go-sqlite3/time.go +360 -0
  100. package/govendor/github.com/ncruces/go-sqlite3/txn.go +374 -0
  101. package/govendor/github.com/ncruces/go-sqlite3/value.go +212 -0
  102. package/govendor/github.com/ncruces/go-sqlite3/vfs/README.md +133 -0
  103. package/govendor/github.com/ncruces/go-sqlite3/vfs/api.go +239 -0
  104. package/govendor/github.com/ncruces/go-sqlite3/vfs/cksm.go +143 -0
  105. package/govendor/github.com/ncruces/go-sqlite3/vfs/const.go +256 -0
  106. package/govendor/github.com/ncruces/go-sqlite3/vfs/file.go +260 -0
  107. package/govendor/github.com/ncruces/go-sqlite3/vfs/filename.go +187 -0
  108. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock.go +128 -0
  109. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock_other.go +23 -0
  110. package/govendor/github.com/ncruces/go-sqlite3/vfs/map.go +63 -0
  111. package/govendor/github.com/ncruces/go-sqlite3/vfs/map_other.go +13 -0
  112. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +110 -0
  113. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go +131 -0
  114. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +140 -0
  115. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_f2fs_linux.go +56 -0
  116. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +117 -0
  117. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go +59 -0
  118. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std.go +50 -0
  119. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_alloc.go +19 -0
  120. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_atomic.go +9 -0
  121. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_rw.go +13 -0
  122. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_sync.go +9 -0
  123. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_temp.go +16 -0
  124. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_unix.go +108 -0
  125. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_windows.go +180 -0
  126. package/govendor/github.com/ncruces/go-sqlite3/vfs/registry.go +48 -0
  127. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm.go +26 -0
  128. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +258 -0
  129. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_copy.go +90 -0
  130. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +168 -0
  131. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go +52 -0
  132. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go +185 -0
  133. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_other.go +21 -0
  134. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_windows.go +124 -0
  135. package/govendor/github.com/ncruces/go-sqlite3/vfs/vfs.go +455 -0
  136. package/govendor/github.com/ncruces/go-sqlite3/vtab.go +677 -0
  137. package/govendor/github.com/ncruces/go-sqlite3/wrap.go +48 -0
  138. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/LICENSE +18 -0
  139. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/README.md +11 -0
  140. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/go.mod +3 -0
  141. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/libc.go +215 -0
  142. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.dat +0 -0
  143. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.go +157903 -0
  144. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/tools.sh +38 -0
  145. package/govendor/github.com/ncruces/julianday/LICENSE +21 -0
  146. package/govendor/github.com/ncruces/julianday/README.md +9 -0
  147. package/govendor/github.com/ncruces/julianday/go.mod +3 -0
  148. package/govendor/github.com/ncruces/julianday/julianday.go +124 -0
  149. package/govendor/golang.org/x/sys/LICENSE +27 -0
  150. package/govendor/golang.org/x/sys/PATENTS +22 -0
  151. package/govendor/golang.org/x/sys/go.mod +3 -0
  152. package/govendor/golang.org/x/sys/unix/README.md +184 -0
  153. package/govendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  154. package/govendor/golang.org/x/sys/unix/aliases.go +13 -0
  155. package/govendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  156. package/govendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  157. package/govendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  158. package/govendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  159. package/govendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  160. package/govendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  161. package/govendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  162. package/govendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  163. package/govendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  164. package/govendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  165. package/govendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  166. package/govendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  167. package/govendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  168. package/govendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  169. package/govendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  170. package/govendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  171. package/govendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  172. package/govendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  173. package/govendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  174. package/govendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  175. package/govendor/golang.org/x/sys/unix/auxv.go +36 -0
  176. package/govendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  177. package/govendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  178. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  179. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  180. package/govendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  181. package/govendor/golang.org/x/sys/unix/constants.go +13 -0
  182. package/govendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  183. package/govendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  184. package/govendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  185. package/govendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  186. package/govendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  187. package/govendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  188. package/govendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  189. package/govendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  190. package/govendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  191. package/govendor/golang.org/x/sys/unix/dirent.go +102 -0
  192. package/govendor/golang.org/x/sys/unix/endian_big.go +9 -0
  193. package/govendor/golang.org/x/sys/unix/endian_little.go +9 -0
  194. package/govendor/golang.org/x/sys/unix/env_unix.go +31 -0
  195. package/govendor/golang.org/x/sys/unix/fcntl.go +36 -0
  196. package/govendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  197. package/govendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  198. package/govendor/golang.org/x/sys/unix/fdset.go +27 -0
  199. package/govendor/golang.org/x/sys/unix/gccgo.go +59 -0
  200. package/govendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  201. package/govendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  202. package/govendor/golang.org/x/sys/unix/ifreq_linux.go +145 -0
  203. package/govendor/golang.org/x/sys/unix/ioctl_linux.go +341 -0
  204. package/govendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  205. package/govendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  206. package/govendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  207. package/govendor/golang.org/x/sys/unix/mkall.sh +250 -0
  208. package/govendor/golang.org/x/sys/unix/mkerrors.sh +807 -0
  209. package/govendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  210. package/govendor/golang.org/x/sys/unix/mremap.go +57 -0
  211. package/govendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  212. package/govendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  213. package/govendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  214. package/govendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  215. package/govendor/golang.org/x/sys/unix/race.go +30 -0
  216. package/govendor/golang.org/x/sys/unix/race0.go +25 -0
  217. package/govendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  218. package/govendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  219. package/govendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  220. package/govendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  221. package/govendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  222. package/govendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  223. package/govendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  224. package/govendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  225. package/govendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  226. package/govendor/golang.org/x/sys/unix/syscall.go +86 -0
  227. package/govendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  228. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  229. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  230. package/govendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  231. package/govendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  232. package/govendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  233. package/govendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  234. package/govendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  235. package/govendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  236. package/govendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  237. package/govendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  238. package/govendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  239. package/govendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  240. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  241. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  242. package/govendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  243. package/govendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  244. package/govendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  245. package/govendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  246. package/govendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  247. package/govendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  248. package/govendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  249. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  250. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  251. package/govendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  252. package/govendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  253. package/govendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  254. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  255. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  256. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  257. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  258. package/govendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  259. package/govendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  260. package/govendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  261. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  262. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  263. package/govendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  264. package/govendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  265. package/govendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  266. package/govendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  267. package/govendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  268. package/govendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  269. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  270. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  271. package/govendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  272. package/govendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  273. package/govendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  274. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  275. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  276. package/govendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  277. package/govendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  278. package/govendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  279. package/govendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  280. package/govendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  281. package/govendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  282. package/govendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  283. package/govendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  284. package/govendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  285. package/govendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  286. package/govendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  287. package/govendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  288. package/govendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  289. package/govendor/golang.org/x/sys/unix/timestruct.go +76 -0
  290. package/govendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  291. package/govendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  292. package/govendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  293. package/govendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  294. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  295. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  296. package/govendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  297. package/govendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  298. package/govendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  299. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  300. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  301. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  302. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  303. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  304. package/govendor/golang.org/x/sys/unix/zerrors_linux.go +4209 -0
  305. package/govendor/golang.org/x/sys/unix/zerrors_linux_386.go +882 -0
  306. package/govendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +882 -0
  307. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm.go +887 -0
  308. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +884 -0
  309. package/govendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +874 -0
  310. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips.go +888 -0
  311. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +888 -0
  312. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +888 -0
  313. package/govendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +888 -0
  314. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +940 -0
  315. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +944 -0
  316. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +944 -0
  317. package/govendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +884 -0
  318. package/govendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +943 -0
  319. package/govendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +992 -0
  320. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  321. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  322. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  323. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  324. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  325. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  326. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  327. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  328. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  329. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  330. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  331. package/govendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  332. package/govendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  333. package/govendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  334. package/govendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  335. package/govendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  336. package/govendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  337. package/govendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  338. package/govendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  339. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  340. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  341. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  342. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  343. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  344. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  345. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  346. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  347. package/govendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  348. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  349. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  350. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  351. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  352. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  353. package/govendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  354. package/govendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  355. package/govendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  356. package/govendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  357. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  358. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  359. package/govendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  360. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  361. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  362. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  363. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  364. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  365. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  366. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  367. package/govendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  368. package/govendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  369. package/govendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  370. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  371. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  372. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  373. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  374. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  375. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  376. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  377. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  378. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  379. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  380. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  381. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  382. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  383. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  384. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  385. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  386. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  387. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  388. package/govendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  389. package/govendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  390. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  391. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  392. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  393. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  394. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  395. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  396. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  397. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  398. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  399. package/govendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  400. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  401. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  402. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  403. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  404. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  405. package/govendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  406. package/govendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  407. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  408. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  409. package/govendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  410. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  411. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  412. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  413. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  414. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  415. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  416. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  417. package/govendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  418. package/govendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  419. package/govendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  420. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  421. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  422. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  423. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  424. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  425. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  426. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  427. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  428. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  429. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  430. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  431. package/govendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  432. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  433. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  434. package/govendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  435. package/govendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  436. package/govendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  437. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  438. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  439. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  440. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  441. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  442. package/govendor/golang.org/x/sys/unix/ztypes_linux.go +6547 -0
  443. package/govendor/golang.org/x/sys/unix/ztypes_linux_386.go +747 -0
  444. package/govendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +761 -0
  445. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm.go +741 -0
  446. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +740 -0
  447. package/govendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +741 -0
  448. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips.go +746 -0
  449. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +743 -0
  450. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +743 -0
  451. package/govendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +746 -0
  452. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +754 -0
  453. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +749 -0
  454. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +749 -0
  455. package/govendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +828 -0
  456. package/govendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +763 -0
  457. package/govendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +744 -0
  458. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  459. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  460. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  461. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  462. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  463. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  464. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  465. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  466. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  467. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  468. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  469. package/govendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  470. package/govendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  471. package/govendor/golang.org/x/sys/windows/aliases.go +13 -0
  472. package/govendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  473. package/govendor/golang.org/x/sys/windows/env_windows.go +57 -0
  474. package/govendor/golang.org/x/sys/windows/eventlog.go +20 -0
  475. package/govendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  476. package/govendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  477. package/govendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  478. package/govendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  479. package/govendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  480. package/govendor/golang.org/x/sys/windows/race.go +30 -0
  481. package/govendor/golang.org/x/sys/windows/race0.go +25 -0
  482. package/govendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  483. package/govendor/golang.org/x/sys/windows/service.go +257 -0
  484. package/govendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  485. package/govendor/golang.org/x/sys/windows/str.go +22 -0
  486. package/govendor/golang.org/x/sys/windows/syscall.go +104 -0
  487. package/govendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  488. package/govendor/golang.org/x/sys/windows/types_windows.go +4058 -0
  489. package/govendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  490. package/govendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  491. package/govendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  492. package/govendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  493. package/govendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  494. package/govendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  495. package/govendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  496. package/govendor/manifest.txt +7 -0
  497. package/package.json +6 -1
  498. package/types/typenative-go.d.ts +15159 -5
  499. package/types/typenative-npm.d.ts +2637 -34
  500. package/types/typenative.d.ts +651 -8
@@ -0,0 +1,677 @@
1
+ package sqlite3
2
+
3
+ import (
4
+ "errors"
5
+ "reflect"
6
+ )
7
+
8
+ // CreateModule registers a new virtual table module name.
9
+ // If create is nil, the virtual table is eponymous.
10
+ //
11
+ // https://sqlite.org/c3ref/create_module.html
12
+ //
13
+ // Deprecated: use the generic method.
14
+ func CreateModule[T VTab](db *Conn, name string, create, connect VTabConstructor[T]) error {
15
+ var flags int
16
+
17
+ const (
18
+ VTAB_CREATOR = 0x001
19
+ VTAB_DESTROYER = 0x002
20
+ VTAB_UPDATER = 0x004
21
+ VTAB_RENAMER = 0x008
22
+ VTAB_OVERLOADER = 0x010
23
+ VTAB_CHECKER = 0x020
24
+ VTAB_TXN = 0x040
25
+ VTAB_SAVEPOINTER = 0x080
26
+ VTAB_SHADOWTABS = 0x100
27
+ )
28
+
29
+ if create != nil {
30
+ flags |= VTAB_CREATOR
31
+ }
32
+
33
+ vtab := reflect.TypeFor[T]()
34
+ if implements[VTabDestroyer](vtab) {
35
+ flags |= VTAB_DESTROYER
36
+ }
37
+ if implements[VTabUpdater](vtab) {
38
+ flags |= VTAB_UPDATER
39
+ }
40
+ if implements[VTabRenamer](vtab) {
41
+ flags |= VTAB_RENAMER
42
+ }
43
+ if implements[VTabOverloader](vtab) {
44
+ flags |= VTAB_OVERLOADER
45
+ }
46
+ if implements[VTabChecker](vtab) {
47
+ flags |= VTAB_CHECKER
48
+ }
49
+ if implements[VTabTxn](vtab) {
50
+ flags |= VTAB_TXN
51
+ }
52
+ if implements[VTabSavepointer](vtab) {
53
+ flags |= VTAB_SAVEPOINTER
54
+ }
55
+ if implements[VTabShadowTabler](vtab) {
56
+ flags |= VTAB_SHADOWTABS
57
+ }
58
+
59
+ var modulePtr ptr_t
60
+ defer db.arena.Mark()()
61
+ namePtr := db.arena.String(name)
62
+ if connect != nil {
63
+ modulePtr = db.wrp.AddHandle(vtabModule{
64
+ vtabConstructor(create),
65
+ vtabConstructor(connect)})
66
+ }
67
+ rc := res_t(db.wrp.Xsqlite3_create_module_go(int32(db.handle),
68
+ int32(namePtr), int32(flags), int32(modulePtr)))
69
+ return db.error(rc)
70
+ }
71
+
72
+ func implements[I any](typ reflect.Type) bool {
73
+ return typ.Implements(reflect.TypeFor[I]())
74
+ }
75
+
76
+ // DeclareVTab declares the schema of a virtual table.
77
+ //
78
+ // https://sqlite.org/c3ref/declare_vtab.html
79
+ func (c *Conn) DeclareVTab(sql string) error {
80
+ if c.interrupt.Err() != nil {
81
+ return INTERRUPT
82
+ }
83
+ defer c.arena.Mark()()
84
+ textPtr := c.arena.String(sql)
85
+ rc := res_t(c.wrp.Xsqlite3_declare_vtab(int32(c.handle), int32(textPtr)))
86
+ return c.error(rc)
87
+ }
88
+
89
+ // VTabConflictMode is a virtual table conflict resolution mode.
90
+ //
91
+ // https://sqlite.org/c3ref/c_fail.html
92
+ type VTabConflictMode uint8
93
+
94
+ const (
95
+ VTAB_ROLLBACK VTabConflictMode = 1
96
+ VTAB_IGNORE VTabConflictMode = 2
97
+ VTAB_FAIL VTabConflictMode = 3
98
+ VTAB_ABORT VTabConflictMode = 4
99
+ VTAB_REPLACE VTabConflictMode = 5
100
+ )
101
+
102
+ // VTabOnConflict determines the virtual table conflict policy.
103
+ //
104
+ // https://sqlite.org/c3ref/vtab_on_conflict.html
105
+ func (c *Conn) VTabOnConflict() VTabConflictMode {
106
+ return VTabConflictMode(c.wrp.Xsqlite3_vtab_on_conflict(int32(c.handle)))
107
+ }
108
+
109
+ // VTabConfigOption is a virtual table configuration option.
110
+ //
111
+ // https://sqlite.org/c3ref/c_vtab_constraint_support.html
112
+ type VTabConfigOption uint8
113
+
114
+ const (
115
+ VTAB_CONSTRAINT_SUPPORT VTabConfigOption = 1
116
+ VTAB_INNOCUOUS VTabConfigOption = 2
117
+ VTAB_DIRECTONLY VTabConfigOption = 3
118
+ VTAB_USES_ALL_SCHEMAS VTabConfigOption = 4
119
+ )
120
+
121
+ // VTabConfig configures various facets of the virtual table interface.
122
+ //
123
+ // https://sqlite.org/c3ref/vtab_config.html
124
+ func (c *Conn) VTabConfig(op VTabConfigOption, args ...any) error {
125
+ var i int32
126
+ if op == VTAB_CONSTRAINT_SUPPORT && len(args) > 0 {
127
+ if b, ok := args[0].(bool); ok && b {
128
+ i = 1
129
+ }
130
+ }
131
+ rc := res_t(c.wrp.Xsqlite3_vtab_config_go(int32(c.handle), int32(op), i))
132
+ return c.error(rc)
133
+ }
134
+
135
+ // VTabConstructor is a virtual table constructor function.
136
+ type VTabConstructor[T VTab] func(db *Conn, module, schema, table string, arg ...string) (T, error)
137
+
138
+ // A VTab describes a particular instance of the virtual table.
139
+ // A VTab may optionally implement [io.Closer] to free resources.
140
+ //
141
+ // https://sqlite.org/c3ref/vtab.html
142
+ type VTab interface {
143
+ // https://sqlite.org/vtab.html#xbestindex
144
+ BestIndex(*IndexInfo) error
145
+ // https://sqlite.org/vtab.html#xopen
146
+ Open() (VTabCursor, error)
147
+ }
148
+
149
+ // A VTabDestroyer allows a virtual table to drop persistent state.
150
+ type VTabDestroyer interface {
151
+ VTab
152
+ // https://sqlite.org/vtab.html#sqlite3_module.xDestroy
153
+ Destroy() error
154
+ }
155
+
156
+ // A VTabUpdater allows a virtual table to be updated.
157
+ // Implementations must not retain arg.
158
+ type VTabUpdater interface {
159
+ VTab
160
+ // https://sqlite.org/vtab.html#xupdate
161
+ Update(arg ...Value) (rowid int64, err error)
162
+ }
163
+
164
+ // A VTabRenamer allows a virtual table to be renamed.
165
+ type VTabRenamer interface {
166
+ VTab
167
+ // https://sqlite.org/vtab.html#xrename
168
+ Rename(new string) error
169
+ }
170
+
171
+ // A VTabOverloader allows a virtual table to overload SQL functions.
172
+ type VTabOverloader interface {
173
+ VTab
174
+ // https://sqlite.org/vtab.html#xfindfunction
175
+ FindFunction(arg int, name string) (ScalarFunction, IndexConstraintOp)
176
+ }
177
+
178
+ // A VTabShadowTabler allows a virtual table to protect the content
179
+ // of shadow tables from being corrupted by hostile SQL.
180
+ //
181
+ // Implementing this interface signals that a virtual table named
182
+ // "mumble" reserves all table names starting with "mumble_".
183
+ type VTabShadowTabler interface {
184
+ VTab
185
+ // https://sqlite.org/vtab.html#the_xshadowname_method
186
+ ShadowTables()
187
+ }
188
+
189
+ // A VTabChecker allows a virtual table to report errors
190
+ // to the PRAGMA integrity_check and PRAGMA quick_check commands.
191
+ //
192
+ // Integrity should return an error if it finds problems in the content of the virtual table,
193
+ // but should avoid returning a (wrapped) [Error], [ErrorCode] or [ExtendedErrorCode],
194
+ // as those indicate the Integrity method itself encountered problems
195
+ // while trying to evaluate the virtual table content.
196
+ type VTabChecker interface {
197
+ VTab
198
+ // https://sqlite.org/vtab.html#xintegrity
199
+ Integrity(schema, table string, flags int) error
200
+ }
201
+
202
+ // A VTabTxn allows a virtual table to implement
203
+ // transactions with two-phase commit.
204
+ //
205
+ // Anything that is required as part of a commit that may fail
206
+ // should be performed in the Sync() callback.
207
+ // Current versions of SQLite ignore any errors
208
+ // returned by Commit() and Rollback().
209
+ type VTabTxn interface {
210
+ VTab
211
+ // https://sqlite.org/vtab.html#xBegin
212
+ Begin() error
213
+ // https://sqlite.org/vtab.html#xsync
214
+ Sync() error
215
+ // https://sqlite.org/vtab.html#xcommit
216
+ Commit() error
217
+ // https://sqlite.org/vtab.html#xrollback
218
+ Rollback() error
219
+ }
220
+
221
+ // A VTabSavepointer allows a virtual table to implement
222
+ // nested transactions.
223
+ //
224
+ // https://sqlite.org/vtab.html#xsavepoint
225
+ type VTabSavepointer interface {
226
+ VTabTxn
227
+ Savepoint(id int) error
228
+ Release(id int) error
229
+ RollbackTo(id int) error
230
+ }
231
+
232
+ // A VTabCursor describes cursors that point
233
+ // into the virtual table and are used
234
+ // to loop through the virtual table.
235
+ // A VTabCursor may optionally implement
236
+ // [io.Closer] to free resources.
237
+ // Implementations of Filter must not retain arg.
238
+ //
239
+ // https://sqlite.org/c3ref/vtab_cursor.html
240
+ type VTabCursor interface {
241
+ // https://sqlite.org/vtab.html#xfilter
242
+ Filter(idxNum int, idxStr string, arg ...Value) error
243
+ // https://sqlite.org/vtab.html#xnext
244
+ Next() error
245
+ // https://sqlite.org/vtab.html#xeof
246
+ EOF() bool
247
+ // https://sqlite.org/vtab.html#xcolumn
248
+ Column(ctx Context, n int) error
249
+ // https://sqlite.org/vtab.html#xrowid
250
+ RowID() (int64, error)
251
+ }
252
+
253
+ // An IndexInfo describes virtual table indexing information.
254
+ //
255
+ // https://sqlite.org/c3ref/index_info.html
256
+ type IndexInfo struct {
257
+ // Inputs
258
+ Constraint []IndexConstraint
259
+ OrderBy []IndexOrderBy
260
+ ColumnsUsed uint64
261
+ // Outputs
262
+ ConstraintUsage []IndexConstraintUsage
263
+ IdxNum int
264
+ IdxStr string
265
+ IdxFlags IndexScanFlag
266
+ OrderByConsumed bool
267
+ EstimatedCost float64
268
+ EstimatedRows int64
269
+ // Internal
270
+ c *Conn
271
+ handle ptr_t
272
+ }
273
+
274
+ // An IndexConstraint describes virtual table indexing constraint information.
275
+ //
276
+ // https://sqlite.org/c3ref/index_info.html
277
+ type IndexConstraint struct {
278
+ Column int
279
+ Op IndexConstraintOp
280
+ Usable bool
281
+ }
282
+
283
+ // An IndexOrderBy describes virtual table indexing order by information.
284
+ //
285
+ // https://sqlite.org/c3ref/index_info.html
286
+ type IndexOrderBy struct {
287
+ Column int
288
+ Desc bool
289
+ }
290
+
291
+ // An IndexConstraintUsage describes how virtual table indexing constraints will be used.
292
+ //
293
+ // https://sqlite.org/c3ref/index_info.html
294
+ type IndexConstraintUsage struct {
295
+ ArgvIndex int
296
+ Omit bool
297
+ }
298
+
299
+ // RHSValue returns the value of the right-hand operand of a constraint
300
+ // if the right-hand operand is known.
301
+ //
302
+ // https://sqlite.org/c3ref/vtab_rhs_value.html
303
+ func (idx *IndexInfo) RHSValue(column int) (Value, error) {
304
+ return idx.c.columnValue(idx.c.wrp.Xsqlite3_vtab_rhs_value, idx.handle, column)
305
+ }
306
+
307
+ // Collation returns the name of the collation for a virtual table constraint.
308
+ //
309
+ // https://sqlite.org/c3ref/vtab_collation.html
310
+ func (idx *IndexInfo) Collation(column int) string {
311
+ ptr := ptr_t(idx.c.wrp.Xsqlite3_vtab_collation(int32(idx.handle),
312
+ int32(column)))
313
+ return idx.c.wrp.ReadString(ptr, _MAX_NAME)
314
+ }
315
+
316
+ // Distinct determines if a virtual table query is DISTINCT.
317
+ //
318
+ // https://sqlite.org/c3ref/vtab_distinct.html
319
+ func (idx *IndexInfo) Distinct() int {
320
+ return int(idx.c.wrp.Xsqlite3_vtab_distinct(int32(idx.handle)))
321
+ }
322
+
323
+ // In identifies and handles IN constraints.
324
+ //
325
+ // https://sqlite.org/c3ref/vtab_in.html
326
+ func (idx *IndexInfo) In(column, handle int) bool {
327
+ b := idx.c.wrp.Xsqlite3_vtab_in(int32(idx.handle),
328
+ int32(column), int32(handle))
329
+ return b != 0
330
+ }
331
+
332
+ func (idx *IndexInfo) load() {
333
+ // https://sqlite.org/c3ref/index_info.html
334
+ mem := idx.c.wrp.Memory
335
+ ptr := idx.handle
336
+
337
+ nConstraint := int32(mem.Read32(ptr + 0))
338
+ idx.Constraint = make([]IndexConstraint, nConstraint)
339
+ idx.ConstraintUsage = make([]IndexConstraintUsage, nConstraint)
340
+ idx.OrderBy = make([]IndexOrderBy, int32(mem.Read32(ptr+8)))
341
+
342
+ constraintPtr := ptr_t(mem.Read32(ptr + 4))
343
+ constraint := idx.Constraint
344
+ for i := range idx.Constraint {
345
+ constraint[i] = IndexConstraint{
346
+ Column: int(int32(mem.Read32(constraintPtr + 0))),
347
+ Op: IndexConstraintOp(mem.Read(constraintPtr + 4)),
348
+ Usable: mem.Read(constraintPtr+5) != 0,
349
+ }
350
+ constraintPtr += 12
351
+ }
352
+
353
+ orderByPtr := ptr_t(mem.Read32(ptr + 12))
354
+ orderBy := idx.OrderBy
355
+ for i := range orderBy {
356
+ orderBy[i] = IndexOrderBy{
357
+ Column: int(int32(mem.Read32(orderByPtr + 0))),
358
+ Desc: mem.Read(orderByPtr+4) != 0,
359
+ }
360
+ orderByPtr += 8
361
+ }
362
+
363
+ idx.EstimatedCost = mem.ReadFloat64(ptr + 40)
364
+ idx.EstimatedRows = int64(mem.Read64(ptr + 48))
365
+ idx.ColumnsUsed = mem.Read64(ptr + 64)
366
+ }
367
+
368
+ func (idx *IndexInfo) save() {
369
+ // https://sqlite.org/c3ref/index_info.html
370
+ mem := idx.c.wrp.Memory
371
+ ptr := idx.handle
372
+
373
+ usagePtr := ptr_t(mem.Read32(ptr + 16))
374
+ for _, usage := range idx.ConstraintUsage {
375
+ mem.Write32(usagePtr+0, uint32(usage.ArgvIndex))
376
+ if usage.Omit {
377
+ mem.Write(usagePtr+4, 1)
378
+ }
379
+ usagePtr += 8
380
+ }
381
+
382
+ mem.Write32(ptr+20, uint32(idx.IdxNum))
383
+ if idx.IdxStr != "" {
384
+ mem.Write32(ptr+24, uint32(idx.c.wrp.NewString(idx.IdxStr)))
385
+ mem.WriteBool(ptr+28, true) // needToFreeIdxStr
386
+ }
387
+ if idx.OrderByConsumed {
388
+ mem.WriteBool(ptr+32, true)
389
+ }
390
+ mem.WriteFloat64(ptr+40, idx.EstimatedCost)
391
+ mem.Write64(ptr+48, uint64(idx.EstimatedRows))
392
+ mem.Write32(ptr+56, uint32(idx.IdxFlags))
393
+ }
394
+
395
+ // IndexConstraintOp is a virtual table constraint operator code.
396
+ //
397
+ // https://sqlite.org/c3ref/c_index_constraint_eq.html
398
+ type IndexConstraintOp uint8
399
+
400
+ const (
401
+ INDEX_CONSTRAINT_EQ IndexConstraintOp = 2
402
+ INDEX_CONSTRAINT_GT IndexConstraintOp = 4
403
+ INDEX_CONSTRAINT_LE IndexConstraintOp = 8
404
+ INDEX_CONSTRAINT_LT IndexConstraintOp = 16
405
+ INDEX_CONSTRAINT_GE IndexConstraintOp = 32
406
+ INDEX_CONSTRAINT_MATCH IndexConstraintOp = 64
407
+ INDEX_CONSTRAINT_LIKE IndexConstraintOp = 65
408
+ INDEX_CONSTRAINT_GLOB IndexConstraintOp = 66
409
+ INDEX_CONSTRAINT_REGEXP IndexConstraintOp = 67
410
+ INDEX_CONSTRAINT_NE IndexConstraintOp = 68
411
+ INDEX_CONSTRAINT_ISNOT IndexConstraintOp = 69
412
+ INDEX_CONSTRAINT_ISNOTNULL IndexConstraintOp = 70
413
+ INDEX_CONSTRAINT_ISNULL IndexConstraintOp = 71
414
+ INDEX_CONSTRAINT_IS IndexConstraintOp = 72
415
+ INDEX_CONSTRAINT_LIMIT IndexConstraintOp = 73
416
+ INDEX_CONSTRAINT_OFFSET IndexConstraintOp = 74
417
+ INDEX_CONSTRAINT_FUNCTION IndexConstraintOp = 150
418
+ )
419
+
420
+ // IndexScanFlag is a virtual table scan flag.
421
+ //
422
+ // https://sqlite.org/c3ref/c_index_scan_unique.html
423
+ type IndexScanFlag uint32
424
+
425
+ const (
426
+ INDEX_SCAN_UNIQUE IndexScanFlag = 0x00000001
427
+ INDEX_SCAN_HEX IndexScanFlag = 0x00000002
428
+ )
429
+
430
+ type vtabModule = [2]VTabConstructor[VTab]
431
+
432
+ func vtabConstructor[T VTab](c VTabConstructor[T]) VTabConstructor[VTab] {
433
+ return func(db *Conn, module, schema, table string, arg ...string) (VTab, error) {
434
+ return c(db, module, schema, table, arg...)
435
+ }
436
+ }
437
+
438
+ func (e env) vtabConstruct(fn VTabConstructor[VTab], nArg, pArg, ppVTab, pzErr int32) int32 {
439
+ arg := make([]string, nArg)
440
+ for i := range nArg {
441
+ ptr := ptr_t(e.Memory.Read32(ptr_t(pArg + i*ptrlen)))
442
+ arg[i] = e.ReadString(ptr, _MAX_SQL_LENGTH)
443
+ }
444
+
445
+ tab, err := fn(e.DB.(*Conn), arg[0], arg[1], arg[2], arg[3:]...)
446
+ if err == nil {
447
+ e.vtabPutHandle(ppVTab, tab)
448
+ }
449
+ return e.vtabError(pzErr, _PTR_ERROR, err, ERROR)
450
+ }
451
+
452
+ func (e env) Xgo_vtab_create(pMod, nArg, pArg, ppVTab, pzErr int32) int32 {
453
+ module := e.vtabGetHandle(pMod).(vtabModule)
454
+ return e.vtabConstruct(module[0], nArg, pArg, ppVTab, pzErr)
455
+ }
456
+
457
+ func (e env) Xgo_vtab_connect(pMod, nArg, pArg, ppVTab, pzErr int32) int32 {
458
+ module := e.vtabGetHandle(pMod).(vtabModule)
459
+ return e.vtabConstruct(module[1], nArg, pArg, ppVTab, pzErr)
460
+ }
461
+
462
+ func (e env) Xgo_vtab_disconnect(pVTab int32) int32 {
463
+ err := e.vtabDelHandle(pVTab)
464
+ return e.vtabError(0, _PTR_ERROR, err, ERROR)
465
+ }
466
+
467
+ func (e env) Xgo_vtab_destroy(pVTab int32) int32 {
468
+ vtab := e.vtabGetHandle(pVTab).(VTabDestroyer)
469
+ err := errors.Join(vtab.Destroy(), e.vtabDelHandle(pVTab))
470
+ return e.vtabError(0, _PTR_ERROR, err, ERROR)
471
+ }
472
+
473
+ func (e env) Xgo_vtab_best_index(pVTab, pIdxInfo int32) int32 {
474
+ var info IndexInfo
475
+ info.handle = ptr_t(pIdxInfo)
476
+ info.c = e.DB.(*Conn)
477
+ info.load()
478
+
479
+ vtab := e.vtabGetHandle(pVTab).(VTab)
480
+ err := vtab.BestIndex(&info)
481
+
482
+ info.save()
483
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
484
+ }
485
+
486
+ func (e env) Xgo_vtab_update(pVTab, nArg, pArg, pRowID int32) int32 {
487
+ db := e.DB.(*Conn)
488
+ args := callbackArgs(db, nArg, ptr_t(pArg))
489
+ defer returnArgs(args)
490
+
491
+ vtab := e.vtabGetHandle(pVTab).(VTabUpdater)
492
+ rowID, err := vtab.Update(*args...)
493
+ if err == nil {
494
+ e.Memory.Write64(ptr_t(pRowID), uint64(rowID))
495
+ }
496
+
497
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
498
+ }
499
+
500
+ func (e env) Xgo_vtab_rename(pVTab, zNew int32) int32 {
501
+ vtab := e.vtabGetHandle(pVTab).(VTabRenamer)
502
+ err := vtab.Rename(e.ReadString(ptr_t(zNew), _MAX_NAME))
503
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
504
+ }
505
+
506
+ func (e env) Xgo_vtab_find_function(pVTab, nArg, zName, pxFunc int32) int32 {
507
+ vtab := e.vtabGetHandle(pVTab).(VTabOverloader)
508
+ f, op := vtab.FindFunction(int(nArg), e.ReadString(ptr_t(zName), _MAX_NAME))
509
+ if op != 0 {
510
+ var wrapper ptr_t
511
+ wrapper = e.AddHandle(func(c Context, arg ...Value) {
512
+ defer e.DelHandle(wrapper)
513
+ f(c, arg...)
514
+ })
515
+ e.Memory.Write32(ptr_t(pxFunc), uint32(wrapper))
516
+ }
517
+ return int32(op)
518
+ }
519
+
520
+ func (e env) Xgo_vtab_integrity(pVTab, zSchema, zTabName, mFlags, pzErr int32) int32 {
521
+ vtab := e.vtabGetHandle(pVTab).(VTabChecker)
522
+ schema := e.ReadString(ptr_t(zSchema), _MAX_NAME)
523
+ table := e.ReadString(ptr_t(zTabName), _MAX_NAME)
524
+ err := vtab.Integrity(schema, table, int(uint32(mFlags)))
525
+ // xIntegrity should return OK - even if it finds problems in the content of the virtual table.
526
+ // https://sqlite.org/vtab.html#xintegrity
527
+ return e.vtabError(pzErr, _PTR_ERROR, err, _OK)
528
+ }
529
+
530
+ func (e env) Xgo_vtab_begin(pVTab int32) int32 {
531
+ vtab := e.vtabGetHandle(pVTab).(VTabTxn)
532
+ err := vtab.Begin()
533
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
534
+ }
535
+
536
+ func (e env) Xgo_vtab_sync(pVTab int32) int32 {
537
+ vtab := e.vtabGetHandle(pVTab).(VTabTxn)
538
+ err := vtab.Sync()
539
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
540
+ }
541
+
542
+ func (e env) Xgo_vtab_commit(pVTab int32) int32 {
543
+ vtab := e.vtabGetHandle(pVTab).(VTabTxn)
544
+ err := vtab.Commit()
545
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
546
+ }
547
+
548
+ func (e env) Xgo_vtab_rollback(pVTab int32) int32 {
549
+ vtab := e.vtabGetHandle(pVTab).(VTabTxn)
550
+ err := vtab.Rollback()
551
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
552
+ }
553
+
554
+ func (e env) Xgo_vtab_savepoint(pVTab, id int32) int32 {
555
+ vtab := e.vtabGetHandle(pVTab).(VTabSavepointer)
556
+ err := vtab.Savepoint(int(id))
557
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
558
+ }
559
+
560
+ func (e env) Xgo_vtab_release(pVTab, id int32) int32 {
561
+ vtab := e.vtabGetHandle(pVTab).(VTabSavepointer)
562
+ err := vtab.Release(int(id))
563
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
564
+ }
565
+
566
+ func (e env) Xgo_vtab_rollback_to(pVTab, id int32) int32 {
567
+ vtab := e.vtabGetHandle(pVTab).(VTabSavepointer)
568
+ err := vtab.RollbackTo(int(id))
569
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
570
+ }
571
+
572
+ func (e env) Xgo_cur_open(pVTab, ppCur int32) int32 {
573
+ vtab := e.vtabGetHandle(pVTab).(VTab)
574
+
575
+ cursor, err := vtab.Open()
576
+ if err == nil {
577
+ e.vtabPutHandle(ppCur, cursor)
578
+ }
579
+
580
+ return e.vtabError(pVTab, _VTAB_ERROR, err, ERROR)
581
+ }
582
+
583
+ func (e env) Xgo_cur_close(pCur int32) int32 {
584
+ err := e.vtabDelHandle(pCur)
585
+ return e.vtabError(0, _PTR_ERROR, err, ERROR)
586
+ }
587
+
588
+ func (e env) Xgo_cur_filter(pCur, idxNum, idxStr, nArg, pArg int32) int32 {
589
+ db := e.DB.(*Conn)
590
+ args := callbackArgs(db, nArg, ptr_t(pArg))
591
+ defer returnArgs(args)
592
+
593
+ var idxName string
594
+ if idxStr != 0 {
595
+ idxName = e.ReadString(ptr_t(idxStr), _MAX_LENGTH)
596
+ }
597
+
598
+ cursor := e.vtabGetHandle(pCur).(VTabCursor)
599
+ err := cursor.Filter(int(idxNum), idxName, *args...)
600
+ return e.vtabError(pCur, _CURSOR_ERROR, err, ERROR)
601
+ }
602
+
603
+ func (e env) Xgo_cur_eof(pCur int32) int32 {
604
+ cursor := e.vtabGetHandle(pCur).(VTabCursor)
605
+ if cursor.EOF() {
606
+ return 1
607
+ }
608
+ return 0
609
+ }
610
+
611
+ func (e env) Xgo_cur_next(pCur int32) int32 {
612
+ cursor := e.vtabGetHandle(pCur).(VTabCursor)
613
+ err := cursor.Next()
614
+ return e.vtabError(pCur, _CURSOR_ERROR, err, ERROR)
615
+ }
616
+
617
+ func (e env) Xgo_cur_column(pCur, pCtx, n int32) int32 {
618
+ cursor := e.vtabGetHandle(pCur).(VTabCursor)
619
+ db := e.DB.(*Conn)
620
+ err := cursor.Column(Context{db, ptr_t(pCtx)}, int(n))
621
+ return e.vtabError(pCur, _CURSOR_ERROR, err, ERROR)
622
+ }
623
+
624
+ func (e env) Xgo_cur_rowid(pCur, pRowID int32) int32 {
625
+ cursor := e.vtabGetHandle(pCur).(VTabCursor)
626
+
627
+ rowID, err := cursor.RowID()
628
+ if err == nil {
629
+ e.Memory.Write64(ptr_t(pRowID), uint64(rowID))
630
+ }
631
+
632
+ return e.vtabError(pCur, _CURSOR_ERROR, err, ERROR)
633
+ }
634
+
635
+ const (
636
+ _PTR_ERROR = iota
637
+ _VTAB_ERROR
638
+ _CURSOR_ERROR
639
+ )
640
+
641
+ func (e env) vtabError(ptr int32, kind uint32, err error, def ErrorCode) int32 {
642
+ const zErrMsgOffset = 8
643
+ msg, code := errorCode(err, def)
644
+ if ptr != 0 && msg != "" {
645
+ switch kind {
646
+ case _VTAB_ERROR:
647
+ ptr = ptr + zErrMsgOffset // zErrMsg
648
+ case _CURSOR_ERROR:
649
+ ptr = int32(e.Memory.Read32(ptr_t(ptr))) + zErrMsgOffset // pVTab->zErrMsg
650
+ }
651
+ db := e.DB.(*Conn)
652
+ if ptr := ptr_t(e.Memory.Read32(ptr_t(ptr))); ptr != 0 {
653
+ db.wrp.Free(ptr)
654
+ }
655
+ e.Memory.Write32(ptr_t(ptr), uint32(db.wrp.NewString(msg)))
656
+ }
657
+ return int32(code)
658
+ }
659
+
660
+ func (e env) vtabGetHandle(ptr int32) any {
661
+ const handleOffset = 4
662
+ handle := ptr_t(e.Memory.Read32(ptr_t(ptr) - handleOffset))
663
+ return e.GetHandle(handle)
664
+ }
665
+
666
+ func (e env) vtabDelHandle(ptr int32) error {
667
+ const handleOffset = 4
668
+ handle := ptr_t(e.Memory.Read32(ptr_t(ptr) - handleOffset))
669
+ return e.DelHandle(handle)
670
+ }
671
+
672
+ func (e env) vtabPutHandle(pptr int32, val any) {
673
+ const handleOffset = 4
674
+ handle := e.AddHandle(val)
675
+ ptr := ptr_t(e.Memory.Read32(ptr_t(pptr)))
676
+ e.Memory.Write32(ptr-handleOffset, uint32(handle))
677
+ }