1. Project Clover database Wed Nov 12 2025 05:07:35 UTC
  2. Package guru.mikelue.foxglove.jdbc

File ValueTomb.java

 

Coverage histogram

../../../../img/srcFileCovDistChart9.png
53% of files have more coverage

Code metrics

4
27
6
1
118
78
9
0.33
4.5
6
1.5

Classes

Class Line # Actions
ValueTomb 18 27 0% 9 5
0.864864986.5%
 

Contributing tests

This file is covered by 133 tests. .

Source view

1    package guru.mikelue.foxglove.jdbc;
2   
3    import java.util.*;
4   
5    import org.apache.commons.lang3.Validate;
6    import org.apache.commons.lang3.builder.ToStringBuilder;
7    import org.apache.commons.lang3.builder.ToStringStyle;
8    import org.slf4j.Logger;
9    import org.slf4j.LoggerFactory;
10   
11    import guru.mikelue.foxglove.TupleAccessor;
12   
13    import static java.util.Collections.unmodifiableList;
14   
15    /**
16    * Keeps the generated values defined by {@link JdbcTableFacet}.
17    */
 
18    class ValueTomb {
19    private final Logger logger = LoggerFactory.getLogger(ValueTomb.class);
20    private final Map<String, List<Object>> keptColumnValues = new HashMap<>();
21    private final Set<String> havePreserved = new HashSet<>();
22    private final String tableName;
23   
 
24  399 toggle ValueTomb(String tableName)
25    {
26  399 this.tableName = tableName;
27    }
28   
 
29  36 toggle void keepColumn(String columnName)
30    {
31  36 logger.debug("Keep column: \"{}\"", columnName);
32   
33  36 keptColumnValues.putIfAbsent(columnName, new ArrayList<>());
34    }
35   
36    /**
37    * Preserves the proto-data from the given tuple.
38    *
39    * @param tuple The tuple to be preserved
40    *
41    * @return The column names being preserved
42    */
 
43  1406 toggle Set<String> preserveProtoData(TupleAccessor tuple)
44    {
45  1406 var preservedColumnNames = new HashSet<String>();
46   
47  1406 for (var columnName : keptColumnValues.keySet()) {
48  222 if (!tuple.hasColumn(columnName)) {
49  33 continue;
50    }
51   
52  189 preservedColumnNames.add(columnName);
53  189 havePreserved.add(columnName);
54   
55  189 keptColumnValues.get(columnName).add(tuple.getValue(columnName));
56    }
57   
58  1406 return preservedColumnNames;
59    }
60   
61    /**
62    * Preserves the auto-data from the given tuple.
63    *
64    * @param tuple The tuple to be preserved
65    *
66    * @return The column names being preserved
67    */
 
68  89 toggle Set<String> preserveAfterData(List<TupleAccessor> tuples)
69    {
70  89 var preservedColumnNames = new HashSet<String>();
71   
72  89 for (var columnName : keptColumnValues.keySet()) {
73  25 for (var tuple : tuples) {
74  182 if (havePreserved.contains(columnName) ||
75    !tuple.hasColumn(columnName)) {
76  148 continue;
77    }
78   
79  34 preservedColumnNames.add(columnName);
80  34 keptColumnValues.get(columnName).add(tuple.getValue(columnName));
81    }
82    }
83   
84  89 return preservedColumnNames;
85    }
86   
 
87  36 toggle @SuppressWarnings("unchecked")
88    <T> List<T> getValues(String columnName)
89    {
90  36 Validate.isTrue(
91    keptColumnValues.containsKey(columnName),
92    "Column name [%s.%s] is not being kept", tableName, columnName
93    );
94   
95  36 var values = keptColumnValues.get(columnName);
96  36 Validate.isTrue(
97    values.size() > 0,
98    "Empty for column [%s]. Do you generate referencing table before referent table[%s]?",
99    columnName, tableName
100    );
101   
102  36 return unmodifiableList(
103    (List<T>)keptColumnValues.get(columnName)
104    );
105    }
106   
 
107  0 toggle @Override
108    public String toString()
109    {
110  0 var builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
111   
112  0 keptColumnValues.forEach((columnName, values) -> {
113  0 builder.append(columnName, values.size());
114    });
115   
116  0 return builder.toString();
117    }
118    }