protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { this.values.Add(constantPlaceholder); this.maxIndex = Math.Max(constantPlaceholder.Index, this.maxIndex); return(base.VisitConstantPlaceholder(constantPlaceholder)); }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholderExpression) { if ((this.options & SqlQueryFormatterOptions.EvaluateConstantPlaceholders) != 0) { return(base.VisitConstantPlaceholder(constantPlaceholderExpression)); } else { this.WriteFormat("$${0}", constantPlaceholderExpression.Index); return(constantPlaceholderExpression); } }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { var result = base.VisitConstant(constantPlaceholder.ConstantExpression); var retval = new SqlConstantPlaceholderExpression(constantPlaceholder.Index, (ConstantExpression)result); if (retval.Type.GetUnwrappedNullableType() == typeof(bool)) { return(new BitBooleanExpression(retval)); } return(retval); }
protected virtual Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { var result = this.VisitConstant(constantPlaceholder.ConstantExpression); if (constantPlaceholder.ConstantExpression != result) { if (!(result is ConstantExpression)) { return(result); } return(new SqlConstantPlaceholderExpression(constantPlaceholder.Index, (ConstantExpression)result)); } return(constantPlaceholder); }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { var nullableType = constantPlaceholder.Type.MakeNullable(); if (nullableType == constantPlaceholder.Type) { this.replacedExpressions.Add(constantPlaceholder); return(new SqlConstantPlaceholderExpression(this.placeholderCount++, Expression.Constant(null, nullableType))); } else { this.replacedExpressions.Add(new SqlConstantPlaceholderExpression(constantPlaceholder.Index, Expression.Constant(constantPlaceholder.ConstantExpression.Value, nullableType))); return(new SqlConstantPlaceholderExpression(this.placeholderCount++, Expression.Constant(null, nullableType))); } }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { if (this.placeholderValues != null) { var retval = Expression.ArrayIndex(this.placeholderValues, Expression.Constant(constantPlaceholder.Index)); return(retval.Type == constantPlaceholder.Type ? retval : (Expression)Expression.Convert(retval, constantPlaceholder.Type)); } else { if (constantPlaceholder.Index < this.placeholderValuesLiteral.Length) { var retval = Expression.Constant(this.placeholderValuesLiteral[constantPlaceholder.Index]); return(retval.Type == constantPlaceholder.Type ? retval : (Expression)Expression.Convert(retval, constantPlaceholder.Type)); } else { return(constantPlaceholder); } } }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { var newLength = this.values.Length; while (constantPlaceholder.Index > newLength - 1) { newLength *= 2; } if (newLength != this.values.Length) { Array.Resize(ref this.values, newLength); } values[constantPlaceholder.Index] = constantPlaceholder.ConstantExpression.Value; if (maxLength < constantPlaceholder.Index + 1) { maxLength = constantPlaceholder.Index + 1; } return(base.VisitConstantPlaceholder(constantPlaceholder)); }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { this.output.AppendFormat("$${0}", constantPlaceholder.Index); return(constantPlaceholder); }
protected IDbCommand BuildUpdateCommandForDeflatedPredicated(TypeDescriptor typeDescriptor, DataAccessObject dataAccessObject, bool valuesPredicated, bool primaryKeysPredicated, List <ObjectPropertyValue> updatedProperties, ObjectPropertyValue[] primaryKeys) { var constantPlaceholdersCount = 0; var assignments = new List <Expression>(); var success = false; var parameter1 = Expression.Parameter(typeDescriptor.Type); var requiresIdentityInsert = dataAccessObject.ToObjectInternal().HasAnyChangedPrimaryKeyServerSideProperties; foreach (var updated in updatedProperties) { var value = updated.Value; var placeholder = updated.Value as Expression; if (placeholder == null) { placeholder = (Expression) new SqlConstantPlaceholderExpression(constantPlaceholdersCount++, Expression.Constant(updated.Value, updated.PropertyType.CanBeNull() ? updated.PropertyType : updated.PropertyType.MakeNullable())); } if (placeholder.Type != updated.PropertyType) { placeholder = Expression.Convert(placeholder, updated.PropertyType); } var m = TypeUtils.GetMethod(() => default(DataAccessObject).SetColumnValue(default(string), default(int))) .GetGenericMethodDefinition() .MakeGenericMethod(typeDescriptor.Type, updated.PropertyType); assignments.Add(Expression.Call(null, m, parameter1, Expression.Constant(updated.PersistedName), placeholder)); } var parameter = Expression.Parameter(typeDescriptor.Type); if (primaryKeys.Length <= 0) { throw new InvalidOperationException("Expected more than 1 primary key"); } Expression where = null; foreach (var primaryKey in primaryKeys) { var value = primaryKey.Value; var placeholder = primaryKey.Value as Expression; if (placeholder == null) { placeholder = new SqlConstantPlaceholderExpression(constantPlaceholdersCount++, Expression.Constant(value, primaryKey.PropertyType.CanBeNull() ? primaryKey.PropertyType : primaryKey.PropertyType.MakeNullable())); } if (placeholder.Type != primaryKey.PropertyType) { placeholder = Expression.Convert(placeholder, primaryKey.PropertyType); } var pathComponents = primaryKey.PropertyName.Split('.'); var propertyExpression = pathComponents.Aggregate <string, Expression>(parameter, Expression.Property); var currentExpression = Expression.Equal(propertyExpression, placeholder); where = where == null ? currentExpression : Expression.And(where, currentExpression); } var predicate = Expression.Lambda(where, parameter); var method = TypeUtils.GetMethod(() => default(IQueryable <DataAccessObject>).UpdateHelper(default(Expression <Action <DataAccessObject> >), requiresIdentityInsert)) .GetGenericMethodDefinition() .MakeGenericMethod(typeDescriptor.Type); var source = Expression.Call(null, MethodInfoFastRef.QueryableWhereMethod.MakeGenericMethod(typeDescriptor.Type), Expression.Constant(this.DataAccessModel.GetDataAccessObjects(typeDescriptor.Type)), Expression.Quote(predicate)); var selector = Expression.Lambda(Expression.Block(assignments), parameter1); var expression = (Expression)Expression.Call(null, method, source, Expression.Quote(selector), Expression.Constant(requiresIdentityInsert)); expression = SqlQueryProvider.Bind(this.DataAccessModel, this.sqlDataTypeProvider, expression); expression = SqlQueryProvider.Optimize(this.DataAccessModel, this.SqlDatabaseContext, expression); var projectionExpression = expression as SqlProjectionExpression; expression = projectionExpression.Select.From; var result = this.SqlDatabaseContext.SqlQueryFormatterManager.Format(expression); IDbCommand command = null; try { command = this.CreateCommand(); command.CommandText = result.CommandText; var cachedValue = new SqlCachedUpdateInsertFormatValue { formatResult = result }; FillParameters(command, cachedValue, null, null); success = true; return(command); } finally { if (!success) { command?.Dispose(); } } }
protected override Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { return(Expression.Convert(Expression.ArrayIndex(this.dynamicParameters, Expression.Constant(constantPlaceholder.Index)), constantPlaceholder.ConstantExpression.Type)); }
protected virtual Expression VisitConstantPlaceholder(SqlConstantPlaceholderExpression constantPlaceholder) { var result = this.VisitConstant(constantPlaceholder.ConstantExpression); return(new SqlConstantPlaceholderExpression(constantPlaceholder.Index, (ConstantExpression)result)); }