/// <summary> /// Converts the SimpleExpression to a <see cref="SqlString"/>. /// </summary> /// <returns>A SqlString that contains a valid Sql fragment.</returns> public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { SqlString[] columnNames = CriterionUtil.GetColumnNamesForSimpleExpression( propertyName, _projection, criteriaQuery, criteria, enabledFilters, this, value); Parameter[] parameters = criteriaQuery.NewQueryParameter(GetParameterTypedValue(criteria, criteriaQuery)).ToArray(); if (ignoreCase) { if (columnNames.Length != 1) { throw new HibernateException( "case insensitive expression may only be applied to single-column properties: " + propertyName); } return(new SqlStringBuilder(6) .Add(criteriaQuery.Factory.Dialect.LowercaseFunction) .Add(StringHelper.OpenParen) .Add(columnNames[0]) .Add(StringHelper.ClosedParen) .Add(Op) .Add(parameters.Single()) .ToSqlString()); } else { SqlStringBuilder sqlBuilder = new SqlStringBuilder(4 * columnNames.Length); for (int i = 0; i < columnNames.Length; i++) { if (i > 0) { sqlBuilder.Add(" and "); } sqlBuilder.Add(columnNames[i]) .Add(Op) .Add(parameters[i]); } return(sqlBuilder.ToSqlString()); } }
/// <summary> /// Converts the SimpleExpression to a <see cref="SqlString"/>. /// </summary> /// <returns>A SqlString that contains a valid Sql fragment.</returns> public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { SqlString[] columnNames = CriterionUtil.GetColumnNamesForSimpleExpression( propertyName, _projection, criteriaQuery, criteria, enabledFilters, this, value); TypedValue typedValue = GetParameterTypedValue(criteria, criteriaQuery); Parameter[] parameters = criteriaQuery.NewQueryParameter(typedValue).ToArray(); if (ignoreCase) { if (columnNames.Length != 1) { throw new HibernateException( "case insensitive expression may only be applied to single-column properties: " + propertyName); } return(new SqlString( criteriaQuery.Factory.Dialect.LowercaseFunction, StringHelper.OpenParen, columnNames[0], StringHelper.ClosedParen, Op, parameters.Single())); } else { SqlStringBuilder sqlBuilder = new SqlStringBuilder(4 * columnNames.Length); var columnNullness = typedValue.Type.ToColumnNullness(typedValue.Value, criteriaQuery.Factory); if (columnNullness.Length != columnNames.Length) { throw new AssertionFailure("Column nullness length doesn't match number of columns."); } for (int i = 0; i < columnNames.Length; i++) { if (i > 0) { sqlBuilder.Add(" and "); } if (columnNullness[i]) { sqlBuilder.Add(columnNames[i]) .Add(Op) .Add(parameters[i]); } else { sqlBuilder.Add(columnNames[i]) .Add(" is null "); } } return(sqlBuilder.ToSqlString()); } }