PLSwift
PLSwift copied to clipboard
PostgreSQL Functions in Swift
PL/Swift
PL/Swift allows you to write custom SQL functions and types for the PostgreSQL database server in the Swift programming language.
A small tutorial can be found over here: PL/Swift - PostgreSQL Functions in Swift.
PL/Swift
Despite the name it is not (currently) a language extension like say PL/Python, which allows you to directly embed Swift code in SQL. Instead it provides the infrastructure to create PostgreSQL dynamically loadable objects.
This project/sourcedir contains the swift-pl
tool,
Xcode base configurations and module maps for the PostgreSQL server.
What is a PL/Swift Extension
A dynamically loadable PostgreSQL extension module consists of those files:
- the ext.control file, specifies the name and version of the extension
- the ext.sql file, hooks up the C function w/ PostgreSQL
(i.e. does the
CREATE FUNCTION
) - the actual ext.so shared library
Using the PL/Swift package
NOTE: This requires a PL/Swift installation. W/o it, it will fail to built CPLSwift!
If you setup a new module from scratch, use:
swift pl init
for example:
mkdir base36 && cd base36
swift pl init
Otherwise setup your Package.swift to include PLSwift:
import PackageDescription
let package = Package(
name: "MyTool",
dependencies: [
.Package(url: "[email protected]:PL-Swift/PLSwift.git", from: "0.5.0"),
]
)
Note: If you are using Swift older than 4.2, you need to use the swift3
branch (0.3.0
version tag).
Building a PL/Swift module
Simply invoke
swift pl build
This wraps Swift Package Manager to build your package and then produces a proper module which can be loaded into PostgreSQL.
To install the module into the local PostgreSQL, call:
swift pl install
Use/load the extension
That is very simple, just do a:
CREATE EXTENSION helloswift;
If you rebuild the extension and need to reload, you probably need to
restart / reconnected
psql
and do a DROP EXTENSION xyz
first.
Status
Consider this a demo. Though it should work just fine.
Plans:
- can we make it a real language module? i.e. embed Swift code in the SQL and compile it on demand? Why not, might be a bit heavy though.
Links
- mod_swift, write Apache2 modules in Swift
- PostgreSQL Server Programming
- PostgreSQL C Language Functions
Who
PL/Swift is brought to you by ZeeZide. We like feedback, GitHub stars, cool contract work, presumably any form of praise you can think of.
![]() ApacheExpress |
![]() mod_swift |
![]() ZeeQL |