@@ -17164,7 +17164,7 @@ fn test_parse_semantic_view_table_factor() {
1716417164 }
1716517165
1716617166 let ast_sql = r#"SELECT * FROM SEMANTIC_VIEW(
17167- my_model
17167+ my_model
1716817168 DIMENSIONS DATE_PART('year', date_col), region_name
1716917169 METRICS orders.revenue, orders.count
1717017170 WHERE active = true
@@ -17219,3 +17219,56 @@ fn parse_adjacent_string_literal_concatenation() {
1721917219 let sql = "SELECT * FROM t WHERE col = 'Hello' \n ' ' \t 'World!'";
1722017220 dialects.one_statement_parses_to(sql, r"SELECT * FROM t WHERE col = 'Hello World!'");
1722117221}
17222+
17223+ #[test]
17224+ fn parse_invisible_column() {
17225+ let sql = r#"CREATE TABLE t (foo INT, bar INT INVISIBLE)"#;
17226+ let stmt = verified_stmt(sql);
17227+ match stmt {
17228+ Statement::CreateTable(CreateTable { columns, .. }) => {
17229+ assert_eq!(
17230+ columns,
17231+ vec![
17232+ ColumnDef {
17233+ name: "foo".into(),
17234+ data_type: DataType::Int(None),
17235+ options: vec![]
17236+ },
17237+ ColumnDef {
17238+ name: "bar".into(),
17239+ data_type: DataType::Int(None),
17240+ options: vec![ColumnOptionDef {
17241+ name: None,
17242+ option: ColumnOption::Invisible
17243+ }]
17244+ }
17245+ ]
17246+ );
17247+ }
17248+ _ => panic!("Unexpected statement {stmt}"),
17249+ }
17250+
17251+ let sql = r#"ALTER TABLE t ADD COLUMN bar INT INVISIBLE"#;
17252+ let stmt = verified_stmt(sql);
17253+ match stmt {
17254+ Statement::AlterTable { operations, .. } => {
17255+ assert_eq!(
17256+ operations,
17257+ vec![AlterTableOperation::AddColumn {
17258+ column_keyword: true,
17259+ if_not_exists: false,
17260+ column_def: ColumnDef {
17261+ name: "bar".into(),
17262+ data_type: DataType::Int(None),
17263+ options: vec![ColumnOptionDef {
17264+ name: None,
17265+ option: ColumnOption::Invisible
17266+ }]
17267+ },
17268+ column_position: None
17269+ }]
17270+ );
17271+ }
17272+ _ => panic!("Unexpected statement {stmt}"),
17273+ }
17274+ }
0 commit comments