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 MultipleValuesOr()
        {
            // Creating node hierarchy.
            var node = new Node();

            node.Add(new Node("table", "foo"));
            var where = new Node("where");
            var or = new Node("or");

            or.Add(new Node("field1", "value1"));
            or.Add(new Node("field2", "value2"));
            where.Add(or);
            node.Add(where);
            var builder = new SqlDeleteBuilder(node, "'");

            // Extracting SQL + params, and asserting correctness.
            var result = builder.Build();
            var sql    = result.Get <string>();

            Assert.Equal("delete from 'foo' where 'field1' = @0 or 'field2' = @1", sql);
            var arg1 = result.Children.First();

            Assert.Equal("@0", arg1.Name);
            Assert.Equal("value1", arg1.Get <string>());
            var arg2 = result.Children.Skip(1).First();

            Assert.Equal("@1", arg2.Name);
            Assert.Equal("value2", arg2.Get <string>());
        }
Exemple #3
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 #4
0
        /// <summary>
        /// Implementation of your slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to your slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var builder = new SqlDeleteBuilder(input, "'");
            var result  = builder.Build();

            input.Value = result.Value;
            input.Clear();
            input.AddRange(result.Children.ToList());
        }
        /// <summary>
        /// Generate the SQL DELETE that deletes all rows
        /// </summary>
        /// <returns></returns>
        protected override SqlString GenerateDeleteString()
        {
            SqlDeleteBuilder delete = new SqlDeleteBuilder(factory)
                                      .SetTableName(qualifiedTableName)
                                      .SetIdentityColumn(KeyColumnNames, KeyType);

            if (HasWhere)
            {
                delete.AddWhereFragment(sqlWhereString);
            }
            return(delete.ToSqlString());
        }
Exemple #6
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();
        }
        // 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());
        }
Exemple #8
0
        public void WrongBooleanGroup_Throws()
        {
            // Creating node hierarchy.
            var node = new Node();

            node.Add(new Node("table", "foo"));
            var where = new Node("where");
            var and = new Node("xor");

            and.Add(new Node("field1", "value1"));
            where.Add(and);
            node.Add(where);
            var builder = new SqlDeleteBuilder(node, "'");

            Assert.Throws <ArgumentException>(() => builder.Build());
        }
        /// <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());
        }
        private void ConstructBody()
        {
            CSBlock usingBlock     = new CSBlock("using (SqlCommand sqlCommand = new SqlCommand())");
            string  sqlString      = $"{Quotes}{SqlDeleteBuilder.DeleteByColumn(datatable, datacolumn)}{Quotes};";
            string  parameterName  = $"{Quotes}@{datacolumn.ColumnName.Replace(" ","")}{Quotes}";
            string  parameterValue = ProperVarName.Get(datacolumn.ColumnName.ToLower());

            usingBlock.Statements.Add($"sqlCommand.CommandText = {sqlString}");
            if (datacolumn.AllowDBNull)
            {
                parameterValue += " ?? (object)DBNull.Value";
            }

            usingBlock.Statements.Add($"sqlCommand.Parameters.AddWithValue({parameterName}, {parameterValue});");
            usingBlock.Statements.Add($"table.DbAccess.Commands.Add(sqlCommand);");

            this.Statements.Add(usingBlock.ToString());
        }
Exemple #12
0
        private void ConstructBody()
        {
            VBBlock usingBlock     = new VBBlock(VBBlockStatement.Using, "Using sqlCommand As New SqlCommand()");
            string  sqlString      = $"{Quotes}{SqlDeleteBuilder.DeleteByColumn(datatable, datacolumn)}{Quotes}";
            string  parameterName  = $"{Quotes}@{datacolumn.ColumnName.Replace(" ", "")}{Quotes}";
            string  parameterValue = ProperVarName.Get(datacolumn.ColumnName.ToLower());

            usingBlock.Statements.Add($"sqlCommand.CommandText = {sqlString}");
            if (datacolumn.AllowDBNull)
            {
                parameterValue = $"If({parameterValue}, CType(DBNull.Value, Object))";
            }

            usingBlock.Statements.Add($"sqlCommand.Parameters.AddWithValue({parameterName}, {parameterValue})");
            usingBlock.Statements.Add($"table.DbAccess.Commands.Add(sqlCommand)");

            this.Statements.Add(usingBlock.ToString());
        }
        private void ConstructBody()
        {
            VBBlock usingBlock     = new VBBlock(VBBlockStatement.Using, "Using sqlCommand As New SqlCommand()");
            string  sqlString      = $"{Quotes}{SqlDeleteBuilder.DeleteByPrimaryKey(datatable)}{Quotes}";
            string  parameterName  = string.Empty;
            string  parameterValue = string.Empty;

            usingBlock.Statements.Add($"sqlCommand.CommandText = {sqlString}");

            foreach (DataColumn clm in this.datatable.PrimaryKey)
            {
                parameterName  = $"{Quotes}@{clm.ColumnName}{Quotes}";
                parameterValue = GetParameterValue(clm);

                usingBlock.Statements.Add($"sqlCommand.Parameters.AddWithValue({parameterName}, {parameterValue})");
            }

            usingBlock.Statements.Add($"table.DbAccess.Commands.Add(sqlCommand)");

            this.Statements.Add(usingBlock.ToString());
        }
Exemple #14
0
        public void Signal(Node input)
        {
            var builder = new SqlDeleteBuilder(input, _signaler);
            var sqlNode = builder.Build();

            // Checking if this is a "build only" invocation.
            if (builder.IsGenerateOnly)
            {
                input.Value = sqlNode.Value;
                input.Clear();
                input.AddRange(sqlNode.Children.ToList());
                return;
            }

            // Executing SQL, now parametrized.
            Executor.Execute(sqlNode, _connections, _signaler, (cmd) =>
            {
                input.Value = cmd.ExecuteNonQuery();
                input.Clear();
            });
        }
Exemple #15
0
        public MultiTableDeleteExecutor(IStatement statement)
            : base(statement, log)
        {
            if (!Factory.Dialect.SupportsTemporaryTables)
            {
                throw new HibernateException("cannot perform multi-table deletes using dialect not supporting temp tables");
            }

            var deleteStatement = (DeleteStatement)statement;

            FromElement fromElement     = deleteStatement.FromClause.GetFromElement();
            string      bulkTargetAlias = fromElement.TableAlias;

            persister = fromElement.Queryable;

            idInsertSelect = GenerateIdInsertSelect(persister, bulkTargetAlias, deleteStatement.WhereClause);
            log.Debug("Generated ID-INSERT-SELECT SQL (multi-table delete) : {0}", idInsertSelect);

            string[]   tableNames  = persister.ConstraintOrderedTableNameClosure;
            string[][] columnNames = persister.ConstraintOrderedTableKeyColumnClosure;
            string     idSubselect = GenerateIdSubselect(persister);

            deletes = new SqlString[tableNames.Length];
            for (int i = tableNames.Length - 1; i >= 0; i--)
            {
                // TODO : an optimization here would be to consider cascade deletes and not gen those delete statements;
                //      the difficulty is the ordering of the tables here vs the cascade attributes on the persisters ->
                //          the table info gotten here should really be self-contained (i.e., a class representation
                //          defining all the needed attributes), then we could then get an array of those
                SqlDeleteBuilder delete = new SqlDeleteBuilder(Factory.Dialect, Factory)
                                          .SetTableName(tableNames[i])
                                          .SetWhere("(" + string.Join(", ", columnNames[i]) + ") IN (" + idSubselect + ")");
                if (Factory.Settings.IsCommentsEnabled)
                {
                    delete.SetComment("bulk delete");
                }

                deletes[i] = delete.ToSqlString();
            }
        }
        public void BootStrapTheApplication()
        {
            EventStoreDatabaseBootStrapper.BootStrap();
            ReportingDatabaseBootStrapper.BootStrap();

            var bus = new FakeBus();
            ServiceLocator.Bus = bus;
            //var storage = new InMemoryEventStore(bus);
            //var storage = new NHibernateSqliteEventStore(bus, NHibernateSessionHelper.CreateSessionFactory(), new BinaryFormatter());
            var storage = new SqliteEventStore(bus, new BinaryFormatter(), "Data Source=eventStore.db3");

            var rep = new DomainRepository<InventoryItem>(storage);
            var commands = new InventoryCommandHandlers(rep);
            bus.RegisterHandler<CheckInItemsToInventory>(commands.Handle);
            bus.RegisterHandler<CreateInventoryItem>(commands.Handle);
            bus.RegisterHandler<DeactivateInventoryItem>(commands.Handle);
            bus.RegisterHandler<RemoveItemsFromInventory>(commands.Handle);
            bus.RegisterHandler<RenameInventoryItem>(commands.Handle);

            var sqlInsertBuilder = new SqlInsertBuilder();
            var sqlSelectBuilder = new SqlSelectBuilder();
            var sqlUpdateBuilder = new SqlUpdateBuilder();
            var sqlDeleteBuilder = new SqlDeleteBuilder();
            var reportingRepository = new SQLiteReportingRepository("Data Source=reportingDataBase.db3", sqlSelectBuilder,
                                                                    sqlInsertBuilder, sqlUpdateBuilder, sqlDeleteBuilder);
            var detail = new InventoryItemDetailViewHandler(reportingRepository);
            ServiceLocator.ReportingRepository = reportingRepository;
            bus.RegisterHandler<InventoryItemCreated>(detail.Handle);
            bus.RegisterHandler<InventoryItemDeactivated>(detail.Handle);
            bus.RegisterHandler<InventoryItemRenamed>(detail.Handle);
            bus.RegisterHandler<ItemsCheckedInToInventory>(detail.Handle);
            bus.RegisterHandler<ItemsRemovedFromInventory>(detail.Handle);
            var list = new InventoryItemListViewHandler(reportingRepository);
            bus.RegisterHandler<InventoryItemCreated>(list.Handle);
            bus.RegisterHandler<InventoryItemRenamed>(list.Handle);
            bus.RegisterHandler<InventoryItemDeactivated>(list.Handle);
        }
Exemple #17
0
        public void SingleWhere()
        {
            // Creating node hierarchy.
            var node = new Node();

            node.Add(new Node("table", "foo"));
            var where = new Node("where");
            var and = new Node("and");

            and.Add(new Node("field1", "value1"));
            where.Add(and);
            node.Add(where);
            var builder = new SqlDeleteBuilder(node, "'");

            // Extracting SQL + params, and asserting correctness.
            var result = builder.Build();
            var sql    = result.Get <string>();

            Assert.Equal("delete from 'foo' where 'field1' = @0", sql);
            var arg1 = result.Children.First();

            Assert.Equal("@0", arg1.Name);
            Assert.Equal("value1", arg1.Get <string>());
        }
 public void SetUp()
 {
     _sqlDeleteBuilder = new SqlDeleteBuilder();
 }
Exemple #19
0
 public SqlDeleteOperation(SqlDataSet <TEntity> dataSet, IQueryProvider queryProvider) : base(dataSet, queryProvider)
 {
     _queryBuilder = new SqlDeleteBuilder <TEntity>(DataSet.DataModel);
 }
Exemple #20
0
 public void SetUp()
 {
     _sqlDeleteBuilder = new SqlDeleteBuilder();
 }