[crush-tools] r537 committed - hashjoin: add a flag for listing dimensions' default values.

7 views
Skip to first unread message

crush...@googlecode.com

unread,
Apr 4, 2014, 12:53:47 PM4/4/14
to crush...@googlegroups.com
Revision: 537
Author: jeremy...@gmail.com
Date: Fri Apr 4 16:53:41 2014 UTC
Log: hashjoin: add a flag for listing dimensions' default values.

http://code.google.com/p/crush-tools/source/detail?r=537

Added:
/trunk/src/hashjoin/test/test_07.expected
/trunk/src/hashjoin/test/test_07.sh
Modified:
/trunk/src/hashjoin/args.tab
/trunk/src/hashjoin/hashjoin.c

=======================================
--- /dev/null
+++ /trunk/src/hashjoin/test/test_07.expected Fri Apr 4 16:53:41 2014 UTC
@@ -0,0 +1,4 @@
+Field-0,Field-1,Something-Else,Field-2,Field-3
+1,2,wee,3,4
+5,6,w00t,7,8
+7,8,nope,f2-default,f3-default
=======================================
--- /dev/null
+++ /trunk/src/hashjoin/test/test_07.sh Fri Apr 4 16:53:41 2014 UTC
@@ -0,0 +1,19 @@
+test_number=07
+description="join with defaults"
+
+infile="$test_dir/input_header.log"
+dimfile="$test_dir/dimension_header.log"
+outfile="$test_dir/test_$test_number.actual"
+expected="$test_dir/test_$test_number.expected"
+
+$bin -K 'Field-0,Field-1' -J 'Field-2,Field-3' -f $dimfile $infile \
+ --default-values=f2-default,f3-default \
+ > "$outfile"
+
+if [ $? -ne 0 ] ||
+ [ "`diff -q $outfile $expected`" ]; then
+ test_status $test_number 1 "$description" FAIL
+else
+ test_status $test_number 1 "$description" PASS
+ rm "$outfile"
+fi
=======================================
--- /trunk/src/hashjoin/args.tab Wed Jul 8 17:10:14 2009 UTC
+++ /trunk/src/hashjoin/args.tab Fri Apr 4 16:53:41 2014 UTC
@@ -117,4 +117,12 @@
description => 'output labels for added fields when the data stream
has ' .
'a header and the dimension file does not.',
},
+ {
+ name => 'default_values',
+ shortopt => 'm',
+ longopt => 'default-values',
+ type => 'var',
+ description => 'comma-separated list of values to use when the
dimension ' .
+ 'file does not have a record for a given set of key
fields.',
+ },
);
=======================================
--- /trunk/src/hashjoin/hashjoin.c Mon Jan 7 17:53:20 2013 UTC
+++ /trunk/src/hashjoin/hashjoin.c Fri Apr 4 16:53:41 2014 UTC
@@ -83,10 +83,24 @@
ht_init(&dimension, 1024, NULL, NULL);
n_values = hash_dimension_file(args, &dimension);

- empty_value = xmalloc(strlen(args->delim) * n_values);
- empty_value[0] = '\0';
- for (i = 0; i < n_values - 1; i++) {
- strcat(empty_value, args->delim);
+ if (args->default_values) {
+ size_t default_len = strlen(args->default_values);
+ char *default_buffer = xmalloc(default_len);
+ empty_value = xmalloc(default_len + strlen(args->delim) * n_values);
+ empty_value[0] = '\0';
+ for (i = 0; i < n_values; i++) {
+ get_line_field(default_buffer, args->default_values, default_len,
i, ",");
+ strcat(empty_value, default_buffer);
+ if (i < n_values - 1) {
+ strcat(empty_value, args->delim);
+ }
+ }
+ } else {
+ empty_value = xmalloc(strlen(args->delim) * n_values);
+ empty_value[0] = '\0';
+ for (i = 0; i < n_values - 1; i++) {
+ strcat(empty_value, args->delim);
+ }
}

if (argc > optind)
Reply all
Reply to author
Forward
0 new messages