@@ -31,7 +31,7 @@ use recursion::RecursionCounter;
3131use IsLateral :: * ;
3232use IsOptional :: * ;
3333
34- use crate :: ast:: helpers:: stmt_create_table:: { BigQueryTableConfiguration , CreateTableBuilder } ;
34+ use crate :: ast:: helpers:: stmt_create_table:: { CreateTableBuilder , CreateTableConfiguration } ;
3535use crate :: ast:: * ;
3636use crate :: dialect:: * ;
3737use crate :: keywords:: { Keyword , ALL_KEYWORDS } ;
@@ -5416,11 +5416,7 @@ impl<'a> Parser<'a> {
54165416 None
54175417 } ;
54185418
5419- let big_query_config = if dialect_of ! ( self is BigQueryDialect | GenericDialect ) {
5420- self . parse_optional_big_query_create_table_config ( ) ?
5421- } else {
5422- Default :: default ( )
5423- } ;
5419+ let create_table_config = self . parse_optional_create_table_config ( ) ?;
54245420
54255421 // Parse optional `AS ( query )`
54265422 let query = if self . parse_keyword ( Keyword :: AS ) {
@@ -5505,39 +5501,46 @@ impl<'a> Parser<'a> {
55055501 . collation ( collation)
55065502 . on_commit ( on_commit)
55075503 . on_cluster ( on_cluster)
5508- . partition_by ( big_query_config . partition_by )
5509- . cluster_by ( big_query_config . cluster_by )
5510- . options ( big_query_config . options )
5504+ . partition_by ( create_table_config . partition_by )
5505+ . cluster_by ( create_table_config . cluster_by )
5506+ . options ( create_table_config . options )
55115507 . primary_key ( primary_key)
55125508 . strict ( strict)
55135509 . build ( ) )
55145510 }
55155511
5516- /// Parse configuration like partitioning, clustering information during big-query table creation.
5517- /// <https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2>
5518- fn parse_optional_big_query_create_table_config (
5512+ /// Parse configuration like partitioning, clustering information during the table creation.
5513+ ///
5514+ /// [BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2)
5515+ /// [PostgreSQL](https://www.postgresql.org/docs/current/ddl-partitioning.html)
5516+ fn parse_optional_create_table_config (
55195517 & mut self ,
5520- ) -> Result < BigQueryTableConfiguration , ParserError > {
5521- let mut partition_by = None ;
5522- if self . parse_keywords ( & [ Keyword :: PARTITION , Keyword :: BY ] ) {
5523- partition_by = Some ( Box :: new ( self . parse_expr ( ) ?) ) ;
5518+ ) -> Result < CreateTableConfiguration , ParserError > {
5519+ let partition_by = if dialect_of ! ( self is BigQueryDialect | PostgreSqlDialect | GenericDialect )
5520+ && self . parse_keywords ( & [ Keyword :: PARTITION , Keyword :: BY ] )
5521+ {
5522+ Some ( Box :: new ( self . parse_expr ( ) ?) )
5523+ } else {
5524+ None
55245525 } ;
55255526
55265527 let mut cluster_by = None ;
5527- if self . parse_keywords ( & [ Keyword :: CLUSTER , Keyword :: BY ] ) {
5528- cluster_by = Some ( WrappedCollection :: NoWrapping (
5529- self . parse_comma_separated ( |p| p. parse_identifier ( false ) ) ?,
5530- ) ) ;
5531- } ;
5532-
55335528 let mut options = None ;
5534- if let Token :: Word ( word) = self . peek_token ( ) . token {
5535- if word. keyword == Keyword :: OPTIONS {
5536- options = Some ( self . parse_options ( Keyword :: OPTIONS ) ?) ;
5537- }
5538- } ;
5529+ if dialect_of ! ( self is BigQueryDialect | GenericDialect ) {
5530+ if self . parse_keywords ( & [ Keyword :: CLUSTER , Keyword :: BY ] ) {
5531+ cluster_by = Some ( WrappedCollection :: NoWrapping (
5532+ self . parse_comma_separated ( |p| p. parse_identifier ( false ) ) ?,
5533+ ) ) ;
5534+ } ;
5535+
5536+ if let Token :: Word ( word) = self . peek_token ( ) . token {
5537+ if word. keyword == Keyword :: OPTIONS {
5538+ options = Some ( self . parse_options ( Keyword :: OPTIONS ) ?) ;
5539+ }
5540+ } ;
5541+ }
55395542
5540- Ok ( BigQueryTableConfiguration {
5543+ Ok ( CreateTableConfiguration {
55415544 partition_by,
55425545 cluster_by,
55435546 options,
0 commit comments