@@ -600,3 +600,47 @@ fn parse_databricks_struct_type() {
600600 _ => unreachable ! ( ) ,
601601 }
602602}
603+
604+ #[ test]
605+ fn parse_databricks_json_accessor ( ) {
606+ // Basic colon accessor — unquoted field names are case-insensitive
607+ databricks ( ) . verified_only_select ( "SELECT raw:owner, RAW:owner FROM store_data" ) ;
608+
609+ // Unquoted field access is case-insensitive; bracket notation is case-sensitive.
610+ databricks ( ) . verified_only_select (
611+ "SELECT raw:OWNER AS case_insensitive, raw:['OWNER'] AS case_sensitive FROM store_data" ,
612+ ) ;
613+
614+ // Backtick-quoted keys (Databricks delimited identifiers) normalise to double-quoted output.
615+ databricks ( ) . one_statement_parses_to (
616+ "SELECT raw:`zip code`, raw:`Zip Code`, raw:['fb:testid'] FROM store_data" ,
617+ r#"SELECT raw:"zip code", raw:"Zip Code", raw:['fb:testid'] FROM store_data"# ,
618+ ) ;
619+
620+ // Dot notation
621+ databricks ( ) . verified_only_select ( "SELECT raw:store.bicycle FROM store_data" ) ;
622+
623+ // String-key bracket notation after a dot segment
624+ databricks ( )
625+ . verified_only_select ( "SELECT raw:store['bicycle'], raw:store['BICYCLE'] FROM store_data" ) ;
626+
627+ // Integer-index bracket notation
628+ databricks ( )
629+ . verified_only_select ( "SELECT raw:store.fruit[0], raw:store.fruit[1] FROM store_data" ) ;
630+
631+ // Wildcard [*] — including chained and mixed positions
632+ databricks ( ) . verified_only_select (
633+ "SELECT raw:store.basket[*], raw:store.basket[*][0] AS first_of_baskets, \
634+ raw:store.basket[0][*] AS first_basket, raw:store.basket[*][*] AS all_elements_flattened, \
635+ raw:store.basket[0][2].b AS subfield FROM store_data",
636+ ) ;
637+
638+ // Dot access following a wildcard bracket
639+ databricks ( ) . verified_only_select ( "SELECT raw:store.book[*].isbn FROM store_data" ) ;
640+
641+ // Double-colon cast — type keyword normalises to upper case
642+ databricks ( ) . one_statement_parses_to (
643+ "SELECT raw:store.bicycle.price::double FROM store_data" ,
644+ "SELECT raw:store.bicycle.price::DOUBLE FROM store_data" ,
645+ ) ;
646+ }
0 commit comments