|
12 | 12 |
|
13 | 13 | #![warn(clippy::all)] |
14 | 14 |
|
15 | | -use sqlparser::ast::{BinaryOperator, Expr, Ident, Statement, TableConstraint}; |
| 15 | +use sqlparser::ast::{BinaryOperator, ColumnOption, Expr, Ident, Statement, TableConstraint}; |
16 | 16 | use sqlparser::dialect::ArroyoDialect; |
17 | 17 | use sqlparser::parser::Parser; |
18 | 18 | use sqlparser::test_utils; |
@@ -81,3 +81,37 @@ fn test_watermark_without_expr() { |
81 | 81 | }] |
82 | 82 | ); |
83 | 83 | } |
| 84 | + |
| 85 | +#[test] |
| 86 | +fn test_metadata_field() { |
| 87 | + let sql = "CREATE TABLE logs ( |
| 88 | + id TEXT, |
| 89 | + kafka_topic STRING METADATA FROM 'topic', |
| 90 | + log TEXT |
| 91 | + )"; |
| 92 | + |
| 93 | + let parse = Parser::parse_sql(&ArroyoDialect {}, sql).unwrap(); |
| 94 | + let Statement::CreateTable(ct) = parse.get(0).unwrap() else { |
| 95 | + panic!("not create table") |
| 96 | + }; |
| 97 | + |
| 98 | + assert_eq!(ct.columns.len(), 3); |
| 99 | + |
| 100 | + // Check the middle column with METADATA FROM |
| 101 | + let column = &ct.columns[1]; |
| 102 | + assert_eq!(column.name, Ident::new("kafka_topic")); |
| 103 | + |
| 104 | + // Check for the METADATA FROM option |
| 105 | + let mut found_metadata = false; |
| 106 | + for option_def in &column.options { |
| 107 | + if let ColumnOption::MetadataField(key) = &option_def.option { |
| 108 | + found_metadata = true; |
| 109 | + assert_eq!(key, "topic"); |
| 110 | + } |
| 111 | + } |
| 112 | + |
| 113 | + assert!( |
| 114 | + found_metadata, |
| 115 | + "Expected METADATA FROM option in column definition" |
| 116 | + ); |
| 117 | +} |
0 commit comments