@@ -4613,124 +4613,3 @@ fn test_drop_constraints() {
46134613 snowflake ( ) . verified_stmt ( "ALTER TABLE tbl DROP FOREIGN KEY k1 RESTRICT" ) ;
46144614 snowflake ( ) . verified_stmt ( "ALTER TABLE tbl DROP CONSTRAINT c1 CASCADE" ) ;
46154615}
4616-
4617- #[ test]
4618- fn test_semantic_view ( ) {
4619- let valid_sqls = [
4620- ( "SELECT * FROM SEMANTIC_VIEW(model)" , None ) ,
4621- (
4622- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1, dim2)" ,
4623- None ,
4624- ) ,
4625- ( "SELECT * FROM SEMANTIC_VIEW(a.b METRICS c.d, c.e)" , None ) ,
4626- (
4627- "SELECT * FROM SEMANTIC_VIEW(model FACTS fact1, fact2)" ,
4628- None ,
4629- ) ,
4630- (
4631- "SELECT * FROM SEMANTIC_VIEW(model FACTS DATE_PART('year', col))" ,
4632- None ,
4633- ) ,
4634- (
4635- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 METRICS met1)" ,
4636- None ,
4637- ) ,
4638- (
4639- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 WHERE x > 0)" ,
4640- None ,
4641- ) ,
4642- (
4643- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1) AS sv" ,
4644- None ,
4645- ) ,
4646- (
4647- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS DATE_PART('year', col))" ,
4648- None ,
4649- ) ,
4650- (
4651- "SELECT * FROM SEMANTIC_VIEW(model METRICS orders.col, orders.col2)" ,
4652- None ,
4653- ) ,
4654- // We can parse in any order but will always produce a result in a fixed order.
4655- (
4656- "SELECT * FROM SEMANTIC_VIEW(model WHERE x > 0 DIMENSIONS dim1)" ,
4657- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 WHERE x > 0)" ) ,
4658- ) ,
4659- (
4660- "SELECT * FROM SEMANTIC_VIEW(model METRICS met1 DIMENSIONS dim1)" ,
4661- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 METRICS met1)" ) ,
4662- ) ,
4663- (
4664- "SELECT * FROM SEMANTIC_VIEW(model FACTS fact1 DIMENSIONS dim1)" ,
4665- Some ( "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 FACTS fact1)" ) ,
4666- ) ,
4667- ] ;
4668-
4669- for ( input_sql, expected_sql) in valid_sqls {
4670- if let Some ( expected) = expected_sql {
4671- // Test that non-canonical order gets normalized
4672- let parsed = snowflake ( ) . parse_sql_statements ( input_sql) . unwrap ( ) ;
4673- let formatted = parsed[ 0 ] . to_string ( ) ;
4674- assert_eq ! ( formatted, expected) ;
4675- } else {
4676- snowflake ( ) . verified_stmt ( input_sql) ;
4677- }
4678- }
4679-
4680- let invalid_sqls = [
4681- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 INVALID inv1)" ,
4682- "SELECT * FROM SEMANTIC_VIEW(model DIMENSIONS dim1 DIMENSIONS dim2)" ,
4683- "SELECT * FROM SEMANTIC_VIEW(model METRICS SUM(met1.avg))" ,
4684- ] ;
4685-
4686- for sql in invalid_sqls {
4687- let result = snowflake ( ) . parse_sql_statements ( sql) ;
4688- assert ! ( result. is_err( ) , "Expected error for invalid SQL: {}" , sql) ;
4689- }
4690-
4691- let ast_sql = r#"SELECT * FROM SEMANTIC_VIEW(
4692- my_model
4693- DIMENSIONS DATE_PART('year', date_col), region_name
4694- METRICS orders.revenue, orders.count
4695- WHERE active = true
4696- ) AS model_alias"# ;
4697-
4698- let stmt = snowflake ( ) . parse_sql_statements ( ast_sql) . unwrap ( ) ;
4699- match & stmt[ 0 ] {
4700- Statement :: Query ( q) => {
4701- if let SetExpr :: Select ( select) = q. body . as_ref ( ) {
4702- if let Some ( TableWithJoins { relation, .. } ) = select. from . first ( ) {
4703- match relation {
4704- TableFactor :: SemanticView {
4705- name,
4706- dimensions,
4707- metrics,
4708- facts,
4709- where_clause,
4710- alias,
4711- } => {
4712- assert_eq ! ( name. to_string( ) , "my_model" ) ;
4713- assert_eq ! ( dimensions. len( ) , 2 ) ;
4714- assert_eq ! ( dimensions[ 0 ] . to_string( ) , "DATE_PART('year', date_col)" ) ;
4715- assert_eq ! ( dimensions[ 1 ] . to_string( ) , "region_name" ) ;
4716- assert_eq ! ( metrics. len( ) , 2 ) ;
4717- assert_eq ! ( metrics[ 0 ] . to_string( ) , "orders.revenue" ) ;
4718- assert_eq ! ( metrics[ 1 ] . to_string( ) , "orders.count" ) ;
4719- assert ! ( facts. is_empty( ) ) ;
4720- assert ! ( where_clause. is_some( ) ) ;
4721- assert_eq ! ( where_clause. as_ref( ) . unwrap( ) . to_string( ) , "active = true" ) ;
4722- assert ! ( alias. is_some( ) ) ;
4723- assert_eq ! ( alias. as_ref( ) . unwrap( ) . name. value, "model_alias" ) ;
4724- }
4725- _ => panic ! ( "Expected SemanticView table factor" ) ,
4726- }
4727- } else {
4728- panic ! ( "Expected table in FROM clause" ) ;
4729- }
4730- } else {
4731- panic ! ( "Expected SELECT statement" ) ;
4732- }
4733- }
4734- _ => panic ! ( "Expected Query statement" ) ,
4735- }
4736- }
0 commit comments