|
27 | 27 | */
|
28 | 28 | package org.hisp.dhis.analytics.common;
|
29 | 29 |
|
30 |
| -import org.hisp.dhis.common.QueryItem; |
31 |
| -import org.hisp.dhis.program.ProgramIndicator; |
32 |
| -import org.hisp.dhis.program.ProgramStage; |
| 30 | +import static org.hisp.dhis.analytics.common.CTEUtils.computeKey; |
33 | 31 |
|
34 | 32 | import java.util.LinkedHashMap;
|
35 | 33 | import java.util.Map;
|
36 | 34 | import java.util.Set;
|
37 |
| - |
38 |
| -import static org.hisp.dhis.analytics.common.CTEUtils.computeKey; |
| 35 | +import org.hisp.dhis.common.QueryItem; |
| 36 | +import org.hisp.dhis.program.ProgramIndicator; |
| 37 | +import org.hisp.dhis.program.ProgramStage; |
39 | 38 |
|
40 | 39 | public class CTEContext {
|
41 |
| - private final Map<String, CteDefinition> cteDefinitions = new LinkedHashMap<>(); |
| 40 | + private final Map<String, CteDefinition> cteDefinitions = new LinkedHashMap<>(); |
42 | 41 |
|
43 |
| - public CteDefinition getDefinitionByItemUid(String itemUid) { |
44 |
| - return cteDefinitions.get(itemUid); |
45 |
| - } |
| 42 | + public CteDefinition getDefinitionByItemUid(String itemUid) { |
| 43 | + return cteDefinitions.get(itemUid); |
| 44 | + } |
46 | 45 |
|
47 |
| - /** |
48 |
| - * Adds a CTE definition to the context. |
49 |
| - * |
50 |
| - * @param programStage The program stage |
51 |
| - * @param item The query item |
52 |
| - * @param cteDefinition The CTE definition (the SQL query) |
53 |
| - * @param offset The calculated offset |
54 |
| - * @param isRowContext Whether the CTE is a row context |
55 |
| - */ |
56 |
| - public void addCTE( |
57 |
| - ProgramStage programStage, |
58 |
| - QueryItem item, |
59 |
| - String cteDefinition, |
60 |
| - int offset, |
61 |
| - boolean isRowContext) { |
62 |
| - String key = computeKey(item); |
63 |
| - if (cteDefinitions.containsKey(key)) { |
64 |
| - cteDefinitions.get(key).getOffsets().add(offset); |
65 |
| - } else { |
66 |
| - var cteDef = new CteDefinition(programStage.getUid(), item.getItemId(), cteDefinition, offset, isRowContext); |
67 |
| - cteDefinitions.put(key, cteDef); |
68 |
| - } |
| 46 | + /** |
| 47 | + * Adds a CTE definition to the context. |
| 48 | + * |
| 49 | + * @param programStage The program stage |
| 50 | + * @param item The query item |
| 51 | + * @param cteDefinition The CTE definition (the SQL query) |
| 52 | + * @param offset The calculated offset |
| 53 | + * @param isRowContext Whether the CTE is a row context |
| 54 | + */ |
| 55 | + public void addCTE( |
| 56 | + ProgramStage programStage, |
| 57 | + QueryItem item, |
| 58 | + String cteDefinition, |
| 59 | + int offset, |
| 60 | + boolean isRowContext) { |
| 61 | + String key = computeKey(item); |
| 62 | + if (cteDefinitions.containsKey(key)) { |
| 63 | + cteDefinitions.get(key).getOffsets().add(offset); |
| 64 | + } else { |
| 65 | + var cteDef = |
| 66 | + new CteDefinition( |
| 67 | + programStage.getUid(), item.getItemId(), cteDefinition, offset, isRowContext); |
| 68 | + cteDefinitions.put(key, cteDef); |
69 | 69 | }
|
| 70 | + } |
70 | 71 |
|
71 |
| - public void addExistsCTE( |
72 |
| - ProgramStage programStage, |
73 |
| - QueryItem item, |
74 |
| - String cteDefinition) { |
75 |
| - var cteDef = new CteDefinition(programStage.getUid(), item.getItemId(), cteDefinition, -999, false) |
76 |
| - .setExists(true); |
77 |
| - cteDefinitions.put( |
78 |
| - programStage.getUid(), |
79 |
| - cteDef); |
80 |
| - } |
| 72 | + public void addExistsCTE(ProgramStage programStage, QueryItem item, String cteDefinition) { |
| 73 | + var cteDef = |
| 74 | + new CteDefinition(programStage.getUid(), item.getItemId(), cteDefinition, -999, false) |
| 75 | + .setExists(true); |
| 76 | + cteDefinitions.put(programStage.getUid(), cteDef); |
| 77 | + } |
81 | 78 |
|
82 |
| - /** |
83 |
| - * Adds a CTE definition to the context. |
84 |
| - * |
85 |
| - * @param programIndicator The program indicator |
86 |
| - * @param cteDefinition The CTE definition (the SQL query) |
87 |
| - */ |
88 |
| - public void addProgramIndicatorCTE(ProgramIndicator programIndicator, String cteDefinition) { |
89 |
| - cteDefinitions.put( |
90 |
| - programIndicator.getUid(), |
91 |
| - new CteDefinition(programIndicator.getUid(), cteDefinition)); |
92 |
| - } |
| 79 | + /** |
| 80 | + * Adds a CTE definition to the context. |
| 81 | + * |
| 82 | + * @param programIndicator The program indicator |
| 83 | + * @param cteDefinition The CTE definition (the SQL query) |
| 84 | + */ |
| 85 | + public void addProgramIndicatorCTE(ProgramIndicator programIndicator, String cteDefinition) { |
| 86 | + cteDefinitions.put( |
| 87 | + programIndicator.getUid(), new CteDefinition(programIndicator.getUid(), cteDefinition)); |
| 88 | + } |
93 | 89 |
|
94 |
| - public void addCTEFilter(QueryItem item, String ctedefinition) { |
95 |
| - String key = computeKey(item); |
96 |
| - if (!cteDefinitions.containsKey(key)) { |
97 |
| - ProgramStage programStage = item.getProgramStage(); |
98 |
| - cteDefinitions.put(key, new CteDefinition(item.getItemId(), |
99 |
| - programStage == null ? null : programStage.getUid(), |
100 |
| - ctedefinition, |
101 |
| - true)); |
102 |
| - } |
| 90 | + public void addCTEFilter(QueryItem item, String ctedefinition) { |
| 91 | + String key = computeKey(item); |
| 92 | + if (!cteDefinitions.containsKey(key)) { |
| 93 | + ProgramStage programStage = item.getProgramStage(); |
| 94 | + cteDefinitions.put( |
| 95 | + key, |
| 96 | + new CteDefinition( |
| 97 | + item.getItemId(), |
| 98 | + programStage == null ? null : programStage.getUid(), |
| 99 | + ctedefinition, |
| 100 | + true)); |
103 | 101 | }
|
| 102 | + } |
104 | 103 |
|
105 |
| - public String getCTEDefinition() { |
106 |
| - if (cteDefinitions.isEmpty()) { |
107 |
| - return ""; |
108 |
| - } |
109 |
| - |
110 |
| - StringBuilder sb = new StringBuilder("WITH "); |
111 |
| - boolean first = true; |
112 |
| - for (Map.Entry<String, CteDefinition> entry : cteDefinitions.entrySet()) { |
113 |
| - if (!first) { |
114 |
| - sb.append(", "); |
115 |
| - } |
116 |
| - CteDefinition cteDef = entry.getValue(); |
117 |
| - sb.append(cteDef.asCteName(entry.getKey())) |
118 |
| - .append(" AS (") |
119 |
| - .append(entry.getValue().getCteDefinition()) |
120 |
| - .append(")"); |
121 |
| - first = false; |
122 |
| - } |
123 |
| - return sb.toString(); |
| 104 | + public String getCTEDefinition() { |
| 105 | + if (cteDefinitions.isEmpty()) { |
| 106 | + return ""; |
124 | 107 | }
|
125 | 108 |
|
126 |
| - // Rename to item uid |
127 |
| - public Set<String> getCTENames() { |
128 |
| - return cteDefinitions.keySet(); |
| 109 | + StringBuilder sb = new StringBuilder("WITH "); |
| 110 | + boolean first = true; |
| 111 | + for (Map.Entry<String, CteDefinition> entry : cteDefinitions.entrySet()) { |
| 112 | + if (!first) { |
| 113 | + sb.append(", "); |
| 114 | + } |
| 115 | + CteDefinition cteDef = entry.getValue(); |
| 116 | + sb.append(cteDef.asCteName(entry.getKey())) |
| 117 | + .append(" AS (") |
| 118 | + .append(entry.getValue().getCteDefinition()) |
| 119 | + .append(")"); |
| 120 | + first = false; |
129 | 121 | }
|
| 122 | + return sb.toString(); |
| 123 | + } |
130 | 124 |
|
131 |
| - public boolean containsCte(String cteName) { |
132 |
| - return cteDefinitions.containsKey(cteName); |
133 |
| - } |
| 125 | + // Rename to item uid |
| 126 | + public Set<String> getCTENames() { |
| 127 | + return cteDefinitions.keySet(); |
| 128 | + } |
134 | 129 |
|
| 130 | + public boolean containsCte(String cteName) { |
| 131 | + return cteDefinitions.containsKey(cteName); |
| 132 | + } |
135 | 133 | }
|
0 commit comments