Constraint offsetCon, int kind, Map<Object, String> bagTableNames) throws ObjectStoreException { State state = new State(); List<QuerySelectable> selectList = q.getSelect(); if ((selectList.size() == 1) && (selectList.get(0) instanceof ObjectStoreBag)) { return retval.toString(); state.setDb(db); state.setBagTableNames(bagTableNames); buildFromComponent(state, q, schema, bagTableNames); buildWhereClause(state, q, q.getConstraint(), schema); .append(needsDistinct(q) ? "DISTINCT " : "") .append(buildSelectComponent(state, q, schema, kind)) .append(state.getFrom()) .append(state.getWhere()) .append(buildGroupBy(q, schema, state)) .append(state.getHaving()) .append(orderBy); if ((q.getLimit() != Integer.MAX_VALUE) && (kind == QUERY_SUBQUERY_FROM)) {
boolean needWhereComma = state.getWhereBuffer().length() > 0; boolean needHavingComma = state.getHavingBuffer().length() > 0; boolean usingHaving = !q.getGroupBy().isEmpty(); constraints.add(c); boolean[] whs = whereHavingSafe(con, q); if (whs[1] && usingHaving) { StringBuffer buffer = state.getHavingBuffer(); if (needHavingComma) { buffer.append(" AND "); constraintToString(state, buffer, con, q, schema, SAFENESS_SAFE, true); } else if (whs[0]) { StringBuffer buffer = state.getWhereBuffer(); if (needWhereComma) { buffer.append(" AND ");
&& (c.getOp() == ConstraintOp.NOT_IN))) { String indirectTableAlias = state.getIndirectAlias(); // Not really indirection state.addToFrom(INT_BAG_TABLE_NAME + " AS " + indirectTableAlias); buffer.append(" = " + indirectTableAlias + "." + BAGVAL_COLUMN); buffer.append(c.getOp() == ConstraintOp.IN ? "false" : "true"); } else { String bagTableName = state.getBagTableNames().get(c); if (filteredBag.size() < MAX_BAG_INLINE_SIZE || bagTableName == null) { int needComma = 0; && (c.getOp() == ConstraintOp.NOT_IN))) { String indirectTableAlias = state.getIndirectAlias(); // Not really state.addToFrom(bagTableName + " AS " + indirectTableAlias); buffer.append(" = " + indirectTableAlias + ".value"); } else {
FromElement nodeClass = nodeF.getFromElement(); if (state != null) { Map<String, String> aliasMap = state.getFieldToAlias(nodeClass); String classAlias = aliasMap.get(nodeF.getFieldName()); .getName()); SchemaType torqueType = SchemaType.getEnum(torqueTypeName); Platform torquePlatform = PlatformFactory.getPlatformFor(state.getDb().getPlatform() .toLowerCase()); Domain torqueDomain = torquePlatform.getDomainForSchemaType(torqueType); } else if (node instanceof QueryForeignKey) { QueryForeignKey qor = (QueryForeignKey) node; buffer.append(state.getFieldToAlias(qor.getQueryClass()).get(qor.getFieldName())); } else { throw (new ObjectStoreException("Invalid QueryEvaluable: " + node));
FromElement nodeClass = nodeF.getFromElement(); if (state != null) { Map<String, String> aliasMap = state.getFieldToAlias(nodeClass); String classAlias = aliasMap.get(nodeF.getFieldName()); .getName()); SchemaType torqueType = SchemaType.getEnum(torqueTypeName); Platform torquePlatform = PlatformFactory.getPlatformFor(state.getDb().getPlatform() .toLowerCase()); Domain torqueDomain = torquePlatform.getDomainForSchemaType(torqueType); } else if (node instanceof QueryForeignKey) { QueryForeignKey qor = (QueryForeignKey) node; buffer.append(state.getFieldToAlias(qor.getQueryClass()).get(qor.getFieldName())); } else { throw (new ObjectStoreException("Invalid QueryEvaluable: " + node));
String arg1Alias = state.getFieldToAlias(arg1.getQueryClass()).get(arg1Desc.getName()); if (c.getOp().equals(ConstraintOp.IS_NULL) || c.getOp().equals(ConstraintOp .IS_NOT_NULL)) { if (arg2 == null) { ReferenceDescriptor reverse = arg1Desc.getReverseReferenceDescriptor(); String indirectTableAlias = state.getIndirectAlias(); // Not really indirection String arg2Alias = indirectTableAlias + "." + DatabaseUtil.getColumnName(reverse); ClassDescriptor tableMaster = schema.getTableMaster(reverse .getClassDescriptor()); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + indirectTableAlias); buffer.append(loseBrackets ? "" : "("); + arg2Alias + " AND "); } else if (arg1Qcb != null) { Map<String, String> fieldToAlias = state.getFieldToAlias(arg1Qcb); if (fieldToAlias.containsKey("id")) { buffer.append(arg2Alias + " = " + fieldToAlias.get("id") + " AND "); (c.getOp() == ConstraintOp.CONTAINS ? ConstraintOp.IN : ConstraintOp.NOT_IN), arg1Qcb.getIds()); state.getBagTableNames().put(bagCon, state.getBagTableNames().get( arg1Qcb)); bagConstraintToString(state, buffer, bagCon, q, schema, buffer.append(loseBrackets ? "" : ")"); } else {
String arg1Alias = state.getFieldToAlias(arg1.getQueryClass()).get(arg1Desc.getName()); if (c.getOp().equals(ConstraintOp.IS_NULL) || c.getOp().equals(ConstraintOp .IS_NOT_NULL)) { if (arg2 == null) { ReferenceDescriptor reverse = arg1Desc.getReverseReferenceDescriptor(); String indirectTableAlias = state.getIndirectAlias(); // Not really indirection String arg2Alias = indirectTableAlias + "." + DatabaseUtil.getColumnName(reverse); ClassDescriptor tableMaster = schema.getTableMaster(reverse .getClassDescriptor()); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + indirectTableAlias); buffer.append(loseBrackets ? "" : "("); + arg2Alias + " AND "); } else if (arg1Qcb != null) { Map<String, String> fieldToAlias = state.getFieldToAlias(arg1Qcb); if (fieldToAlias.containsKey("id")) { buffer.append(arg2Alias + " = " + fieldToAlias.get("id") + " AND "); (c.getOp() == ConstraintOp.CONTAINS ? ConstraintOp.IN : ConstraintOp.NOT_IN), arg1Qcb.getIds()); state.getBagTableNames().put(bagCon, state.getBagTableNames().get( arg1Qcb)); bagConstraintToString(state, buffer, bagCon, q, schema, buffer.append(loseBrackets ? "" : ")"); } else {
&& (c.getOp() == ConstraintOp.NOT_IN))) { String indirectTableAlias = state.getIndirectAlias(); // Not really indirection state.addToFrom(INT_BAG_TABLE_NAME + " AS " + indirectTableAlias); buffer.append(" = " + indirectTableAlias + "." + BAGVAL_COLUMN); buffer.append(c.getOp() == ConstraintOp.IN ? "false" : "true"); } else { String bagTableName = state.getBagTableNames().get(c); if (filteredBag.size() < MAX_BAG_INLINE_SIZE || bagTableName == null) { int needComma = 0; && (c.getOp() == ConstraintOp.NOT_IN))) { String indirectTableAlias = state.getIndirectAlias(); // Not really state.addToFrom(bagTableName + " AS " + indirectTableAlias); buffer.append(" = " + indirectTableAlias + ".value"); } else {
} else if ((kind == QUERY_FOR_PRECOMP) || (kind == QUERY_FOR_GOFASTER)) { state.addToOrderBy(buffer.toString()); buffer.append(state.getFieldToAlias(ref.getQueryClass()).get(ref .getFieldName())); if (!seen.contains(buffer.toString())) { state.addToOrderBy(buffer.toString()); || (kind == QUERY_FOR_GOFASTER)) && (!schema.isFlatMode(ref.getQueryClass().getType()))) { state.addToOrderBy(buffer.toString()); state.addToOrderBy(buffer.toString()); || (kind == QUERY_FOR_GOFASTER)) && (!schema.isFlatMode(InterMineObject.class))) { state.addToOrderBy(buffer.toString());
Map<String, String> fieldToAlias = state.getFieldToAlias(qc); if (alias == null) { throw new NullPointerException("A QueryClass is referenced by elements of a query," } else { boolean needComma = false; String objectAlias = state.getFieldToAlias(qc).get("OBJECT"); if ((kind != QUERY_SUBQUERY_FROM) && (objectAlias != null)) { buffer.append(objectAlias);
} else if ((kind == QUERY_FOR_PRECOMP) || (kind == QUERY_FOR_GOFASTER)) { state.addToOrderBy(buffer.toString()); buffer.append(state.getFieldToAlias(ref.getQueryClass()).get(ref .getFieldName())); if (!seen.contains(buffer.toString())) { state.addToOrderBy(buffer.toString()); || (kind == QUERY_FOR_GOFASTER)) && (!schema.isFlatMode(ref.getQueryClass().getType()))) { state.addToOrderBy(buffer.toString()); state.addToOrderBy(buffer.toString()); || (kind == QUERY_FOR_GOFASTER)) && (!schema.isFlatMode(InterMineObject.class))) { state.addToOrderBy(buffer.toString());
buffer.append("false"); } else { String bagTableName = state.getBagTableNames().get(c); if (filteredBag.size() < MAX_BAG_INLINE_SIZE || bagTableName == null) { buffer.append("("); if (safeness == SAFENESS_SAFE) { String indirectTableAlias = state.getIndirectAlias(); // Not really indirection state.addToFrom(bagTableName + " AS " + indirectTableAlias); buffer.append("("); boolean needOrComma = false;
Map<String, String> fieldToAlias = state.getFieldToAlias(qc); if (alias == null) { throw new NullPointerException("A QueryClass is referenced by elements of a query," } else { boolean needComma = false; String objectAlias = state.getFieldToAlias(qc).get("OBJECT"); if ((kind != QUERY_SUBQUERY_FROM) && (objectAlias != null)) { buffer.append(objectAlias);
if (sequence == 0) { aliases.add(new ClassDescriptorAndAlias(cld, baseAlias)); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias); if (schema.isTruncated(tableMaster)) { if (state.getWhereBuffer().length() > 0) { state.addToWhere(" AND "); state.addToWhere(baseAlias + ".tableclass = '" + cls.getName() + "'"); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias + "_" + sequence); if (state.getWhereBuffer().length() > 0) { state.addToWhere(" AND "); state.addToWhere(baseAlias + lastAlias + ".id = " + baseAlias + "_" + sequence + ".id"); lastAlias = "_" + sequence; if (schema.isTruncated(tableMaster)) { state.addToWhere(" AND " + baseAlias + "_" + sequence + ".tableclass = '" + cls.getName() + "'"); Map<String, String> fieldToAlias = state.getFieldToAlias(qc); Iterator<FieldDescriptor> fieldIter = null; if (schema.isFlatMode(qc.getType())) { state.addToFrom("(" + generate((Query) fromElement, schema, state.getDb(), null, QUERY_SUBQUERY_FROM, bagTableNames) + ") AS " + DatabaseUtil.generateSqlCompatibleName(q.getAliases().get(fromElement)));
buffer.append("false"); } else { String bagTableName = state.getBagTableNames().get(c); if (filteredBag.size() < MAX_BAG_INLINE_SIZE || bagTableName == null) { buffer.append("("); if (safeness == SAFENESS_SAFE) { String indirectTableAlias = state.getIndirectAlias(); // Not really indirection state.addToFrom(bagTableName + " AS " + indirectTableAlias); buffer.append("("); boolean needOrComma = false;
if (sequence == 0) { aliases.add(new ClassDescriptorAndAlias(cld, baseAlias)); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias); if (schema.isTruncated(tableMaster)) { if (state.getWhereBuffer().length() > 0) { state.addToWhere(" AND "); state.addToWhere(baseAlias + ".tableclass = '" + cls.getName() + "'"); state.addToFrom(DatabaseUtil.getTableName(tableMaster) + " AS " + baseAlias + "_" + sequence); if (state.getWhereBuffer().length() > 0) { state.addToWhere(" AND "); state.addToWhere(baseAlias + lastAlias + ".id = " + baseAlias + "_" + sequence + ".id"); lastAlias = "_" + sequence; if (schema.isTruncated(tableMaster)) { state.addToWhere(" AND " + baseAlias + "_" + sequence + ".tableclass = '" + cls.getName() + "'"); Map<String, String> fieldToAlias = state.getFieldToAlias(qc); Iterator<FieldDescriptor> fieldIter = null; if (schema.isFlatMode(qc.getType())) { state.addToFrom("(" + generate((Query) fromElement, schema, state.getDb(), null, QUERY_SUBQUERY_FROM, bagTableNames) + ") AS " + DatabaseUtil.generateSqlCompatibleName(q.getAliases().get(fromElement)));
buffer.append(state.getFieldToAlias(leftParent.getQueryClass()).get(leftParent .getFieldName())) .append(" = ") .append(state.getFieldToAlias(rightParent.getQueryClass()).get(rightParent .getFieldName())) .append(" AND ");
existing.append(" UNION "); existing.append(generate(subQCQuery, schema, state.getDb(), null, QUERY_SUBQUERY_CONSTRAINT, state.getBagTableNames())); } else { if ((disjunctive && completelyFalse(subC))
Constraint offsetCon, int kind, Map<Object, String> bagTableNames) throws ObjectStoreException { State state = new State(); List<QuerySelectable> selectList = q.getSelect(); if ((selectList.size() == 1) && (selectList.get(0) instanceof ObjectStoreBag)) { return retval.toString(); state.setDb(db); state.setBagTableNames(bagTableNames); buildFromComponent(state, q, schema, bagTableNames); buildWhereClause(state, q, q.getConstraint(), schema); .append(needsDistinct(q) ? "DISTINCT " : "") .append(buildSelectComponent(state, q, schema, kind)) .append(state.getFrom()) .append(state.getWhere()) .append(buildGroupBy(q, schema, state)) .append(state.getHaving()) .append(orderBy); if ((q.getLimit() != Integer.MAX_VALUE) && (kind == QUERY_SUBQUERY_FROM)) {
existing.append(" UNION "); existing.append(generate(subQCQuery, schema, state.getDb(), null, QUERY_SUBQUERY_CONSTRAINT, state.getBagTableNames())); } else { if ((disjunctive && completelyFalse(subC))