Commit 4592ab895aa13c843c786a3fe7fa56fa2cc0c741
1 parent
c1164cd0
Implementation of hierarchical query
Showing
2 changed files
with
171 additions
and
101 deletions
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | * you may not use this file except in compliance with the License. |
6 | 6 | * You may obtain a copy of the License at |
7 | 7 | * |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | 9 | * |
10 | 10 | * Unless required by applicable law or agreed to in writing, software |
11 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
... | ... | @@ -60,6 +60,131 @@ import java.util.stream.Collectors; |
60 | 60 | public class DefaultEntityQueryRepository implements EntityQueryRepository { |
61 | 61 | //TODO: rafactoring to protect from SQL injections; |
62 | 62 | private static final Map<EntityType, String> entityTableMap = new HashMap<>(); |
63 | + public static final String SELECT_PHONE = " CASE WHEN entity.entity_type = 'TENANT' THEN (select phone from tenant where id = entity_id)" + | |
64 | + " WHEN entity.entity_type = 'CUSTOMER' THEN (select phone from customer where id = entity_id) END as phone"; | |
65 | + public static final String SELECT_ZIP = " CASE WHEN entity.entity_type = 'TENANT' THEN (select zip from tenant where id = entity_id)" + | |
66 | + " WHEN entity.entity_type = 'CUSTOMER' THEN (select zip from customer where id = entity_id) END as zip"; | |
67 | + public static final String SELECT_ADDRESS_2 = " CASE WHEN entity.entity_type = 'TENANT'" + | |
68 | + " THEN (select address2 from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
69 | + " THEN (select address2 from customer where id = entity_id) END as address2"; | |
70 | + public static final String SELECT_ADDRESS = " CASE WHEN entity.entity_type = 'TENANT'" + | |
71 | + " THEN (select address from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
72 | + " THEN (select address from customer where id = entity_id) END as address"; | |
73 | + public static final String SELECT_CITY = " CASE WHEN entity.entity_type = 'TENANT'" + | |
74 | + " THEN (select city from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
75 | + " THEN (select city from customer where id = entity_id) END as city"; | |
76 | + public static final String SELECT_STATE = " CASE WHEN entity.entity_type = 'TENANT'" + | |
77 | + " THEN (select state from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
78 | + " THEN (select state from customer where id = entity_id) END as state"; | |
79 | + public static final String SELECT_COUNTRY = " CASE WHEN entity.entity_type = 'TENANT'" + | |
80 | + " THEN (select country from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
81 | + " THEN (select country from customer where id = entity_id) END as country"; | |
82 | + public static final String SELECT_TITLE = " CASE WHEN entity.entity_type = 'TENANT'" + | |
83 | + " THEN (select title from tenant where id = entity_id) WHEN entity.entity_type = 'CUSTOMER' " + | |
84 | + " THEN (select title from customer where id = entity_id) END as title"; | |
85 | + public static final String SELECT_LAST_NAME = " CASE WHEN entity.entity_type = 'USER'" + | |
86 | + " THEN (select last_name from tb_user where id = entity_id) END as last_name"; | |
87 | + public static final String SELECT_FIRST_NAME = " CASE WHEN entity.entity_type = 'USER'" + | |
88 | + " THEN (select first_name from tb_user where id = entity_id) END as first_name"; | |
89 | + public static final String SELECT_REGION = " CASE WHEN entity.entity_type = 'TENANT'" + | |
90 | + " THEN (select region from tenant where id = entity_id) END as region"; | |
91 | + public static final String SELECT_EMAIL = " CASE" + | |
92 | + " WHEN entity.entity_type = 'TENANT'" + | |
93 | + " THEN (select email from tenant where id = entity_id)" + | |
94 | + " WHEN entity.entity_type = 'CUSTOMER' " + | |
95 | + " THEN (select email from customer where id = entity_id)" + | |
96 | + " WHEN entity.entity_type = 'USER'" + | |
97 | + " THEN (select email from tb_user where id = entity_id)" + | |
98 | + " END as email"; | |
99 | + public static final String SELECT_CUSTOMER_ID = "CASE" + | |
100 | + " WHEN entity.entity_type = 'TENANT'" + | |
101 | + " THEN UUID('" + TenantId.NULL_UUID + "')" + | |
102 | + " WHEN entity.entity_type = 'CUSTOMER' THEN entity_id" + | |
103 | + " WHEN entity.entity_type = 'USER'" + | |
104 | + " THEN (select customer_id from tb_user where id = entity_id)" + | |
105 | + " WHEN entity.entity_type = 'DASHBOARD'" + | |
106 | + //TODO: parse assigned customers or use contains? | |
107 | + " THEN NULL" + | |
108 | + " WHEN entity.entity_type = 'ASSET'" + | |
109 | + " THEN (select customer_id from asset where id = entity_id)" + | |
110 | + " WHEN entity.entity_type = 'DEVICE'" + | |
111 | + " THEN (select customer_id from device where id = entity_id)" + | |
112 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
113 | + " THEN (select customer_id from entity_view where id = entity_id)" + | |
114 | + " END as customer_id"; | |
115 | + public static final String SELECT_TENANT_ID = "SELECT CASE" + | |
116 | + " WHEN entity.entity_type = 'TENANT' THEN entity_id" + | |
117 | + " WHEN entity.entity_type = 'CUSTOMER'" + | |
118 | + " THEN (select tenant_id from customer where id = entity_id)" + | |
119 | + " WHEN entity.entity_type = 'USER'" + | |
120 | + " THEN (select tenant_id from tb_user where id = entity_id)" + | |
121 | + " WHEN entity.entity_type = 'DASHBOARD'" + | |
122 | + " THEN (select tenant_id from dashboard where id = entity_id)" + | |
123 | + " WHEN entity.entity_type = 'ASSET'" + | |
124 | + " THEN (select tenant_id from asset where id = entity_id)" + | |
125 | + " WHEN entity.entity_type = 'DEVICE'" + | |
126 | + " THEN (select tenant_id from device where id = entity_id)" + | |
127 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
128 | + " THEN (select tenant_id from entity_view where id = entity_id)" + | |
129 | + " END as tenant_id"; | |
130 | + public static final String SELECT_CREATED_TIME = " CASE" + | |
131 | + " WHEN entity.entity_type = 'TENANT'" + | |
132 | + " THEN (select created_time from tenant where id = entity_id)" + | |
133 | + " WHEN entity.entity_type = 'CUSTOMER' " + | |
134 | + " THEN (select created_time from customer where id = entity_id)" + | |
135 | + " WHEN entity.entity_type = 'USER'" + | |
136 | + " THEN (select created_time from tb_user where id = entity_id)" + | |
137 | + " WHEN entity.entity_type = 'DASHBOARD'" + | |
138 | + " THEN (select created_time from dashboard where id = entity_id)" + | |
139 | + " WHEN entity.entity_type = 'ASSET'" + | |
140 | + " THEN (select created_time from asset where id = entity_id)" + | |
141 | + " WHEN entity.entity_type = 'DEVICE'" + | |
142 | + " THEN (select created_time from device where id = entity_id)" + | |
143 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
144 | + " THEN (select created_time from entity_view where id = entity_id)" + | |
145 | + " END as created_time"; | |
146 | + public static final String SELECT_NAME = " CASE" + | |
147 | + " WHEN entity.entity_type = 'TENANT'" + | |
148 | + " THEN (select title from tenant where id = entity_id)" + | |
149 | + " WHEN entity.entity_type = 'CUSTOMER' " + | |
150 | + " THEN (select title from customer where id = entity_id)" + | |
151 | + " WHEN entity.entity_type = 'USER'" + | |
152 | + " THEN (select CONCAT (first_name, ' ', last_name) from tb_user where id = entity_id)" + | |
153 | + " WHEN entity.entity_type = 'DASHBOARD'" + | |
154 | + " THEN (select title from dashboard where id = entity_id)" + | |
155 | + " WHEN entity.entity_type = 'ASSET'" + | |
156 | + " THEN (select name from asset where id = entity_id)" + | |
157 | + " WHEN entity.entity_type = 'DEVICE'" + | |
158 | + " THEN (select name from device where id = entity_id)" + | |
159 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
160 | + " THEN (select name from entity_view where id = entity_id)" + | |
161 | + " END as name"; | |
162 | + public static final String SELECT_TYPE = " CASE" + | |
163 | + " WHEN entity.entity_type = 'USER'" + | |
164 | + " THEN (select authority from tb_user where id = entity_id)" + | |
165 | + " WHEN entity.entity_type = 'ASSET'" + | |
166 | + " THEN (select type from asset where id = entity_id)" + | |
167 | + " WHEN entity.entity_type = 'DEVICE'" + | |
168 | + " THEN (select type from device where id = entity_id)" + | |
169 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
170 | + " THEN (select type from entity_view where id = entity_id)" + | |
171 | + " ELSE entity.entity_type END as type"; | |
172 | + public static final String SELECT_LABEL = " CASE" + | |
173 | + " WHEN entity.entity_type = 'TENANT'" + | |
174 | + " THEN (select title from tenant where id = entity_id)" + | |
175 | + " WHEN entity.entity_type = 'CUSTOMER' " + | |
176 | + " THEN (select title from customer where id = entity_id)" + | |
177 | + " WHEN entity.entity_type = 'USER'" + | |
178 | + " THEN (select CONCAT (first_name, ' ', last_name) from tb_user where id = entity_id)" + | |
179 | + " WHEN entity.entity_type = 'DASHBOARD'" + | |
180 | + " THEN (select title from dashboard where id = entity_id)" + | |
181 | + " WHEN entity.entity_type = 'ASSET'" + | |
182 | + " THEN (select label from asset where id = entity_id)" + | |
183 | + " WHEN entity.entity_type = 'DEVICE'" + | |
184 | + " THEN (select label from device where id = entity_id)" + | |
185 | + " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
186 | + " THEN (select name from entity_view where id = entity_id)" + | |
187 | + " END as label"; | |
63 | 188 | |
64 | 189 | static { |
65 | 190 | entityTableMap.put(EntityType.ASSET, "asset"); |
... | ... | @@ -293,9 +418,14 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
293 | 418 | private String relationQuery(EntityQueryContext ctx, RelationsQueryFilter entityFilter) { |
294 | 419 | EntityId rootId = entityFilter.getRootEntity(); |
295 | 420 | String lvlFilter = getLvlFilter(entityFilter.getMaxLevel()); |
296 | - String selectFields = getSelectCreatedTime() + ", " + getSelectTenantId() + ", " + getSelectCustomerId() + ", " + | |
297 | - " entity.entity_id as id," + getSelectType() + ", " + getSelectName() + ", " + | |
298 | - getSelectLabel() + ", entity.entity_type as entity_type"; | |
421 | + String selectFields = SELECT_TENANT_ID + ", " + SELECT_CUSTOMER_ID | |
422 | + + ", " + SELECT_CREATED_TIME + ", " + | |
423 | + " entity.entity_id as id," | |
424 | + + SELECT_TYPE + ", " + SELECT_NAME + ", " + SELECT_LABEL + ", " + | |
425 | + SELECT_FIRST_NAME + ", " + SELECT_LAST_NAME + ", " + SELECT_EMAIL + ", " + SELECT_REGION + ", " + | |
426 | + SELECT_TITLE + ", " + SELECT_COUNTRY + ", " + SELECT_STATE + ", " + SELECT_CITY + ", " + | |
427 | + SELECT_ADDRESS + ", " + SELECT_ADDRESS_2 + ", " + SELECT_ZIP + ", " + SELECT_PHONE + | |
428 | + ", entity.entity_type as entity_type"; | |
299 | 429 | String from = getQueryTemplate(entityFilter.getDirection()); |
300 | 430 | ctx.addUuidParameter("relation_root_id", rootId.getId()); |
301 | 431 | ctx.addStringParameter("relation_root_type", rootId.getEntityType().name()); |
... | ... | @@ -347,98 +477,6 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
347 | 477 | return from; |
348 | 478 | } |
349 | 479 | |
350 | - private String getSelectCreatedTime() { | |
351 | - return "created_time"; | |
352 | - } | |
353 | - | |
354 | - private String getSelectTenantId() { | |
355 | - return "SELECT CASE" + | |
356 | - " WHEN entity.entity_type = 'TENANT' THEN entity_id" + | |
357 | - " WHEN entity.entity_type = 'CUSTOMER'" + | |
358 | - " THEN (select tenant_id from customer where id = entity_id)" + | |
359 | - " WHEN entity.entity_type = 'USER'" + | |
360 | - " THEN (select tenant_id from tb_user where id = entity_id)" + | |
361 | - " WHEN entity.entity_type = 'DASHBOARD'" + | |
362 | - " THEN (select tenant_id from dashboard where id = entity_id)" + | |
363 | - " WHEN entity.entity_type = 'ASSET'" + | |
364 | - " THEN (select tenant_id from asset where id = entity_id)" + | |
365 | - " WHEN entity.entity_type = 'DEVICE'" + | |
366 | - " THEN (select tenant_id from device where id = entity_id)" + | |
367 | - " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
368 | - " THEN (select tenant_id from entity_view where id = entity_id)" + | |
369 | - " END as tenant_id"; | |
370 | - } | |
371 | - | |
372 | - private String getSelectCustomerId() { | |
373 | - return "CASE" + | |
374 | - " WHEN entity.entity_type = 'TENANT'" + | |
375 | - " THEN UUID('" + TenantId.NULL_UUID + "')" + | |
376 | - " WHEN entity.entity_type = 'CUSTOMER' THEN entity_id" + | |
377 | - " WHEN entity.entity_type = 'USER'" + | |
378 | - " THEN (select customer_id from tb_user where id = entity_id)" + | |
379 | - " WHEN entity.entity_type = 'DASHBOARD'" + | |
380 | - //TODO: parse assigned customers or use contains? | |
381 | - " THEN NULL" + | |
382 | - " WHEN entity.entity_type = 'ASSET'" + | |
383 | - " THEN (select customer_id from asset where id = entity_id)" + | |
384 | - " WHEN entity.entity_type = 'DEVICE'" + | |
385 | - " THEN (select customer_id from device where id = entity_id)" + | |
386 | - " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
387 | - " THEN (select customer_id from entity_view where id = entity_id)" + | |
388 | - " END as customer_id"; | |
389 | - } | |
390 | - | |
391 | - private String getSelectName() { | |
392 | - return " CASE" + | |
393 | - " WHEN entity.entity_type = 'TENANT'" + | |
394 | - " THEN (select title from tenant where id = entity_id)" + | |
395 | - " WHEN entity.entity_type = 'CUSTOMER' " + | |
396 | - " THEN (select title from customer where id = entity_id)" + | |
397 | - " WHEN entity.entity_type = 'USER'" + | |
398 | - " THEN (select CONCAT (first_name, ' ', last_name) from tb_user where id = entity_id)" + | |
399 | - " WHEN entity.entity_type = 'DASHBOARD'" + | |
400 | - " THEN (select title from dashboard where id = entity_id)" + | |
401 | - " WHEN entity.entity_type = 'ASSET'" + | |
402 | - " THEN (select name from asset where id = entity_id)" + | |
403 | - " WHEN entity.entity_type = 'DEVICE'" + | |
404 | - " THEN (select name from device where id = entity_id)" + | |
405 | - " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
406 | - " THEN (select name from entity_view where id = entity_id)" + | |
407 | - " END as name"; | |
408 | - } | |
409 | - | |
410 | - private String getSelectType() { | |
411 | - return " CASE" + | |
412 | - " WHEN entity.entity_type = 'USER'" + | |
413 | - " THEN (select authority from tb_user where id = entity_id)" + | |
414 | - " WHEN entity.entity_type = 'ASSET'" + | |
415 | - " THEN (select type from asset where id = entity_id)" + | |
416 | - " WHEN entity.entity_type = 'DEVICE'" + | |
417 | - " THEN (select type from device where id = entity_id)" + | |
418 | - " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
419 | - " THEN (select type from entity_view where id = entity_id)" + | |
420 | - " ELSE entity.entity_type END as type"; | |
421 | - } | |
422 | - | |
423 | - private String getSelectLabel() { | |
424 | - return " CASE" + | |
425 | - " WHEN entity.entity_type = 'TENANT'" + | |
426 | - " THEN (select title from tenant where id = entity_id)" + | |
427 | - " WHEN entity.entity_type = 'CUSTOMER' " + | |
428 | - " THEN (select title from customer where id = entity_id)" + | |
429 | - " WHEN entity.entity_type = 'USER'" + | |
430 | - " THEN (select CONCAT (first_name, ' ', last_name) from tb_user where id = entity_id)" + | |
431 | - " WHEN entity.entity_type = 'DASHBOARD'" + | |
432 | - " THEN (select title from dashboard where id = entity_id)" + | |
433 | - " WHEN entity.entity_type = 'ASSET'" + | |
434 | - " THEN (select label from asset where id = entity_id)" + | |
435 | - " WHEN entity.entity_type = 'DEVICE'" + | |
436 | - " THEN (select label from device where id = entity_id)" + | |
437 | - " WHEN entity.entity_type = 'ENTITY_VIEW'" + | |
438 | - " THEN (select name from entity_view where id = entity_id)" + | |
439 | - " END as label"; | |
440 | - } | |
441 | - | |
442 | 480 | private String buildWhere(EntityQueryContext ctx, List<EntityKeyMapping> latestFiltersMapping) { |
443 | 481 | String latestFilters = EntityKeyMapping.buildQuery(ctx, latestFiltersMapping); |
444 | 482 | if (!StringUtils.isEmpty(latestFilters)) { | ... | ... |
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | * you may not use this file except in compliance with the License. |
6 | 6 | * You may obtain a copy of the License at |
7 | 7 | * |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | 9 | * |
10 | 10 | * Unless required by applicable law or agreed to in writing, software |
11 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
... | ... | @@ -50,6 +50,7 @@ public class EntityKeyMapping { |
50 | 50 | |
51 | 51 | private static final Map<EntityType, Set<String>> allowedEntityFieldMap = new HashMap<>(); |
52 | 52 | private static final Map<String, String> entityFieldColumnMap = new HashMap<>(); |
53 | + private static final Map<EntityType, Map<String, String>> aliases = new HashMap<>(); | |
53 | 54 | |
54 | 55 | private static final String CREATED_TIME = "createdTime"; |
55 | 56 | private static final String ENTITY_TYPE = "entityType"; |
... | ... | @@ -71,10 +72,10 @@ public class EntityKeyMapping { |
71 | 72 | |
72 | 73 | public static final List<String> commonEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME); |
73 | 74 | public static final List<String> labeledEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME, TYPE, LABEL); |
74 | - public static final List<String> contactBasedEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME, EMAIL, TITLE, COUNTRY, STATE, CITY, ADDRESS, ADDRESS_2, ZIP, PHONE); | |
75 | + public static final List<String> contactBasedEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, EMAIL, TITLE, COUNTRY, STATE, CITY, ADDRESS, ADDRESS_2, ZIP, PHONE); | |
75 | 76 | |
76 | 77 | public static final Set<String> commonEntityFieldsSet = new HashSet<>(commonEntityFields); |
77 | - public static final Set<String> relationQueryEntityFieldsSet = new HashSet<>(Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME, TYPE, LABEL)); | |
78 | + public static final Set<String> relationQueryEntityFieldsSet = new HashSet<>(Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME, TYPE, LABEL, FIRST_NAME, LAST_NAME, EMAIL, REGION, TITLE, COUNTRY, STATE, CITY, ADDRESS, ADDRESS_2, ZIP, PHONE)); | |
78 | 79 | |
79 | 80 | static { |
80 | 81 | allowedEntityFieldMap.put(EntityType.DEVICE, new HashSet<>(labeledEntityFields)); |
... | ... | @@ -110,6 +111,25 @@ public class EntityKeyMapping { |
110 | 111 | entityFieldColumnMap.put(ADDRESS_2, ModelConstants.ADDRESS2_PROPERTY); |
111 | 112 | entityFieldColumnMap.put(ZIP, ModelConstants.ZIP_PROPERTY); |
112 | 113 | entityFieldColumnMap.put(PHONE, ModelConstants.PHONE_PROPERTY); |
114 | + | |
115 | + Map<String, String> contactBasedAliases = new HashMap<>(); | |
116 | + contactBasedAliases.put(NAME, TITLE); | |
117 | + contactBasedAliases.put(LABEL, TITLE); | |
118 | + aliases.put(EntityType.TENANT, contactBasedAliases); | |
119 | + aliases.put(EntityType.CUSTOMER, contactBasedAliases); | |
120 | + Map<String, String> commonEntityAliases = new HashMap<>(); | |
121 | + commonEntityAliases.put(TITLE, NAME); | |
122 | + aliases.put(EntityType.DEVICE, commonEntityAliases); | |
123 | + aliases.put(EntityType.ASSET, commonEntityAliases); | |
124 | + aliases.put(EntityType.ENTITY_VIEW, commonEntityAliases); | |
125 | + aliases.put(EntityType.DASHBOARD, commonEntityAliases); | |
126 | + aliases.put(EntityType.WIDGETS_BUNDLE, commonEntityAliases); | |
127 | + | |
128 | + Map<String, String> userEntityAliases = new HashMap<>(); | |
129 | + userEntityAliases.put(TITLE, EMAIL); | |
130 | + userEntityAliases.put(LABEL, EMAIL); | |
131 | + userEntityAliases.put(NAME, EMAIL); | |
132 | + aliases.put(EntityType.USER, userEntityAliases); | |
113 | 133 | } |
114 | 134 | |
115 | 135 | private int index; |
... | ... | @@ -141,16 +161,28 @@ public class EntityKeyMapping { |
141 | 161 | public String toSelection(EntityFilterType filterType, EntityType entityType) { |
142 | 162 | if (entityKey.getType().equals(EntityKeyType.ENTITY_FIELD)) { |
143 | 163 | Set<String> existingEntityFields; |
164 | + String alias; | |
144 | 165 | if (filterType.equals(EntityFilterType.RELATIONS_QUERY)) { |
145 | 166 | existingEntityFields = relationQueryEntityFieldsSet; |
167 | + alias = entityKey.getKey(); | |
146 | 168 | } else { |
147 | 169 | existingEntityFields = allowedEntityFieldMap.get(entityType); |
148 | 170 | if (existingEntityFields == null) { |
149 | 171 | existingEntityFields = commonEntityFieldsSet; |
150 | 172 | } |
173 | + | |
174 | + Map<String, String> entityAliases = aliases.get(entityType); | |
175 | + if (entityAliases != null) { | |
176 | + alias = entityAliases.get(entityKey.getKey()); | |
177 | + } else { | |
178 | + alias = null; | |
179 | + } | |
180 | + if (alias == null) { | |
181 | + alias = entityKey.getKey(); | |
182 | + } | |
151 | 183 | } |
152 | - if (existingEntityFields.contains(entityKey.getKey())) { | |
153 | - String column = entityFieldColumnMap.get(entityKey.getKey()); | |
184 | + if (existingEntityFields.contains(alias)) { | |
185 | + String column = entityFieldColumnMap.get(alias); | |
154 | 186 | return String.format("e.%s as %s", column, getValueAlias()); |
155 | 187 | } else { |
156 | 188 | return String.format("'' as %s", getValueAlias()); | ... | ... |