Search Shortcut cmd + k | ctrl + k
poached

SQL parsing and introspection for IDEs, editors, and developer tools

Maintainer(s): sidequery

Installing and Loading

INSTALL poached FROM community;
LOAD poached;

Example

-- Tokenize SQL for syntax highlighting (with byte positions)
SELECT * FROM tokenize_sql('SELECT * FROM users WHERE id = 1');
┌───────────────┬──────────────────┐
 byte_position      category     
├───────────────┼──────────────────┤
             0  KEYWORD          
             7  OPERATOR         
             9  KEYWORD          
            14  IDENTIFIER       
            20  KEYWORD          
            26  IDENTIFIER       
            29  OPERATOR         
            31  NUMERIC_CONSTANT 
└───────────────┴──────────────────┘

-- Validate SQL and get error messages
SELECT is_valid_sql('SELECT * FROM'), sql_error_message('SELECT * FROM');
┌──────────────┬────────────────────────────────────────────┐
 is_valid_sql             sql_error_message               
├──────────────┼────────────────────────────────────────────┤
 false         Parser Error: syntax error at end of input 
└──────────────┴────────────────────────────────────────────┘

-- Get result column types without executing
SELECT * FROM parse_columns('SELECT 1 AS num, ''hello'' AS str', 0);
┌───────────┬──────────┬──────────┐
 col_index  col_name  col_type 
├───────────┼──────────┼──────────┤
         0  num       INTEGER  
         1  str       VARCHAR  
└───────────┴──────────┴──────────┘

-- Extract function calls with type info
SELECT * FROM parse_functions('SELECT COUNT(*), UPPER(name) FROM t');
┌───────────────┬───────────────┐
 function_name  function_type 
├───────────────┼───────────────┤
 count_star     aggregate     
 upper          scalar        
└───────────────┴───────────────┘

-- Get full query plan as JSON
SELECT sql_parse_json('SELECT 1 + 2 AS result');

About poached

poached is a DuckDB extension for SQL parsing and introspection, designed for building IDEs, SQL editors, query analyzers, and developer tools.

Tokenization: tokenize_sql() returns tokens with byte positions and categories (KEYWORD, IDENTIFIER, OPERATOR, NUMERIC_CONSTANT, STRING_CONSTANT, COMMENT, ERROR) for accurate syntax highlighting.

Validation: is_valid_sql() and sql_error_message() for parse error detection and reporting.

Schema introspection: parse_columns(), parse_column_types(), parse_type_info() to get result column names and types without executing queries.

Query analysis: parse_tables(), parse_functions(), parse_where() to extract structural information from queries.

Parameters: parse_parameters() to extract prepared statement parameters.

JSON output: sql_parse_json() for full query plan access as JSON.

For more details, visit the extension repository.

Added Functions

function_name function_type description comment examples
is_keyword scalar NULL NULL  
is_valid_sql scalar NULL NULL  
num_statements scalar NULL NULL  
parse_columns table NULL NULL  
parse_function_names scalar NULL NULL  
parse_functions table NULL NULL  
parse_statements table NULL NULL  
parse_table_names scalar NULL NULL  
parse_tables table NULL NULL  
parse_where table NULL NULL  
sql_error_message scalar NULL NULL  
sql_keywords table NULL NULL  
sql_parse_json scalar NULL NULL  
sql_strip_comments scalar NULL NULL  
tokenize_sql table NULL NULL  

Overloaded Functions

This extension does not add any function overloads.

Added Types

This extension does not add any types.

Added Settings

This extension does not add any settings.