public void AddToQuery(AuditConfiguration auditCfg, String entityName, QueryBuilder qb, Parameters parameters) { String propertyName = propertyNameGetter.Get(auditCfg); CriteriaTools.CheckPropertyNotARelation(auditCfg, entityName, propertyName); // This will be the aggregated query, containing all the specified conditions QueryBuilder subQb = qb.NewSubQueryBuilder(); // Adding all specified conditions both to the main query, as well as to the // aggregated one. foreach (IAuditCriterion versionsCriteria in criterions) { versionsCriteria.AddToQuery(auditCfg, entityName, qb, parameters); versionsCriteria.AddToQuery(auditCfg, entityName, subQb, subQb.RootParameters); } // Setting the desired projection of the aggregated query switch (mode) { case AggregatedMode.MIN: subQb.AddProjection("min", propertyName, false); break; case AggregatedMode.MAX: subQb.AddProjection("max", propertyName, false); break; } // Adding the constrain on the result of the aggregated criteria parameters.AddWhere(propertyName, "=", subQb); }
public void AddToQuery(AuditConfiguration auditCfg, String entityName, QueryBuilder qb, Parameters parameters) { String propertyName = propertyNameGetter.Get(auditCfg); CriteriaTools.CheckPropertyNotARelation(auditCfg, entityName, propertyName); CriteriaTools.CheckPropertyNotARelation(auditCfg, entityName, otherPropertyName); parameters.AddWhere(propertyName, op, otherPropertyName); }
public static void AddEntityAtRevision(GlobalConfiguration globalCfg, QueryBuilder qb, Parameters rootParameters, MiddleIdData idData, String revisionPropertyPath, String originalIdPropertyName, String alias1, String alias2) { // SELECT max(e.revision) FROM versionsReferencedEntity e2 QueryBuilder maxERevQb = qb.NewSubQueryBuilder(idData.AuditEntityName, alias2); maxERevQb.AddProjection("max", revisionPropertyPath, false); // WHERE Parameters maxERevQbParameters = maxERevQb.RootParameters; // e2.revision <= :revision maxERevQbParameters.AddWhereWithNamedParam(revisionPropertyPath, "<=", "revision"); // e2.id_ref_ed = e.id_ref_ed idData.OriginalMapper.AddIdsEqualToQuery(maxERevQbParameters, alias1 + "." + originalIdPropertyName, alias2 +"." + originalIdPropertyName); // e.revision = (SELECT max(...) ...) rootParameters.AddWhere("e." + revisionPropertyPath, false, globalCfg.getCorrelatedSubqueryOperator(), maxERevQb); }
public static void AddAssociationAtRevision(QueryBuilder qb, Parameters rootParameters, MiddleIdData referencingIdData, String versionsMiddleEntityName, String eeOriginalIdPropertyPath, String revisionPropertyPath, String originalIdPropertyName, IEnumerable<MiddleComponentData> componentDatas) { // SELECT max(ee2.revision) FROM middleEntity ee2 QueryBuilder maxEeRevQb = qb.NewSubQueryBuilder(versionsMiddleEntityName, "ee2"); maxEeRevQb.AddProjection("max", revisionPropertyPath, false); // WHERE Parameters maxEeRevQbParameters = maxEeRevQb.RootParameters; // ee2.revision <= :revision maxEeRevQbParameters.AddWhereWithNamedParam(revisionPropertyPath, "<=", "revision"); // ee2.originalId.* = ee.originalId.* String ee2OriginalIdPropertyPath = "ee2." + originalIdPropertyName; referencingIdData.PrefixedMapper.AddIdsEqualToQuery(maxEeRevQbParameters, eeOriginalIdPropertyPath, ee2OriginalIdPropertyPath); foreach (MiddleComponentData componentData in componentDatas) { componentData.ComponentMapper.AddMiddleEqualToQuery(maxEeRevQbParameters, eeOriginalIdPropertyPath, ee2OriginalIdPropertyPath); } // ee.revision = (SELECT max(...) ...) rootParameters.AddWhere(revisionPropertyPath, "=", maxEeRevQb); }
public void AddToQuery(AuditConfiguration auditCfg, string entityName, QueryBuilder qb, Parameters parameters) { if (parameterValues.Length == 0) { parameters.AddWhere("1", false, "=", "0", false); return; } var propertyName = propertyNameGetter.Get(auditCfg); var relEntityDesc = CriteriaTools.GetRelatedEntity(auditCfg, entityName, propertyName); if (relEntityDesc == null) { parameters.AddWhereWithParams(propertyName, "in (", parameterValues, ")"); } else { //move to IIdMapper when allowing more id sort of queries later var dic = new Dictionary<QueryParameterData, IList<object>>(); for (var i = 0; i < parameterValues.Length; i++) { var id = relEntityDesc.IdMapper.MapToIdFromEntity(parameterValues[i]); var queryParams = relEntityDesc.IdMapper.MapToQueryParametersFromId(id); foreach (var queryParam in queryParams) { if (i == 0) { dic[queryParam] = new List<object>(); } dic[queryParam].Add(queryParam.Value); } } foreach (var paramNameAndValue in dic) { parameters.AddWhereWithParams(paramNameAndValue.Key.GetProperty(propertyName), "in (", paramNameAndValue.Value.ToArray(), ")"); } } }
public void AddMiddleEqualToQuery(Parameters parameters, string prefix1, string prefix2) { parameters.AddWhere(prefix1 + "." + propertyName, false, "=", prefix2 + "." + propertyName, false); }