Rework DBA to use PDO #53
							
								
								
									
										56
									
								
								models/CachedPDOIterator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								models/CachedPDOIterator.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/*****************************************************************************
 | 
				
			||||||
 | 
					 * CachedPDOIterator.php
 | 
				
			||||||
 | 
					 * Contains model class CachedPDOIterator.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Based on https://gist.github.com/hakre/5152090
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Kabuki CMS (C) 2013-2021, Aaron van Geffen
 | 
				
			||||||
 | 
					 *****************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CachedPDOIterator extends CachingIterator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private $index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(PDOStatement $statement)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        parent::__construct(new IteratorIterator($statement), self::FULL_CACHE);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function rewind(): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ($this->index === null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            parent::rewind();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        $this->index = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function current(): mixed
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ($this->offsetExists($this->index))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return $this->offsetGet($this->index);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return parent::current();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function key(): mixed
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->index;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function next(): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->index++;
 | 
				
			||||||
 | 
					        if (!$this->offsetExists($this->index))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            parent::next();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function valid(): bool
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->offsetExists($this->index) || parent::valid();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user