private String makeQueryTemplate(DBGraph.EntityVertex vertex, String field) { if (vertex.next == null) { String entity = String.format("%s_", vertex.entityClass.getSimpleName()); String vo = vertex.entityClass.getSimpleName(); String key = vertex.previous.dstKey; return String.format("(SELECT %s.%s FROM %s %s WHERE %s.%s %%s %%s)", entity, key, vo, entity, entity, field); } String value = makeQueryTemplate(vertex.next, field); String entity = String.format("%s_", vertex.entityClass.getSimpleName()); String vo = vertex.entityClass.getSimpleName(); String primaryKey = vertex.previous != null ? vertex.previous.dstKey : EntityMetadata.getPrimaryKeyField(vertex.entityClass).getName(); return String.format("(SELECT %s.%s FROM %s %s WHERE %s.%s IN %s)", entity, primaryKey, vo, entity, entity, vertex.srcKey, value); } }
public static Field getPrimaryKeyField(Class clz) { Metadata m = getMetadata(clz); if (m.fieldPrimaryKeys.size() > 1) { throw new CloudRuntimeException(String.format("%s has multiple primary keys", clz)); } return m.fieldPrimaryKeys.get(0); } }
protected void remove(Object k) { Field f = EntityMetadata.getPrimaryKeyField(k.getClass()); try { f.setAccessible(true); sql(String.format("DELETE FROM %s vo WHERE vo.%s = :value", k.getClass().getSimpleName(), f.getName())) .param("value", f.get(k)).execute(); } catch (IllegalAccessException e) { throw new CloudRuntimeException(e); } }
private String createTagPatternSQL(Class invClz, String fieldName, boolean nestedQuery) { ZQLMetadata.InventoryMetadata src = ZQLMetadata.getInventoryMetadataByName(invClz.getName()); String primaryKey = EntityMetadata.getPrimaryKeyField(src.inventoryAnnotation.mappingVOClass()).getName(); boolean reserve = TAG_FALSE_OP.containsKey(operator); String op = reserve ? TAG_FALSE_OP.get(operator) : operator; String subCondition = String.format("pattern.uuid %s ", op + (value == null ? "" : value)); String filterResourceUuidSQL = String.format("SELECT utag.resourceUuid FROM UserTagVO utag, TagPatternVO pattern" + " WHERE %s and utag.tagPatternUuid = pattern.uuid", subCondition); String weather_not_in = reserve ? "NOT" : ""; if (nestedQuery) { return String.format("(SELECT %s.%s FROM %s %s WHERE %s.%s %s IN (%s))", src.simpleInventoryName(), primaryKey, src.inventoryAnnotation.mappingVOClass().getSimpleName(), src.simpleInventoryName(), src.simpleInventoryName(), primaryKey, weather_not_in, filterResourceUuidSQL); } else { return String.format("(%s.%s %s IN (%s))", src.simpleInventoryName(), primaryKey, weather_not_in, filterResourceUuidSQL); } }
String toSQL() { ZQLMetadata.InventoryMetadata metadata = ZQLMetadata.getInventoryMetadataByName(inventoryClass.getName()); if (metadata == null) { throw new CloudRuntimeException(String.format("cannot find InventoryMetadata for class[%s]", inventoryClass)); } Field primaryKey = EntityMetadata.getPrimaryKeyField(metadata.inventoryAnnotation.mappingVOClass()); Class mappingInventoryClass = annotation.mappingClass(); ZQLMetadata.InventoryMetadata mappingInventoryMetadata = ZQLMetadata.getInventoryMetadataByName(mappingInventoryClass.getName()); String mappingEntityName = mappingInventoryClass.getSimpleName(); return String.format("%s.%s IN (SELECT %s.%s FROM %s %s WHERE %s.%s %%s %%s)", inventoryClass.getSimpleName(), primaryKey.getName(), mappingEntityName, annotation.joinColumn().name(), mappingInventoryMetadata.inventoryAnnotation.mappingVOClass().getSimpleName(), mappingEntityName, mappingEntityName, annotation.joinColumn().referencedColumnName()); } }
EntityVertex vertex = new EntityVertex(); vertex.entityClass = src; vertex.srcKey = vertex.dstKey = EntityMetadata.getPrimaryKeyField(src).getName(); vertex.previous = vertex; return vertex;
String primaryKey = EntityMetadata.getPrimaryKeyField(src.inventoryAnnotation.mappingVOClass()).getName(); String tableName = expr.getField().equals(USER_TAG_NAME) ? UserTagVO.class.getSimpleName() : SystemTagVO.class.getSimpleName();
emetadata.targetVOClass = targetInventoryAnnotation.mappingVOClass(); emetadata.targetInventoryClass = gtype; emetadata.selfKeyName = EntityMetadata.getPrimaryKeyField(emetadata.selfVOClass).getName(); emetadata.targetKeyName = queryable.joinColumn().name(); emetadata.name = f.getName();
String primaryKey = EntityMetadata.getPrimaryKeyField(src.inventoryAnnotation.mappingVOClass()).getName();
String primaryKey = EntityMetadata.getPrimaryKeyField(src.inventoryAnnotation.mappingVOClass()).getName(); template = String.format("(%s.%s IN %s)", src.simpleInventoryName(), primaryKey, template); return String.format(template, node.getOperator(), ((ASTNode)node.getValue()).accept(new ValueVisitor()));