diff options
author | Andrew Gallant <jamslam@gmail.com> | 2017-05-11 20:21:19 -0400 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2017-05-23 18:16:15 -0400 |
commit | 0f58a988016327016378a21bf4e335a41b51b2e9 (patch) | |
tree | 6dda8332c2b1452d8e08142832059c2b959f9b7e | |
parent | bc5f456b7e1827786ad6ca2f0e5b0993db7fd31a (diff) |
Migrate to csv crate rewrite.0.12.0
This commit resists the urge to refactor/rewrite xsv and ports it over
to the new CSV API. It made a lot of things cleaner and even improved
the performance of core commands like `count`, `sample`, `search`,
`select` and `slice`.
This also removes the last remaining (dubious) uses of `unsafe` within
xsv.
Benchmarks before/after:
benchmark before after
count 0.26s 175.05 MB/sec 0.11 413.76 MB/sec
flatten 4.53s 10.04 MB/sec 4.54 10.02 MB/sec
flatten_condensed 4.72s 9.64 MB/sec 4.45 10.22 MB/sec
frequency 1.91s 23.82 MB/sec 1.82 25.00 MB/sec
index 0.28s 162.54 MB/sec 0.12 379.28 MB/sec
sample_10 0.43s 105.84 MB/sec 0.18 252.85 MB/sec
sample_1000 0.44s 103.44 MB/sec 0.18 252.85 MB/sec
sample_100000 0.50s 91.02 MB/sec 0.29 156.94 MB/sec
search 0.59s 77.14 MB/sec 0.27 168.56 MB/sec
select 0.41s 111.00 MB/sec 0.14 325.09 MB/sec
sort 2.59s 17.57 MB/sec 2.18 20.87 MB/sec
slice_one_middle 0.22s 206.88 MB/sec 0.08 568.92 MB/sec
slice_one_middle_index 0.01s 4551.36 MB/sec 0.01 4551.36 MB/sec
stats 1.26s 36.12 MB/sec 1.09 41.75 MB/sec
stats_index 0.19s 239.54 MB/sec 0.15 303.42 MB/sec
stats_everything 2.13s 21.36 MB/sec 1.94 23.46 MB/sec
stats_everything_index 1.00s 45.51 MB/sec 0.93 48.93 MB/sec
-rw-r--r-- | .travis.yml | 21 | ||||
-rw-r--r-- | BENCHMARKS.md | 39 | ||||
-rw-r--r-- | Cargo.lock | 248 | ||||
-rw-r--r-- | Cargo.toml | 21 | ||||
-rw-r--r-- | README.md | 12 | ||||
-rw-r--r-- | src/cmd/cat.rs | 45 | ||||
-rw-r--r-- | src/cmd/count.rs | 28 | ||||
-rw-r--r-- | src/cmd/fixlengths.rs | 44 | ||||
-rw-r--r-- | src/cmd/flatten.rs | 30 | ||||
-rw-r--r-- | src/cmd/fmt.rs | 33 | ||||
-rw-r--r-- | src/cmd/frequency.rs | 59 | ||||
-rw-r--r-- | src/cmd/headers.rs | 26 | ||||
-rw-r--r-- | src/cmd/index.rs | 10 | ||||
-rw-r--r-- | src/cmd/input.rs | 22 | ||||
-rw-r--r-- | src/cmd/join.rs | 248 | ||||
-rw-r--r-- | src/cmd/partition.rs | 51 | ||||
-rw-r--r-- | src/cmd/sample.rs | 58 | ||||
-rw-r--r-- | src/cmd/search.rs | 38 | ||||
-rw-r--r-- | src/cmd/select.rs | 31 | ||||
-rw-r--r-- | src/cmd/slice.rs | 45 | ||||
-rw-r--r-- | src/cmd/sort.rs | 41 | ||||
-rw-r--r-- | src/cmd/split.rs | 63 | ||||
-rw-r--r-- | src/cmd/stats.rs | 98 | ||||
-rw-r--r-- | src/cmd/table.rs | 30 | ||||
-rw-r--r-- | src/config.rs | 108 | ||||
-rw-r--r-- | src/index.rs | 61 | ||||
-rw-r--r-- | src/main.rs | 8 | ||||
-rw-r--r-- | src/select.rs | 56 | ||||
-rw-r--r-- | src/util.rs | 11 | ||||
-rw-r--r-- | tests/test_frequency.rs | 6 | ||||
-rw-r--r-- | tests/tests.rs | 7 | ||||
-rw-r--r-- | tests/workdir.rs | 24 |
32 files changed, 919 insertions, 703 deletions
diff --git a/.travis.yml b/.travis.yml index cf6cc9b..9c36097 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,3 @@ -#language: rust -#rust: -# - 1.9.0 -# - stable -# - beta -# - nightly -#script: -# - cargo build --verbose -# - cargo doc -# - cargo test --verbose -# - if [ "$TRAVIS_RUST_VERSION" = "nightly" ]; then -# cargo bench --verbose; -# fi - language: rust cache: cargo @@ -33,6 +19,13 @@ matrix: - os: linux rust: stable env: TARGET=x86_64-unknown-linux-musl + # Minimum Rust supported channel. + - os: linux + rust: 1.15.0 + env: TARGET=x86_64-unknown-linux-gnu + - os: linux + rust: 1.15.0 + env: TARGET=x86_64-unknown-linux-musl before_install: - export PATH="$PATH:$HOME/.cargo/bin" diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 1071db9..7326a49 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -6,27 +6,27 @@ These benchmarks were run with which is a random 1,000,000 row subset of the world city population dataset from the [Data Science Toolkit](https://github.com/petewarden/dstkdata). -These benchmarks were run on an Intel i3930K (6 CPUs, 12 threads) with 32GB of -memory. +These benchmarks were run on an Intel i7-6900K (8 CPUs, 16 threads) with 64GB +of memory. ``` -count 0.28 seconds 162.54 MB/sec -flatten 5.31 seconds 8.57 MB/sec -flatten_condensed 5.39 seconds 8.44 MB/sec -frequency 2.54 seconds 17.91 MB/sec -index 0.27 seconds 168.56 MB/sec -sample_10 0.47 seconds 96.83 MB/sec -sample_1000 0.49 seconds 92.88 MB/sec -sample_100000 0.62 seconds 73.40 MB/sec -search 0.71 seconds 64.10 MB/sec -select 0.47 seconds 96.83 MB/sec -sort 3.36 seconds 13.54 MB/sec -slice_one_middle 0.22 seconds 206.88 MB/sec -slice_one_middle_index 0.01 seconds 4551.36 MB/sec -stats 1.37 seconds 33.22 MB/sec -stats_index 0.23 seconds 197.88 MB/sec -stats_everything 3.90 seconds 11.67 MB/sec -stats_everything_index 2.58 seconds 17.64 MB/sec +count 0.11 seconds 413.76 MB/sec +flatten 4.54 seconds 10.02 MB/sec +flatten_condensed 4.45 seconds 10.22 MB/sec +frequency 1.82 seconds 25.00 MB/sec +index 0.12 seconds 379.28 MB/sec +sample_10 0.18 seconds 252.85 MB/sec +sample_1000 0.18 seconds 252.85 MB/sec +sample_100000 0.29 seconds 156.94 MB/sec +search 0.27 seconds 168.56 MB/sec +select 0.14 seconds 325.09 MB/sec +sort 2.18 seconds 20.87 MB/sec +slice_one_middle 0.08 seconds 568.92 MB/sec +slice_one_middle_index 0.01 seconds 4551.36 MB/sec +stats 1.09 seconds 41.75 MB/sec +stats_index 0.15 seconds 303.42 MB/sec +stats_everything 1.94 seconds 23.46 MB/sec +stats_everything_index 0.93 seconds 48.93 MB/sec ``` ### Details @@ -39,4 +39,3 @@ The `count` command can be viewed as a sort of baseline of the fastest possible command that parses every record in CSV data. The benchmarks that end with `_index` are run with indexing enabled. - @@ -1,34 +1,37 @@ [root] name = "xsv" -version = "0.11.0" +version = "0.12.0" dependencies = [ - "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "chan 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", - "csv 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)", - "docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)", + "csv 1.0.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", + "csv-index 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quickcheck 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quickcheck 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "streaming-stats 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "tabwriter 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "tabwriter 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "aho-corasick" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "byteorder" -version = "0.5.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -41,31 +44,40 @@ dependencies = [ [[package]] name = "csv" -version = "0.14.7" +version = "1.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "csv-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "docopt" -version = "0.6.86" +name = "csv-core" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "env_logger" -version = "0.3.5" +name = "csv-index" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "csv 1.0.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", + "csv-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "docopt" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -73,7 +85,7 @@ name = "filetime" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -87,12 +99,12 @@ dependencies = [ [[package]] name = "lazy_static" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -102,10 +114,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "0.1.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -114,8 +126,8 @@ version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-bigint 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "num-complex 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", "num-rational 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", @@ -126,24 +138,24 @@ name = "num-bigint" version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-complex" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", @@ -154,7 +166,7 @@ name = "num-iter" version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -164,9 +176,9 @@ version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-bigint 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -176,53 +188,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quickcheck" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] +name = "quote" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "rand" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "0.1.80" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.3.9" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-serialize" -version = "0.3.23" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "serde_derive" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive_internals 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive_internals" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "streaming-stats" version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -232,12 +271,30 @@ dependencies = [ [[package]] name = "strsim" -version = "0.5.2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "tabwriter" -version = "0.1.25" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -245,19 +302,20 @@ dependencies = [ [[package]] name = "thread-id" -version = "2.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" -version = "0.2.7" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -271,8 +329,26 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unreachable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "utf8-ranges" -version = "0.1.3" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "void" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -286,38 +362,48 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" -"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" +"checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" +"checksum byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c40977b0ee6b9885c9013cd41d9feffdd22deb3bb4dc3a71d901cc7a77de18c8" "checksum chan 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "f93bfe971116428a9066c1c3c69a09ae3ef69432f8418be28ab50f96783e6a50" -"checksum csv 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)" = "266c1815d7ca63a5bd86284043faf91e8c95e943e55ce05dc0ae08e952de18bc" -"checksum docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)" = "4a7ef30445607f6fc8720f0a0a2c7442284b629cf0d049286860fae23e71c4d9" -"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" +"checksum csv 1.0.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81675dd89651e2aa0989e6a5249dc5c5bcfc13772baec7f9652208e7691e0955" +"checksum csv-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a11ab3094dd197341f9d66753789a5cdf29ce35450a7d6e7968024e2d44519c" +"checksum csv-index 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7405ccdb151a01a4844b2cf851e2806dca2bdec892537057bf0719f4a7504c60" +"checksum docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab32ea6e284d87987066f21a9e809a73c14720571ef34516f0890b3d355ccfd8" "checksum filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "5363ab8e4139b8568a6237db5248646e5a8a2f89bd5ccb02092182b11fd3e922" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lazy_static 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7291b1dd97d331f752620b02dfdbc231df7fc01bf282a00769e1cdb963c460dc" -"checksum libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "88ee81885f9f04bff991e306fea7c1c60a5f0f9e409e99f6b40e3311a3363135" +"checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" +"checksum libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "e7eb6b826bfc1fdea7935d46556250d1799b7fe2d9f7951071f4291710665e3e" "checksum log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "5141eca02775a762cc6cd564d8d2c50f67c0ea3a372cbf1c51592b3e029e10ad" -"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4" "checksum num 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "98b15ba84e910ea7a1973bccd3df7b31ae282bf9d8bd2897779950c9b8303d40" "checksum num-bigint 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "ba6d838b16e56da1b6c383d065ff1ec3c7d7797f65a3e8f6ba7092fd87820bac" -"checksum num-complex 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "3534898d8a1f6b16c12f9fc2f4eaabc7ecdcc55f267213caa8988fdc7d60ff94" -"checksum num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "21e4df1098d1d797d27ef0c69c178c3fab64941559b290fcae198e0825c9c8b5" +"checksum num-complex 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "148eb324ca772230853418731ffdf13531738b50f89b30692a01fcdcb0a64677" +"checksum num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ef1a4bf6f9174aa5783a9b4cc892cacd11aebad6c69ad027a0b65c6ca5f8aa37" "checksum num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d1891bd7b936f12349b7d1403761c8a0b85a18b148e9da4429d5d102c1a41e" "checksum num-rational 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "c2dc5ea04020a8f18318ae485c751f8cfa1c0e69dcf465c29ddaaa64a313cc44" "checksum num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "e1cbfa3781f3fe73dc05321bed52a06d2d491eaa764c52335cf4399f046ece99" -"checksum num_cpus 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a18c392466409c50b87369414a2680c93e739aedeb498eb2bff7d7eb569744e2" -"checksum quickcheck 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0b333da40686cc05db13d933f8e7b450f403cfc5a4d005154d8d4a5ba9d14605" +"checksum num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca313f1862c7ec3e0dfe8ace9fa91b1d9cb5c84ace3d00f5ec4216238e93c167" +"checksum quickcheck 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "02c2411d418cea2364325b18a205664f9ef8252e06b2e911db97c0b0d98b1406" +"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" "checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d" -"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" -"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" -"checksum rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "684ce48436d6465300c9ea783b6b14c4361d6b8dcbb1375b486a69cc19e2dfb0" +"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b" +"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" +"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" +"checksum serde 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c0c3d79316a6051231925504f6ef893d45088e8823c77a8331a3dcf427ee9087" +"checksum serde_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0019cd5b9f0529a1a0e145a912e9a2d60c325c58f7f260fc36c71976e9d76aee" +"checksum serde_derive_internals 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "021c338d22c7e30f957a6ab7e388cb6098499dda9fd4ba1661ee074ca7a180d1" "checksum streaming-stats 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "f13d0cd680e11a62c5e125d9799debfb39fcfff9a2ef416336ce748f65018b89" -"checksum strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "67f84c44fbb2f91db7fef94554e6b2ac05909c9c0b0bc23bb98d3a1aebfe7f7c" -"checksum tabwriter 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "85dbf563da2891d55ef4b00ef08c5b5f160143f67691ff1f97ad89e77824ed3b" -"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" -"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" +"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +"checksum tabwriter 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3b7810162bc0a2eb2dc9a9bfd16ddb2d1f6022df3236d1478937bfadcb12385e" +"checksum thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8df7875b676fddfadffd96deea3b1124e5ede707d4884248931077518cf1f773" +"checksum thread_local 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c85048c6260d17cf486ceae3282d9fb6b90be220bf5b28c400f5485ffc29f0c7" "checksum threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59f6d3eff89920113dac9db44dde461d71d01e88a5b57b258a0466c32b5d7fe1" "checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f" -"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" +"checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91" +"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" @@ -1,6 +1,6 @@ [package] name = "xsv" -version = "0.11.0" #:version +version = "0.12.0" #:version authors = ["Andrew Gallant <jamslam@gmail.com>"] description = "A high performance CSV command line toolkit." documentation = "http://burntsushi.net/rustdoc/xsv/" @@ -26,19 +26,22 @@ opt-level = 3 opt-level = 3 [dependencies] -byteorder = "0.5" +byteorder = "1" chan = "0.1" -csv = "0.14" -docopt = "0.6" +csv = "1.0.0-beta.1" +csv-index = "0.1" +docopt = "0.7" filetime = "0.1" -num_cpus = "1.0" -rand = "0.3" -regex = "0.1" +num_cpus = "1.4" +rand = "0.3.15" +regex = "0.2" rustc-serialize = "0.3" streaming-stats = "0.1" -tabwriter = "0.1" +tabwriter = "1" threadpool = "1.3" [dev-dependencies] -quickcheck = "0.3" +quickcheck = { version = "0.4", default-features = false } log = "0.3" +serde = "1" +serde_derive = "1" @@ -300,7 +300,7 @@ right and full outer join support too. Binaries for Windows, Linux and Mac are available [from Github](https://github.com/BurntSushi/xsv/releases/latest). If you're a **Mac OS X Homebrew** user, then you can install xsv -from homebrew-core, (compiled with rust stable, no SIMD): +from homebrew-core: ``` $ brew install xsv @@ -309,7 +309,13 @@ $ brew install xsv Alternatively, you can compile from source by [installing Cargo](https://crates.io/install) ([Rust's](http://www.rust-lang.org/) package manager) -and building `xsv`: +and installing `xsv` using Cargo: + +```bash +cargo install xsv +``` + +Compiling from this repository also works similarly: ```bash git clone git://github.com/BurntSushi/xsv @@ -317,7 +323,7 @@ cd xsv cargo build --release ``` -Compilation will probably take 1-2 minutes depending on your machine. The +Compilation will probably take a few minutes depending on your machine. The binary will end up in `./target/release/xsv`. diff --git a/src/cmd/cat.rs b/src/cmd/cat.rs index d9f3bd8..7e7c1f3 100644 --- a/src/cmd/cat.rs +++ b/src/cmd/cat.rs @@ -1,5 +1,3 @@ -use std::iter::repeat; |