@Override public void visitSelectClause(SelectClause selectClause) { SchemaManager schemaManager = Framework.getService(SchemaManager.class); for (int i = 0; i < selectClause.getSelectList().size(); i++) { Operand op = selectClause.get(i); if (!(op instanceof Reference)) { // ignore it continue; } String name = ((Reference) op).name; Field field = schemaManager.getField(name); fieldsAndTypes.put(name, field == null ? null : field.getType()); } } });
if (selectClause.isEmpty()) { selectClause.add(new Reference(NXQL.ECM_UUID)); boolean selectStar = selectClause.getSelectList().size() == 1 && (selectClause.get(0).equals(new Reference(NXQL.ECM_UUID))); boolean distinct = selectClause.isDistinct(); if (selectStar && queryAnalyzer.hasWildcardIndex) { distinct = true; selectClause.add(new Reference(NXQL.ECM_FULLTEXT_SCORE)); reAnalyze = true; selectClause.add(new Reference(name)); selectClause.accept(whereBuilder); whatColumns = whereBuilder.whatColumns; whatKeys = whereBuilder.whatKeys;
protected void walkProjection() { projection = new Document(); boolean projectionOnFulltextScore = false; for (Operand op : selectClause.getSelectList().values()) { if (!(op instanceof Reference)) { throw new QueryParseException("Projection not supported: " + op); } FieldInfo fieldInfo = walkReference((Reference) op); String propertyField = fieldInfo.prop; if (!propertyField.equals(NXQL.ECM_UUID) // && !propertyField.equals(fieldInfo.projectionField) // && !propertyField.contains("/")) { propertyKeys.put(fieldInfo.projectionField, propertyField); } projection.put(fieldInfo.projectionField, ONE); if (propertyField.contains("*")) { projectionHasWildcard = true; } if (fieldInfo.projectionField.equals(KEY_FULLTEXT_SCORE)) { projectionOnFulltextScore = true; } } if (projectionOnFulltextScore || sortOnFulltextScore) { if (!hasFulltext) { throw new QueryParseException(NXQL.ECM_FULLTEXT_SCORE + " cannot be used without " + NXQL.ECM_FULLTEXT); } projection.put(KEY_FULLTEXT_SCORE, new Document(MONGODB_META, MONGODB_TEXT_SCORE)); } }