@@ -17138,7 +17138,7 @@ fn test_parse_semantic_view_table_factor() {
1713817138 }
1713917139
1714017140 let ast_sql = r#"SELECT * FROM SEMANTIC_VIEW(
17141- my_model
17141+ my_model
1714217142 DIMENSIONS DATE_PART('year', date_col), region_name
1714317143 METRICS orders.revenue, orders.count
1714417144 WHERE active = true
@@ -17193,3 +17193,56 @@ fn parse_adjacent_string_literal_concatenation() {
1719317193 let sql = "SELECT * FROM t WHERE col = 'Hello' \n ' ' \t 'World!'";
1719417194 dialects.one_statement_parses_to(sql, r"SELECT * FROM t WHERE col = 'Hello World!'");
1719517195}
17196+
17197+ #[test]
17198+ fn parse_invisible_column() {
17199+ let sql = r#"CREATE TABLE t (foo INT, bar INT INVISIBLE)"#;
17200+ let stmt = verified_stmt(sql);
17201+ match stmt {
17202+ Statement::CreateTable(CreateTable { columns, .. }) => {
17203+ assert_eq!(
17204+ columns,
17205+ vec![
17206+ ColumnDef {
17207+ name: "foo".into(),
17208+ data_type: DataType::Int(None),
17209+ options: vec![]
17210+ },
17211+ ColumnDef {
17212+ name: "bar".into(),
17213+ data_type: DataType::Int(None),
17214+ options: vec![ColumnOptionDef {
17215+ name: None,
17216+ option: ColumnOption::Invisible
17217+ }]
17218+ }
17219+ ]
17220+ );
17221+ }
17222+ _ => panic!("Unexpected statement {stmt}"),
17223+ }
17224+
17225+ let sql = r#"ALTER TABLE t ADD COLUMN bar INT INVISIBLE"#;
17226+ let stmt = verified_stmt(sql);
17227+ match stmt {
17228+ Statement::AlterTable { operations, .. } => {
17229+ assert_eq!(
17230+ operations,
17231+ vec![AlterTableOperation::AddColumn {
17232+ column_keyword: true,
17233+ if_not_exists: false,
17234+ column_def: ColumnDef {
17235+ name: "bar".into(),
17236+ data_type: DataType::Int(None),
17237+ options: vec![ColumnOptionDef {
17238+ name: None,
17239+ option: ColumnOption::Invisible
17240+ }]
17241+ },
17242+ column_position: None
17243+ }]
17244+ );
17245+ }
17246+ _ => panic!("Unexpected statement {stmt}"),
17247+ }
17248+ }
0 commit comments