add --where option: similar to --for-each but better expresses the intention: filtering v_0 v0.14
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 29 Oct 2019 12:09:38 +0100
branchv_0
changeset 37 0c050899c77f
parent 36 3bcb28cbf655
child 38 6edbaadbc852
add --where option: similar to --for-each but better expresses the intention: filtering The --for-each is more universal and can be used for both transformations and filtering.
bash-completion.sh
src/CLIParser.h
--- a/bash-completion.sh	Sun Oct 27 19:49:22 2019 +0100
+++ b/bash-completion.sh	Tue Oct 29 12:09:38 2019 +0100
@@ -35,7 +35,8 @@
 	elif [[ "$w1" == "--define"            && "x$w0" == "x" ]];    then COMPREPLY=("''")
 	elif [[ "$w2" == "--define"                             ]];    then COMPREPLY=($(compgen -W "${DATA_TYPE[*]}" -- "$w0"))
 	elif [[ "$w3" == "--define"            && "x$w0" == "x" ]];    then COMPREPLY=("''")
-	elif [[ "$w1" == "--for-each"          && "x$w0" == "x" ]];    then COMPREPLY=("'1'")
+	elif [[ "$w1" == "--for-each"          && "x$w0" == "x" ]];    then COMPREPLY=("'(a == \"abc\") { a = \"X\"; record(); }'")
+	elif [[ "$w1" == "--where"             && "x$w0" == "x" ]];    then COMPREPLY=("'a == \"abc\" || b = 123'")
 	else
 		OPTIONS=(
 			"--relation"
@@ -46,6 +47,7 @@
 			"--before-records"
 			"--after-records"
 			"--for-each"
+			"--where"
 			"--drop"
 			"--define"
 		)
--- a/src/CLIParser.h	Sun Oct 27 19:49:22 2019 +0100
+++ b/src/CLIParser.h	Tue Oct 29 12:09:38 2019 +0100
@@ -67,6 +67,7 @@
 	static const string_t OPTION_BEFORE_RECORDS;
 	static const string_t OPTION_AFTER_RECORDS;
 	static const string_t OPTION_FOR_EACH;
+	static const string_t OPTION_WHERE;
 	static const string_t OPTION_DROP;
 	static const string_t OPTION_DEFINE;
 
@@ -80,6 +81,7 @@
 			if (option == OPTION_BEFORE_RECORDS) currentRelation.awkBeforeRecords = readNext(arguments, i);
 			else if (option == OPTION_AFTER_RECORDS) currentRelation.awkAfterRecords = readNext(arguments, i);
 			else if (option == OPTION_FOR_EACH) currentRelation.awkForEach = readNext(arguments, i);
+			else if (option == OPTION_WHERE) currentRelation.awkForEach = L"(" + readNext(arguments, i) + L")";
 			else if (option == OPTION_DROP) currentRelation.drop = true;
 			else if (option == OPTION_INPUT_ATTRIBUTES_APPEND) currentRelation.inputAttributesAppend = true;
 			else if (option == OPTION_INPUT_ATTRIBUTES_PREPEND) currentRelation.inputAttributesPrepend = true;
@@ -118,6 +120,7 @@
 const string_t CLIParser::OPTION_BEFORE_RECORDS = L"--before-records";
 const string_t CLIParser::OPTION_AFTER_RECORDS = L"--after-records";
 const string_t CLIParser::OPTION_FOR_EACH = L"--for-each";
+const string_t CLIParser::OPTION_WHERE = L"--where";
 const string_t CLIParser::OPTION_DROP = L"--drop";
 const string_t CLIParser::OPTION_DEFINE = L"--define";