private List <ItemLink> FindBrokenLinks(DataProviderReader reader)
        {
            var links = new List <ItemLink>();

            using (new SecurityDisabler())
            {
                while (reader.Read())
                {
                    var itemLink = MapLinksRow(reader).Item2;

                    var targetDatabase = Factory.GetDatabase(itemLink.TargetDatabaseName);
                    if (!ItemExists(itemLink.TargetItemID, itemLink.TargetPath, itemLink.TargetItemLanguage, itemLink.TargetItemVersion, targetDatabase))
                    {
                        // Note: The original Sitecore source code adds "sourceDatabaseName" twice instead of using targetDatabaseName
                        links.Add(itemLink);
                    }

                    var job = Context.Job;
                    if (job != null && job.Category == "GetBrokenLinks")
                    {
                        job.Status.Processed++;
                    }

                    DataCount.LinksDataRead.Increment();
                    DataCount.DataPhysicalReads.Increment();
                }
            }

            return(links);
        }
コード例 #2
0
        private SmallPage ReadPage(DataProviderReader reader)
        {
            Assert.ArgumentNotNull(reader, "reader");
            var page = new SmallPage
            {
                Id    = AnalyticsManager.Provider.GetString(0, reader),
                Count = AnalyticsManager.Provider.GetInt(1, reader)
            };

            return(page);
        }
コード例 #3
0
        private static ProfileKeyResult ReadProfileKeyResult(DataProviderReader reader)
        {
            var result = new ProfileKeyResult
            {
                ProfileKeyId = AnalyticsManager.GetGuid(0, reader),
                ProfileId    = AnalyticsManager.GetGuid(1, reader),
                Value        = AnalyticsManager.GetInt(2, reader),
                Count        = AnalyticsManager.GetInt(3, reader),
                Total        = AnalyticsManager.GetInt(4, reader),
                ProfileType  = AnalyticsManager.GetString(5, reader)
            };

            return(result);
        }
コード例 #4
0
        private void FillTheCacheInitially()
        {
            using (DataProviderReader reader = Api.CreateReader("SELECT {0}ID{1}, {0}Prefix{1}, {0}Key{1}, {0}ParentID{1}, {0}CustomData{1} FROM {0}IDTable{1}"))
            {
                while (reader.Read())
                {
                    ID     id         = Api.GetId(0, reader);
                    string prefix     = Api.GetString(1, reader);
                    string key        = Api.GetString(2, reader);
                    ID     parentId   = Api.GetId(3, reader);
                    string customData = Api.GetString(4, reader);

                    var entry = new IDTableEntry(prefix, key, id, parentId, customData);
                    Cache.Add(GetCacheKey(prefix, key), entry);
                    DataCounters.PhysicalReads.Increment();
                }
            }
        }
        /// <summary>
        /// Gets any broken links in the database
        /// </summary>
        /// <param name="database"></param>
        /// <returns></returns>
        /// <remarks>Same as SqlLinkDatabase</remarks>
        public override ItemLink[] GetBrokenLinks(Database database)
        {
            Assert.ArgumentNotNull(database, nameof(database));

            var sql = $@"
SELECT {LinksTableSqlColumns}
FROM [Links]
WHERE [SourceDatabase]=@{LinksTableColumns.Database}
ORDER BY [SourceItemID], [SourceFieldID]";

            var databaseName = GetString(database.Name, DatabaseNameLength);

            using (DataProviderReader reader = DataApi.CreateReader(sql, LinksTableColumns.Database, databaseName))
            {
                DataCount.LinksDataRead.Increment();
                var links = FindBrokenLinks(reader);
                return(links.ToArray());
            }
        }
        private List <Tuple <Guid, ItemLink> > GetLinks(string sql, Item item, object[] parameters)
        {
            var itemLinkList = new List <Tuple <Guid, ItemLink> >();

            lock (_locks.GetLock(item.ID))
            {
                using (DataProviderReader reader = DataApi.CreateReader(sql, parameters))
                {
                    while (reader.Read())
                    {
                        itemLinkList.Add(MapLinksRow(reader));
                    }

                    DataCount.LinksDataRead.IncrementBy(itemLinkList.Count);
                    DataCount.DataPhysicalReads.Increment();
                }
            }

            return(itemLinkList);
        }
        private Tuple <Guid, ItemLink> MapLinksRow(DataProviderReader reader)
        {
            var id = DataApi.GetGuid(0, reader);
            var sourceDatabaseName = DataApi.GetString(1, reader);
            var sourceItemID       = DataApi.GetId(2, reader);
            var sourceItemLanguage = DataApi.GetLanguage(3, reader);
            var sourceItemVersion  = DataApi.GetVersion(4, reader);
            var sourceFieldID      = DataApi.GetId(5, reader);

            var targetDatabaseName = DataApi.GetString(6, reader);
            var targetItemID       = DataApi.GetId(7, reader);
            var targetItemLanguage = DataApi.GetLanguage(8, reader);
            var targetItemVersion  = DataApi.GetVersion(9, reader);
            var targetPath         = DataApi.GetString(10, reader);

            var link = new ItemLink(sourceDatabaseName, sourceItemID, sourceItemLanguage, sourceItemVersion, sourceFieldID,
                                    targetDatabaseName, targetItemID, targetItemLanguage, targetItemVersion, targetPath);

            return(new Tuple <Guid, ItemLink>(id, link));
        }
コード例 #8
0
        public override IDTableEntry GetID(string prefix, string key)
        {
            var entry1 = Cache[GetCacheKey(prefix, key)] as IDTableEntry;

            if (entry1 != null)
            {
                return(entry1);
            }

            using (DataProviderReader reader = Api.CreateReader("SELECT {0}ID{1}, {0}ParentID{1}, {0}CustomData{1} FROM {0}IDTable{1} WHERE {0}Prefix{1} = {2}prefix{3} AND {0}Key{1} = {2}key{3}", (object)"prefix", (object)prefix, (object)"key", (object)key))
            {
                if (reader.Read())
                {
                    ID     id1     = Api.GetId(0, reader);
                    ID     id2     = Api.GetId(1, reader);
                    string @string = Api.GetString(2, reader);
                    var    entry2  = new IDTableEntry(prefix, key, id1, id2, @string);
                    Cache.Add(GetCacheKey(prefix, key), entry2);
                    DataCounters.PhysicalReads.Increment();
                    return(entry2);
                }
            }
            return(null);
        }
コード例 #9
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get date time.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="DateTime"/>.
 /// </returns>
 public override DateTime GetDateTime(int columnIndex, DataProviderReader reader)
 {
     return DateTime.Now;
 }
コード例 #10
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get string.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The get string.
 /// </returns>
 public override string GetString(int columnIndex, DataProviderReader reader)
 {
     return reader.InnerReader.GetString(columnIndex);
 }
コード例 #11
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get id.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="ID"/>.
 /// </returns>
 public override ID GetId(int columnIndex, DataProviderReader reader)
 {
     return ID.Null;
 }
コード例 #12
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get guid.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="Guid"/>.
 /// </returns>
 public override Guid GetGuid(int columnIndex, DataProviderReader reader)
 {
     return reader.InnerReader.GetGuid(columnIndex);
 }
コード例 #13
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get int.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The get int.
 /// </returns>
 public override int GetInt(int columnIndex, DataProviderReader reader)
 {
     return reader.InnerReader.GetInt32(columnIndex);
 }
コード例 #14
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get language.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="Language"/>.
 /// </returns>
 public override Language GetLanguage(int columnIndex, DataProviderReader reader)
 {
     return Language.Invariant;
 }
コード例 #15
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get long.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The get long.
 /// </returns>
 public override long GetLong(int columnIndex, DataProviderReader reader)
 {
     return 0;
 }
コード例 #16
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get version.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="Version"/>.
 /// </returns>
 public override Version GetVersion(int columnIndex, DataProviderReader reader)
 {
     return Version.First;
 }
コード例 #17
0
ファイル: SqlDataApi.cs プロジェクト: zigor/phantom-
 /// <summary>
 /// The get bytes.
 /// </summary>
 /// <param name="columnIndex">
 /// The column index.
 /// </param>
 /// <param name="reader">
 /// The reader.
 /// </param>
 /// <returns>
 /// The <see cref="byte[]"/>.
 /// </returns>
 public override byte[] GetBytes(int columnIndex, DataProviderReader reader)
 {
     return new byte[] { };
 }