public static LinkDatabaseCommand CreateInsertCommand(
            string sourceDatabase, ID sourceItemID, Language sourceLanguage, Sitecore.Data.Version sourceVersion, ID sourceFieldID,
            string targetDatabase, ID targetItemID, Language targetLanguage, Sitecore.Data.Version targetVersion, string targetPath,
            IBatchOperation operation)
        {
            var parameters = new List <object>();
            var index      = operation.Index;
            var sql        = $@"
INSERT INTO [Links] (
    [SourceDatabase], [SourceItemID], [SourceLanguage], [SourceVersion], [SourceFieldID], 
    [TargetDatabase], [TargetItemID], [TargetLanguage], [TargetVersion], [TargetPath]
) VALUES(
    @{LinksTableColumns.Database}{index}, @{LinksTableColumns.ItemID}{index}, 
    @{LinksTableColumns.SourceLanguage}{index}, @{LinksTableColumns.SourceVersion}{index}, 
    @{LinksTableColumns.FieldID}{index}, @{LinksTableColumns.TargetDatabase}{index}, 
    @{LinksTableColumns.TargetID}{index}, @{LinksTableColumns.TargetLanguage}{index}, 
    @{LinksTableColumns.TargetVersion}{index}, @{LinksTableColumns.TargetPath}{index}
)";

            AddToParameters(parameters, $"{LinksTableColumns.Database}{index}", GetString(sourceDatabase, DatabaseNameLength));
            AddToParameters(parameters, $"{LinksTableColumns.ItemID}{index}", sourceItemID.Guid);
            AddToParameters(parameters, $"{LinksTableColumns.SourceLanguage}{index}", GetString(sourceLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, $"{LinksTableColumns.SourceVersion}{index}", sourceVersion.Number);
            AddToParameters(parameters, $"{LinksTableColumns.FieldID}{index}", sourceFieldID.Guid);

            AddToParameters(parameters, $"{LinksTableColumns.TargetDatabase}{index}", GetString(targetDatabase, DatabaseNameLength));
            AddToParameters(parameters, $"{LinksTableColumns.TargetID}{index}", targetItemID.Guid);
            AddToParameters(parameters, $"{LinksTableColumns.TargetLanguage}{index}", GetString(targetLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, $"{LinksTableColumns.TargetVersion}{index}", targetVersion.Number);
            AddToParameters(parameters, $"{LinksTableColumns.TargetPath}{index}", targetPath);

            return(new LinkDatabaseCommand(sql, parameters));
        }
        public static LinkDatabaseCommand CreateDeleteCommand(ItemLink itemLink, IBatchOperation operation)
        {
            var parameters = new List <object>();
            var index      = operation.Index;
            var sql        = $@"
DELETE  FROM [Links]
WHERE [SourceDatabase]=@{LinksTableColumns.Database}{index}
AND [SourceItemID]=@{LinksTableColumns.ItemID}{index}
AND [SourceLanguage]=@{LinksTableColumns.SourceLanguage}{index}
AND [SourceVersion]=@{LinksTableColumns.SourceVersion}{index}
AND [SourceFieldID]=@{LinksTableColumns.FieldID}{index}
AND [TargetDatabase]=@{LinksTableColumns.TargetDatabase}{index}
AND [TargetItemID]=@{LinksTableColumns.TargetID}{index}
AND [TargetLanguage]=@{LinksTableColumns.TargetLanguage}{index}
AND [TargetVersion] = @{LinksTableColumns.TargetVersion}{index}";

            AddToParameters(parameters, LinksTableColumns.Database, GetString(itemLink.SourceDatabaseName, DatabaseNameLength));
            AddToParameters(parameters, LinksTableColumns.ItemID, itemLink.SourceItemID.Guid);
            AddToParameters(parameters, LinksTableColumns.SourceLanguage, GetString(itemLink.SourceItemLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, LinksTableColumns.SourceVersion, itemLink.SourceItemVersion.Number);
            AddToParameters(parameters, LinksTableColumns.FieldID, itemLink.SourceFieldID);
            AddToParameters(parameters, LinksTableColumns.TargetDatabase, GetString(itemLink.TargetDatabaseName, DatabaseNameLength));
            AddToParameters(parameters, LinksTableColumns.TargetID, itemLink.TargetItemID);
            AddToParameters(parameters, LinksTableColumns.TargetLanguage, GetString(itemLink.TargetItemLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, LinksTableColumns.TargetVersion, itemLink.TargetItemVersion.Number);

            return(new LinkDatabaseCommand(sql, parameters));
        }
 public static LinkDatabaseCommand CreateInsertCommand(ItemLink itemLink, IBatchOperation operation)
 {
     return(CreateInsertCommand(
                itemLink.SourceDatabaseName, itemLink.SourceItemID, itemLink.SourceItemLanguage,
                itemLink.SourceItemVersion, itemLink.SourceFieldID, itemLink.TargetDatabaseName,
                itemLink.TargetItemID, itemLink.TargetItemLanguage, itemLink.TargetItemVersion,
                itemLink.TargetPath, operation
                ));
 }
        public static LinkDatabaseCommand CreateDeleteCommand(Guid itemLinkId, IBatchOperation operation)
        {
            var paramName  = $"id{operation.Index}";
            var parameters = new List <object>();
            var sql        = $"DELETE FROM [Links] WHERE [ID]=@{paramName}";

            AddToParameters(parameters, paramName, itemLinkId);

            return(new LinkDatabaseCommand(sql, parameters));
        }
Exemple #5
0
        private void BatchSizeIncreased(object sender, EventArgs args)
        {
            IBatchOperation operation = (IBatchOperation)sender;

            _touchedSync.Wait();

            try
            {
                _touched.Add(operation);
            }
            finally
            {
                _touchedSync.Release();

                ReleaseProcessSyncIfNeeded();
            }
        }
Exemple #6
0
        public void ExecuteOperation()
        {
            Response = new TransactionFramework.InProcessTransactionResponse();

            var chain = new TransactionFramework.TransactionChain();

            chain.TransactionCompleted += ChainOnTransactionCompleted;
            while (Operations.Count > 0)
            {
                IBatchOperation operation = Operations.Dequeue();

                TransactionFramework.InProcessTransactionResponse newResponse = operation.BuildTransactionChain(ref chain);

                Response.Add(newResponse);
            }
            MapManager.ExecuteTransaction(chain);
        }
 protected void PrepareBatchOperation()
 {
     m_operation = m_table.PrepareBatchOperation();
 }
Exemple #8
0
        private static void WriteEvents(string stream, StreamVersion version, IEnumerable<JournaledEvent> events, IBatchOperation batch)
        {
            var currentVersion = version;
            foreach (var journaledEvent in events)
            {
                currentVersion = currentVersion.Increment(1);

                // InsertOrReplace is faster then Insert operation, because storage engine
                // can skip etag checking.
                batch.InsertOrReplace(stream, currentVersion.ToString(), journaledEvent.ToDictionary());
            }
        }
Exemple #9
0
        private static void WriteHeadProperty(string stream, EventStreamPosition position, int targetVersion, IBatchOperation batch)
        {
            var headProperties = new Dictionary<string, object>
            {
                {EventJournalTableRowPropertyNames.Version, targetVersion}
            };

            if (EventStreamPosition.IsNewStream(position))
            {
                batch.Insert(stream, "HEAD", headProperties);
            }
            else
            {
                batch.Merge(stream, "HEAD", position.ETag, headProperties);
            }
        }
Exemple #10
0
        public static void InsertOrReplace(this IBatchOperation batchOperation, string partitionKey)
        {
            Require.NotNull(batchOperation, "batchOperation");

            batchOperation.InsertOrReplace(partitionKey, EmptyDictionary.Get <string, object>());
        }
Exemple #11
0
        public static void Replace(this IBatchOperation batchOperation, string partitionKey, string rowKey, string etag)
        {
            Require.NotNull(batchOperation, "batchOperation");

            batchOperation.Replace(partitionKey, rowKey, etag, EmptyDictionary.Get <string, object>());
        }