equal
deleted
inserted
replaced
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(); |