@@ -23,8 +23,8 @@ mod test_utils;
23
23
use matches:: assert_matches;
24
24
use sqlparser:: ast:: * ;
25
25
use sqlparser:: dialect:: {
26
- AnsiDialect , BigQueryDialect , GenericDialect , MsSqlDialect , PostgreSqlDialect , SQLiteDialect ,
27
- SnowflakeDialect ,
26
+ AnsiDialect , BigQueryDialect , GenericDialect , HiveDialect , MsSqlDialect , PostgreSqlDialect ,
27
+ SQLiteDialect , SnowflakeDialect ,
28
28
} ;
29
29
use sqlparser:: keywords:: ALL_KEYWORDS ;
30
30
use sqlparser:: parser:: { Parser , ParserError } ;
@@ -1755,6 +1755,53 @@ fn parse_create_table() {
1755
1755
. contains( "Expected constraint details after CONSTRAINT <name>" ) ) ;
1756
1756
}
1757
1757
1758
+ #[ test]
1759
+ fn parse_create_table_hive_array ( ) {
1760
+ // Parsing [] type arrays does not work in MsSql since [ is used in is_delimited_identifier_start
1761
+ let dialects = TestedDialects {
1762
+ dialects : vec ! [ Box :: new( PostgreSqlDialect { } ) , Box :: new( HiveDialect { } ) ] ,
1763
+ } ;
1764
+ let sql = "CREATE TABLE IF NOT EXISTS something (key int, val array<int>)" ;
1765
+ match dialects. one_statement_parses_to (
1766
+ sql,
1767
+ "CREATE TABLE IF NOT EXISTS something (key INT, val INT[])" ,
1768
+ ) {
1769
+ Statement :: CreateTable {
1770
+ if_not_exists,
1771
+ name,
1772
+ columns,
1773
+ ..
1774
+ } => {
1775
+ assert ! ( if_not_exists) ;
1776
+ assert_eq ! ( name, ObjectName ( vec![ "something" . into( ) ] ) ) ;
1777
+ assert_eq ! (
1778
+ columns,
1779
+ vec![
1780
+ ColumnDef {
1781
+ name: Ident :: new( "key" ) ,
1782
+ data_type: DataType :: Int ( None ) ,
1783
+ collation: None ,
1784
+ options: vec![ ] ,
1785
+ } ,
1786
+ ColumnDef {
1787
+ name: Ident :: new( "val" ) ,
1788
+ data_type: DataType :: Array ( Box :: new( DataType :: Int ( None ) ) ) ,
1789
+ collation: None ,
1790
+ options: vec![ ] ,
1791
+ } ,
1792
+ ] ,
1793
+ )
1794
+ }
1795
+ _ => unreachable ! ( ) ,
1796
+ }
1797
+
1798
+ let res = parse_sql_statements ( "CREATE TABLE IF NOT EXISTS something (key int, val array<int)" ) ;
1799
+ assert ! ( res
1800
+ . unwrap_err( )
1801
+ . to_string( )
1802
+ . contains( "Expected >, found: )" ) ) ;
1803
+ }
1804
+
1758
1805
#[ test]
1759
1806
fn parse_create_table_with_multiple_on_delete_in_constraint_fails ( ) {
1760
1807
parse_sql_statements (
0 commit comments