41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Core\Driver\SQL\Condition;
 | |
| 
 | |
| use Core\Driver\SQL\Query\Select;
 | |
| use Core\Driver\SQL\SQL;
 | |
| 
 | |
| class CondIn extends Condition {
 | |
| 
 | |
|   private $needle;
 | |
|   private $haystack;
 | |
| 
 | |
|   public function __construct($needle, $haystack) {
 | |
|     $this->needle = $needle;
 | |
|     $this->haystack = $haystack;
 | |
|   }
 | |
| 
 | |
|   public function getNeedle() { return $this->needle; }
 | |
|   public function getHaystack() { return $this->haystack; }
 | |
| 
 | |
|   function getExpression(SQL $sql, array &$params): string {
 | |
| 
 | |
|     $haystack = $this->getHaystack();
 | |
|     if (is_array($haystack)) {
 | |
|       $values = array();
 | |
|       foreach ($haystack as $value) {
 | |
|         $values[] = $sql->addValue($value, $params);
 | |
|       }
 | |
| 
 | |
|       $values = implode(",", $values);
 | |
|       $values = "($values)";
 | |
|     } else if($haystack instanceof Select) {
 | |
|       $values = $haystack->getExpression($sql, $params);
 | |
|     } else {
 | |
|       $sql->getLogger()->error("Unsupported in-expression value: " . get_class($haystack));
 | |
|       return false;
 | |
|     }
 | |
| 
 | |
|     return $sql->addValue($this->needle, $params) . " IN $values";
 | |
|   }
 | |
| } |