Exemple #1
0
        /// <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();
        }
Exemple #2
0
        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");
        }
Exemple #3
0
        /// <summary>
        /// Generate the SQL DELETE that deletes all rows
        /// </summary>
        /// <returns></returns>
        protected override SqlCommandInfo GenerateDeleteString()
        {
            SqlDeleteBuilder delete = new SqlDeleteBuilder(Factory.Dialect, Factory)
                .SetTableName(qualifiedTableName)
                .SetIdentityColumn(KeyColumnNames, KeyType);
            if (HasWhere)
                delete.AddWhereFragment(sqlWhereString);

            if (Factory.Settings.IsCommentsEnabled)
                delete.SetComment("delete collection " + Role);

            return delete.ToSqlCommandInfo();
        }
        /// <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());
        }