Skip to content

Instantly share code, notes, and snippets.

@EvanCarroll
Created June 14, 2010 22:59
Show Gist options
  • Save EvanCarroll/438450 to your computer and use it in GitHub Desktop.
Save EvanCarroll/438450 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use strict;
use warnings;
use feature ':5.10';
my $copy = do {
use Regexp::Grammars;
qr{
<ACTION=(\\COPY)> <from>
<rule: from> <tablename=literal> <pcolumnlist>? FROM <source> <with>?
<rule: with> WITH? (<[MATCH=with_options]> ** \s)
<rule: with_options> BINARY|OIDS|<delimiter>|<null>|<header>
<rule: delimiter> DELIMITER <.as>? <MATCH=pair>
<rule: null> NULL <.as>? <MATCH=pair>
<rule: header> CSV ( <[MATCH=header_options]> ** \s )
<token: header_options> HEADER|<quote>|<escape>|<force_not_null>
<rule: quote> QUOTE <.as>? <MATCH=pair>
<rule: escape> ESCAPE <.as>? <MATCH=pair>
<rule: force_not_null> FORCE NOT NULL <columnlist>
<token: source> STDIN|<literal>
<token: as> AS
<rule: columnlist> (<[MATCH=literal]> ** \,)+
<rule: pcolumnlist> \( <MATCH=columnlist> \)
<rule: pair> <delim=(\$\$|"|')> <MATCH=literal> (??{ quotemeta $MATCH{delim} })
<token: literal> [\S]+
}xmsi;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment