Skip to content

Add support for PostgreSQL LOCK TABLE#2273

Merged
iffyio merged 5 commits intoapache:mainfrom
mjbshaw:main
Mar 13, 2026
Merged

Add support for PostgreSQL LOCK TABLE#2273
iffyio merged 5 commits intoapache:mainfrom
mjbshaw:main

Conversation

@mjbshaw
Copy link
Contributor

@mjbshaw mjbshaw commented Mar 7, 2026

PostgreSQL 14 added LOCK. This implements parsing support for that statement. Beyond the added tests, the following minimum reproducible example demonstrate's sqlparser's current failure to parse this statement:

Cargo.toml:

[package]
name = "demo"
version = "0.1.0"
edition = "2024"

[workspace]

[dependencies]
sqlparser_patched = { package = "sqlparser", path = "path/to/mjbshaw/fork/datafusion-sqlparser-rs" }
sqlparser_published = { package = "sqlparser", version = "0.61.0" }

src/main.rs:

use sqlparser_patched::dialect::PostgreSqlDialect as PatchedPostgreSqlDialect;
use sqlparser_patched::parser::Parser as PatchedParser;
use sqlparser_published::dialect::PostgreSqlDialect as PublishedPostgreSqlDialect;
use sqlparser_published::parser::Parser as PublishedParser;

const SQL: &str = "LOCK TABLE public.widgets IN EXCLUSIVE MODE";

fn main() {
    match PublishedParser::parse_sql(&PublishedPostgreSqlDialect {}, SQL) {
        Ok(statements) => panic!(
            "expected published sqlparser 0.61.0 to reject `{SQL}`, but it parsed: {statements:?}"
        ),
        Err(error) => {
            println!("published sqlparser 0.61.0 failed as expected: {error}");
        }
    }

    let statements = PatchedParser::parse_sql(&PatchedPostgreSqlDialect {}, SQL)
        .expect("patched sqlparser should parse PostgreSQL LOCK TABLE");
    assert_eq!(statements.len(), 1, "expected exactly one statement");
    println!("patched sqlparser parsed successfully: {}", statements[0]);
}

Then run with cargo run.

Copy link
Contributor

@iffyio iffyio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks @mjbshaw!

@iffyio iffyio added this pull request to the merge queue Mar 13, 2026
Merged via the queue into apache:main with commit d38dd78 Mar 13, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants