mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-09 18:04:59 +00:00
PostgreSQL: GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY and GENERATED ALWAYS AS ( generation_expr ) support (#832)
* GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) basic impl - test are failing. * PostgreSQL GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) and GENERATED ALWAYS AS ( generation_expr ) STORED implementation.
This commit is contained in:
parent
4ff3aeb040
commit
a8a8e65b7c
17 changed files with 350 additions and 57 deletions
|
@ -22,6 +22,202 @@ use sqlparser::ast::*;
|
|||
use sqlparser::dialect::{GenericDialect, PostgreSqlDialect};
|
||||
use sqlparser::parser::ParserError;
|
||||
|
||||
#[test]
|
||||
fn parse_create_table_generated_always_as_identity() {
|
||||
//With primary key
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column21 bigint primary key generated always as identity ,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column21 BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column21 bigint primary key generated by default as identity ,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column21 BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
//With out primary key
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column22 bigint generated always as identity ,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column22 BIGINT GENERATED ALWAYS AS IDENTITY, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column22 bigint generated by default as identity ,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column22 BIGINT GENERATED BY DEFAULT AS IDENTITY, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column23 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 NO CYCLE ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column23 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 NO CYCLE ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column24 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 CYCLE ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column24 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 CYCLE ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column25 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column25 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column26 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column26 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column27 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column27 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column28 bigint generated by default as identity ( INCREMENT 1 MINVALUE 1 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column28 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 MINVALUE 1 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column29 bigint generated by default as identity ( INCREMENT 1 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column29 BIGINT GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column22 bigint generated always as identity ,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column22 BIGINT GENERATED ALWAYS AS IDENTITY, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column23 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 NO CYCLE ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column23 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 NO CYCLE ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column24 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 CYCLE ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column24 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 CYCLE ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column25 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column25 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 CACHE 2 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column26 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column26 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 START WITH 10 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column27 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column27 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 20 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column28 bigint generated always as identity ( INCREMENT 1 MINVALUE 1 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column28 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
column29 bigint generated always as identity ( INCREMENT 1 ),
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
column29 BIGINT GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 ), \
|
||||
column30 TEXT)",
|
||||
);
|
||||
let sql = "CREATE TABLE table2 (
|
||||
priceInDollar numeric,
|
||||
princeInPound numeric GENERATED ALWAYS AS (priceInDollar * 0.22) STORED,
|
||||
column30 text );";
|
||||
pg().one_statement_parses_to(
|
||||
sql,
|
||||
"CREATE TABLE table2 (\
|
||||
priceInDollar NUMERIC, \
|
||||
princeInPound NUMERIC GENERATED ALWAYS AS (priceInDollar * 0.22) STORED, \
|
||||
column30 TEXT)",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_create_sequence() {
|
||||
// SimpleLogger::new().init().unwrap();
|
||||
|
@ -1408,12 +1604,10 @@ fn parse_pg_regex_match_ops() {
|
|||
fn parse_array_index_expr() {
|
||||
#[cfg(feature = "bigdecimal")]
|
||||
let num: Vec<Expr> = (0..=10)
|
||||
.into_iter()
|
||||
.map(|s| Expr::Value(Value::Number(bigdecimal::BigDecimal::from(s), false)))
|
||||
.collect();
|
||||
#[cfg(not(feature = "bigdecimal"))]
|
||||
let num: Vec<Expr> = (0..=10)
|
||||
.into_iter()
|
||||
.map(|s| Expr::Value(Value::Number(s.to_string(), false)))
|
||||
.collect();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue