31 lines
1.1 KiB
Plaintext
31 lines
1.1 KiB
Plaintext
CopyStatement <- 'COPY' (CopyTable / CopySelect / CopyFromDatabase)
|
|
|
|
CopyTable <- BaseTableName InsertColumnList? FromOrTo CopyFileName CopyOptions?
|
|
FromOrTo <- 'FROM' / 'TO'
|
|
|
|
CopySelect <- Parens(SelectStatement) 'TO' CopyFileName CopyOptions?
|
|
|
|
CopyFileName <- Expression / StringLiteral / Identifier / (Identifier '.' ColId)
|
|
CopyOptions <- 'WITH'? (Parens(GenericCopyOptionList) / (SpecializedOptions*))
|
|
SpecializedOptions <-
|
|
'BINARY' / 'FREEZE' / 'OIDS' / 'CSV' / 'HEADER' /
|
|
SpecializedStringOption /
|
|
('ENCODING' StringLiteral) /
|
|
('FORCE' 'QUOTE' StarOrColumnList) /
|
|
('PARTITION' 'BY' StarOrColumnList) /
|
|
('FORCE' 'NOT'? 'NULL' ColumnList)
|
|
|
|
SpecializedStringOption <- ('DELIMITER' / 'NULL' / 'QUOTE' / 'ESCAPE') 'AS'? StringLiteral
|
|
|
|
StarOrColumnList <- '*' / ColumnList
|
|
|
|
GenericCopyOptionList <- List(GenericCopyOption)
|
|
GenericCopyOption <- GenericCopyOptionName Expression?
|
|
# FIXME: should not need to hard-code options here
|
|
GenericCopyOptionName <- 'ARRAY' / 'NULL' / 'ANALYZE' / CopyOptionName
|
|
|
|
CopyFromDatabase <- 'FROM' 'DATABASE' ColId 'TO' ColId CopyDatabaseFlag?
|
|
|
|
CopyDatabaseFlag <- Parens(SchemaOrData)
|
|
SchemaOrData <- 'SCHEMA' / 'DATA'
|