@Override public Tree dupNode() { SelectedItemNode result = new SelectedItemNode(token); dupChildren(result); return result; }
public void replaceWithCount(Tree node) { Tree selectedItems = queryTree.getAstSelectedItemsNode(); boolean isDistinct = "distinct".equalsIgnoreCase(selectedItems.getChild(0).getText()); if (!(isDistinct && selectedItems.getChildCount() == 2 || selectedItems.getChildCount() == 1)) throw new IllegalStateException("Cannot replace with count if multiple fields selected"); SelectedItemNode selectedItemNode; if (isDistinct) selectedItems.deleteChild(0); selectedItemNode = (SelectedItemNode) selectedItems.getChild(0); AggregateExpressionNode countNode = createCountNode(node, isDistinct); selectedItemNode.deleteChild(0); selectedItemNode.addChild(countNode); Tree orderBy = queryTree.getAstTree().getFirstChildWithType(JPA2Lexer.T_ORDER_BY); if (orderBy != null) { queryTree.getAstTree().deleteChild(orderBy.getChildIndex()); } queryTree.getAstTree().freshenParentAndChildIndexes(); }
root_2 = (Object)adaptor.becomeRoot(new SelectedItemNode(T_SELECTED_ITEM), root_2);
@Override public CommonTree treeToQueryPre(QueryBuilder sb, List<ErrorRec> invalidNodes) { CommonTree prevNode = getPrevNode(); if (prevNode != null && prevNode instanceof SelectedItemNode) { sb.appendString(", "); } else { sb.appendSpace(); } return super.treeToQueryPre(sb, invalidNodes); } }
public void deductFields(QueryVariableContext queryVC, CommonTree node, DomainModel model) { List children = node.getChildren(); CommonTree T_SELECTED_ITEMS_NODE = (CommonTree) children.get(0); for (Object o : T_SELECTED_ITEMS_NODE.getChildren()) { o = ((SelectedItemNode) o).getChild(0); if (!(o instanceof PathNode)) { throw new RuntimeException("Not a path node"); } PathNode pathNode = (PathNode) o; Pointer pointer = pathNode.resolvePointer(model, queryVC); if (pointer instanceof NoPointer) { queryVC.setEntity(NoJpqlEntityModel.getInstance()); return; } if (pointer instanceof SimpleAttributePointer) { SimpleAttributePointer saPointer = (SimpleAttributePointer) pointer; queryVC.getEntity().addAttributeCopy(saPointer.getAttribute()); } else if (pointer instanceof EntityPointer) { if (T_SELECTED_ITEMS_NODE.getChildren().size() != 1) { //todo implement throw new UnsupportedOperationException("Unimplemented variant with returned array"); } else { queryVC.setEntity(((EntityPointer) pointer).getEntity()); } } } }
root_2 = (Object)adaptor.becomeRoot(new SelectedItemNode(T_SELECTED_ITEM), root_2); adaptor.addChild(root_2, stream_select_item.nextTree()); adaptor.addChild(root_1, root_2);