Cake\Database\Expression\ValuesExpression::sql PHP Method

sql() public method

Convert the values into a SQL string with placeholders.
public sql ( ValueBinder $generator ) : string
$generator Cake\Database\ValueBinder Placeholder generator object
return string
    public function sql(ValueBinder $generator)
    {
        if (empty($this->_values) && empty($this->_query)) {
            return '';
        }
        if (!$this->_castedExpressions) {
            $this->_processExpressions();
        }
        $i = 0;
        $columns = [];
        $columns = $this->_columnNames();
        $defaults = array_fill_keys($columns, null);
        $placeholders = [];
        $types = [];
        $typeMap = $this->typeMap();
        foreach ($defaults as $col => $v) {
            $types[$col] = $typeMap->type($col);
        }
        foreach ($this->_values as $row) {
            $row += $defaults;
            $rowPlaceholders = [];
            foreach ($columns as $column) {
                $value = $row[$column];
                if ($value instanceof ExpressionInterface) {
                    $rowPlaceholders[] = '(' . $value->sql($generator) . ')';
                    continue;
                }
                $placeholder = $generator->placeholder($i);
                $rowPlaceholders[] = $placeholder;
                $generator->bind($placeholder, $value, $types[$column]);
            }
            $placeholders[] = implode(', ', $rowPlaceholders);
        }
        if ($this->query()) {
            return ' ' . $this->query()->sql($generator);
        }
        return sprintf(' VALUES (%s)', implode('), (', $placeholders));
    }