diff --git a/README.md b/README.md index 050b601..5f301a7 100644 --- a/README.md +++ b/README.md @@ -65,17 +65,14 @@ import roach.codecs.* val connectionString = "postgresql://postgres:mysecretpassword@localhost:5432/postgres" -Zone { implicit z => - Pool.single(connectionString) { pool => - pool.withLease { +Zone: + Pool.single(connectionString): pool => + pool.withLease: sql"select typname, typisdefined from pg_type".all(name ~ bool).foreach(println) // with parameters now val oid: Option[Int] = sql"select oid::int4 from pg_type where typname = $varchar".one("bool", int4) - } - } -} ``` ### `sql"..."` interpolator diff --git a/build.sbt b/build.sbt index b081128..eb7647f 100644 --- a/build.sbt +++ b/build.sbt @@ -4,13 +4,13 @@ import java.nio.file.Paths Global / onChangedBuildSource := ReloadOnSourceChanges val Versions = new { - val Scala = "3.3.1" + val Scala = "3.3.3" - val circe = "0.14.6" + val circe = "0.14.9" - val munit = "1.0.0-M11" + val munit = "1.0.0" - val upickle = "3.2.0" + val upickle = "3.3.1" } import bindgen.interface.* @@ -36,8 +36,7 @@ lazy val core = Compile / bindgenBindings += { val configurator = vcpkgConfigurator.value - Binding - .builder(configurator.includes("libpq") / "libpq-fe.h", "libpq") + Binding(configurator.includes("libpq") / "libpq-fe.h", "libpq") .withLinkName("pq") .addCImport("libpq-fe.h") .withClangFlags( @@ -45,13 +44,14 @@ lazy val core = .updateCompilationFlags(List("-std=gnu99"), "libpq") .toList ) - .build + .withNoLocation(true) }, bindgenMode := BindgenMode.Manual( sourceDirectory.value / "main" / "scala" / "generated", (Compile / resourceDirectory).value / "scala-native" ), - moduleName := "core" + moduleName := "core", + configurePlatform ) lazy val upickle = @@ -64,6 +64,7 @@ lazy val upickle = ) .settings(moduleName := "upickle") .settings(common) + .settings(configurePlatform) lazy val circe = project @@ -75,13 +76,14 @@ lazy val circe = ) .settings(moduleName := "circe") .settings(common) + .settings(configurePlatform) val common = Seq( organization := "com.indoorvivants.roach", scalaVersion := Versions.Scala, libraryDependencies += "org.scalameta" %%% "munit" % Versions.munit % Test, resolvers ++= Resolver.sonatypeOssRepos("snapshots"), - vcpkgDependencies := Set("libpq") + vcpkgDependencies := VcpkgDependencies("libpq") ) lazy val docs = @@ -127,3 +129,26 @@ inThisBuild( ) addCommandAlias("checkDocs", "docs/mdoc --in README.md") + +val configurePlatform = Seq( + nativeConfig := { + import com.indoorvivants.detective.* + val conf = nativeConfig.value + val arch64 = + if ( + Platform.arch == Platform.Arch.Arm && Platform.bits == Platform.Bits.x64 + ) + List("-arch", "arm64") + else Nil + + conf + .withLinkingOptions( + conf.linkingOptions ++ arch64 + ) + .withCompileOptions( + conf.compileOptions ++ arch64 + ) + .withIncrementalCompilation(true) + .withMultithreading(true) + } +) diff --git a/module-circe/src/test/scala/CirceTests.scala b/module-circe/src/test/scala/CirceTests.scala index c1d4030..d4694a6 100644 --- a/module-circe/src/test/scala/CirceTests.scala +++ b/module-circe/src/test/scala/CirceTests.scala @@ -5,6 +5,7 @@ import roach.codecs.* import io.circe.Json import io.circe.JsonNumber import roach.Pool +import scala.scalanative.unsafe.Zone class CirceTests extends munit.FunSuite with roach.tests.TestHarness: @@ -18,7 +19,7 @@ class CirceTests extends munit.FunSuite with roach.tests.TestHarness: """) test("read: raw json") { - zone { + Zone { withDB { db ?=> val q = """SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json""" @@ -40,7 +41,7 @@ class CirceTests extends munit.FunSuite with roach.tests.TestHarness: import io.circe.syntax.* - zone { + Zone { withDB { db ?=> val row = (512L, Json.obj("hello" := "world", "bla" := 25)) db.executeParams( @@ -62,7 +63,7 @@ class CirceTests extends munit.FunSuite with roach.tests.TestHarness: case class Testi(hello: String, bla: Int) derives io.circe.Codec.AsObject - zone { + Zone { withDB { db ?=> val row = (1024L, Testi("yo", 152)) @@ -83,7 +84,7 @@ class CirceTests extends munit.FunSuite with roach.tests.TestHarness: case class Top(bar: String, balance: Double, active: Boolean) derives io.circe.Codec.AsObject - zone { + Zone { withDB { db ?=> val q = """SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json""" diff --git a/module-core/src/main/scala/generated/libpq.scala b/module-core/src/main/scala/generated/libpq.scala index b8305e2..6be518b 100644 --- a/module-core/src/main/scala/generated/libpq.scala +++ b/module-core/src/main/scala/generated/libpq.scala @@ -16,9 +16,6 @@ object predef: object enumerations: import predef.* - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type ConnStatusType = CUnsignedInt object ConnStatusType extends CEnumU[ConnStatusType]: given _tag: Tag[ConnStatusType] = Tag.UInt @@ -53,15 +50,12 @@ object enumerations: case CONNECTION_GSS_STARTUP => Some("CONNECTION_GSS_STARTUP") case CONNECTION_CHECK_TARGET => Some("CONNECTION_CHECK_TARGET") case CONNECTION_CHECK_STANDBY => Some("CONNECTION_CHECK_STANDBY") - case _ => None + case _ => _root_.scala.None extension (a: ConnStatusType) inline def &(b: ConnStatusType): ConnStatusType = a & b inline def |(b: ConnStatusType): ConnStatusType = a | b inline def is(b: ConnStatusType): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type ExecStatusType = CUnsignedInt object ExecStatusType extends CEnumU[ExecStatusType]: given _tag: Tag[ExecStatusType] = Tag.UInt @@ -92,15 +86,12 @@ object enumerations: case PGRES_SINGLE_TUPLE => Some("PGRES_SINGLE_TUPLE") case PGRES_PIPELINE_SYNC => Some("PGRES_PIPELINE_SYNC") case PGRES_PIPELINE_ABORTED => Some("PGRES_PIPELINE_ABORTED") - case _ => None + case _ => _root_.scala.None extension (a: ExecStatusType) inline def &(b: ExecStatusType): ExecStatusType = a & b inline def |(b: ExecStatusType): ExecStatusType = a | b inline def is(b: ExecStatusType): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGContextVisibility = CUnsignedInt object PGContextVisibility extends CEnumU[PGContextVisibility]: given _tag: Tag[PGContextVisibility] = Tag.UInt @@ -113,15 +104,12 @@ object enumerations: case PQSHOW_CONTEXT_NEVER => Some("PQSHOW_CONTEXT_NEVER") case PQSHOW_CONTEXT_ERRORS => Some("PQSHOW_CONTEXT_ERRORS") case PQSHOW_CONTEXT_ALWAYS => Some("PQSHOW_CONTEXT_ALWAYS") - case _ => None + case _ => _root_.scala.None extension (a: PGContextVisibility) inline def &(b: PGContextVisibility): PGContextVisibility = a & b inline def |(b: PGContextVisibility): PGContextVisibility = a | b inline def is(b: PGContextVisibility): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGPing = CUnsignedInt object PGPing extends CEnumU[PGPing]: given _tag: Tag[PGPing] = Tag.UInt @@ -136,15 +124,12 @@ object enumerations: case PQPING_REJECT => Some("PQPING_REJECT") case PQPING_NO_RESPONSE => Some("PQPING_NO_RESPONSE") case PQPING_NO_ATTEMPT => Some("PQPING_NO_ATTEMPT") - case _ => None + case _ => _root_.scala.None extension (a: PGPing) inline def &(b: PGPing): PGPing = a & b inline def |(b: PGPing): PGPing = a | b inline def is(b: PGPing): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGTransactionStatusType = CUnsignedInt object PGTransactionStatusType extends CEnumU[PGTransactionStatusType]: given _tag: Tag[PGTransactionStatusType] = Tag.UInt @@ -161,15 +146,12 @@ object enumerations: case PQTRANS_INTRANS => Some("PQTRANS_INTRANS") case PQTRANS_INERROR => Some("PQTRANS_INERROR") case PQTRANS_UNKNOWN => Some("PQTRANS_UNKNOWN") - case _ => None + case _ => _root_.scala.None extension (a: PGTransactionStatusType) inline def &(b: PGTransactionStatusType): PGTransactionStatusType = a & b inline def |(b: PGTransactionStatusType): PGTransactionStatusType = a | b inline def is(b: PGTransactionStatusType): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGVerbosity = CUnsignedInt object PGVerbosity extends CEnumU[PGVerbosity]: given _tag: Tag[PGVerbosity] = Tag.UInt @@ -184,15 +166,12 @@ object enumerations: case PQERRORS_DEFAULT => Some("PQERRORS_DEFAULT") case PQERRORS_VERBOSE => Some("PQERRORS_VERBOSE") case PQERRORS_SQLSTATE => Some("PQERRORS_SQLSTATE") - case _ => None + case _ => _root_.scala.None extension (a: PGVerbosity) inline def &(b: PGVerbosity): PGVerbosity = a & b inline def |(b: PGVerbosity): PGVerbosity = a | b inline def is(b: PGVerbosity): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGpipelineStatus = CUnsignedInt object PGpipelineStatus extends CEnumU[PGpipelineStatus]: given _tag: Tag[PGpipelineStatus] = Tag.UInt @@ -205,15 +184,12 @@ object enumerations: case PQ_PIPELINE_OFF => Some("PQ_PIPELINE_OFF") case PQ_PIPELINE_ON => Some("PQ_PIPELINE_ON") case PQ_PIPELINE_ABORTED => Some("PQ_PIPELINE_ABORTED") - case _ => None + case _ => _root_.scala.None extension (a: PGpipelineStatus) inline def &(b: PGpipelineStatus): PGpipelineStatus = a & b inline def |(b: PGpipelineStatus): PGpipelineStatus = a | b inline def is(b: PGpipelineStatus): Boolean = (a & b) == b - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PostgresPollingStatusType = CUnsignedInt object PostgresPollingStatusType extends CEnumU[PostgresPollingStatusType]: given _tag: Tag[PostgresPollingStatusType] = Tag.UInt @@ -230,7 +206,7 @@ object enumerations: case PGRES_POLLING_WRITING => Some("PGRES_POLLING_WRITING") case PGRES_POLLING_OK => Some("PGRES_POLLING_OK") case PGRES_POLLING_ACTIVE => Some("PGRES_POLLING_ACTIVE") - case _ => None + case _ => _root_.scala.None extension (a: PostgresPollingStatusType) inline def &(b: PostgresPollingStatusType): PostgresPollingStatusType = a & b inline def |(b: PostgresPollingStatusType): PostgresPollingStatusType = a | b @@ -238,9 +214,9 @@ object enumerations: object aliases: import _root_.libpq.enumerations.* + import _root_.libpq.predef.* import _root_.libpq.aliases.* import _root_.libpq.structs.* - type FILE = libc.stdio.FILE object FILE: val _tag: Tag[FILE] = summon[Tag[libc.stdio.FILE]] @@ -248,9 +224,6 @@ object aliases: extension (v: FILE) inline def value: libc.stdio.FILE = v - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/postgres_ext.h - */ opaque type Oid = CUnsignedInt object Oid: given _tag: Tag[Oid] = Tag.UInt @@ -258,59 +231,49 @@ object aliases: extension (v: Oid) inline def value: CUnsignedInt = v - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQnoticeProcessor = CFuncPtr2[Ptr[Byte], CString, Unit] object PQnoticeProcessor: given _tag: Tag[PQnoticeProcessor] = Tag.materializeCFuncPtr2[Ptr[Byte], CString, Unit] + inline def fromPtr(ptr: Ptr[Byte] | CVoidPtr): PQnoticeProcessor = CFuncPtr.fromPtr(ptr.asInstanceOf[Ptr[Byte]]) inline def apply(inline o: CFuncPtr2[Ptr[Byte], CString, Unit]): PQnoticeProcessor = o extension (v: PQnoticeProcessor) inline def value: CFuncPtr2[Ptr[Byte], CString, Unit] = v + inline def toPtr: CVoidPtr = CFuncPtr.toPtr(v) - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQnoticeReceiver = CFuncPtr2[Ptr[Byte], Ptr[PGresult], Unit] object PQnoticeReceiver: given _tag: Tag[PQnoticeReceiver] = Tag.materializeCFuncPtr2[Ptr[Byte], Ptr[PGresult], Unit] + inline def fromPtr(ptr: Ptr[Byte] | CVoidPtr): PQnoticeReceiver = CFuncPtr.fromPtr(ptr.asInstanceOf[Ptr[Byte]]) inline def apply(inline o: CFuncPtr2[Ptr[Byte], Ptr[PGresult], Unit]): PQnoticeReceiver = o extension (v: PQnoticeReceiver) inline def value: CFuncPtr2[Ptr[Byte], Ptr[PGresult], Unit] = v + inline def toPtr: CVoidPtr = CFuncPtr.toPtr(v) - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQsslKeyPassHook_OpenSSL_type = CFuncPtr3[CString, CInt, Ptr[PGconn], CInt] object PQsslKeyPassHook_OpenSSL_type: given _tag: Tag[PQsslKeyPassHook_OpenSSL_type] = Tag.materializeCFuncPtr3[CString, CInt, Ptr[PGconn], CInt] + inline def fromPtr(ptr: Ptr[Byte] | CVoidPtr): PQsslKeyPassHook_OpenSSL_type = CFuncPtr.fromPtr(ptr.asInstanceOf[Ptr[Byte]]) inline def apply(inline o: CFuncPtr3[CString, CInt, Ptr[PGconn], CInt]): PQsslKeyPassHook_OpenSSL_type = o extension (v: PQsslKeyPassHook_OpenSSL_type) inline def value: CFuncPtr3[CString, CInt, Ptr[PGconn], CInt] = v + inline def toPtr: CVoidPtr = CFuncPtr.toPtr(v) - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/postgres_ext.h - */ opaque type pg_int64 = CLongInt object pg_int64: - given _tag: Tag[pg_int64] = Tag.Long + given _tag: Tag[pg_int64] = Tag.Size inline def apply(inline o: CLongInt): pg_int64 = o extension (v: pg_int64) inline def value: CLongInt = v - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pgthreadlock_t = CFuncPtr1[CInt, Unit] object pgthreadlock_t: given _tag: Tag[pgthreadlock_t] = Tag.materializeCFuncPtr1[CInt, Unit] + inline def fromPtr(ptr: Ptr[Byte] | CVoidPtr): pgthreadlock_t = CFuncPtr.fromPtr(ptr.asInstanceOf[Ptr[Byte]]) inline def apply(inline o: CFuncPtr1[CInt, Unit]): pgthreadlock_t = o extension (v: pgthreadlock_t) inline def value: CFuncPtr1[CInt, Unit] = v + inline def toPtr: CVoidPtr = CFuncPtr.toPtr(v) - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pqbool = CChar object pqbool: given _tag: Tag[pqbool] = Tag.Byte @@ -327,26 +290,17 @@ object aliases: object structs: import _root_.libpq.enumerations.* + import _root_.libpq.predef.* import _root_.libpq.aliases.* import _root_.libpq.structs.* - - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGcancel = CStruct0 object PGcancel: given _tag: Tag[PGcancel] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGconn = CStruct0 object PGconn: given _tag: Tag[PGconn] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGnotify = CStruct4[CString, CInt, CString, Ptr[Byte]] object PGnotify: given _tag: Tag[PGnotify] = Tag.materializeCStruct4Tag[CString, CInt, CString, Ptr[Byte]] @@ -368,9 +322,6 @@ object structs: def next : Ptr[pgNotify] = struct._4.asInstanceOf[Ptr[pgNotify]] def next_=(value: Ptr[pgNotify]): Unit = !struct.at4 = value.asInstanceOf[Ptr[Byte]] - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGresAttDesc = CStruct7[CString, Oid, CInt, CInt, Oid, CInt, CInt] object PGresAttDesc: given _tag: Tag[PGresAttDesc] = Tag.materializeCStruct7Tag[CString, Oid, CInt, CInt, Oid, CInt, CInt] @@ -401,21 +352,12 @@ object structs: def atttypmod : CInt = struct._7 def atttypmod_=(value: CInt): Unit = !struct.at7 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PGresult = CStruct0 object PGresult: given _tag: Tag[PGresult] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQArgBlock = CStruct3[CInt, CInt, PQArgBlock.Union0] object PQArgBlock: - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type Union0 = CArray[Byte, Nat._8] object Union0: given _tag: Tag[Union0] = Tag.CArray[CChar, Nat._8](Tag.Byte, Tag.Nat8) @@ -455,9 +397,6 @@ object structs: def u : PQArgBlock.Union0 = struct._3 def u_=(value: PQArgBlock.Union0): Unit = !struct.at3 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQconninfoOption = CStruct7[CString, CString, CString, CString, CString, CString, CInt] object PQconninfoOption: given _tag: Tag[PQconninfoOption] = Tag.materializeCStruct7Tag[CString, CString, CString, CString, CString, CString, CInt] @@ -488,9 +427,6 @@ object structs: def dispsize : CInt = struct._7 def dispsize_=(value: CInt): Unit = !struct.at7 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type PQprintOpt = CStruct10[pqbool, pqbool, pqbool, pqbool, pqbool, pqbool, CString, CString, CString, Ptr[CString]] object PQprintOpt: given _tag: Tag[PQprintOpt] = Tag.materializeCStruct10Tag[pqbool, pqbool, pqbool, pqbool, pqbool, pqbool, CString, CString, CString, Ptr[CString]] @@ -530,9 +466,6 @@ object structs: def fieldName : Ptr[CString] = struct._10 def fieldName_=(value: Ptr[CString]): Unit = !struct.at10 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type _PQconninfoOption = CStruct7[CString, CString, CString, CString, CString, CString, CInt] object _PQconninfoOption: given _tag: Tag[_PQconninfoOption] = Tag.materializeCStruct7Tag[CString, CString, CString, CString, CString, CString, CInt] @@ -563,9 +496,6 @@ object structs: def dispsize : CInt = struct._7 def dispsize_=(value: CInt): Unit = !struct.at7 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type _PQprintOpt = CStruct10[pqbool, pqbool, pqbool, pqbool, pqbool, pqbool, CString, CString, CString, Ptr[CString]] object _PQprintOpt: given _tag: Tag[_PQprintOpt] = Tag.materializeCStruct10Tag[pqbool, pqbool, pqbool, pqbool, pqbool, pqbool, CString, CString, CString, Ptr[CString]] @@ -605,9 +535,6 @@ object structs: def fieldName : Ptr[CString] = struct._10 def fieldName_=(value: Ptr[CString]): Unit = !struct.at10 = value - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pgNotify = CStruct4[CString, CInt, CString, Ptr[Byte]] object pgNotify: given _tag: Tag[pgNotify] = Tag.materializeCStruct4Tag[CString, CInt, CString, Ptr[Byte]] @@ -629,30 +556,18 @@ object structs: def next : Ptr[pgNotify] = struct._4.asInstanceOf[Ptr[pgNotify]] def next_=(value: Ptr[pgNotify]): Unit = !struct.at4 = value.asInstanceOf[Ptr[Byte]] - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pg_cancel = CStruct0 object pg_cancel: given _tag: Tag[pg_cancel] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pg_conn = CStruct0 object pg_conn: given _tag: Tag[pg_conn] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pg_result = CStruct0 object pg_result: given _tag: Tag[pg_result] = Tag.materializeCStruct0Tag - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ opaque type pgresAttDesc = CStruct7[CString, Oid, CInt, CInt, Oid, CInt, CInt] object pgresAttDesc: given _tag: Tag[pgresAttDesc] = Tag.materializeCStruct7Tag[CString, Oid, CInt, CInt, Oid, CInt, CInt] @@ -687,835 +602,343 @@ object structs: @extern private[libpq] object extern_functions: import _root_.libpq.enumerations.* + import _root_.libpq.predef.* import _root_.libpq.aliases.* import _root_.libpq.structs.* - - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQbackendPID(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQbinaryTuples(res : Ptr[PGresult]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQcancel(cancel : Ptr[PGcancel], errbuf : CString, errbufsize : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQclear(res : Ptr[PGresult]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQclientEncoding(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQcmdStatus(res : Ptr[PGresult]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQcmdTuples(res : Ptr[PGresult]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconndefaults(): Ptr[PQconninfoOption] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectPoll(conn : Ptr[PGconn]): PostgresPollingStatusType = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectStart(conninfo : CString): Ptr[PGconn] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectStartParams(keywords : Ptr[CString], values : Ptr[CString], expand_dbname : CInt): Ptr[PGconn] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectdb(conninfo : CString): Ptr[PGconn] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectdbParams(keywords : Ptr[CString], values : Ptr[CString], expand_dbname : CInt): Ptr[PGconn] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectionNeedsPassword(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconnectionUsedPassword(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconninfo(conn : Ptr[PGconn]): Ptr[PQconninfoOption] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconninfoFree(connOptions : Ptr[PQconninfoOption]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconninfoParse(conninfo : CString, errmsg : Ptr[CString]): Ptr[PQconninfoOption] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQconsumeInput(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQcopyResult(src : Ptr[PGresult], flags : CInt): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdb(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdefaultSSLKeyPassHook_OpenSSL(buf : CString, size : CInt, conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdescribePortal(conn : Ptr[PGconn], portal : CString): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdescribePrepared(conn : Ptr[PGconn], stmt : CString): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdisplayTuples(res : Ptr[PGresult], fp : Ptr[FILE], fillAlign : CInt, fieldSep : CString, printHeader : CInt, quiet : CInt): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQdsplen(s : CString, encoding : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQencryptPassword(passwd : CString, user : CString): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQencryptPasswordConn(conn : Ptr[PGconn], passwd : CString, user : CString, algorithm : CString): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQendcopy(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQenterPipelineMode(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQenv2encoding(): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQerrorMessage(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeBytea(from : Ptr[CUnsignedChar], from_length : size_t, to_length : Ptr[size_t]): Ptr[CUnsignedChar] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeByteaConn(conn : Ptr[PGconn], from : Ptr[CUnsignedChar], from_length : size_t, to_length : Ptr[size_t]): Ptr[CUnsignedChar] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeIdentifier(conn : Ptr[PGconn], str : CString, len : size_t): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeLiteral(conn : Ptr[PGconn], str : CString, len : size_t): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeString(to : CString, from : CString, length : size_t): size_t = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQescapeStringConn(conn : Ptr[PGconn], to : CString, from : CString, length : size_t, error : Ptr[CInt]): size_t = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQexec(conn : Ptr[PGconn], query : CString): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQexecParams(conn : Ptr[PGconn], command : CString, nParams : CInt, paramTypes : Ptr[Oid], paramValues : Ptr[CString], paramLengths : Ptr[CInt], paramFormats : Ptr[CInt], resultFormat : CInt): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQexecPrepared(conn : Ptr[PGconn], stmtName : CString, nParams : CInt, paramValues : Ptr[CString], paramLengths : Ptr[CInt], paramFormats : Ptr[CInt], resultFormat : CInt): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQexitPipelineMode(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfformat(res : Ptr[PGresult], field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfinish(conn : Ptr[PGconn]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQflush(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfmod(res : Ptr[PGresult], field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfn(conn : Ptr[PGconn], fnid : CInt, result_buf : Ptr[CInt], result_len : Ptr[CInt], result_is_int : CInt, args : Ptr[PQArgBlock], nargs : CInt): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfname(res : Ptr[PGresult], field_num : CInt): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfnumber(res : Ptr[PGresult], field_name : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfreeCancel(cancel : Ptr[PGcancel]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfreemem(ptr : Ptr[Byte]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQfsize(res : Ptr[PGresult], field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQftable(res : Ptr[PGresult], field_num : CInt): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQftablecol(res : Ptr[PGresult], field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQftype(res : Ptr[PGresult], field_num : CInt): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetCancel(conn : Ptr[PGconn]): Ptr[PGcancel] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetCopyData(conn : Ptr[PGconn], buffer : Ptr[CString], async : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetResult(conn : Ptr[PGconn]): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetSSLKeyPassHook_OpenSSL(): PQsslKeyPassHook_OpenSSL_type = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetgssctx(conn : Ptr[PGconn]): Ptr[Byte] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetisnull(res : Ptr[PGresult], tup_num : CInt, field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetlength(res : Ptr[PGresult], tup_num : CInt, field_num : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetline(conn : Ptr[PGconn], string : CString, length : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetlineAsync(conn : Ptr[PGconn], buffer : CString, bufsize : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetssl(conn : Ptr[PGconn]): Ptr[Byte] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgetvalue(res : Ptr[PGresult], tup_num : CInt, field_num : CInt): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQgssEncInUse(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQhost(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQhostaddr(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQinitOpenSSL(do_ssl : CInt, do_crypto : CInt): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQinitSSL(do_init : CInt): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQisBusy(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQisnonblocking(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQisthreadsafe(): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQlibVersion(): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQmakeEmptyPGresult(conn : Ptr[PGconn], status : ExecStatusType): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQmblen(s : CString, encoding : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQmblenBounded(s : CString, encoding : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQnfields(res : Ptr[PGresult]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQnotifies(conn : Ptr[PGconn]): Ptr[PGnotify] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQnparams(res : Ptr[PGresult]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQntuples(res : Ptr[PGresult]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQoidStatus(res : Ptr[PGresult]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQoidValue(res : Ptr[PGresult]): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQoptions(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQparameterStatus(conn : Ptr[PGconn], paramName : CString): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQparamtype(res : Ptr[PGresult], param_num : CInt): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQpass(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQping(conninfo : CString): PGPing = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQpingParams(keywords : Ptr[CString], values : Ptr[CString], expand_dbname : CInt): PGPing = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQpipelineStatus(conn : Ptr[PGconn]): PGpipelineStatus = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQpipelineSync(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQport(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQprepare(conn : Ptr[PGconn], stmtName : CString, query : CString, nParams : CInt, paramTypes : Ptr[Oid]): Ptr[PGresult] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQprint(fout : Ptr[FILE], res : Ptr[PGresult], ps : Ptr[PQprintOpt]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQprintTuples(res : Ptr[PGresult], fout : Ptr[FILE], PrintAttNames : CInt, TerseOutput : CInt, colWidth : CInt): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQprotocolVersion(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQputCopyData(conn : Ptr[PGconn], buffer : CString, nbytes : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQputCopyEnd(conn : Ptr[PGconn], errormsg : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQputline(conn : Ptr[PGconn], string : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQputnbytes(conn : Ptr[PGconn], buffer : CString, nbytes : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQregisterThreadLock(newhandler : pgthreadlock_t): pgthreadlock_t = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQrequestCancel(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresStatus(status : ExecStatusType): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQreset(conn : Ptr[PGconn]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresetPoll(conn : Ptr[PGconn]): PostgresPollingStatusType = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresetStart(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultAlloc(res : Ptr[PGresult], nBytes : size_t): Ptr[Byte] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultErrorField(res : Ptr[PGresult], fieldcode : CInt): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultErrorMessage(res : Ptr[PGresult]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultMemorySize(res : Ptr[PGresult]): size_t = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultStatus(res : Ptr[PGresult]): ExecStatusType = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQresultVerboseErrorMessage(res : Ptr[PGresult], verbosity : PGVerbosity, show_context : PGContextVisibility): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendDescribePortal(conn : Ptr[PGconn], portal : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendDescribePrepared(conn : Ptr[PGconn], stmt : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendFlushRequest(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendPrepare(conn : Ptr[PGconn], stmtName : CString, query : CString, nParams : CInt, paramTypes : Ptr[Oid]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendQuery(conn : Ptr[PGconn], query : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendQueryParams(conn : Ptr[PGconn], command : CString, nParams : CInt, paramTypes : Ptr[Oid], paramValues : Ptr[CString], paramLengths : Ptr[CInt], paramFormats : Ptr[CInt], resultFormat : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsendQueryPrepared(conn : Ptr[PGconn], stmtName : CString, nParams : CInt, paramValues : Ptr[CString], paramLengths : Ptr[CInt], paramFormats : Ptr[CInt], resultFormat : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQserverVersion(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetClientEncoding(conn : Ptr[PGconn], encoding : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetErrorContextVisibility(conn : Ptr[PGconn], show_context : PGContextVisibility): PGContextVisibility = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetErrorVerbosity(conn : Ptr[PGconn], verbosity : PGVerbosity): PGVerbosity = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetNoticeProcessor(conn : Ptr[PGconn], proc : PQnoticeProcessor, arg : Ptr[Byte]): PQnoticeProcessor = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetNoticeReceiver(conn : Ptr[PGconn], proc : PQnoticeReceiver, arg : Ptr[Byte]): PQnoticeReceiver = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetResultAttrs(res : Ptr[PGresult], numAttributes : CInt, attDescs : Ptr[PGresAttDesc]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetSSLKeyPassHook_OpenSSL(hook : PQsslKeyPassHook_OpenSSL_type): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetSingleRowMode(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetTraceFlags(conn : Ptr[PGconn], flags : CInt): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetdbLogin(pghost : CString, pgport : CString, pgoptions : CString, pgtty : CString, dbName : CString, login : CString, pwd : CString): Ptr[PGconn] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetnonblocking(conn : Ptr[PGconn], arg : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsetvalue(res : Ptr[PGresult], tup_num : CInt, field_num : CInt, value : CString, len : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsocket(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsslAttribute(conn : Ptr[PGconn], attribute_name : CString): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsslAttributeNames(conn : Ptr[PGconn]): Ptr[CString] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsslInUse(conn : Ptr[PGconn]): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQsslStruct(conn : Ptr[PGconn], struct_name : CString): Ptr[Byte] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQstatus(conn : Ptr[PGconn]): ConnStatusType = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQtrace(conn : Ptr[PGconn], debug_port : Ptr[FILE]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQtransactionStatus(conn : Ptr[PGconn]): PGTransactionStatusType = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQtty(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQunescapeBytea(strtext : Ptr[CUnsignedChar], retbuflen : Ptr[size_t]): Ptr[CUnsignedChar] = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQuntrace(conn : Ptr[PGconn]): Unit = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def PQuser(conn : Ptr[PGconn]): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_close(conn : Ptr[PGconn], fd : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_creat(conn : Ptr[PGconn], mode : CInt): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_create(conn : Ptr[PGconn], lobjId : Oid): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_export(conn : Ptr[PGconn], lobjId : Oid, filename : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_import(conn : Ptr[PGconn], filename : CString): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_import_with_oid(conn : Ptr[PGconn], filename : CString, lobjId : Oid): Oid = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_lseek(conn : Ptr[PGconn], fd : CInt, offset : CInt, whence : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_lseek64(conn : Ptr[PGconn], fd : CInt, offset : pg_int64, whence : CInt): pg_int64 = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_open(conn : Ptr[PGconn], lobjId : Oid, mode : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_read(conn : Ptr[PGconn], fd : CInt, buf : CString, len : size_t): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_tell(conn : Ptr[PGconn], fd : CInt): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_tell64(conn : Ptr[PGconn], fd : CInt): pg_int64 = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_truncate(conn : Ptr[PGconn], fd : CInt, len : size_t): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_truncate64(conn : Ptr[PGconn], fd : CInt, len : pg_int64): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_unlink(conn : Ptr[PGconn], lobjId : Oid): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def lo_write(conn : Ptr[PGconn], fd : CInt, buf : CString, len : size_t): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def pg_char_to_encoding(name : CString): CInt = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def pg_encoding_to_char(encoding : CInt): CString = extern - /** - * [bindgen] header: /Users/velvetbaldmime/Library/Caches/sbt-vcpkg/vcpkg/packages/libpq_arm64-osx/include/libpq-fe.h - */ def pg_valid_server_encoding_id(encoding : CInt): CInt = extern object functions: import _root_.libpq.enumerations.* + import _root_.libpq.predef.* import _root_.libpq.aliases.* import _root_.libpq.structs.* - import extern_functions.* export extern_functions.* @@ -1720,4 +1143,4 @@ object all: export _root_.libpq.functions.lo_write export _root_.libpq.functions.pg_char_to_encoding export _root_.libpq.functions.pg_encoding_to_char - export _root_.libpq.functions.pg_valid_server_encoding_id + export _root_.libpq.functions.pg_valid_server_encoding_id \ No newline at end of file diff --git a/module-core/src/main/scala/roach/Captured.scala b/module-core/src/main/scala/roach/Captured.scala index 40f8c5c..c97cfda 100644 --- a/module-core/src/main/scala/roach/Captured.scala +++ b/module-core/src/main/scala/roach/Captured.scala @@ -4,14 +4,14 @@ import scala.scalanative.unsafe.* private[roach] object Captured: def unsafe[D <: AnyRef: Tag](value: D): (Ptr[D], Memory) = - import scalanative.runtime.* + import scalanative.runtime.*, ffi.* - val rawptr = libc.malloc(sizeof[D]) + val rawptr = malloc(sizeof[D]) val mem = fromRawPtr[D](rawptr) val deallocate: Memory = () => GCRoots.removeRoot(value.asInstanceOf[Object]) - libc.free(toRawPtr[D](mem)) + free(toRawPtr[D](mem)) val originalAddress = Intrinsics.castObjectToRawPtr(value) diff --git a/module-core/src/main/scala/roach/Migrate.scala b/module-core/src/main/scala/roach/Migrate.scala index 11316eb..36dddff 100644 --- a/module-core/src/main/scala/roach/Migrate.scala +++ b/module-core/src/main/scala/roach/Migrate.scala @@ -5,7 +5,7 @@ import scalanative.unsafe.Zone object Migrate: def all(pool: Pool, tableName: String = defaultTableName)( files: ResourceFile* - ): MigrationResult = Zone { implicit z => + ): MigrationResult = Zone: pool.withLease(createTable(tableName)) var rollback = false @@ -68,7 +68,6 @@ object Migrate: } MigrationResult(applied.result(), present.result()) - } case class MigrationResult(applied: Vector[String], present: Vector[String]) diff --git a/module-core/src/main/scala/roach/pool.scala b/module-core/src/main/scala/roach/pool.scala index 7f88f5d..c4a5079 100644 --- a/module-core/src/main/scala/roach/pool.scala +++ b/module-core/src/main/scala/roach/pool.scala @@ -51,13 +51,13 @@ private[roach] class Single private ( def reconnect(): Validated[Database] = Database.apply(connString).map { db => db.unsafely { conn => - PQsetNoticeProcessor( + val proc = PQsetNoticeProcessor( conn, PQnoticeProcessor { (arg: Ptr[Byte], msg: CString) => val handler = arg.asInstanceOf[Ptr[String => Unit]] - Zone { implicit z => + Zone( (!handler).apply(fromCString(msg)) - } + ) }, captured.asInstanceOf[Ptr[Byte]] ) @@ -65,8 +65,16 @@ private[roach] class Single private ( db } + end reconnect def lease[A](f: Database => A): A = + if scalanative.meta.LinktimeInfo.isMultithreadingEnabled then + slot.synchronized: + singleThreadedLogic(f) // YOLO + else singleThreadedLogic(f) + end lease + + private inline def singleThreadedLogic[A](f: Database => A) = slot match case Slot.Available(db) => var result: A | Null = null @@ -96,6 +104,8 @@ private[roach] class Single private ( " This suggests the library implementation is wrong" ) .raise + end match + end singleThreadedLogic end Single diff --git a/module-core/src/test/scala/TestHarness.scala b/module-core/src/test/scala/TestHarness.scala index 98ba893..e9bef2c 100644 --- a/module-core/src/test/scala/TestHarness.scala +++ b/module-core/src/test/scala/TestHarness.scala @@ -14,8 +14,6 @@ trait TestHarness: val connectionString = s"postgresql://postgres:mysecretpassword@localhost:5432/postgres?application_name=$appName" - inline def zone[A](inline f: Zone ?=> A) = Zone.apply(z => f(using z)) - def withDB(f: Database ?=> Unit)(using Zone) = Using.resource(Database(connectionString).getOrThrow)(db => f(using db)) @@ -34,7 +32,7 @@ trait TestHarness: // Runs once before all tests start. override def beforeAll(): Unit = tableCreationSQL.foreach { sql => - zone { + Zone { withDB { db ?=> val prepTableName = s"${tablePrefix}_${util.Random().nextLong.abs}" db.execute(sql(prepTableName)).getOrThrow @@ -45,7 +43,7 @@ trait TestHarness: } override def afterAll(): Unit = - zone { + Zone { withDB { db ?=> if tableName != null then db.execute(s"drop table $tableName").getOrThrow diff --git a/module-core/src/test/scala/roach/BasicTests.scala b/module-core/src/test/scala/roach/BasicTests.scala index 5801871..8e974c3 100644 --- a/module-core/src/test/scala/roach/BasicTests.scala +++ b/module-core/src/test/scala/roach/BasicTests.scala @@ -38,7 +38,7 @@ class BasicTests extends munit.FunSuite, TestHarness: """) test("super basics") { - zone { + Zone { withDB { db ?=> query( "SELECT oid::int4, typname from pg_type where typname in ('bool', 'int4', 'varchar')" @@ -54,7 +54,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("arrays") { - zone { + Zone { withDB { db ?=> query( "SELECT ARRAY[ARRAY['hпрd^sâветe\"l,lo'], ARRAY['bla']]" @@ -103,7 +103,7 @@ class BasicTests extends munit.FunSuite, TestHarness: val rowCodec = codec.as[Row] - zone { + Zone { withDB { db ?=> def row(opt: Boolean) = Row( id = s"opt_$opt", @@ -160,7 +160,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("connection status and termination") { - zone { + Zone { withDB { db ?=> assert(db.connectionIsOkay) @@ -173,7 +173,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("single slot pool") { - zone { + Zone { Pool.single(connectionString) { pool => var old: Database | Null = null @@ -216,7 +216,7 @@ class BasicTests extends munit.FunSuite, TestHarness: test("pool notice processor") { val messages = List.newBuilder[String] val tableName = s"my_table_bla_${Random.nextInt().abs}" - zone { + Zone { Pool.single(connectionString, s => messages.addOne(s.trim)) { pool => pool.withLease { @@ -237,7 +237,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("execute error params") { - zone { + Zone { withDB { db ?=> db.executeParams( "select oid::int4 from pg_type where typname = $1", @@ -254,7 +254,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("execute error capturing") { - zone { + Zone { withDB { db ?=> val msg = db .executeParams( @@ -274,7 +274,7 @@ class BasicTests extends munit.FunSuite, TestHarness: } test("prepared") { - zone { + Zone { withDB { db ?=> val single = db .prepare( diff --git a/module-core/src/test/scala/roach/MigrationTests.scala b/module-core/src/test/scala/roach/MigrationTests.scala index a0ea4a5..47299da 100644 --- a/module-core/src/test/scala/roach/MigrationTests.scala +++ b/module-core/src/test/scala/roach/MigrationTests.scala @@ -2,10 +2,11 @@ package roach.tests import roach.codecs.* import roach.* +import scala.scalanative.unsafe.Zone class MigrationTests extends munit.FunSuite, TestHarness: test("basic usage") { - zone { + Zone { Pool.single(connectionString) { pool => cleanup(pool)("migration_test_1", "howdy") { () => @@ -41,7 +42,7 @@ class MigrationTests extends munit.FunSuite, TestHarness: test("migration is idempotent") { val tst = "migration_test_2" - zone { + Zone { Pool.single(connectionString) { pool => cleanup(pool)(tst, "howdy") { () => @@ -91,7 +92,7 @@ class MigrationTests extends munit.FunSuite, TestHarness: } test("incorrect states") { - zone { + Zone { val tst = "migration_test_1" Pool.single(connectionString) { pool => cleanup(pool)(tst, "howdy") { () => @@ -125,7 +126,7 @@ class MigrationTests extends munit.FunSuite, TestHarness: } test("migration state is recorded") { - zone { + Zone { val tst = "migration_test_1" Pool.single(connectionString) { pool => cleanup(pool)(tst, "howdy") { () => @@ -157,7 +158,7 @@ class MigrationTests extends munit.FunSuite, TestHarness: } test("migration is aborted entirely if one step fails") { - zone { + Zone { val tst = "migration_test_1" Pool.single(connectionString) { pool => cleanup(pool)(tst, "howdy") { () => @@ -187,7 +188,7 @@ class MigrationTests extends munit.FunSuite, TestHarness: } test("partial migration is aborted if 1 step failed") { - zone { + Zone { val tst = "migration_test_1" Pool.single(connectionString) { pool => cleanup(pool)(tst, "howdy") { () => diff --git a/module-core/src/test/scala/roach/QueryTests.scala b/module-core/src/test/scala/roach/QueryTests.scala index c259dc1..0006ef4 100644 --- a/module-core/src/test/scala/roach/QueryTests.scala +++ b/module-core/src/test/scala/roach/QueryTests.scala @@ -2,6 +2,7 @@ package roach.tests import roach.* import roach.codecs.* +import scala.scalanative.unsafe.Zone class QueryTests extends munit.FunSuite, TestHarness: override def tableCreationSQL = Some(tableName => s""" @@ -16,7 +17,7 @@ class QueryTests extends munit.FunSuite, TestHarness: test("with input parameters") { val q = Query(s"select * from $tableName where key = $$1", int4) val qMore = Query(s"select * from $tableName where key >= $$1", int4) - zone { + Zone { withDB { assertEquals(q.all(25, int4 ~ text), Vector(25 -> "hello")) assertEquals(q.all(150, int4 ~ text), Vector.empty) @@ -37,7 +38,7 @@ class QueryTests extends munit.FunSuite, TestHarness: val q = Query(s"select * from $tableName where value != 'testies' order by key") - zone { + Zone { withDB { assertEquals(q.all(int4 ~ text), Vector(25 -> "hello", 42 -> "bye")) diff --git a/module-core/src/test/scala/roach/SqlInterpolatorTests.scala b/module-core/src/test/scala/roach/SqlInterpolatorTests.scala index 01fda54..481851b 100644 --- a/module-core/src/test/scala/roach/SqlInterpolatorTests.scala +++ b/module-core/src/test/scala/roach/SqlInterpolatorTests.scala @@ -2,6 +2,7 @@ package roach.tests import roach.* import roach.codecs.* +import scala.scalanative.unsafe.Zone class SqlInterpolatorTests extends munit.FunSuite, TestHarness: override def tableCreationSQL = Some(tableName => s""" @@ -14,7 +15,7 @@ class SqlInterpolatorTests extends munit.FunSuite, TestHarness: """) test("fragments") { - zone { + Zone { withDB { val fr1 = Fragment("key,value") val q = sql"select $fr1 from $tableName where key = 25".all(int4 ~ text) @@ -34,7 +35,7 @@ class SqlInterpolatorTests extends munit.FunSuite, TestHarness: } test("basics") { - zone { + Zone { withDB { case class Data(key: Int, value: String) diff --git a/module-upickle/src/test/scala/UpickleTests.scala b/module-upickle/src/test/scala/UpickleTests.scala index 121e097..5302c95 100644 --- a/module-upickle/src/test/scala/UpickleTests.scala +++ b/module-upickle/src/test/scala/UpickleTests.scala @@ -4,6 +4,7 @@ import roach.upickle.* import roach.codecs.* import roach.Pool import ujson.Value +import scala.scalanative.unsafe.Zone class UpickleTests extends munit.FunSuite with roach.tests.TestHarness: @@ -17,7 +18,7 @@ class UpickleTests extends munit.FunSuite with roach.tests.TestHarness: """) test("read: raw json") { - zone { + Zone { withDB { db ?=> val q = """SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json""" @@ -34,7 +35,7 @@ class UpickleTests extends munit.FunSuite with roach.tests.TestHarness: test("write: raw json") { - zone { + Zone { withDB { db ?=> val row = ( 512L, @@ -57,7 +58,7 @@ class UpickleTests extends munit.FunSuite with roach.tests.TestHarness: case class Testi(hello: String, bla: Int) derives upickle.default.ReadWriter - zone { + Zone { withDB { db ?=> val row = (1024L, Testi("yo", 152)) @@ -77,7 +78,7 @@ class UpickleTests extends munit.FunSuite with roach.tests.TestHarness: test("read: json codec") { case class Top(bar: String, balance: Double, active: Boolean) derives upickle.default.ReadWriter - zone { + Zone { withDB { db ?=> val q = """SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json""" diff --git a/project/build.properties b/project/build.properties index 49214c4..136f452 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version = 1.9.9 +sbt.version = 1.10.1 diff --git a/project/plugins.sbt b/project/plugins.sbt index 70a50a7..2277649 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,8 +1,8 @@ val BindgenVersion = - sys.env.getOrElse("SN_BINDGEN_VERSION", "0.1.0") + sys.env.getOrElse("SN_BINDGEN_VERSION", "0.1.4") val VcpkgVersion = - sys.env.getOrElse("SBT_VCPKG_VERSION", "0.0.9+25-bb4dee7a-SNAPSHOT") + sys.env.getOrElse("SBT_VCPKG_VERSION", "0.0.18") resolvers += Resolver.sonatypeRepo("snapshots") resolvers += Resolver.sonatypeRepo("releases") @@ -10,10 +10,12 @@ resolvers += Resolver.sonatypeRepo("releases") addSbtPlugin("com.indoorvivants" % "bindgen-sbt-plugin" % BindgenVersion) addSbtPlugin("com.indoorvivants.vcpkg" % "sbt-vcpkg-native" % VcpkgVersion) -addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.17") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.4") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.2") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.4") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") + +libraryDependencies += "com.indoorvivants.detective" %% "platform" % "0.1.0"