Skip to content

Commit a7d1940

Browse files
author
Frederic de Zorzi
committed
init, fighting with types
0 parents  commit a7d1940

3 files changed

Lines changed: 47 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target

Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
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"

src/main.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

0 commit comments

Comments
 (0)