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)); }
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()); }
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); }
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()); }