/// <summary> /// Generate the SQL DELETE that deletes a particular row /// </summary> /// <returns></returns> protected override SqlCommandInfo GenerateDeleteRowString() { SqlDeleteBuilder delete = new SqlDeleteBuilder(Factory.Dialect, Factory); delete.SetTableName(qualifiedTableName); if (hasIdentifier) { delete.AddWhereFragment(new string[] { IdentifierColumnName }, IdentifierType, " = "); } else if (HasIndex && !indexContainsFormula) { delete .AddWhereFragment(KeyColumnNames, KeyType, " = ") .AddWhereFragment(IndexColumnNames, IndexType, " = "); } else { string[] cnames = ArrayHelper.Join(KeyColumnNames, ElementColumnNames, elementColumnIsInPrimaryKey); SqlType[] ctypes = ArrayHelper.Join(KeyType.SqlTypes(Factory), ElementType.SqlTypes(Factory), elementColumnIsInPrimaryKey); delete.AddWhereFragment(cnames, ctypes, " = "); } if (Factory.Settings.IsCommentsEnabled) delete.SetComment("delete collection row " + Role); return delete.ToSqlCommandInfo(); }
public void DeleteSqlStringTest() { Configuration cfg = new Configuration(); ISessionFactory factory = cfg.BuildSessionFactory(); ISessionFactoryImplementor factoryImpl = (ISessionFactoryImplementor)factory; SqlDeleteBuilder delete = new SqlDeleteBuilder(factoryImpl.Dialect, factoryImpl); delete.SetTableName("test_delete_builder"); delete.SetIdentityColumn(new string[] { "decimalColumn" }, NHibernateUtil.Decimal); delete.SetVersionColumn(new string[] { "versionColumn" }, (IVersionType)NHibernateUtil.Int32); delete.AddWhereFragment("a=b"); SqlCommandInfo sqlCommand = delete.ToSqlCommandInfo(); string expectedSql = "DELETE FROM test_delete_builder WHERE decimalColumn = ? AND versionColumn = ? AND a=b"; Assert.AreEqual(expectedSql, sqlCommand.Text.ToString(), "SQL String"); SqlType[] actualParameterTypes = sqlCommand.ParameterTypes; Assert.AreEqual(2, actualParameterTypes.Length, "Two parameters"); Assert.AreEqual(SqlTypeFactory.Decimal, actualParameterTypes[0], "firstParam Type"); Assert.AreEqual(SqlTypeFactory.Int32, actualParameterTypes[1], "secondParam Type"); }
// Generate all the SQL /// <summary> /// Generate the SQL that deletes a row by id (and version) /// </summary> /// <returns>A SqlString for a Delete</returns> protected virtual SqlString GenerateDeleteString() { SqlDeleteBuilder deleteBuilder = new SqlDeleteBuilder(factory); deleteBuilder.SetTableName(TableName) .SetIdentityColumn(IdentifierColumnNames, IdentifierType); if (IsVersioned) { deleteBuilder.SetVersionColumn(new string[] { VersionColumnName }, VersionType); } return(deleteBuilder.ToSqlString()); }
/// <inheritdoc /> protected override SqlCommandInfo GenerateDeleteRowString(bool[] columnNullness) { var delete = new SqlDeleteBuilder(Factory.Dialect, Factory); delete.SetTableName(qualifiedTableName); if (hasIdentifier) { delete.AddWhereFragment(new[] { IdentifierColumnName }, IdentifierType, " = "); } else { var useIndex = HasIndex && !indexContainsFormula; var additionalFilterType = useIndex ? IndexType : ElementType; var additionalFilterColumns = useIndex ? IndexColumnNames : ElementColumnNames; var includes = useIndex ? null : Combine(elementColumnIsInPrimaryKey, columnNullness); var cnames = includes == null ? ArrayHelper.Join(KeyColumnNames, additionalFilterColumns) : ArrayHelper.Join(KeyColumnNames, additionalFilterColumns, includes); var ctypes = includes == null ? ArrayHelper.Join(KeyType.SqlTypes(Factory), additionalFilterType.SqlTypes(Factory)) : ArrayHelper.Join(KeyType.SqlTypes(Factory), additionalFilterType.SqlTypes(Factory), includes); delete.AddWhereFragment(cnames, ctypes, " = "); if (columnNullness != null) { for (var i = 0; i < columnNullness.Length; i++) { if (columnNullness[i]) { continue; } delete.AddWhereFragment($"{additionalFilterColumns[i]} is null"); } } } if (Factory.Settings.IsCommentsEnabled) { delete.SetComment("delete collection row " + Role); } return(delete.ToSqlCommandInfo()); }
/// <summary> /// Generate the SQL DELETE that deletes a particular row /// </summary> /// <returns></returns> protected override SqlString GenerateDeleteRowString() { SqlDeleteBuilder delete = new SqlDeleteBuilder(factory); delete.SetTableName(qualifiedTableName); if (hasIdentifier) { delete.AddWhereFragment(rowSelectColumnNames, rowSelectType, " = "); } else { delete.AddWhereFragment(KeyColumnNames, KeyType, " = ") .AddWhereFragment(rowSelectColumnNames, rowSelectType, " = "); } return(delete.ToSqlString()); }