Revision 45166
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultCodeBuilder.java | ||
---|---|---|
335 | 335 |
@Override |
336 | 336 |
public void accept(Visitor visitor) throws BaseException { |
337 | 337 |
for( Code arg : this.codes ) { |
338 |
arg.accept(visitor); |
|
338 |
if(arg!=null) { |
|
339 |
arg.accept(visitor); |
|
340 |
} |
|
339 | 341 |
} |
340 | 342 |
} |
341 | 343 |
|
... | ... | |
493 | 495 |
ExpressionBuilder.Function f = builder.function(this.name()); |
494 | 496 |
if( this.parameters()!=null ) { |
495 | 497 |
for (Code parameter : this.parameters()) { |
496 |
f.parameter(parameter.toValue(builder)); |
|
498 |
if (parameter==null) { |
|
499 |
f.parameter(null); |
|
500 |
} else { |
|
501 |
f.parameter(parameter.toValue(builder)); |
|
502 |
} |
|
497 | 503 |
} |
498 | 504 |
} |
499 | 505 |
return f; |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultOptimizer.java | ||
---|---|---|
169 | 169 |
} |
170 | 170 |
|
171 | 171 |
private Code doOptimize(Code code) { |
172 |
if (code==null) { |
|
173 |
return null; |
|
174 |
} |
|
172 | 175 |
switch (code.code()) { |
173 | 176 |
case Code.CALLABLE: |
174 | 177 |
Callable caller = (Callable) code; |
... | ... | |
216 | 219 |
Codes parameters = caller.parameters(); |
217 | 220 |
for (int i = 0; i < parameters.size(); i++) { |
218 | 221 |
Code arg = parameters.get(i); |
219 |
Code newArg = this.doOptimize(arg); |
|
220 |
newArgs.add(newArg); |
|
221 |
if (newArg.code() != Code.CONSTANT) { |
|
222 |
canOptimize = false; |
|
222 |
if (arg==null) { |
|
223 |
newArgs.add(null); |
|
224 |
} else { |
|
225 |
Code newArg = this.doOptimize(arg); |
|
226 |
newArgs.add(newArg); |
|
227 |
if (newArg.code() != Code.CONSTANT) { |
|
228 |
canOptimize = false; |
|
229 |
} |
|
223 | 230 |
} |
224 | 231 |
} |
225 | 232 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/featuretype/FeatureAttributesSelectionPanel.java | ||
---|---|---|
29 | 29 |
public FeatureType getFeatureType(); |
30 | 30 |
|
31 | 31 |
public void setExtraColumns(List<EditableFeatureAttributeDescriptor> extraColumns); |
32 |
|
|
33 |
public void allowCalculatedAttributes(boolean allowCalculated); |
|
32 | 34 |
|
33 | 35 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/featurequery/FeatureQueryCalculatedColumnsPanel.java | ||
---|---|---|
22 | 22 |
public FeatureQuery fetch(); |
23 | 23 |
|
24 | 24 |
public void put(FeatureQuery query); |
25 |
|
|
25 |
|
|
26 | 26 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featurequery/DefaultFeatureQueryGroupByPanel.java | ||
---|---|---|
17 | 17 |
import javax.swing.event.ListSelectionEvent; |
18 | 18 |
import org.apache.commons.io.FilenameUtils; |
19 | 19 |
import org.apache.commons.lang3.StringUtils; |
20 |
import org.gvsig.expressionevaluator.Code; |
|
21 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
22 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LET; |
|
23 | 20 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
24 | 21 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
25 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
26 |
import org.gvsig.expressionevaluator.Formatter; |
|
27 | 22 |
import org.gvsig.expressionevaluator.Function; |
28 | 23 |
import org.gvsig.expressionevaluator.SymbolTable; |
29 | 24 |
import org.gvsig.expressionevaluator.SymbolTableFactory; |
30 |
import org.gvsig.fmap.dal.DALLocator; |
|
31 | 25 |
import org.gvsig.fmap.dal.exception.DataException; |
32 | 26 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
33 | 27 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
... | ... | |
43 | 37 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
44 | 38 |
import org.gvsig.tools.swing.icontheme.IconTheme; |
45 | 39 |
import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryGroupByPanel; |
46 |
import org.gvsig.tools.dataTypes.DataTypes; |
|
47 | 40 |
import org.gvsig.tools.swing.api.FilteredListModel; |
48 | 41 |
|
49 | 42 |
/** |
... | ... | |
120 | 113 |
|
121 | 114 |
toolsSwingManager.translate(this.btnAttributesFilter); |
122 | 115 |
toolsSwingManager.translate(this.tabGroup); |
123 |
|
|
116 |
|
|
124 | 117 |
this.groupByPanel = new DefaultFeatureAttributesSelectionPanel(); |
125 | 118 |
this.groupByPanel.allowCalculatedAttributes(true); |
126 | 119 |
|
... | ... | |
215 | 208 |
for (FeatureAttributeDescriptor attr : featureType) { |
216 | 209 |
model.addElement(attr); |
217 | 210 |
} |
211 |
for (FeatureAttributeDescriptor attr : featureType.getExtraColumns().getColumns()) { |
|
212 |
model.addElement(attr); |
|
213 |
} |
|
214 |
for (EditableFeatureAttributeDescriptor attr : query.getExtraColumn().getColumns()) { |
|
215 |
model.addElement(attr); |
|
216 |
} |
|
218 | 217 |
model.setFilter(this.txtAttributesFilter.getText()); |
219 | 218 |
model.sort(true); |
220 | 219 |
this.lstAttributes.setModel(model); |
... | ... | |
235 | 234 |
query.getGroupByColumns().addAll(this.groupByPanel.getSelectedNames()); |
236 | 235 |
query.getAggregateFunctions().clear(); |
237 | 236 |
query.getAggregateFunctions().putAll(this.query.getAggregateFunctions()); |
238 |
|
|
239 |
List<String> selectedNames = this.groupByPanel.getSelectedNames(); |
|
240 |
for (String selectedName : selectedNames) { |
|
241 |
if (this.featureType.getAttributeDescriptor(selectedName) == null) { |
|
242 |
try { |
|
243 |
Code selectedNameCode = ExpressionUtils.compile(selectedName); |
|
244 |
if (selectedNameCode.code() == Code.CALLABLE) { |
|
245 |
Code.Callable callable = (Code.Callable) selectedNameCode; |
|
246 |
if (callable.name().equalsIgnoreCase(FUNCTION_LET)) { |
|
247 |
String exp = callable.parameters().get(1).toString(); |
|
248 |
String attrNameInExpression = (String) ((ExpressionBuilder.Constant) callable.parameters().get(0).toValue()).value(); |
|
249 |
if (query.getExtraColumn().get(attrNameInExpression)!=null) { |
|
250 |
query.getExtraColumn().remove(attrNameInExpression); |
|
251 |
} |
|
252 |
EditableFeatureAttributeDescriptor newExtraColumn = query.getExtraColumn().add(attrNameInExpression); |
|
253 |
newExtraColumn.setDataType(DataTypes.STRING); |
|
254 |
newExtraColumn.setSize(newExtraColumn.getDataType().getDefaultSize()); |
|
255 |
newExtraColumn.setFeatureAttributeEmulator( |
|
256 |
"current_row().getExtraValue('"+attrNameInExpression+"')"); |
|
257 |
//a?adirlo a las de visualizar |
|
258 |
} |
|
259 |
} |
|
260 |
} catch (Exception ex) { |
|
261 |
throw new RuntimeException("Not able to create column by expression in groupby query", ex); |
|
262 |
} |
|
263 |
} |
|
264 |
} |
|
265 |
|
|
266 | 237 |
|
267 | 238 |
return query; |
268 | 239 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featurequery/DefaultFeatureQueryCalculatedColumnsPanel.java | ||
---|---|---|
62 | 62 |
public class DefaultFeatureQueryCalculatedColumnsPanel |
63 | 63 |
extends DefaultFeatureQueryCalculatedColumnsPanelView |
64 | 64 |
implements FeatureQueryCalculatedColumnsPanel { |
65 |
|
|
66 |
private class AttributeListElement extends ListElement { |
|
67 |
|
|
68 |
public AttributeListElement(FeatureAttributeDescriptor value) { |
|
69 |
super(value.getLabel(), value); |
|
70 |
} |
|
71 |
|
|
72 |
@Override |
|
73 |
public String getLabel() { |
|
74 |
return ((FeatureAttributeDescriptor) this.getValue()).getName(); |
|
75 |
} |
|
76 |
|
|
77 |
} |
|
65 | 78 |
|
66 | 79 |
private class ColumnController implements DocumentListener, ChangeListener, ActionListener { |
67 | 80 |
|
... | ... | |
80 | 93 |
private final JTextComponent txtScale; |
81 | 94 |
|
82 | 95 |
private final Logger LOGGER = LoggerFactory.getLogger(ColumnController.class); |
96 |
private final JButton btnColumnMore; |
|
97 |
private final JButton btnApplyChanges; |
|
83 | 98 |
|
84 | 99 |
public ColumnController( |
85 | 100 |
JTextComponent txtName, |
... | ... | |
91 | 106 |
JButton btnExpressionBookmarks, |
92 | 107 |
JTextComponent txtSize, |
93 | 108 |
JTextComponent txtPrecision, |
94 |
JTextComponent txtScale |
|
109 |
JTextComponent txtScale, |
|
110 |
JButton btnApplyChanges, |
|
111 |
JButton btnColumnMore |
|
95 | 112 |
) { |
96 | 113 |
this.txtName = txtName; |
97 | 114 |
this.cboDataType = cboDataType; |
... | ... | |
103 | 120 |
this.txtSize = txtSize; |
104 | 121 |
this.txtPrecision = txtPrecision; |
105 | 122 |
this.txtScale = txtScale; |
123 |
this.btnApplyChanges = btnApplyChanges; |
|
124 |
this.btnColumnMore = btnColumnMore; |
|
106 | 125 |
this.hasChanges = false; |
107 | 126 |
this.initComponents(); |
108 | 127 |
this.setEnabled(false); |
... | ... | |
184 | 203 |
this.txtSize.setEnabled(enabled); |
185 | 204 |
this.txtPrecision.setEnabled(enabled); |
186 | 205 |
this.txtScale.setEnabled(enabled); |
206 |
this.btnApplyChanges.setEnabled(enabled); |
|
207 |
this.btnColumnMore.setEnabled(enabled); |
|
187 | 208 |
} |
188 | 209 |
|
189 | 210 |
public void clean() { |
... | ... | |
193 | 214 |
this.txtSize.setText(""); |
194 | 215 |
this.txtPrecision.setText(""); |
195 | 216 |
this.txtScale.setText(""); |
217 |
this.btnApplyChanges.setEnabled(false); |
|
218 |
this.btnColumnMore.setEnabled(false); |
|
219 |
this.hasChanges = false; |
|
196 | 220 |
|
197 | 221 |
} |
198 | 222 |
|
... | ... | |
230 | 254 |
} |
231 | 255 |
} |
232 | 256 |
// doEnabledByDataType(); |
257 |
this.btnColumnMore.setEnabled(true); |
|
258 |
this.btnApplyChanges.setEnabled(false); |
|
233 | 259 |
this.hasChanges = false; |
234 | 260 |
} |
235 | 261 |
|
... | ... | |
260 | 286 |
LOGGER.warn("Not able to coerce text to integer from scale box.", ex); |
261 | 287 |
} |
262 | 288 |
this.hasChanges = false; |
289 |
this.btnColumnMore.setEnabled(true); |
|
290 |
this.btnApplyChanges.setEnabled(false); |
|
263 | 291 |
return attr; |
264 | 292 |
} |
265 | 293 |
|
266 | 294 |
private void doHasChanges() { |
295 |
this.btnApplyChanges.setEnabled(true); |
|
267 | 296 |
this.hasChanges = true; |
268 | 297 |
} |
269 | 298 |
|
... | ... | |
374 | 403 |
this.btnColumnExpressionBookmarks, |
375 | 404 |
this.txtColumnSize, |
376 | 405 |
this.txtColumnPrecision, |
377 |
this.txtColumnScale |
|
406 |
this.txtColumnScale, |
|
407 |
this.btnApplyChanges, |
|
408 |
this.btnColumnMore |
|
378 | 409 |
); |
379 | 410 |
// this.lstAttributes.setCellRenderer(new FeatureAttributeListCellRenderer()); |
380 | 411 |
|
... | ... | |
411 | 442 |
}); |
412 | 443 |
|
413 | 444 |
this.btnAdd.addActionListener((ActionEvent e) -> { |
414 |
doAdd(); |
|
445 |
if (checkColumnControllerHasChangesWithUser()) { |
|
446 |
doAdd(); |
|
447 |
} |
|
415 | 448 |
}); |
416 | 449 |
|
417 | 450 |
this.btnRemove.addActionListener((ActionEvent e) -> { |
... | ... | |
433 | 466 |
this.btnColumnMore.addActionListener((ActionEvent e) -> { |
434 | 467 |
doColumnMore(); |
435 | 468 |
}); |
436 |
|
|
469 |
|
|
437 | 470 |
} |
438 | 471 |
|
439 | 472 |
private boolean checkColumnControllerHasChangesWithUser() { |
440 |
if (columnController.hasChanges()) {
|
|
473 |
if (this.hasChanges()) {
|
|
441 | 474 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
442 | 475 |
String message = i18n.getTranslation("_Changes_has_not_been_saved_Are_you_sure_you_want_to_continue"); |
443 | 476 |
String title = i18n.getTranslation("_Changes_not_saved"); |
... | ... | |
532 | 565 |
|
533 | 566 |
@Override |
534 | 567 |
public FeatureQuery fetch(FeatureQuery query) { |
568 |
if (hasChanges()) { |
|
569 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
570 |
String message = i18n.getTranslation("_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue"); |
|
571 |
String title = i18n.getTranslation("_Changes_not_saved"); |
|
572 |
int r = ToolsSwingLocator.getThreadSafeDialogsManager().confirmDialog(message, title, |
|
573 |
JOptionPane.YES_NO_OPTION, |
|
574 |
JOptionPane.QUESTION_MESSAGE); |
|
575 |
if (r == JOptionPane.YES_NO_OPTION) { |
|
576 |
doApplyChanges(); |
|
577 |
} |
|
578 |
} |
|
579 |
|
|
535 | 580 |
if (query == null) { |
536 | 581 |
return this.query.getCopy(); |
537 | 582 |
} |
... | ... | |
564 | 609 |
return; |
565 | 610 |
} |
566 | 611 |
for (EditableFeatureAttributeDescriptor col : cols) { |
567 |
ListElement lf = new ListElement(col.getLabel(), col);
|
|
612 |
ListElement lf = new AttributeListElement(col);
|
|
568 | 613 |
this.lstAttributesModel.addElement(lf); |
569 | 614 |
} |
570 | 615 |
if (this.lstAttributesModel.getSize() > 0) { |
... | ... | |
604 | 649 |
this.columnController.put(newAttr); |
605 | 650 |
this.columnController.setEnabled(true); |
606 | 651 |
|
607 |
this.lstAttributesModel.addElement(new ListElement(newAttr.getName(), newAttr));
|
|
652 |
this.lstAttributesModel.addElement(new AttributeListElement(newAttr));
|
|
608 | 653 |
ListElement.setSelected(this.lstAttributes, newAttr); |
654 |
this.lstAttributes.revalidate(); |
|
655 |
this.lstAttributes.repaint(); |
|
609 | 656 |
this.actualEditableAttribute = newAttr; |
610 | 657 |
|
611 | 658 |
} |
... | ... | |
647 | 694 |
private void doApplyChanges() { |
648 | 695 |
this.columnController.fetch(this.actualEditableAttribute); |
649 | 696 |
this.lstAttributes.invalidate(); |
697 |
this.lstAttributes.repaint(); |
|
650 | 698 |
} |
651 | 699 |
|
652 | 700 |
private void doUp(JList lstColumns) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/DefaultSearchPanel.java | ||
---|---|---|
8 | 8 |
import java.awt.event.ActionListener; |
9 | 9 |
import java.awt.event.ComponentAdapter; |
10 | 10 |
import java.awt.event.ComponentEvent; |
11 |
import java.awt.event.ComponentListener; |
|
12 | 11 |
import java.net.URL; |
13 | 12 |
import java.text.DateFormat; |
14 | 13 |
import java.text.SimpleDateFormat; |
... | ... | |
49 | 48 |
import org.gvsig.fmap.dal.DataStore; |
50 | 49 |
import org.gvsig.fmap.dal.DataStoreProviderFactory; |
51 | 50 |
import org.gvsig.fmap.dal.complements.Search; |
52 |
import org.gvsig.fmap.dal.exception.DataException; |
|
53 | 51 |
import org.gvsig.fmap.dal.feature.Feature; |
54 | 52 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
55 | 53 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
... | ... | |
647 | 645 |
); |
648 | 646 |
return; |
649 | 647 |
} |
650 |
lblMsg.setText("Searching...");
|
|
648 |
lblMsg.setText(ToolsLocator.getI18nManager().getTranslation("_Searching")+"...");
|
|
651 | 649 |
setEnabled(false); |
652 | 650 |
Thread th = new Thread(() -> { |
653 | 651 |
FeatureQuery myQuery = null; |
... | ... | |
969 | 967 |
WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager(); |
970 | 968 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
971 | 969 |
final FeatureAttributesSelectionPanel panel = DALSwingLocator.getManager().createFeatureAttributeSelectionPanel(); |
970 |
panel.allowCalculatedAttributes(false); |
|
972 | 971 |
FeatureType ftype = this.getFeatureType(); |
973 | 972 |
try { |
974 | 973 |
Feature f = store.findFirst(this.parameters.getQuery()); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureAttributesSelectionPanel.java | ||
---|---|---|
46 | 46 |
private FilteredListController availableFieldsController; |
47 | 47 |
private final List<String> selecteds; |
48 | 48 |
private ExpressionPickerController expressionPicker = null; |
49 |
private boolean allowCalculatedAttributes; |
|
49 |
private boolean allowCalculatedAttributes = false;
|
|
50 | 50 |
private List<EditableFeatureAttributeDescriptor> extraColumns; |
51 | 51 |
|
52 | 52 |
public DefaultFeatureAttributesSelectionPanel() { |
... | ... | |
175 | 175 |
return; |
176 | 176 |
} |
177 | 177 |
int n = this.selecteds.indexOf(attr.getLabel()); |
178 |
if( n<1 || n>=this.selecteds.size()-1 ) {
|
|
178 |
if( n<0 || n>=this.selecteds.size()-1 ) {
|
|
179 | 179 |
return; |
180 | 180 |
} |
181 | 181 |
Collections.swap(selecteds, n, n+1); |
... | ... | |
197 | 197 |
} |
198 | 198 |
} |
199 | 199 |
} |
200 |
if (this.extraColumns!=null && !extraColumns.isEmpty()) { |
|
201 |
for (EditableFeatureAttributeDescriptor extraCol : extraColumns) { |
|
202 |
if(extraCol.getName().equalsIgnoreCase(myAttr)) { |
|
203 |
return true; |
|
204 |
} |
|
205 |
} |
|
206 |
} |
|
207 |
|
|
200 | 208 |
return false; |
201 | 209 |
} |
202 | 210 |
|
... | ... | |
342 | 350 |
|
343 | 351 |
if (this.extraColumns!=null && !this.extraColumns.isEmpty()) { |
344 | 352 |
for (FeatureAttributeDescriptor extraCol : this.extraColumns) { |
345 |
if( !this.extraColumns.contains(extraCol.getName()) ) {
|
|
353 |
if( !this.selecteds.contains(extraCol.getName()) ) {
|
|
346 | 354 |
modelAvailables.addElement(extraCol.getName()); |
347 | 355 |
} |
348 | 356 |
} |
... | ... | |
409 | 417 |
theme.registerDefault("DALSwing", icon[0], icon[1], null, url); |
410 | 418 |
} |
411 | 419 |
} |
412 |
|
|
413 |
public void allowCalculatedAttributes(boolean b) { |
|
414 |
this.allowCalculatedAttributes = b; |
|
420 |
|
|
421 |
@Override |
|
422 |
public void allowCalculatedAttributes(boolean allowCalculatedAttributes) { |
|
423 |
this.allowCalculatedAttributes = allowCalculatedAttributes; |
|
424 |
this.btnBookmarks.setVisible(this.allowCalculatedAttributes); |
|
425 |
this.btnHistory.setVisible(this.allowCalculatedAttributes); |
|
426 |
this.btnExpression.setVisible(this.allowCalculatedAttributes); |
|
427 |
this.txtExpression.setVisible(this.allowCalculatedAttributes); |
|
415 | 428 |
} |
416 | 429 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java | ||
---|---|---|
769 | 769 |
|
770 | 770 |
@Override |
771 | 771 |
public String getName() { |
772 |
if (this.name==null) { |
|
773 |
return null; |
|
774 |
} |
|
772 | 775 |
return this.name.name(); |
773 | 776 |
} |
774 | 777 |
|
... | ... | |
1033 | 1036 |
@Override |
1034 | 1037 |
public boolean has_column(String name) { |
1035 | 1038 |
for (SelectColumnBuilder column : columns) { |
1036 |
if (name.equals(column.getName())) {
|
|
1039 |
if (StringUtils.equals(name, column.getName())) {
|
|
1037 | 1040 |
return true; |
1038 | 1041 |
} |
1042 |
if (StringUtils.equals(name, column.getAlias())) { |
|
1043 |
return true; |
|
1044 |
} |
|
1039 | 1045 |
} |
1040 | 1046 |
return false; |
1041 | 1047 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/resources/org/gvsig/fmap/dal/store/h2/count.sql | ||
---|---|---|
7 | 7 |
FROM ( |
8 | 8 |
SELECT COUNT(*) |
9 | 9 |
FROM "PUBLIC"."test" |
10 |
GROUP BY "Long" |
|
11 |
ORDER BY "Long" ASC |
|
10 |
GROUP BY "Long" |
|
12 | 11 |
) as _subquery_alias_ ; |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/CountOperation.java | ||
---|---|---|
109 | 109 |
subselect.where().and(expbuilder.toValue(baseFilter)); |
110 | 110 |
} |
111 | 111 |
|
112 |
FeatureQueryOrder order = query == null ? null : query.getOrder(); |
|
113 |
if (order != null) { |
|
114 |
for (FeatureQueryOrder.FeatureQueryOrderMember member : order.members()) { |
|
115 |
if (member.hasEvaluator()) { |
|
116 |
String sqlorder = member.getEvaluator().getSQL(); |
|
117 |
if (!StringUtils.isEmpty(sqlorder)) { |
|
118 |
subselect.order_by().custom(sqlorder); |
|
119 |
} |
|
120 |
} else { |
|
121 |
subselect.order_by() |
|
122 |
.column(member.getAttributeName()) |
|
123 |
.ascending(member.getAscending()); |
|
124 |
} |
|
125 |
} |
|
126 |
} |
|
127 | 112 |
|
128 | 113 |
List<String> groupbyColumns = query == null ? null : query.getGroupByColumns(); |
129 | 114 |
if (groupbyColumns != null && !groupbyColumns.isEmpty()) { |
... | ... | |
139 | 124 |
try { |
140 | 125 |
try { |
141 | 126 |
Code groupByColumnCode = ExpressionUtils.compile(columnName); |
142 |
if (groupByColumnCode.code() == Code.CALLABLE) { |
|
143 |
Code.Callable callable = (Code.Callable) groupByColumnCode; |
|
144 |
if (callable.name().equalsIgnoreCase(FUNCTION_LET)) { |
|
145 |
Code exp = callable.parameters().get(1); |
|
146 |
Code name = callable.parameters().get(0); |
|
147 |
subselect.column().value(exp.toValue()) |
|
148 |
.as((String) ((Code.Constant) name).value()); |
|
149 |
// nombre que se pone en la parte del groupby debe de ser el nombre de la var del set |
|
150 |
groupByColumnCode = exp; |
|
151 |
} |
|
152 |
} |
|
127 |
// if (groupByColumnCode.code() == Code.CALLABLE) {
|
|
128 |
// Code.Callable callable = (Code.Callable) groupByColumnCode;
|
|
129 |
// if (callable.name().equalsIgnoreCase(FUNCTION_LET)) {
|
|
130 |
// Code exp = callable.parameters().get(1);
|
|
131 |
// Code name = callable.parameters().get(0);
|
|
132 |
// subselect.column().value(exp.toValue())
|
|
133 |
// .as((String) ((Code.Constant) name).value());
|
|
134 |
// // nombre que se pone en la parte del groupby debe de ser el nombre de la var del set
|
|
135 |
// groupByColumnCode = exp;
|
|
136 |
// }
|
|
137 |
// }
|
|
153 | 138 |
subselect.group_by(groupByColumnCode.toValue()); |
154 | 139 |
} catch (Exception ex) { |
155 | 140 |
throw new RuntimeException("Not able to create column by expression in groupby query", ex); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/ResultSetForSetProviderOperation.java | ||
---|---|---|
26 | 26 |
import java.sql.Connection; |
27 | 27 |
import java.util.ArrayList; |
28 | 28 |
import java.util.List; |
29 |
import java.util.Map; |
|
29 | 30 |
import org.apache.commons.lang3.ArrayUtils; |
30 | 31 |
import org.apache.commons.lang3.StringUtils; |
31 | 32 |
import org.gvsig.expressionevaluator.Code; |
32 | 33 |
import org.gvsig.expressionevaluator.Expression; |
33 | 34 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
34 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LET; |
|
35 | 35 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
36 | 36 |
import org.gvsig.fmap.dal.SQLBuilder.SelectBuilder; |
37 | 37 |
import org.gvsig.fmap.dal.exception.DataException; |
... | ... | |
165 | 165 |
} |
166 | 166 |
|
167 | 167 |
if( query !=null && query.hasGroupByColumns() ) { |
168 |
for (Map.Entry<String, String> entry : query.getAggregateFunctions().entrySet()) { |
|
169 |
EditableFeatureAttributeDescriptor attr = query.getExtraColumn().get(entry.getKey()); |
|
170 |
if( attr!=null ) { |
|
171 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
|
172 |
ExpressionBuilder.Function aggregateExp = expbuilder.function(entry.getValue(),exp.getCode().toValue()); |
|
173 |
if (!select.has_column(attr.getName())) { |
|
174 |
select.column().value(aggregateExp).as(attr.getName()); |
|
175 |
} |
|
176 |
if (!extraColumnNames.contains(attr.getName())) { |
|
177 |
extraColumnNames.add(attr.getName()); |
|
178 |
} |
|
179 |
} |
|
180 |
} |
|
168 | 181 |
for(String attrName : query.getGroupByColumns() ) { |
169 | 182 |
if (this.setType.getExtraColumns().get(attrName) != null) { |
170 | 183 |
EditableFeatureAttributeDescriptor attr = this.setType.getExtraColumns().get(attrName); |
171 | 184 |
select.group_by(expbuilder.column(attrName)); |
172 | 185 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
173 |
select.column().value(exp.getCode().toValue()).as(attrName); |
|
174 |
extraColumnNames.add(attrName); |
|
186 |
if (!select.has_column(attrName)) { |
|
187 |
select.column().value(exp.getCode().toValue()).as(attrName); |
|
188 |
} |
|
189 |
if (!extraColumnNames.contains(attr.getName())) { |
|
190 |
extraColumnNames.add(attrName); |
|
191 |
} |
|
175 | 192 |
} else if (setType.get(attrName) == null) { |
176 | 193 |
try { |
177 | 194 |
Code code = ExpressionUtils.compile(attrName); |
178 |
if( code.code()==Code.CALLABLE ) { |
|
179 |
Code.Callable callable = (Code.Callable) code; |
|
180 |
if( callable.name().equalsIgnoreCase(FUNCTION_LET) ) { |
|
181 |
code = callable.parameters().get(1); |
|
182 |
Code name = callable.parameters().get(0); |
|
183 |
select.column().value(callable.parameters().get(1).toValue()) |
|
184 |
.as((String) ((Code.Constant)name).value()); |
|
185 |
extraColumnNames.add((String) ((Code.Constant)name).value()); |
|
186 |
} |
|
187 |
} |
|
188 | 195 |
select.group_by(code.toValue()); |
189 | 196 |
} catch (Exception ex) { |
190 | 197 |
throw new RuntimeException("Not able to create column by expression in groupby query", ex); |
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties | ||
---|---|---|
1475 | 1475 |
_Bring_to_front=Traer al frente |
1476 | 1476 |
_Send_to_back=Enviar al fondo |
1477 | 1477 |
_Move_ahead=Mover adelante |
1478 |
_Move_behind=Mover detr\u00e1s |
|
1478 |
_Move_behind=Mover detr\u00e1s |
|
1479 |
_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue=Hay cambios no guardados.\n\u00bfDesea que se guarden antes de continuar? |
|
1480 |
_Searching=Buscando |
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties | ||
---|---|---|
1395 | 1395 |
_Bring_to_front=Bring to front |
1396 | 1396 |
_Send_to_back=Send to back |
1397 | 1397 |
_Move_ahead=Move ahead |
1398 |
_Move_behind=Move behind |
|
1398 |
_Move_behind=Move behind |
|
1399 |
_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue=Changes has not been saved.\nDo you want to save them before continue? |
|
1400 |
_Searching=Searching |
Also available in: Unified diff