public function addInsertFromSelect($columns, $selectQuery = null): self
    {
        if ($selectQuery === null) {
            $selectQuery = $columns;
            $columns = null;
        }

        if ($columns !== null) {
            if (!is_array($columns)) {
                return $this->handleException(InvalidArgumentException::create(
                    'Argument $columns',
                    $columns,
                    ['array', 'null']
                ));
            }
            foreach ($columns as $index => $column) {
                if (!is_string($column)) {
                    return $this->handleException(InvalidArgumentException::create(
                        'Argument $columns['.$index.']',
                        $column,
                        ['string']
                    ));
                }
            }
        }

        $selectQuery = $this->checkSubQueryValue('Argument $selectQuery', $selectQuery);

        $this->insert[] = new InsertFromSelect($columns, $selectQuery);
        return $this;
    }