src/GrepHandler.h
branchv_0
changeset 25 98be80d2e65b
parent 24 c69670b7b4ef
equal deleted inserted replaced
24:c69670b7b4ef 25:98be80d2e65b
    71 
    71 
    72 		currentRecord.resize(attributes.size());
    72 		currentRecord.resize(attributes.size());
    73 		currentSearchableAttributes.resize(attributes.size(), false);
    73 		currentSearchableAttributes.resize(attributes.size(), false);
    74 		currentFilter = nullptr;
    74 		currentFilter = nullptr;
    75 		for (int i = 0; i < configuration.relationConfigurations.size(); i++) {
    75 		for (int i = 0; i < configuration.relationConfigurations.size(); i++) {
    76 			if (regex_match(name, configuration.relationConfigurations[i].relationPattern)) {
    76 			if (regex_match(name, configuration.relationConfigurations[i].relationPattern) ^ configuration.relationConfigurations[i].invertMatch[RelationConfiguration::ENTITY::RELATION]) {
    77 				currentFilter = &configuration.relationConfigurations[i];
    77 				currentFilter = &configuration.relationConfigurations[i];
    78 				break;
    78 				break;
    79 			}
    79 			}
    80 		}
    80 		}
    81 
    81 
    82 		if (currentFilter) {
    82 		if (currentFilter) {
    83 			for (int i = 0; i < currentSearchableAttributes.size(); i++) {
    83 			for (int i = 0; i < currentSearchableAttributes.size(); i++) {
    84 				currentSearchableAttributes[i] = regex_match(attributes[i].getAttributeName(), currentFilter->attributePattern);
    84 				currentSearchableAttributes[i] = regex_match(attributes[i].getAttributeName(), currentFilter->attributePattern) ^ currentFilter->invertMatch[RelationConfiguration::ENTITY::ATTRIBUTE];
    85 			}
    85 			}
    86 		}
    86 		}
    87 
    87 
    88 		relationalWriter->startRelation(name, writerMetadata, true);
    88 		relationalWriter->startRelation(name, writerMetadata, true);
    89 	}
    89 	}
    92 		if (currentFilter) {
    92 		if (currentFilter) {
    93 			currentRecord[currentAttributeIndex] = value;
    93 			currentRecord[currentAttributeIndex] = value;
    94 
    94 
    95 			if (currentSearchableAttributes[currentAttributeIndex]) {
    95 			if (currentSearchableAttributes[currentAttributeIndex]) {
    96 				includeCurrentRecord |= regex_search(value, currentFilter->valuePattern);
    96 				includeCurrentRecord |= regex_search(value, currentFilter->valuePattern);
       
    97 				// includeCurrentRecord ^= currentFilter->invertMatch[RelationConfiguration::ENTITY::VALUE]; // might be inverted here, but it would be probably less useful
    97 			}
    98 			}
    98 
    99 
    99 			currentAttributeIndex++;
   100 			currentAttributeIndex++;
   100 
   101 
   101 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentSearchableAttributes.size() == 0) {
   102 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentSearchableAttributes.size() == 0) {
       
   103 				includeCurrentRecord ^= currentFilter->invertMatch[RelationConfiguration::ENTITY::VALUE];
   102 				if (includeCurrentRecord) for (string_t v : currentRecord) relationalWriter->writeAttribute(v);
   104 				if (includeCurrentRecord) for (string_t v : currentRecord) relationalWriter->writeAttribute(v);
   103 				includeCurrentRecord = false;
   105 				includeCurrentRecord = false;
   104 			}
   106 			}
   105 
   107 
   106 			currentAttributeIndex = currentAttributeIndex % currentSearchableAttributes.size();
   108 			currentAttributeIndex = currentAttributeIndex % currentSearchableAttributes.size();