Skip to content

Add support for PostgreSQL LOCK TABLE#2273

Open
mjbshaw wants to merge 5 commits intoapache:mainfrom
mjbshaw:main
Open

Add support for PostgreSQL LOCK TABLE#2273
mjbshaw wants to merge 5 commits intoapache:mainfrom
mjbshaw:main

Conversation

@mjbshaw
Copy link

@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.

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