File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ target
Original file line number Diff line number Diff line change 1+ [package ]
2+ name = " pg_dump_tool"
3+ version = " 0.1.0"
4+ authors = [" Frederic de Zorzi <fredz@pimentech.fr>" ]
5+
6+ [dependencies ]
7+ regex = " 0.1"
Original file line number Diff line number Diff line change 1+ use std:: io;
2+ use std:: io:: prelude:: * ;
3+ extern crate regex;
4+
5+ use regex:: Regex ;
6+
7+ fn main ( ) {
8+ let stdin = io:: stdin ( ) ;
9+ let mut stdin = stdin. lock ( ) ;
10+ let mut line = String :: new ( ) ;
11+ let mut table_name = String :: new ( ) ;
12+ let mut fields = String :: new ( ) ;
13+ let re = match Regex :: new ( r"COPY (\w+) \(([\w, ]+)\) FROM stdin;" ) {
14+ Ok ( re) => re,
15+ Err ( err) => panic ! ( "{}" , err) ,
16+ } ;
17+ let mut insert_mode = false ;
18+ while stdin. read_line ( & mut line) . unwrap ( ) > 0 {
19+ if insert_mode {
20+ if line == "\\ .\n " {
21+ insert_mode = false ;
22+ }
23+ else {
24+ print ! ( "{} {}" , table_name, fields) ;
25+ }
26+ }
27+ else {
28+ match re. captures ( & line) {
29+ None => print ! ( "{}" , line) ,
30+ Some ( caps) => {
31+ table_name = String :: from ( caps. at ( 1 ) . unwrap ( ) ) ;
32+ fields = String :: from ( caps. at ( 2 ) . unwrap ( ) ) ;
33+ insert_mode = true ;
34+ } ,
35+ } ;
36+ }
37+ line. clear ( ) ;
38+ }
39+ }
You can’t perform that action at this time.
0 commit comments