# HG changeset patch # User František Kučera # Date 1549218592 -3600 # Node ID 65f9d6b94f5cc6f413b6f6624acefbb3deaea024 # Parent 1e6206284c6cfba1c92a6f4719e744542ef4f9e8 Guile --for-each record diff -r 1e6206284c6c -r 65f9d6b94f5c src/GuileHandler.h --- a/src/GuileHandler.h Sun Feb 03 19:02:50 2019 +0100 +++ b/src/GuileHandler.h Sun Feb 03 19:29:52 2019 +0100 @@ -76,8 +76,14 @@ return scm_string_to_symbol(scm_from_locale_string(convertor.to_bytes(name).c_str())); } - SCM evalGuileCode(const string_t& value) { - return scm_eval_string(toGuileValue(&value, typeid (string_t), TypeId::STRING)); + /** + * @param code guile source code e.g. (+ 1 2 3) or #t + * @param defaultReturnValue is returned if code is empty + * @return result of code execution or defaultReturnValue + */ + SCM evalGuileCode(const string_t& code, SCM defaultReturnValue = SCM_BOOL_F) { + if (code.size()) return scm_eval_string(toGuileValue(&code, typeid (string_t), TypeId::STRING)); + else return defaultReturnValue; } SCM toGuileValue(const void* value, const std::type_info& typeInfo, TypeId type) { @@ -176,7 +182,8 @@ // TODO: > 0 ?: if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) { - includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere)); + evalGuileCode(currentRelationConfiguration->guileForEach); + includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere, SCM_BOOL_T)); if (includeCurrentRecord) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute); includeCurrentRecord = false; }