Skip to content

Cannot parse table alias or cte alias in Postgres dialect #1069

@KennyChenFight

Description

@KennyChenFight

Sorry for bothering you.
I'm using sqlparser = "0.40.0"
This is my code:

use sqlparser::dialect::PostgreSqlDialect;
use sqlparser::parser::{Parser, ParserError};

fn main() {
    let dialect = PostgreSqlDialect {};

    let sql1 = r#"
    WITH existing AS (SELECT test_table.id FROM test_tables AS test_table WHERE (a = 12) AND (b = 34)),
     inserted AS (INSERT INTO test_tables AS test_table (id, a, b, c) VALUES (DEFAULT, 56, 78, 90) ON CONFLICT (a, b)
     DO UPDATE SET c = EXCLUDED.c WHERE (test_table.c != EXCLUDED.c)) SELECT c FROM existing"#;

    let sql2 = "INSERT INTO test_tables AS test_table (id, a) VALUES (DEFAULT, 123) ON CONFLICT DO NOTHING RETURNING id";

    let ast1 = Parser::parse_sql(&dialect, sql1);
    match ast1 {
        Ok(_) => {

        }
        Err(e) => {
            println!("fail ast1: {}", e);
        }
    }
    let ast2 = Parser::parse_sql(&dialect, sql2);
    match ast2 {
        Ok(_) => {
        }
        Err(e) => {
            println!("fail ast2: {}", e);
        }
    }
}

error output:

fail ast1: sql parser error: Expected SELECT, VALUES, or a subquery in the query body, found: AS at Line: 3, Column 43
fail ast2: sql parser error: Expected SELECT, VALUES, or a subquery in the query body, found: AS at Line: 1, Column 25

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions