@@ -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 } ;
@@ -5430,11 +5430,7 @@ impl<'a> Parser<'a> {
54305430 None
54315431 } ;
54325432
5433- let big_query_config = if dialect_of ! ( self is BigQueryDialect | GenericDialect ) {
5434- self . parse_optional_big_query_create_table_config ( ) ?
5435- } else {
5436- Default :: default ( )
5437- } ;
5433+ let create_table_config = self . parse_optional_create_table_config ( ) ?;
54385434
54395435 // Parse optional `AS ( query )`
54405436 let query = if self . parse_keyword ( Keyword :: AS ) {
@@ -5519,39 +5515,46 @@ impl<'a> Parser<'a> {
55195515 . collation ( collation)
55205516 . on_commit ( on_commit)
55215517 . on_cluster ( on_cluster)
5522- . partition_by ( big_query_config . partition_by )
5523- . cluster_by ( big_query_config . cluster_by )
5524- . options ( big_query_config . options )
5518+ . partition_by ( create_table_config . partition_by )
5519+ . cluster_by ( create_table_config . cluster_by )
5520+ . options ( create_table_config . options )
55255521 . primary_key ( primary_key)
55265522 . strict ( strict)
55275523 . build ( ) )
55285524 }
55295525
5530- /// Parse configuration like partitioning, clustering information during big-query table creation.
5531- /// <https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2>
5532- fn parse_optional_big_query_create_table_config (
5526+ /// Parse configuration like partitioning, clustering information during the table creation.
5527+ ///
5528+ /// [BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2)
5529+ /// [PostgreSQL](https://www.postgresql.org/docs/current/ddl-partitioning.html)
5530+ fn parse_optional_create_table_config (
55335531 & mut self ,
5534- ) -> Result < BigQueryTableConfiguration , ParserError > {
5535- let mut partition_by = None ;
5536- if self . parse_keywords ( & [ Keyword :: PARTITION , Keyword :: BY ] ) {
5537- partition_by = Some ( Box :: new ( self . parse_expr ( ) ?) ) ;
5532+ ) -> Result < CreateTableConfiguration , ParserError > {
5533+ let partition_by = if dialect_of ! ( self is BigQueryDialect | PostgreSqlDialect | GenericDialect )
5534+ && self . parse_keywords ( & [ Keyword :: PARTITION , Keyword :: BY ] )
5535+ {
5536+ Some ( Box :: new ( self . parse_expr ( ) ?) )
5537+ } else {
5538+ None
55385539 } ;
55395540
55405541 let mut cluster_by = None ;
5541- if self . parse_keywords ( & [ Keyword :: CLUSTER , Keyword :: BY ] ) {
5542- cluster_by = Some ( WrappedCollection :: NoWrapping (
5543- self . parse_comma_separated ( |p| p. parse_identifier ( false ) ) ?,
5544- ) ) ;
5545- } ;
5546-
55475542 let mut options = None ;
5548- if let Token :: Word ( word) = self . peek_token ( ) . token {
5549- if word. keyword == Keyword :: OPTIONS {
5550- options = Some ( self . parse_options ( Keyword :: OPTIONS ) ?) ;
5551- }
5552- } ;
5543+ if dialect_of ! ( self is BigQueryDialect | GenericDialect ) {
5544+ if self . parse_keywords ( & [ Keyword :: CLUSTER , Keyword :: BY ] ) {
5545+ cluster_by = Some ( WrappedCollection :: NoWrapping (
5546+ self . parse_comma_separated ( |p| p. parse_identifier ( false ) ) ?,
5547+ ) ) ;
5548+ } ;
5549+
5550+ if let Token :: Word ( word) = self . peek_token ( ) . token {
5551+ if word. keyword == Keyword :: OPTIONS {
5552+ options = Some ( self . parse_options ( Keyword :: OPTIONS ) ?) ;
5553+ }
5554+ } ;
5555+ }
55535556
5554- Ok ( BigQueryTableConfiguration {
5557+ Ok ( CreateTableConfiguration {
55555558 partition_by,
55565559 cluster_by,
55575560 options,
0 commit comments