コード例 #1
0
        public override object VisitDeleteStatement([NotNull] MiniSQLParser.DeleteStatementContext context)
        {
            Expression      exp       = (Expression)Visit(context.whereClause());
            string          tableName = context.tableRef().GetText();
            DeleteStatement obj       = new DeleteStatement();

            obj.TableName = tableName;
            obj.Condition = exp;
            return(obj);
        }
コード例 #2
0
        public void Basic_Delete_Statement()
        {
            // Exercise
            DeleteStatement statement = ParserFactory.Execute <DeleteStatement>("delete from dbo.table").First();

            // Verify outcome
            Assert.IsNotNull(statement);
            Assert.AreEqual("dbo.table", statement.From.First().Name);
            Assert.AreEqual(null, statement.TableName);
        }
コード例 #3
0
 private void DeleteObject(object obj, IList <ModificationStatement> statements)
 {
     if (mappings.TryGetValue(obj.GetType(), out var mapping))
     {
         string alias     = null;
         var    statement = new DeleteStatement(mapping.Table, alias);
         SetupUpdateDeleteStatement(statement, obj, mapping, alias);
         statements.Add(statement);
     }
 }
コード例 #4
0
        protected int DeleteRows(string table_name)
        {
            DataTable         myTable = this.Tables[table_name];
            DataRowCollection rows    = myTable.Rows;
            int rowsCount             = rows.Count;
            int rowsAffected          = 0;

            if (rowsCount == 0)
            {
                return(0);
            }

            DeleteStatement cmd = new DeleteStatement(myTable.ExtendedProperties["Storage"].ToString());

            cmd.ConnectionStringName = _connectionStringName;
            List <SqlParameter> prmlist = new List <SqlParameter>();
            int    colsCount            = myTable.Columns.Count;
            int    keys     = 0;
            string identcol = String.Empty;

            for (int c = 0; c < colsCount; c++)
            {
                DataColumn col = myTable.Columns[c];

                if (col.ExtendedProperties["PrimaryKey"] != null)
                {
                    SqlParameter prm = new SqlParameter(col.ColumnName, col.DataType);
                    prmlist.Add(prm);
                    cmd.Where(Condition.IsEqual(col.ExtendedProperties["Storage"].ToString(), prm));
                    keys++;
                }
            }

            List <DataRow> toDelete = new List <DataRow>();

            foreach (DataRow row in myTable.Rows)
            {
                if (row.RowState == DataRowState.Deleted)
                {
                    for (int p = 0; p < keys; p++)
                    {
                        SqlParameter prm = prmlist[p];
                        prm.Value = row[prm.Name, DataRowVersion.Original];
                    }

                    cmd.Execute();
                    toDelete.Add(row);
                    rowsAffected++;
                }
            }
            toDelete.ForEach(delegate(DataRow row) { row.AcceptChanges(); });


            return(rowsAffected);
        }
コード例 #5
0
        public int Delete(DeleteStatement <TEntity> deleteQuery)
        {
            Check.NotNull(deleteQuery, nameof(deleteQuery));

            (string query, IEnumerable <object> parameters) = _queryTranslator.TranslateQuery(deleteQuery);

            return(_queryProcessor.ExecuteCommand(
                       query: query,
                       parameters: parameters
                       ));
        }
コード例 #6
0
        public override void Visit(DeleteStatement node)
        {
            var whereClauseVisitor = new WhereClauseVisitor();

            node.Accept(whereClauseVisitor);

            if (whereClauseVisitor.whereClausefound)
            {
                errorCallback(RULE_NAME, "Delete " + RULE_TEXT, node.StartLine, GetColumnNumber(node));
            }
        }
コード例 #7
0
ファイル: SqlWriter.cs プロジェクト: alistair-singh/tsqlc
        public void Visit(DeleteStatement statement)
        {
            Write("DELETE  ");
            WriteTop(statement.TopExpression);

            using (Indent(8))
                statement.Target.Accept(this);

            Write(statement.FromList);
            WriteWhereClause(statement.WhereClause);
        }
コード例 #8
0
        /// <summary>
        /// Renders DELETE statement.
        /// </summary>
        /// <param name="delete">DELETE statement to render.</param>
        /// <param name="dbms">Target DBMS.</param>
        /// <param name="output">StringBuilder to which SQL is appended.</param>
        /// <param name="parameters">SQL parameter collection to which the object's and its children's
        /// parameters are added. After the rendering is done the collection contains all parameters with unique names.</param>
        public void Render(DeleteStatement delete, DbmsType dbms, StringBuilder output, DbParameterCollection parameters)
        {
            output.Append("DELETE FROM ");
            delete.FromTable.RenderTableName(dbms, output);

            if (delete.Where != null && !delete.Where.IsEmpty)
            {
                output.Append(" WHERE ");
                delete.Where.Render(dbms, output, parameters);
            }
        }
コード例 #9
0
        public void ConstructorShouldAssignPredicate()
        {
            // Arrange
            Expression <Func <Exception, bool> > predicate = ex => ex.Message == "test";

            // Act
            var deleteStatement = new DeleteStatement <Exception>(predicate);

            // Assert
            Assert.Same(predicate, deleteStatement.Predicate);
        }
コード例 #10
0
        public void ConstructorShouldAcceptNullPredicate()
        {
            // Arrage
            Expression <Func <Exception, bool> > predicate = null;

            // Act an Assert
            var statement = new DeleteStatement <Exception>(predicate);

            // Assert
            Assert.Null(statement.Predicate);
        }
コード例 #11
0
 public override void ExplicitVisit(DeleteStatement node)
 {
     if (node.DeleteSpecification != null && node.DeleteSpecification.OutputClause != null)
     {
         SelectElementVisitor vstor = new SelectElementVisitor(resolveColumnType, columnTypeResolver, node);
         node.DeleteSpecification.OutputClause.Accept(vstor);
         if (vstor.HasOutput)
         {
             resultHasOutputResultSet.Add(vstor.ResultOutput);
         }
     }
 }
コード例 #12
0
    private List <IPlanStep> GetWhereClauseSteps(DeleteStatement statement)
    {
        var result = new List <IPlanStep>();

        if (statement.HasWhereClause)
        {
            var whereGenerator = new WhereClausePlanGenerator(_process, _level);
            result.AddRange(whereGenerator.GetPlanSteps(statement.WhereClause));
        }

        return(result);
    }
コード例 #13
0
ファイル: TransactionBody.cs プロジェクト: drogozh/ceql
        /// <summary>
        /// Deletes records using boolean expression
        /// <summary>
        public virtual void Delete <T>(Expression <BooleanExpression <T> > expression)
        {
            var whereClause = new WhereClause <T>(new FromClause <T>(), expression);
            var model       = new DeleteStatement <T>(whereClause).Model;
            // todo: hack, refactor
            var sql = "DELETE FROM T0 USING " + model.FromSql.Replace("FROM", "") + " " + model.WhereSql;

            using (var command = _transaction.Connection.CreateCommand()){
                command.CommandText = sql;
                command.ExecuteScalar();
            }
        }
コード例 #14
0
        public void ExecuteTest_Into_No_Table()
        {
            string             sql        = string.Format("DELETE FROM ");
            IList <IStatement> statements = ParserFactory.Execute(sql);

            Assert.AreEqual(1, statements.Count);
            IStatement      actualStatement = statements[0];
            DeleteStatement actual          = actualStatement as DeleteStatement;

            Assert.IsNotNull(actual);
            Assert.AreEqual(0, actual.Tables.Count);
        }
コード例 #15
0
        public static int Delete <T>(this IQueryable <T> queryable)
            where T : class
        {
            // Resolve service
            var serviceFactory = new ServiceFactory <T>(queryable);
            ICommandService <T> commandService = serviceFactory.CreateCommandService();

            // Execute Query
            var query = new DeleteStatement <T>(IQueryableHelper.GetQueryPredicate(queryable));

            return(commandService.Delete(query));
        }
コード例 #16
0
ファイル: SqlHelper.cs プロジェクト: E024/Swifter
        public static int ExecuteDeleteBuild(this Database database, Table table, Action <DeleteStatement> action, DbTransaction dbTransaction = null, int commandTimeout = CommandTimeout)
        {
            var builder = database.CreateSQLBuilder();

            var delete = new DeleteStatement(table);

            action(delete);

            builder.BuildDeleteStatement(delete);

            return(database.ExecuteNonQuery(builder.ToSQL(), dbTransaction, commandTimeout));
        }
コード例 #17
0
ファイル: RealSQLParser.cs プロジェクト: laszlo-kiss/Dataphor
        /*
         *      BNF:
         *      <delete statement> ::=
         *              delete <table identifier>
         *                      [<where clause>]
         */
        protected Statement DeleteStatement(Lexer lexer)
        {
            DeleteStatement statement = new DeleteStatement();

            lexer.NextToken();
            statement.DeleteClause = new DeleteClause();
            statement.DeleteClause.TableExpression = new TableExpression(QualifiedIdentifier(lexer));
            if (lexer.PeekTokenSymbol(1) == Keywords.Where)
            {
                statement.WhereClause = WhereClause(lexer);
            }
            return(statement);
        }
コード例 #18
0
        public override void Visit(DeleteStatement deleteStatement)
        {
            var tableRef = deleteStatement.DeleteSpecification.Target.ToTableReferenceModel();

            if (tableRef == null)
            {
                return;
            }
            var result = CreateNewResult(TSqlTokenType.Delete);

            ExtractNamedTableReference(tableRef, result);
            StoreResult(result);
        }
コード例 #19
0
        protected void AddValueDeleteStatement(IValue value, ValueInfo valueInfo)
        {
            var builder = new ComplexCommandBuilder();

            var idParameter = value.Id.ToParameter();

            builder.AddParameter(idParameter);
            var whereClause = string.Format("{0}.{1} = {2}", valueInfo.Name, valueInfo.Identifer.Name, idParameter.Name);
            var statement   = new DeleteStatement(valueInfo.Name, whereClause);

            builder.AddStatement(statement);
            Add(builder);
        }
コード例 #20
0
        public virtual CommandDefinition ToDeleteStatement(DeleteStatement statement)
        {
            var query = new StringBuilder("DELETE FROM ");

            query.Append(statement.TableName);
            if (statement.WhereExpression.Length > 0)
            {
                query.Append(" WHERE ");
                query.Append(statement.WhereExpression);
            }

            return(new CommandDefinition(query.ToString(), statement.Parameters));
        }
コード例 #21
0
        protected override DeleteStatement <TestEntity> CreateStatement(IStatementExecutor statementExecutor,
                                                                        IEntityMapper entityMapper,
                                                                        IWritablePropertyMatcher writablePropertyMatcher,
                                                                        ISelectClauseBuilder selectClauseBuilder,
                                                                        IFromClauseBuilder fromClauseBuilder,
                                                                        IWhereClauseBuilder whereClauseBuilder,
                                                                        ISqlConnectionProvider connectionProvider)
        {
            var statement = new DeleteStatement <TestEntity>(statementExecutor, entityMapper, whereClauseBuilder);

            statement.UseConnectionProvider(connectionProvider);
            return(statement);
        }
コード例 #22
0
ファイル: TransactionBody.cs プロジェクト: drogozh/ceql
        /// <summary>
        /// Generates and executes DELETE statement for each
        /// entity in the entities collection
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entities"></param>
        public virtual void Delete <T>(IEnumerable <T> entities)
        {
            var model = new DeleteStatement <T>().Model;

            using (var command = _transaction.Connection.CreateCommand())
            {
                foreach (var entity in entities)
                {
                    command.CommandText = model.ApplyParameters(entity);
                    command.ExecuteScalar();
                }
            }
        }
コード例 #23
0
        private TSqlStatement BuildDelete(InsertSpecification originalInsert)
        {
            var delete = new DeleteStatement();

            delete.WithCtesAndXmlNamespaces = new WithCtesAndXmlNamespaces();
            var cte = new CommonTableExpression();

            cte.ExpressionName = new Identifier()
            {
                Value = "to_delete"
            };

            cte.QueryExpression = BuildNewRowSource(originalInsert);
            delete.WithCtesAndXmlNamespaces.CommonTableExpressions.Add(cte);

            delete.DeleteSpecification = new DeleteSpecification();
            var tableName = new SchemaObjectName();

            tableName.Identifiers.Add(new Identifier()
            {
                Value = "to_delete"
            });

            delete.DeleteSpecification.Target = new NamedTableReference()
            {
                SchemaObject = tableName
            };
            var outputInto = delete.DeleteSpecification.OutputIntoClause = new OutputIntoClause();

            var deletedTable = new MultiPartIdentifier();

            deletedTable.Identifiers.Add(new Identifier()
            {
                Value = "deleted"
            });

            outputInto.SelectColumns.Add(new SelectStarExpression()
            {
                Qualifier = deletedTable
            });

            outputInto.IntoTable = originalInsert.Target;
            foreach (var col in originalInsert.Columns)
            {
                outputInto.IntoTableColumns.Add(col);
            }

            return(delete);
        }
コード例 #24
0
        protected override Task <int> DoDeleteAsync(string executableSql, Dict executableParams)
        {
            DeleteStatement executableStatement = new DeleteStatement(this.database, executableSql);
            var             memoryTable         = executableStatement.StatementFromRefs[0].table as MemoryTable;

            string evaluatedWhereClause = MemoryDatabase.EvaluateWhereClause(executableStatement.whereClause, executableParams, executableStatement.StatementFromRefs);
            var    dataRows             = memoryTable.DataTable.Select(evaluatedWhereClause);

            foreach (var dataRow in dataRows)
            {
                dataRow.Delete();
            }
            this.changedTables.Add(memoryTable);
            return(Task.FromResult(dataRows.Length));
        }
コード例 #25
0
 public void Delete_Statement_With_Top_N_Clause_With_Missing_Value()
 {
     // Exercise
     try
     {
         DeleteStatement statement = ParserFactory.Execute <DeleteStatement>(
             @"delete top () t from dbo.table as t join dbo.other o on o.id = a.id where field <> 2"
             ).First();
         Assert.Fail();
     }
     catch (SyntaxException ex)
     {
         Assert.AreEqual("expected alpha, numeric, or variable, found )", ex.Message);
     }
 }
コード例 #26
0
        protected void AddEntityDeleteStatement(IChild child, EntityInfo childInfo)
        {
            var builder = new ComplexCommandBuilder();

            var idParameter = child.Id.ToParameter();

            builder.AddParameter(idParameter);
            var whereClause = string.Format("{0}.{1} = {2}", childInfo.Name, childInfo.Identifier.Name, idParameter.Name);
            var statement   = new DeleteStatement(childInfo.Name, whereClause);

            builder.AddStatement(statement);
            Add(builder);

            AddDeleteStatements(child, childInfo);
        }
コード例 #27
0
        public override void Visit(DeleteStatement node)
        {
            var deleteSpecification = node.DeleteSpecification;

            if (deleteSpecification == null)
            {
                return;
            }

            var fromIds = ProcessFromClause(deleteSpecification.FromClause, SqlAction.Select);

            ProcessWhereClause(deleteSpecification.WhereClause, SqlAction.Select);

            ProcessTarget(deleteSpecification.Target, fromIds, DeleteTables);
        }
コード例 #28
0
ファイル: Repository.cs プロジェクト: ArmandoAPS/SqlBuilder
        public virtual void Delete(ICondition filter)
        {
            if (filter == null)
            {
                return;
            }

            var delete = new DeleteStatement(_tableName)
            {
                ConnectionStringName = _connectionStringName
            };

            delete.Where(filter);
            delete.Execute();
        }
コード例 #29
0
        public static EngineResult Evaluate(StatementWithCtesAndXmlNamespaces statement, Scope scope)
        {
            if (statement.WithCtesAndXmlNamespaces?.CommonTableExpressions != null)
            {
                scope = Evaluate(statement.WithCtesAndXmlNamespaces.CommonTableExpressions, scope);
            }

            return(statement switch
            {
                SelectStatement select => Evaluate(select, scope),
                InsertStatement insert => Evaluate(insert.InsertSpecification, scope),
                UpdateStatement update => Evaluate(update.UpdateSpecification, scope),
                DeleteStatement delete => Evaluate(delete.DeleteSpecification, scope),
                MergeStatement merge => Evaluate(merge.MergeSpecification, scope),
                _ => throw FeatureNotSupportedException.Subtype(statement)
            });
コード例 #30
0
 public Statements(string tableName, Connection connection)
 {
     try
     {
         DeleteStatement = new DeleteStatement(tableName, connection);
         InsertStatement = new InsertStatement(tableName, connection);
         SelectStatement = new SelectStatement(tableName, connection);
     }
     catch
     {
         DeleteStatement?.Dispose();
         InsertStatement?.Dispose();
         SelectStatement?.Dispose();
         throw;
     }
 }
コード例 #31
0
        public static async NonQueryTask ExecuteDeleteBuildAsync(this Database database, Table table, Action <DeleteStatement> action, DbConnection dbConnection = null, DbTransaction dbTransaction = null, int commandTimeout = UseDefaultCommandTimeout)
        {
            return(await database.ExecuteNonQueryAsync(
                       sql : database.BuildSql(builder =>
            {
                var delete = new DeleteStatement(table);

                action(delete);

                builder.BuildDeleteStatement(delete);
            }, out var parameters),
                       parameters : parameters,
                       dbConnection : dbConnection,
                       dbTransaction : dbTransaction,
                       commandTimeout : commandTimeout));
        }
コード例 #32
0
        private TSqlStatement BuildDelete(InsertSpecification originalInsert)
        {
            var delete = new DeleteStatement();

            delete.WithCtesAndXmlNamespaces = new WithCtesAndXmlNamespaces();
            var cte = new CommonTableExpression();

            cte.ExpressionName = new Identifier()
            {
                Value = "to_delete"
            };

            cte.QueryExpression = BuildNewRowSource(originalInsert);
            delete.WithCtesAndXmlNamespaces.CommonTableExpressions.Add(cte);

            delete.DeleteSpecification = new DeleteSpecification();
            var tableName = new SchemaObjectName();
            tableName.Identifiers.Add( new Identifier()
            {
                Value = "to_delete"
            });

            delete.DeleteSpecification.Target = new NamedTableReference() {SchemaObject = tableName };
            var outputInto = delete.DeleteSpecification.OutputIntoClause = new OutputIntoClause();

            var deletedTable = new MultiPartIdentifier();
            deletedTable.Identifiers.Add(new Identifier()
            {
                Value = "deleted"

            });

            outputInto.SelectColumns.Add(new SelectStarExpression()
            {
                Qualifier = deletedTable
            });

            outputInto.IntoTable = originalInsert.Target;
            foreach (var col in originalInsert.Columns)
            {
                outputInto.IntoTableColumns.Add(col);
            }

            return delete;
        }
コード例 #33
0
        private string buildChunkedDelete(DeleteSpecification delete)
        {

            var counter = new DeclareVariableStatement();
            var counterVariable = new DeclareVariableElement();
            counterVariable.DataType = new SqlDataTypeReference() {SqlDataTypeOption = SqlDataTypeOption.Int};
            counterVariable.VariableName = new Identifier() {Value = "@rowcount"};
            counterVariable.Value = new IntegerLiteral() {Value = "10000"};
            counter.Declarations.Add(counterVariable);
            
            delete.TopRowFilter = new TopRowFilter();
            delete.TopRowFilter.Expression = new ParenthesisExpression() {Expression = new IntegerLiteral() {Value = "10000"} };

            var setCounter = new SetVariableStatement();
            setCounter.Variable = new VariableReference() {Name = "@rowcount"};
            setCounter.Expression = new GlobalVariableExpression() {Name = "@@rowcount"};
            setCounter.AssignmentKind = AssignmentKind.Equals;

            var deleteStatement = new DeleteStatement();
            deleteStatement.DeleteSpecification = delete;

            var beginEnd = new BeginEndBlockStatement();
            beginEnd.StatementList = new StatementList();
            beginEnd.StatementList.Statements.Add(deleteStatement);
            beginEnd.StatementList.Statements.Add(setCounter);

            var whilePredicate = new BooleanComparisonExpression();
            whilePredicate.ComparisonType = BooleanComparisonType.GreaterThan;
            whilePredicate.FirstExpression = new VariableReference() {Name = "@rowcount"};
            whilePredicate.SecondExpression = new IntegerLiteral() {Value = "0"};

            var whileStatement = new WhileStatement();
            whileStatement.Predicate = whilePredicate;
            whileStatement.Statement = beginEnd;
            
            var text = ScriptDom.GenerateTSql(counter) + "\r\n" + ScriptDom.GenerateTSql(whileStatement);

            return text;
        }
コード例 #34
0
 public override void ExplicitVisit(DeleteStatement fragment)
 {
     _fragments.Add(fragment);
 }
コード例 #35
0
ファイル: Parser.cs プロジェクト: fizikci/Cinar
        DeleteStatement ParseDeleteStatement()
        {
            DeleteStatement ss = new DeleteStatement();

            ReadNextToken(); // skip 'delete'
            SkipExpected("FROM");

            ss.TableName = fCurrentToken.Value;

            if (fCurrentToken == null)
                return ss;

            if (fCurrentToken.Equals("WHERE"))
            {
                ReadNextToken(); // skip 'where'
                ss.Where = ParseExpression();
            }

            skipEmptyStatements();

            return ss;
        }
コード例 #36
0
 public DeleteTopFromTable(DeleteStatement statement, Expression top, Table table)
     : base(statement)
 {
     this.Top = top;
     this.Table = table;
 }
コード例 #37
0
 // DeleteStatement
 protected internal virtual bool Walk(DeleteStatement node) { return true; }
コード例 #38
0
ファイル: AllNodesVisitor.cs プロジェクト: yaakoviyun/sqlskim
 public override void Visit(DeleteStatement node) { this.action(node); }
コード例 #39
0
 public override void ExplicitVisit(DeleteStatement node)
 {
     CommandStatistics.DeletesCount++;
     base.ExplicitVisit(node);
 }
コード例 #40
0
 protected internal virtual void PostWalk(DeleteStatement node) { }
コード例 #41
0
 public override void ExplicitVisit(DeleteStatement node)
 {
     DeleteStatements.Add(node);
     base.ExplicitVisit(node);
 }