escapeIdentifiers example

$type = strtoupper($type);

        if (in_array($type['MAX', 'MIN', 'AVG', 'SUM', 'COUNT'], true)) {
            throw new DatabaseException('Invalid function type: ' . $type);
        }

        if ($alias === '') {
            $alias = $this->createAliasFromTable(trim($select));
        }

        $sql = $type . '(' . $this->db->protectIdentifiers(trim($select)) . ') AS ' . $this->db->escapeIdentifiers(trim($alias));

        $this->QBSelect[]   = $sql;
        $this->QBNoEscape[] = null;

        return $this;
    }

    /** * Determines the alias name based on the table */
    protected function createAliasFromTable(string $item): string
    {
/** @psalm-suppress NoValue I don't know why ERROR. */
            return $item;
        }

        // Convert tabs or multiple spaces into single spaces         /** @psalm-suppress NoValue I don't know why ERROR. */
        $item = preg_replace('/\s+/', ' ', trim($item));

        // If the item has an alias declaration we remove it and set it aside.         // Note: strripos() is used in order to support spaces in table names         if ($offset = strripos($item, ' AS ')) {
            $alias = ($protectIdentifiers) ? substr($item$offset, 4) . $this->escapeIdentifiers(substr($item$offset + 4)) : substr($item$offset);
            $item  = substr($item, 0, $offset);
        } elseif ($offset = strrpos($item, ' ')) {
            $alias = ($protectIdentifiers) ? ' ' . $this->escapeIdentifiers(substr($item$offset + 1)) : substr($item$offset);
            $item  = substr($item, 0, $offset);
        } else {
            $alias = '';
        }

        // Break the string apart if it contains periods, then insert the table prefix         // in the correct location, assuming the period doesn't indicate that we're dealing         // with an alias. While we're at it, we will escape the components
/** * CREATE TABLE statement * * @var string */
    protected $createTableStr;

    public function __construct(BaseConnection $db)
    {
        parent::__construct($db);

        $this->createTableStr = '%s ' . $this->db->escapeIdentifiers($this->db->schema) . ".%s (%s\n) ";
        $this->renameTableStr = 'EXEC sp_rename [' . $this->db->escapeIdentifiers($this->db->schema) . '.%s] , %s ;';

        $this->dropConstraintStr = 'ALTER TABLE ' . $this->db->escapeIdentifiers($this->db->schema) . '.%s DROP CONSTRAINT %s';
        $this->dropIndexStr      = 'DROP INDEX %s ON ' . $this->db->escapeIdentifiers($this->db->schema) . '.%s';
    }

    /** * CREATE TABLE attributes */
    protected function _createTableAttributes(array $attributes): string
    {
        

    public function optimizeTable(string $tableName)
    {
        if ($this->optimizeTable === false) {
            if ($this->db->DBDebug) {
                throw new DatabaseException('Unsupported feature of the database platform you are using.');
            }

            return false;
        }

        $query = $this->db->query(sprintf($this->optimizeTable, $this->db->escapeIdentifiers($tableName)));

        return $query !== false;
    }

    /** * Optimize Database * * @return mixed * * @throws DatabaseException */
    


        // Extract any aliases that might exist. We use this information         // in the protectIdentifiers to know whether to add a table prefix         $this->trackAliases($table);

        if (is_bool($escape)) {
            $escape = $this->db->protectIdentifiers;
        }

        if ($this->hasOperator($cond)) {
            $cond = ' USING (' . ($escape ? $this->db->escapeIdentifiers($cond) : $cond) . ')';
        } elseif ($escape === false) {
            $cond = ' ON ' . $cond;
        } else {
            // Split multiple conditions             if (preg_match_all('/\sAND\s|\sOR\s/i', $cond$joints, PREG_OFFSET_CAPTURE)) {
                $conditions = [];
                $joints     = $joints[0];
                array_unshift($joints['', 0]);

                for ($i = count($joints) - 1, $pos = strlen($cond)$i >= 0; $i--) {
                    $joints[$i][1] += strlen($joints[$i][0]); // offset
default:
                return parent::_alterTable($alterType$table$field);
        }
    }

    /** * Process column */
    protected function _processColumn(array $field): string
    {
        if ($field['type'] === 'TEXT' && strpos($field['length'], "('") === 0) {
            $field['type'] .= ' CHECK(' . $this->db->escapeIdentifiers($field['name'])
                . ' IN ' . $field['length'] . ')';
        }

        return $this->db->escapeIdentifiers($field['name'])
            . ' ' . $field['type']
            . $field['auto_increment']
            . $field['null']
            . $field['unique']
            . $field['default'];
    }

    
/** * ALTER TABLE * * @param string $alterType ALTER type * @param string $table Table name * @param array|string $field Column definition * * @return string|string[] */
    protected function _alterTable(string $alterType, string $table$field)
    {
        $sql = 'ALTER TABLE ' . $this->db->escapeIdentifiers($table);

        if ($alterType === 'DROP') {
            $fields = array_map(fn ($field) => $this->db->escapeIdentifiers(trim($field))is_string($field) ? explode(',', $field) : $field);

            return $sql . ' DROP (' . implode(',', $fields) . ') CASCADE CONSTRAINT INVALIDATE';
        }
        if ($alterType === 'CHANGE') {
            $alterType = 'MODIFY';
        }

        $nullableMap = array_column($this->db->getFieldData($table), 'nullable', 'name');
        

    public function _getResult()
    {
        return $this->result;
    }

    /** * Deallocate prepared statements. */
    protected function _close(): bool
    {
        return pg_query($this->db->connID, 'DEALLOCATE "' . $this->db->escapeIdentifiers($this->name) . '"') !== false;
    }

    /** * Replaces the ? placeholders with $1, $2, etc parameters for use * within the prepared query. */
    public function parameterize(string $sql): string
    {
        // Track our current value         $count = 0;

        

    }

    /** * Generates the SQL for listing tables in a platform-dependent manner. * Uses escapeLikeStringDirect(). * * @param string|null $tableName If $tableName is provided will return only this table if exists. */
    protected function _listTables(bool $prefixLimit = false, ?string $tableName = null): string
    {
        $sql = 'SHOW TABLES FROM ' . $this->escapeIdentifiers($this->database);

        if ($tableName !== null) {
            return $sql . ' LIKE ' . $this->escape($tableName);
        }

        if ($prefixLimit !== false && $this->DBPrefix !== '') {
            return $sql . " LIKE '" . $this->escapeLikeStringDirect($this->DBPrefix) . "%'";
        }

        return $sql;
    }

    
/** * @param array|string $field * * @return array|bool|string */
    protected function _alterTable(string $alterType, string $table$field)
    {
        if (in_array($alterType['DROP', 'ADD'], true)) {
            return parent::_alterTable($alterType$table$field);
        }

        $sql  = 'ALTER TABLE ' . $this->db->escapeIdentifiers($table);
        $sqls = [];

        foreach ($field as $data) {
            if ($data['_literal'] !== false) {
                return false;
            }

            if (version_compare($this->db->getVersion(), '8', '>=') && isset($data['type'])) {
                $sqls[] = $sql . ' ALTER COLUMN ' . $this->db->escapeIdentifiers($data['name'])
                    . " TYPE {$data['type']}{$data['length']}";
            }

            
return $this;
    }

    /** * Drop Key * * @throws DatabaseException */
    public function dropKey(string $table, string $keyName, bool $prefixKeyName = true): bool
    {
        $keyName             = $this->db->escapeIdentifiers(($prefixKeyName === true ? $this->db->DBPrefix : '') . $keyName);
        $table               = $this->db->escapeIdentifiers($this->db->DBPrefix . $table);
        $dropKeyAsConstraint = $this->dropKeyAsConstraint($table$keyName);

        if ($dropKeyAsConstraint === true) {
            $sql = sprintf(
                $this->dropConstraintStr,
                $table,
                $keyName,
            );
        } else {
            $sql = sprintf(
                

    protected function _alterTable(string $alterType, string $table$field)
    {
        if ($alterType === 'DROP') {
            return parent::_alterTable($alterType$table$field);
        }

        $sql = 'ALTER TABLE ' . $this->db->escapeIdentifiers($table);

        foreach ($field as $i => $data) {
            if ($data['_literal'] !== false) {
                $field[$i] = ($alterType === 'ADD') ? "\n\tADD " . $data['_literal'] : "\n\tMODIFY " . $data['_literal'];
            } else {
                if ($alterType === 'ADD') {
                    $field[$i]['_literal'] = "\n\tADD ";
                } else {
                    $field[$i]['_literal'] = empty($data['new_name']) ? "\n\tMODIFY " : "\n\tCHANGE ";
                }

                
Home | Imprint | This part of the site doesn't use cookies.