Skip to content

PL-Swift/PLSwift

Repository files navigation

PL/Swift

PostgreSQL Swift3 Swift4 Swift5 macOS tuxOS

PL/Swift allows you to write custom SQL functions and types for the PostgreSQL database server in the Swift programming language.

Bringing Swift to the Backend of the Backend's Backend

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: "git@github.com: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

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