Search Shortcut cmd + k | ctrl + k
quickjs

DuckDB QuickJS Runtime Extension

Maintainer(s): lmangani

Installing and Loading

INSTALL quickjs FROM community;
LOAD quickjs;

Example

-- Quack JS with QuickJS
-- Scalar
D SELECT quickjs('2+2');
┌────────────────┐
 quickjs('2+2') 
    varchar     
├────────────────┤
 4              
└────────────────┘

-- Scalar Eval
D SELECT quickjs_eval('(a, b) => a + b', 5, 3);
┌───────────────────────────────────────┐
 quickjs_eval('(a, b) => a + b', 5, 3) 
                 json                  
├───────────────────────────────────────┤
 8                                     
└───────────────────────────────────────┘

-- Table Eval
D SELECT * FROM quickjs('parsed_arg0.map(x => x * arg1)', '[1, 2, 3, 4, 5]', 3);
┌────────┐
 result 
  json  
├────────┤
 3      
 6      
 9      
 12     
 15     
└────────┘

About quickjs

QuickJS DuckDB Extension

This extension provides an embedded QuickJS-NG engine for DuckDB. It allows executing JavaScript code directly within your SQL queries.

QuickJS-NG is a small, fast, and embeddable JavaScript engine that supports modern JavaScript features including ES2020.

This extension is experimental and potentially unstable. Do not use it in production.

Added Functions

function_name function_type description comment examples
quickjs scalar Execute JavaScript code and return the result as a string NULL [quickjs('1 + 2'), quickjs('"hello".toUpperCase()')]
quickjs table Execute JavaScript code that returns an array, with each element becoming a row NULL [SELECT * FROM quickjs('[1, 2, 3].map(x => x * 2)')]
quickjs_eval scalar Execute a JavaScript function with the provided arguments and return the result as JSON NULL [quickjs_eval('(a, b) => a + b', 1, 2), quickjs_eval('(x) => x * 2', 21)]

Overloaded Functions

| function_name | function_type | description | comment | examples | |—————|—————|————-|———|———-|

Added Types

| type_name | type_size | logical_type | type_category | internal | |———–|———-:|————–|—————|———-|

Added Settings

| name | description | input_type | scope | aliases | |——|————-|————|——-|———|