public (string, IEnumerable <object>) TranslateQuery(MergeStatement <TEntity> mergeQuery)
        {
            var queryBuilder = new SqlQueryBuilder();

            // Merge Statement
            AppendOperation(queryBuilder, "MERGE INTO", tableAlias: TARGET_TABLE_ALIAS);

            // Using Statement
            AppendOperation(queryBuilder, " USING", mergeQuery.TemporaryTableName, SOURCE_TABLE_ALIAS);
            queryBuilder.Append(" ON ");
            AppendMergeJoinKeys(queryBuilder, mergeQuery.Keys);

            // Update Into
            if (mergeQuery.Type == MergeStatement <TEntity> .MergeType.UpdateOnly || mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOrUpdate)
            {
                AppendMergeStatement(queryBuilder);
            }

            // Insert Statement
            if (mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOnly || mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOrUpdate)
            {
                AppendInsertMergeStatement(queryBuilder);
            }

            queryBuilder.Append(";");

            return(queryBuilder.Build());
        }
        public (string, IEnumerable <object>) TranslateQuery(DeleteStatement <TEntity> query)
        {
            var queryBuilder = new SqlQueryBuilder();

            AppendOperation(queryBuilder, "DELETE");
            AppendPredicate(queryBuilder, query.Predicate);

            return(queryBuilder.Build());
        }
        public (string, IEnumerable <object>) TranslateQuery(UpdateStatement <TEntity> query)
        {
            var queryBuilder = new SqlQueryBuilder();

            AppendOperation(queryBuilder, "UPDATE");
            AppendUpdateStatements(queryBuilder, query.Assignments);
            AppendPredicate(queryBuilder, query.Predicate);

            return(queryBuilder.Build());
        }