public IEnumerator <T> ExecuteQuery <T>(
            IExecutionPlan <IEnumerable <T> > plan,
            IExecutionContext context)
        {
            ITable[] tables = TableLocator.FindAffectedTables(context.Database, plan);

            return(ExecuteQuery(plan, context, tables, cloneEntities: true));
        }
Exemple #2
0
        private IEnumerator <T> ExecuteQuery <T>(
            IExecutionPlan <IEnumerable <T> > plan,
            IExecutionContext context,
            ITable[] tablesToLock,
            bool cloneEntities)
        {
            ITable[] tables = TableLocator.FindAffectedTables(context.Database, plan);

            Action <T, T> cloner = null;

            if (cloneEntities && this.database.Tables.IsEntityType <T>())
            {
                cloner = context
                         .GetService <IEntityService>()
                         .CloneProperties <T>;
            }

            LinkedList <T> result = new LinkedList <T>();

            for (int i = 0; i < tablesToLock.Length; i++)
            {
                this.AcquireReadLock(tablesToLock[i], context);
            }

            IEnumerable <T> query = plan.Execute(context);

            try
            {
                foreach (T item in query)
                {
                    if (cloner != null && item != null)
                    {
                        T resultEntity = Activator.CreateInstance <T>();
                        cloner(item, resultEntity);

                        result.AddLast(resultEntity);
                    }
                    else
                    {
                        result.AddLast(item);
                    }
                }
            }
            finally
            {
                for (int i = 0; i < tablesToLock.Length; i++)
                {
                    this.ReleaseReadLock(tablesToLock[i], context);
                }
            }

            return(result.GetEnumerator());
        }
        public T ExecuteQuery <T>(
            IExecutionPlan <T> plan,
            IExecutionContext context)
        {
            ITable[] tables = TableLocator.FindAffectedTables(context.Database, plan);

            for (int i = 0; i < tables.Length; i++)
            {
                this.AcquireReadLock(tables[i], context);
            }

            try
            {
                var item = plan.Execute(context);

                EntityPropertyCloner <T> cloner = null;
                if (this.database.Tables.IsEntityType <T>())
                {
                    cloner = EntityPropertyCloner <T> .Instance;
                }
                if (cloner != null && item != null)
                {
                    var cloned = Activator.CreateInstance <T>();
                    cloner.Clone(item, cloned);

                    // Remove Aliased Attributes these are getting added by the Query Plan Execution
#pragma warning disable IDE0019 // Use pattern matching
                    var entity = item as Entity;
#pragma warning restore IDE0019 // Use pattern matching
                    if (entity != null)
                    {
                        foreach (var attribute in entity.Attributes.ToList().Where(attribute => attribute.Value is AliasedValue))
                        {
                            entity.Attributes.Remove(attribute.Key);
                        }
                    }

                    return(cloned);
                }
                else
                {
                    return(item);
                }
            }
            finally
            {
                for (int i = 0; i < tables.Length; i++)
                {
                    this.ReleaseReadLock(tables[i], context);
                }
            }
        }
        private List <T> Query <T>(
            IExecutionPlan <IEnumerable <T> > plan,
            ITable <T> table,
            IExecutionContext context)
            where T : class
        {
            ITable[] queryTables = TableLocator.FindAffectedTables(context.Database, plan);

            var query = this.ExecuteQuery(
                plan,
                context,
                queryTables.Except(new[] { table }).ToArray(),
                cloneEntities: false);

            return(query.ToEnumerable().ToList());
        }
Exemple #5
0
        private static void pdftronTransfer(string pdfPath, string txtPath)
        {
            pdftron.PDFNet.Initialize("Reuters Technology China Ltd.(thomsonreuters.com):CPU:1::W:AMC(20121010):AD5EE33F2505D1CAF1B425461F9C92BAA89204FA0AD8AAA17E07887EF0FA");
            TableLocator        locator = new TableLocator(pdfPath);
            LocateConfiguration Config  = new LocateConfiguration
            {
                TableEndFirstLetterRegex        = @"\d",
                TableEndRegex                   = @"\d{1,}/\d{1,}",
                TableNameNearbyFirstLetterRegex = "상",
                TableNameNearbyRegex            = "상장일"
            };
            List <TablePos>  tablePosList = locator.GetMultiTablePos(".*?추가상장\\s*내역", Config);
            List <FreeTable> tableList    = tablePosList.Select(tablePos => TableExtractor.Extract(locator.pdfDoc, tablePos)).ToList();

            WriteFreeTableToTxt(txtPath, " ", tableList);
        }
        private static void pdftronTransfer(string pdfPath, string txtPath)
        {
            //pdftron.PDFNet.Initialize("Reuters Technology China Ltd.(thomsonreuters.com):CPU:1::W:AMC(20121010):AD5EE33F2505D1CAF1B425461F9C92BAA89204FA0AD8AAA17E07887EF0FA");
            TableLocator        locator = new TableLocator(pdfPath);
            LocateConfiguration config  = new LocateConfiguration();

            config.TableEndFirstLetterRegex        = @"\d";
            config.TableEndRegex                   = @"\d{1,}/\d{1,}";
            config.TableNameNearbyFirstLetterRegex = "상";
            config.TableNameNearbyRegex            = "상장일";
            List <TablePos>  tablePosList = locator.GetMultiTablePos(".*?추가상장\\s*내역", config);
            List <FreeTable> tableList    = new List <FreeTable>();

            foreach (var tablePos in tablePosList)
            {
                FreeTable table = TableExtractor.Extract(locator.pdfDoc, tablePos);
                tableList.Add(table);
            }
            WriteFreeTableToTxt(txtPath, " ", tableList);
        }
Exemple #7
0
        public T ExecuteQuery <T>(
            IExecutionPlan <T> plan,
            IExecutionContext context)
        {
            ITable[] tables = TableLocator.FindAffectedTables(context.Database, plan);

            for (int i = 0; i < tables.Length; i++)
            {
                this.AcquireReadLock(tables[i], context);
            }

            Action <T, T> cloner = context
                                   .GetService <IEntityService>()
                                   .CloneProperties <T>;

            try
            {
                var result = plan.Execute(context);

                if (this.database.Tables.IsEntityType <T>() && result != null)
                {
                    T resultEntity = Activator.CreateInstance <T>();
                    cloner(result, resultEntity);

                    result = resultEntity;
                }

                return(result);
            }
            finally
            {
                for (int i = 0; i < tables.Length; i++)
                {
                    this.ReleaseReadLock(tables[i], context);
                }
            }
        }
        private IEnumerator <T> ExecuteQuery <T>(
            IExecutionPlan <IEnumerable <T> > plan,
            IExecutionContext context,
            ITable[] tablesToLock,
            bool cloneEntities)
        {
            ITable[] tables = TableLocator.FindAffectedTables(context.Database, plan);

            EntityPropertyCloner <T> cloner = null;

            if (cloneEntities && this.database.Tables.IsEntityType <T>())
            {
                cloner = EntityPropertyCloner <T> .Instance;
            }

            LinkedList <T> result = new LinkedList <T>();

            for (int i = 0; i < tablesToLock.Length; i++)
            {
                this.AcquireReadLock(tablesToLock[i], context);
            }

            IEnumerable <T> query = plan.Execute(context);

            try
            {
                foreach (T item in query)
                {
                    if (cloner != null)
                    {
                        T resultEntity = Activator.CreateInstance <T>();
                        cloner.Clone(item, resultEntity);

                        result.AddLast(resultEntity);

                        // Remove Aliased Attributes these are getting added by the Query Plan Execution
#pragma warning disable IDE0019 // Use pattern matching
                        var entity = item as Entity;
#pragma warning restore IDE0019 // Use pattern matching
                        if (entity != null)
                        {
                            foreach (var attribute in entity.Attributes.ToList().Where(attribute => attribute.Value is AliasedValue))
                            {
                                entity.Attributes.Remove(attribute.Key);
                            }
                        }
                    }
                    else
                    {
                        result.AddLast(item);
                    }
                }
            }
            finally
            {
                for (int i = 0; i < tablesToLock.Length; i++)
                {
                    this.ReleaseReadLock(tablesToLock[i], context);
                }
            }

            return(result.GetEnumerator());
        }