/// <summary> /// Ajoute les paramètres d'insertion. /// </summary> /// <param name="bean">Bean à insérér.</param> /// <param name="beanDefinition">Définition du bean.</param> /// <param name="parameters">Paramètres de la commande SQL.</param> /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param> protected void AddInsertParameters(T bean, BeanDefinition beanDefinition, SqlServerParameterCollection parameters, ColumnSelector columnSelector) { if (beanDefinition == null) { throw new ArgumentNullException("beanDefinition"); } foreach (BeanPropertyDescriptor property in beanDefinition.Properties) { if (property.IsPrimaryKey || property.MemberName == null || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName))) { continue; } object value = property.GetValue(bean); if (value != null) { ExtendedValue extValue = value as ExtendedValue; if (extValue != null) { value = extValue.Value; } } IStoreRule rule = this.GetStoreRule(property.PropertyName); ValueRule valueRule = null; if (rule != null) { valueRule = rule.GetInsertValue(value); } if (valueRule != null) { switch (valueRule.Action) { case ActionRule.DoNothing: continue; case ActionRule.Update: value = valueRule.Value; break; default: throw new NotSupportedException(); } } // Ajout du paramètre en entrée de la commande. SqlServerParameter parameter = AddParameter(parameters, property, value); if (property.PrimitiveType == typeof(byte[])) { parameter.DbType = DbType.Binary; } } }
/// <summary> /// Crée la chaîne liée à la clause Where. /// </summary> /// <param name="bean">Bean à mettre à jour.</param> /// <param name="sbUpdateWhere">Clause Where.</param> /// <param name="property">Propriété courante.</param> /// <param name="rule">Règle à appliquer.</param> protected void BuildUpdateWhere(T bean, StringBuilder sbUpdateWhere, BeanPropertyDescriptor property, IStoreRule rule) { if (sbUpdateWhere == null) { throw new ArgumentNullException("sbUpdateWhere"); } if (property == null) { throw new ArgumentNullException("property"); } if (rule == null) { return; } object value = property.GetValue(bean); if (value != null) { ExtendedValue extValue = value as ExtendedValue; if (extValue != null) { value = extValue.Value; } } ValueRule valueRule = rule.GetWhereClause(value); if (valueRule == null) { return; } switch (valueRule.Action) { case ActionRule.Check: sbUpdateWhere.Append(" and ").Append(property.MemberName).Append(" = "); sbUpdateWhere.Append(VariablePrefix).Append("RU_").Append( property.MemberName); break; case ActionRule.DoNothing: break; default: throw new NotSupportedException(); } }
/// <summary> /// Crée la requête SQL d'insertion. /// </summary> /// <param name="beanDefinition">Définition du bean.</param> /// <param name="dbGeneratedPK">True si la clef est générée par la base.</param> /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param> /// <returns>Requête SQL.</returns> private string BuildInsertQuery(BeanDefinition beanDefinition, bool dbGeneratedPK, ColumnSelector columnSelector) { StringBuilder sbInsert = new StringBuilder(CurrentUserStatementLog); sbInsert.Append("insert into "); sbInsert.Append(beanDefinition.ContractName).Append("("); StringBuilder sbValues = new StringBuilder(") values ("); int count = 0; foreach (BeanPropertyDescriptor property in beanDefinition.Properties) { if (dbGeneratedPK && (property.IsPrimaryKey || property.MemberName == null || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName)))) { continue; } IStoreRule rule = this.GetStoreRule(property.PropertyName); if (rule != null) { ValueRule valueRule = rule.GetInsertValue(null); if (valueRule != null && valueRule.Action == ActionRule.DoNothing) { continue; } } if (count > 0) { sbInsert.Append(", "); sbValues.Append(", "); } sbInsert.Append(property.MemberName); sbValues.Append(VariablePrefix); sbValues.Append(property.MemberName); count++; } sbInsert.Append(sbValues.ToString()).Append(")\n"); if (dbGeneratedPK) { sbInsert.Append("select cast(SCOPE_IDENTITY() as int)"); } return(sbInsert.ToString()); }
/// <summary> /// Crée la chaine lié au set. /// </summary> /// <param name="sbUpdateSet">Clause Set.</param> /// <param name="count">Index courant.</param> /// <param name="property">Propriété courante.</param> /// <param name="valueRule">Régle à appliquer.</param> protected void BuildUpdateSet(StringBuilder sbUpdateSet, int count, BeanPropertyDescriptor property, ValueRule valueRule) { if (sbUpdateSet == null) { throw new ArgumentNullException("sbUpdateSet"); } if (property == null) { throw new ArgumentNullException("property"); } if (count > 0) { sbUpdateSet.Append(","); } sbUpdateSet.Append(" ").Append(property.MemberName).Append(" = "); // Insertion de la valeur à mettre à jour if (valueRule == null) { // Si aucune règle n'est associée au champ sbUpdateSet.Append(VariablePrefix).Append(property.MemberName); } else { switch (valueRule.Action) { case ActionRule.Update: sbUpdateSet.Append(VariablePrefix).Append(property.MemberName); break; case ActionRule.IncrementalUpdate: sbUpdateSet.Append(property.MemberName).Append(" + ").Append(VariablePrefix).Append(property.MemberName); break; default: throw new NotSupportedException(); } } }
/// <summary> /// Crée la requête SQL de mise à jour d'un bean. /// </summary> /// <param name="bean">Bean à mettre à jour.</param> /// <param name="beanDefinition">Définition du bean.</param> /// <param name="primaryKey">Définition de la clef primaire.</param> /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param> /// <returns>Requête SQL.</returns> protected string BuildUpdateQuery(T bean, BeanDefinition beanDefinition, BeanPropertyDescriptor primaryKey, ColumnSelector columnSelector) { if (beanDefinition == null) { throw new ArgumentNullException("beanDefinition"); } if (primaryKey == null) { throw new ArgumentNullException("primaryKey"); } StringBuilder sbUpdate = new StringBuilder(CurrentUserStatementLog); sbUpdate.Append("update "); StringBuilder sbUpdateSet = new StringBuilder(beanDefinition.ContractName); sbUpdateSet.Append(" set"); StringBuilder sbUpdateWhere = new StringBuilder(" where "); sbUpdateWhere.Append(primaryKey.MemberName).Append(" = ").Append(VariablePrefix).Append(primaryKey.MemberName); // Construction des champs de l'update SET et du WHERE int count = 0; foreach (BeanPropertyDescriptor property in beanDefinition.Properties) { // Si la propriété est une clé primaire ou n'est pas défini, // on passe à la propriété suivante. if (property.MemberName == null || property.IsPrimaryKey || property.IsReadOnly || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName))) { continue; } // Dans le cas où la règle appliquée au champ n'a pas pour action // DoNothing, le champ est ajouté dans la liste pour être mis à jour. IStoreRule rule = this.GetStoreRule(property.PropertyName); ValueRule valueRule = null; if (rule != null) { object value = property.GetValue(bean); if (value != null) { ExtendedValue extValue = value as ExtendedValue; if (extValue != null) { value = extValue.Value; } } valueRule = rule.GetUpdateValue(value); if (valueRule != null && ActionRule.DoNothing.Equals(valueRule.Action)) { continue; } } BuildUpdateSet(sbUpdateSet, count, property, valueRule); // Contrainte de la valeur à mettre à jour BuildUpdateWhere(bean, sbUpdateWhere, property, rule); count++; } sbUpdate.Append(sbUpdateSet).Append(sbUpdateWhere); return(sbUpdate.ToString()); }
/// <summary> /// Ajoute les paramètres à une commande de mise à jour. /// </summary> /// <param name="bean">Bean à mettre à jour.</param> /// <param name="beanDefinition">Définition du bean.</param> /// <param name="parameters">Paramètres de la commande SQL.</param> /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param> protected void AddUpdateParameters(T bean, BeanDefinition beanDefinition, SqlServerParameterCollection parameters, ColumnSelector columnSelector) { if (beanDefinition == null) { throw new ArgumentNullException("beanDefinition"); } if (parameters == null) { throw new ArgumentNullException("parameters"); } foreach (BeanPropertyDescriptor property in beanDefinition.Properties) { if (property.MemberName == null || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName) && !property.IsPrimaryKey)) { continue; } object value = property.GetValue(bean); if (value != null) { ExtendedValue extValue = value as ExtendedValue; if (extValue != null) { value = extValue.Value; } } if (property.IsPrimaryKey) { AddPrimaryKeyParameter(parameters, property.MemberName, value); } IStoreRule rule = this.GetStoreRule(property.PropertyName); ValueRule valueRule = null; if (rule != null) { valueRule = rule.GetUpdateValue(value); if (valueRule != null && valueRule.Action == ActionRule.DoNothing) { continue; } } if (valueRule == null) { // Ajout du paramètre en entrée de la commande envoyée à SQL Server. SqlServerParameter parameter = AddParameter(parameters, property, value); if (property.PrimitiveType == typeof(byte[])) { parameter.DbType = DbType.Binary; } } else { parameters.AddWithValue(property.MemberName, valueRule.Value); } // Contrainte de la valeur à mettre à jour if (rule != null) { valueRule = rule.GetWhereClause(value); if (valueRule != null && valueRule.Action != ActionRule.DoNothing) { parameters.AddWithValue("RU_" + property.MemberName, valueRule.Value); } } } }