public function parse($names = null, bool $isTable = false): array
    {
        $ret = [];
        if ($names === null || $names == '*') {
            $ret[] = '*';
        } elseif (\is_string($names)) {
            $ret[] = $names;
            $this->aliases[] = $names.($isTable === true ? '\\.' : '');
        } elseif (\is_array($names)) {
            foreach ($names as $name => $alias) {
                if (\is_string($name)) {
                    if (\in_array($alias, [-1, 1])) {
                        $ret[] = \sprintf('%s %s', $name, \str_replace([-1, 1], ['DESC', 'ASC'], $alias));
                    } elseif (\is_string($alias)) {
                        $ret[] = \sprintf('%s %s', $name, $alias);
                        $this->aliases[] = \str_replace(
                            ['(', ')', '[', ']', '{', '}', '*', '+', '.', '?', '/', '\\'],
                            ['\\(', '\\)', '\\[', '\\]', '\\{', '\\}', '\\*', '\\+', '\\.', '\\?', '\\/', '\\\\'],
                            $name
                        );
                        $this->aliases[] = $alias.($isTable === true ? '\\.' : '');
                    }
                } elseif (\is_string($alias)) {
                    $ret[] = $alias;
                    $this->aliases[] = $alias.($isTable === true ? '\\.' : '');
                }
            }
        }
        return $ret;
    }