Contents
PLJS Development
PLJS provides JavaScript functionality as a language extension for Postgres. It’s implemented in C
and built using make
and a C
compiler.
Building
As long as pre-requisites are met, building can be as simple as running make
:
make
and installation by running:
make install
Some specific packages and software need to be installed depending on the operating system in use:
MacOS
- XCode (provides
clang
,make
, andgit
) - Postgres (such as with
brew
)
Linux
- Postgres development packages
git
gcc
(typically withbuild-essential
ordevelopment tools
depending on operating system)make
(generally installed with the above packages)
Testing
PLJS uses Postgres’ testing framework.
Tests
Tests use Postgres’ regression testing framework, thus running make installcheck
after running make install
will run the test suite and provide results. Tests live in the sql
directory and are named according to their tests.
File Naming Conventions
Files are named by function.
Source
All source for the PLJS extension can be found in the src
directory:
pljs.h
- Header file that defines functions andstructs
pljs.c
- Main entry point for PLJS, including setup and teardowncache.c
- Context and function cachingfunctions.c
- Functions available from PLV8types.c
- Type conversion to/from Postgres/JavaScriptparams.c
- Parameter management for Postgres
Tests
All tests live in the sql
directory, and their expected results live in the expected
directory.
Tests are named by the function that they test.
Function Naming Conventions
Naming conventions for this project generally favor using pljs_
as a prefix for functions that are not private (not marked static
) in the project. C
functions accessible from JavaScript are also prefixed with pljs_
and marked as static, indicating their availability within the JavaScript engine.
A function scoped to pljs.c
](../src/pljs.c)`:
static Datum call_function(PG_FUNCTION_ARGS, pljs_context *context,
JSValueConst *argv);
A function available throughout the project:
bool pljs_has_permission_to_execute(const char *signature);
A function available in JavaScript:
static JSValue pljs_elog(JSContext *ctx, JSValueConst this, int argc, JSValueConst *argv);