@@ -4581,124 +4581,3 @@ fn test_drop_constraints() {
45814581 snowflake ( ) . verified_stmt ( "ALTER TABLE tbl DROP FOREIGN KEY k1 RESTRICT" ) ;
45824582 snowflake ( ) . verified_stmt ( "ALTER TABLE tbl DROP CONSTRAINT c1 CASCADE" ) ;
45834583}
4584-
4585- #[ test]
4586- fn test_semantic_view ( ) {
4587- let valid_sqls = [
4588- ( "SELECT * FROM SEMANTIC_VIEW(model)" , None ) ,
4589- (
4590- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1, dim2)" ,
4591- None ,
4592- ) ,
4593- ( "SELECT * FROM SEMANTIC_VIEW(a.b METRICS c.d, c.e)" , None ) ,
4594- (
4595- "SELECT * FROM SEMANTIC_VIEW(model FACTS fact1, fact2)" ,
4596- None ,
4597- ) ,
4598- (
4599- "SELECT * FROM SEMANTIC_VIEW(model FACTS DATE_PART('year', col))" ,
4600- None ,
4601- ) ,
4602- (
4603- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 METRICS met1)" ,
4604- None ,
4605- ) ,
4606- (
4607- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 WHERE x > 0)" ,
4608- None ,
4609- ) ,
4610- (
4611- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1) AS sv" ,
4612- None ,
4613- ) ,
4614- (
4615- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS DATE_PART('year', col))" ,
4616- None ,
4617- ) ,
4618- (
4619- "SELECT * FROM SEMANTIC_VIEW(model METRICS orders.col, orders.col2)" ,
4620- None ,
4621- ) ,
4622- // We can parse in any order but will always produce a result in a fixed order.
4623- (
4624- "SELECT * FROM SEMANTIC_VIEW(model WHERE x > 0 DIMENSIONS dim1)" ,
4625- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 WHERE x > 0)" ) ,
4626- ) ,
4627- (
4628- "SELECT * FROM SEMANTIC_VIEW(model METRICS met1 DIMENSIONS dim1)" ,
4629- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 METRICS met1)" ) ,
4630- ) ,
4631- (
4632- "SELECT * FROM SEMANTIC_VIEW(model FACTS fact1 DIMENSIONS dim1)" ,
4633- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 FACTS fact1)" ) ,
4634- ) ,
4635- ] ;
4636-
4637- for ( input_sql, expected_sql) in valid_sqls {
4638- if let Some ( expected) = expected_sql {
4639- // Test that non-canonical order gets normalized
4640- let parsed = snowflake ( ) . parse_sql_statements ( input_sql) . unwrap ( ) ;
4641- let formatted = parsed[ 0 ] . to_string ( ) ;
4642- assert_eq ! ( formatted, expected) ;
4643- } else {
4644- snowflake ( ) . verified_stmt ( input_sql) ;
4645- }
4646- }
4647-
4648- let invalid_sqls = [
4649- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 INVALID inv1)" ,
4650- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 DIMENSIONS dim2)" ,
4651- "SELECT * FROM SEMANTIC_VIEW(model METRICS SUM(met1.avg))" ,
4652- ] ;
4653-
4654- for sql in invalid_sqls {
4655- let result = snowflake ( ) . parse_sql_statements ( sql) ;
4656- assert ! ( result. is_err( ) , "Expected error for invalid SQL: {}" , sql) ;
4657- }
4658-
4659- let ast_sql = r#"SELECT * FROM SEMANTIC_VIEW(
4660- my_model
4661- DIMENSIONS DATE_PART('year', date_col), region_name
4662- METRICS orders.revenue, orders.count
4663- WHERE active = true
4664- ) AS model_alias"# ;
4665-
4666- let stmt = snowflake ( ) . parse_sql_statements ( ast_sql) . unwrap ( ) ;
4667- match & stmt[ 0 ] {
4668- Statement :: Query ( q) => {
4669- if let SetExpr :: Select ( select) = q. body . as_ref ( ) {
4670- if let Some ( TableWithJoins { relation, .. } ) = select. from . first ( ) {
4671- match relation {
4672- TableFactor :: SemanticView {
4673- name,
4674- dimensions,
4675- metrics,
4676- facts,
4677- where_clause,
4678- alias,
4679- } => {
4680- assert_eq ! ( name. to_string( ) , "my_model" ) ;
4681- assert_eq ! ( dimensions. len( ) , 2 ) ;
4682- assert_eq ! ( dimensions[ 0 ] . to_string( ) , "DATE_PART('year', date_col)" ) ;
4683- assert_eq ! ( dimensions[ 1 ] . to_string( ) , "region_name" ) ;
4684- assert_eq ! ( metrics. len( ) , 2 ) ;
4685- assert_eq ! ( metrics[ 0 ] . to_string( ) , "orders.revenue" ) ;
4686- assert_eq ! ( metrics[ 1 ] . to_string( ) , "orders.count" ) ;
4687- assert ! ( facts. is_empty( ) ) ;
4688- assert ! ( where_clause. is_some( ) ) ;
4689- assert_eq ! ( where_clause. as_ref( ) . unwrap( ) . to_string( ) , "active = true" ) ;
4690- assert ! ( alias. is_some( ) ) ;
4691- assert_eq ! ( alias. as_ref( ) . unwrap( ) . name. value, "model_alias" ) ;
4692- }
4693- _ => panic ! ( "Expected SemanticView table factor" ) ,
4694- }
4695- } else {
4696- panic ! ( "Expected table in FROM clause" ) ;
4697- }
4698- } else {
4699- panic ! ( "Expected SELECT statement" ) ;
4700- }
4701- }
4702- _ => panic ! ( "Expected Query statement" ) ,
4703- }
4704- }
0 commit comments