!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/lampp/lib/php/test/MDB2/tests/Standard/   drwxr-xr-x
Free 9.91 GB of 61.93 GB (16.01%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ReverseTest.php (31.79 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5                                                 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2007 Lukas Smith, Lorenzo Alberton                |
// | All rights reserved.                                                 |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB  |
// | API as well as database abstraction for PHP applications.            |
// | This LICENSE is in the BSD license style.                            |
// |                                                                      |
// | Redistribution and use in source and binary forms, with or without   |
// | modification, are permitted provided that the following conditions   |
// | are met:                                                             |
// |                                                                      |
// | Redistributions of source code must retain the above copyright       |
// | notice, this list of conditions and the following disclaimer.        |
// |                                                                      |
// | Redistributions in binary form must reproduce the above copyright    |
// | notice, this list of conditions and the following disclaimer in the  |
// | documentation and/or other materials provided with the distribution. |
// |                                                                      |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,    |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission.                                                  |
// |                                                                      |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// |  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          |
// | POSSIBILITY OF SUCH DAMAGE.                                          |
// +----------------------------------------------------------------------+
// | Author: Lorenzo Alberton <l dot alberton at quipo dot it>            |
// +----------------------------------------------------------------------+
//
// $Id: ReverseTest.php 322076 2012-01-11 15:51:09Z danielc $

require_once dirname(__DIR__) . '/autoload.inc';

class 
Standard_ReverseTest extends Standard_Abstract
{
    
//test table name (it is dynamically created/dropped)
    
public $table       'testtable';
    public 
$fields      = array();
    public 
$indices     = array();
    public 
$constraints = array();

    public 
$table2      'testtable2';
    public 
$fields2      = array();
    public 
$indices2     = array();
    public 
$constraints2 = array();

    
/**
     * The non-standard helper
     * @var Nonstandard_Base
     */
    
protected $nonstd;


    
/**
     * Can not use setUp() because we are using a dataProvider to get multiple
     * MDB2 objects per test.
     *
     * @param array $ci  an associative array with two elements.  The "dsn"
     *                   element must contain an array of DSN information.
     *                   The "options" element must be an array of connection
     *                   options.
     */
    
protected function manualSetUp($ci) {
        
parent::manualSetUp($ci);

        
$this->nonstd Nonstandard_Base::factory($this->db$this);

        
$this->db->loadModule('Reverse'nulltrue);
        
$this->db->loadModule('Manager'nulltrue);

        
//Table structure
        
$this->fields = array(
            
'id' => array(  //PK
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
                
'length'  => 4,
            ),
            
'id2' => array( //UNIQUE_MULTIFIELD(1/2)
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
            
'id3' => array( //UNIQUE_MULTIFIELD(2/2)
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
            
'id4' => array( //UNIQUE
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
            
'somename' => array( //NORMAL INDEX
                
'type'   => 'text',
                
'length' => 12,
            ),
            
'somedescription' => array( //INDEX_MULTIFIELD(1/2)
                
'type'   => 'text',
                
'length' => 12,
            ),
            
'sex' => array( //INDEX_MULTIFIELD(2/2)
                
'type' => 'text',
                
'length' => 1,
                
'default' => 'M',
            ),
        );

        
$options = array();
        if (
'mysql' == substr($this->db->phptype05)) {
            
$options['type'] = 'innodb';
        }

        if (!
$this->tableExists($this->table)) {
            
$this->db->manager->createTable($this->table$this->fields$options);
        }

        
//Table2 structure
        
$this->fields2 = array(
            
'ext_id' => array(  //SINGLE_FK
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
            
'ext_id2' => array( //MULTI_FK(1/2)
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
            
'ext_id3' => array( //MULTI_FK(2/2)
                
'type'     => 'integer',
                
'unsigned' => 1,
                
'notnull'  => 1,
                
'default'  => 0,
            ),
        );

        if (!
$this->tableExists($this->table2)) {
            
$this->db->manager->createTable($this->table2$this->fields2$options);
        }
    }

    public function 
tearDown() {
        if (!
$this->db || MDB2::isError($this->db)) {
            return;
        }
        if (
$this->tableExists($this->table2)) {
            
$this->db->manager->dropTable($this->table2);
        }
        if (
$this->tableExists($this->table)) {
            
$this->db->manager->dropTable($this->table);
        }
        
parent::tearDown();
    }

    public function 
setUpIndices()
    {
        
//Indices definition
        
$this->indices = array(
            
'sometestindex' => array(
                
'fields' => array(
                    
'somename' => array(
                        
'sorting' => 'ascending',
                    ),
                ),
                
'unique' => false,
            ),
            
'multipletestindex' => array(
                
'fields' => array(
                    
'somedescription' => array(
                        
'sorting' => 'ascending',
                    ),
                    
'sex' => array(
                        
'sorting' => 'ascending',
                    ),
                ),
            ),
        );
        foreach (
$this->indices as $index_name => $index) {
            
$result $this->db->manager->createIndex($this->table$index_name$index);
            
$this->assertFalse(MDB2::isError($result), 'Error creating index: '.$index_name);
            if (
MDB2::isError($result)) {
                break;
            }
        }
        return 
MDB2::isError($result);
    }

    public function 
setUpConstraints()
    {
        
//Constraints definition
        
$this->constraints = array(
            
'pkfield' => array(
                
'fields' => array(
                    
'id' => array(
                        
'sorting' => 'ascending',
                    ),
                ),
                
'primary' => true,
            ),
            
'multipleunique' => array(
                
'fields' => array(
                    
'id2' => array(
                        
'sorting' => 'ascending',
                    ),
                    
'id3' => array(
                        
'sorting' => 'ascending',
                    ),
                ),
                
'unique' => true,
            ),
            
'singleunique' => array(
                
'fields' => array(
                    
'id4' => array(
                        
'sorting' => 'ascending',
                    ),
                ),
                
'unique' => true,
            ),
        );
        
$failed1 false;
        foreach (
$this->constraints as $constraint_name => $constraint) {
            
//$this->db->manager->dropConstraint($this->table, $constraint_name);
            
$result $this->db->manager->createConstraint($this->table$constraint_name$constraint);
            
//$this->assertFalse(MDB2::isError($result), 'Error creating constraint: '.$constraint_name);
            
if (MDB2::isError($result)) {
                
$this->fail('Error creating constraint "'.$constraint_name.'": '.$result->getUserInfo(). ' :: '.$result->getUserInfo());
                
$failed1 true;
                break;
            }
        }

        
$this->fk_constraint1_name $this->table2.'_fk_'.$this->table.'_id';
        
//$this->fk_constraint2_name = $this->table2.'_fk_'.$this->table.'_id2_id3';
        
$this->fk_constraint2_name $this->table2.'_fk_'.$this->table.'_2f';
        
$this->constraints2 = array(
            
$this->fk_constraint1_name => array(
                
'primary' => false,
                
'unique'  => false,
                
'foreign' => true,
                
'check'   => false,
                
'fields' => array(
                    
'ext_id' => array(
                        
'position' => 1,
                        
'sorting' => 'ascending',
                    ),
                ),
                
'references' => array(
                    
'table'  => $this->table,
                    
'fields' => array(
                        
'id' => array(
                            
'position' => 1,
                        ),
                    ),
                ),
                
'onupdate' => 'CASCADE',
                
'ondelete' => 'CASCADE',
                
'match'    => 'FULL',
                
'deferrable'        => false,
                
'initiallydeferred' => false,
            ),
            
$this->fk_constraint2_name => array(
                
'primary' => false,
                
'unique'  => false,
                
'foreign' => true,
                
'check'   => false,
                
'fields' => array(
                    
'ext_id2' => array(
                        
'position' => 1,
                        
'sorting'  => 'ascending',
                    ),
                    
'ext_id3' => array(
                        
'position' => 2,
                        
'sorting'  => 'ascending',
                    ),
                ),
                
'references' => array(
                    
'table'  => $this->table,
                    
'fields' => array(
                        
'id2' => array(
                            
'position' => 1,
                        ),
                        
'id3' => array(
                            
'position' => 2,
                        ),
                    ),
                ),
                
'onupdate' => 'NO ACTION',
                
'ondelete' => 'NO ACTION',
                
'match'    => 'FULL',
                
'deferrable'        => false,
                
'initiallydeferred' => false,
            ),
        );
        
$failed2 false;
        foreach (
$this->constraints2 as $constraint_name => $constraint) {
            
//$this->db->manager->dropConstraint($this->table, $constraint_name);
            
$result $this->db->manager->createConstraint($this->table2$constraint_name$constraint);
            
//$this->assertFalse(MDB2::isError($result), 'Error creating constraint: '.$constraint_name);
            
if (MDB2::isError($result)) {
                
$this->fail('Error creating constraint "'.$constraint_name.'": '.$result->getUserInfo(). ' :: '.$result->getUserInfo());
                
$failed2 true;
                break;
            }
        }

        return !(
$failed1 || $failed2);
    }

    
/**
     * Test tableInfo('table_name')
     * @dataProvider provider
     */
    
public function testTableInfo($ci) {
        
$this->manualSetUp($ci);

        if (!
$this->methodExists($this->db->reverse'tableInfo')) {
            
$this->markTestSkipped('tableInfo not supported.');
        }

        
$table_info $this->db->reverse->tableInfo($this->table);
        if (
MDB2::isError($table_info)) {
            
$this->fail('Error getting tableInfo(): '.$table_info->getUserInfo());
        } else {
            
$this->assertEquals(count($this->fields), count($table_info), 'The number of fields retrieved is different from the expected one');
            foreach (
$table_info as $field_info) {
                
$this->assertEquals($this->table$field_info['table'], 'the table name is not correct');
                if (!
array_key_exists(strtolower($field_info['name']), $this->fields)) {
                    
$this->fail('Field names do not match ('.$field_info['name'].' is unknown)');
                }
                
//expand test, for instance adding a check on types...
            
}
        }

        if (!
$this->supported('result_introspection')) {
            
$this->markTestSkipped('Introspection not supported.');
        }

        
$result $this->db->query('SELECT * FROM '.$this->table);
        
$table_info $this->db->reverse->tableInfo($result);
        if (
MDB2::isError($table_info)) {
            
$this->fail('Error getting tableInfo(): '.$table_info->getUserInfo());
        } else {
            
$this->assertEquals(count($this->fields), count($table_info), 'The number of fields retrieved is different from the expected one');
            foreach (
$table_info as $field_info) {
                
//not all the drivers are capable of returning the table name,
                //and may return an empty value
                
if (!empty($field_info['table'])) {
                    
$this->assertEquals($this->table$field_info['table'], 'the table name is not correct');
                }
                if (!
array_key_exists(strtolower($field_info['name']), $this->fields)) {
                    
$this->fail('Field names do not match ('.$field_info['name'].' is unknown)');
                }
                
//expand test, for instance adding a check on types...
            
}
        }
        
$result->free();
    }

    
/**
     * Test getTableFieldDefinition($table, $field_name)
     * @dataProvider provider
     */
    
public function testGetTableFieldDefinition($ci) {
        
$this->manualSetUp($ci);

        if (!
$this->methodExists($this->db->reverse'getTableFieldDefinition')) {
            
$this->markTestSkipped('Driver lacks getTableFieldDefinition.');
        }

        
//test integer not null
        
$field_info $this->db->reverse->getTableFieldDefinition($this->table'id');
        if (
MDB2::isError($field_info)) {
            
$this->fail('Error in getTableFieldDefinition(): '.$field_info->getUserInfo());
        } else {
            
$field_info array_shift($field_info);
            
$this->assertEquals('integer'$field_info['type'], 'The field type is different from the expected one');
            
$expected_length = ($this->db->phptype == 'oci8') ? 10 4;
            
$this->assertEquals($expected_length$field_info['length'], 'The field length is different from the expected one');
            
$this->assertTrue($field_info['notnull'], 'The field can be null unlike it was expected');
            
$this->assertEquals('0'$field_info['default'], 'The field default value is different from the expected one');
        }

        
//test blob
        
$field_info $this->db->reverse->getTableFieldDefinition($this->table_files'picture');
        if (
MDB2::isError($field_info)) {
            
$this->fail('Error in getTableFieldDefinition(): '.$field_info->getUserInfo());
        } else {
            
$field_info array_shift($field_info);
            
$this->assertEquals($field_info['type'], 'blob''The field type is different from the expected one');
            
$this->assertFalse($field_info['notnull'], 'The field cannot be null unlike it was expected');
        }

        
//test varchar(100) not null
        
$field_info $this->db->reverse->getTableFieldDefinition($this->table_users'user_name');
        if (
MDB2::isError($field_info)) {
            
$this->fail('Error in getTableFieldDefinition(): '.$field_info->getUserInfo());
        } else {
            
$field_info array_shift($field_info);
            
$this->assertEquals('text'$field_info['type'], 'The field type is different from the expected one');
            
$this->assertEquals(12$field_info['length'], 'The field length is different from the expected one');
            
$this->assertFalse($field_info['notnull'], 'The field can be null unlike it was expected');
            
$this->assertNull($field_info['default'], 'The field default value is different from the expected one');
            
$this->assertFalse($field_info['fixed'], 'The field fixed value is different from the expected one');
        }

        
//test decimal
        
$field_info $this->db->reverse->getTableFieldDefinition($this->table_users'quota');
        if (
MDB2::isError($field_info)) {
            
$this->fail('Error in getTableFieldDefinition(): '.$field_info->getUserInfo());
        } else {
            
$field_info array_shift($field_info);
            
$this->assertEquals('decimal'$field_info['type'], 'The field type is different from the expected one');
            
$expected_length = ($this->db->phptype == 'oci8') ? '22,2' '18,2';
            
$this->assertEquals($expected_length$field_info['length'], 'The field length is different from the expected one');
        }

        
$field_info $this->db->reverse->getTableFieldDefinition($this->table_users'user_name');
        if (
MDB2::isError($field_info)) {
            
$this->fail('Error in getTableFieldDefinition(): '.$field_info->getUserInfo());
        } else {
            
$field_info array_shift($field_info);
            
$this->assertEquals('text'$field_info['type'], 'The field type is different from the expected one');
            
$this->assertEquals(12$field_info['length'], 'The field length is different from the expected one');
            
$this->assertFalse($field_info['notnull'], 'The field can be null unlike it was expected');
            
$this->assertNull($field_info['default'], 'The field default value is different from the expected one');
            
$this->assertFalse($field_info['fixed'], 'The field fixed value is different from the expected one');
        }
    }

    
/**
     * Test getTableIndexDefinition($table, $index_name)
     * @dataProvider provider
     */
    
public function testGetTableIndexDefinition($ci) {
        
$this->manualSetUp($ci);

        if (!
$this->methodExists($this->db->reverse'getTableIndexDefinition')) {
            
$this->markTestSkipped('Driver lacks getTableIndexDefinition.');
        }

        
$this->setUpIndices();

        
//test index names
        
foreach ($this->indices as $index_name => $index) {
            
$index_info $this->db->reverse->getTableIndexDefinition($this->table$index_name);
            if (
MDB2::isError($index_info)) {
                
$this->fail('Error getting table index definition');
            } else {
                
$field_names array_keys($index['fields']);
                
$this->assertEquals($field_namesarray_keys($index_info['fields']), 'Error listing index fields');
            }
        }

        
//test INDEX
        
$index_name 'sometestindex';
        
$index_info $this->db->reverse->getTableIndexDefinition($this->table$index_name);
        if (
MDB2::isError($index_info)) {
            
$this->fail('Error in getTableIndexDefinition(): '.$index_info->getUserInfo());
        } else {
            
$this->assertEquals(1count($index_info['fields']), 'The INDEX is not on one field unlike it was expected');
            
$expected_fields array_keys($this->indices[$index_name]['fields']);
            
$actual_fields array_keys($index_info['fields']);
            
$this->assertEquals($expected_fields$actual_fields'The INDEX field names don\'t match');
            
$this->assertEquals(1$index_info['fields'][$expected_fields[0]]['position'], 'The field position in the INDEX is not correct');
        }

        
//test INDEX on MULTIPLE FIELDS
        
$index_name 'multipletestindex';
        
$index_info $this->db->reverse->getTableIndexDefinition($this->table$index_name);
        if (
MDB2::isError($index_info)) {
            
$this->fail('Error in getTableIndexDefinition(): '.$index_info->getUserInfo());
        } else {
            
$this->assertEquals(2count($index_info['fields']), 'The INDEX is not on two fields unlike it was expected');
            
$expected_fields array_keys($this->indices[$index_name]['fields']);
            
$actual_fields array_keys($index_info['fields']);
            
$this->assertEquals($expected_fields$actual_fields'The INDEX field names don\'t match');
            
$this->assertEquals(1$index_info['fields'][$expected_fields[0]]['position'], 'The field position in the INDEX is not correct');
            
$this->assertEquals(2$index_info['fields'][$expected_fields[1]]['position'], 'The field position in the INDEX is not correct');
        }

        if (!
$this->setUpConstraints()) {
            
$this->markTestSkipped('Could not set up constraints.');
        }
        
//constraints should NOT be listed
        
foreach (array_keys($this->constraints) as $constraint_name) {
            
$this->db->expectError(MDB2_ERROR_NOT_FOUND);
            
$result $this->db->reverse->getTableIndexDefinition($this->table$constraint_name);
            
$this->assertTrue(MDB2::isError($result), 'Error listing index definition, this is a CONSTRAINT');
        }

        
//test index created WITHOUT using MDB2 (i.e. without the "_idx" suffix)
        //NB: MDB2 > v.2.3.0 provides a fallback mechanism
    
}

    
/**
     * Test testGetTableConstraintDefinition($table, $constraint_name)
     * @dataProvider provider
     */
    
public function testGetTableConstraintDefinition($ci) {
        
$this->manualSetUp($ci);

        if (!
$this->methodExists($this->db->reverse'getTableConstraintDefinition')) {
            
$this->markTestSkipped('Driver lacks getTableConstraintDefinition.');
        }

        if (!
$this->setUpConstraints()) {
            
$this->markTestSkipped('Could not set up constraints.');
        }

        
$primary_namechange = array(
            
'mysql',
            
'mysqli',
            
'sqlite',
        );


        
//test constraint names
        
foreach ($this->constraints as $constraint_name => $constraint) {
            if (!empty(
$constraint['primary'])
                && 
in_array($this->db->phptype$primary_namechange))
            {
                
// Change "pkfield" to "primary".
                
$constraint_name 'primary';
            }
            
$result $this->db->reverse->getTableConstraintDefinition($this->table$constraint_name);
            if (
MDB2::isError($result)) {
                
$this->fail('Error getting table constraint definition ('.$constraint_name.')');
            } else {
                
$constraint_names array_keys($constraint['fields']);
                
$this->assertEquals($constraint_namesarray_keys($result['fields']), 'Error listing constraint fields');
            }
        }

        
$this->setUpIndices();
        
//indices should NOT be listed
        
foreach (array_keys($this->indices) as $index_name) {
            
$this->db->expectError(MDB2_ERROR_NOT_FOUND);
            
$result $this->db->reverse->getTableConstraintDefinition($this->table$index_name);
            
$this->db->popExpect();
            
$this->assertTrue(MDB2::isError($result), 'Error listing constraint definition, this is a normal INDEX');
        }

        
//test PK
        
if (in_array($this->db->phptype$primary_namechange)) {
            
$constraint_name 'primary';
        } else {
            
$constraint_name 'pkfield';
        }
        
$constraint_info $this->db->reverse->getTableConstraintDefinition($this->table$constraint_name);
        if (
MDB2::isError($constraint_info)) {
            
$this->fail('Error in getTableConstraintDefinition(): '.$constraint_info->getUserInfo());
        } else {
            
$this->assertTrue($constraint_info['primary'], 'The field is not a PK unlike it was expected');
        }

        
//test UNIQUE
        
$constraint_name 'singleunique';
        
$constraint_info $this->db->reverse->getTableConstraintDefinition($this->table$constraint_name);
        if (
MDB2::isError($constraint_info)) {
            
$this->fail('Error in getTableConstraintDefinition(): '.$constraint_info->getUserInfo());
        } else {
            
$this->assertTrue($constraint_info['unique'], 'The field is not a PK unlike it was expected');
            
$this->assertTrue(empty($constraint_info['primary']), 'The field is a PK unlike it was expected');
            
$this->assertEquals(1count($constraint_info['fields']), 'The UNIQUE INDEX is not on one field unlike it was expected');
            
$expected_fields array_keys($this->constraints[$constraint_name]['fields']);
            
$actual_fields array_keys($constraint_info['fields']);
            
$this->assertEquals($expected_fields$actual_fields'The UNIQUE INDEX field names don\'t match');
            
$this->assertEquals(1$constraint_info['fields'][$expected_fields[0]]['position'], 'The field position in the INDEX is not correct');
        }

        
//test UNIQUE on MULTIPLE FIELDS
        
$constraint_name 'multipleunique';
        
$constraint_info $this->db->reverse->getTableConstraintDefinition($this->table$constraint_name);
        if (
MDB2::isError($constraint_info)) {
            
$this->fail('Error in getTableConstraintDefinition(): '.$constraint_info->getUserInfo());
        } else {
            
$this->assertTrue($constraint_info['unique'], 'The field is not a PK unlike it was expected');
            
$this->assertTrue(empty($constraint_info['primary']), 'The field is a PK unlike it was expected');
            
$this->assertEquals(2count($constraint_info['fields']), 'The UNIQUE INDEX is not on two fields unlike it was expected');
            
$expected_fields array_keys($this->constraints[$constraint_name]['fields']);
            
$actual_fields array_keys($constraint_info['fields']);
            
$this->assertEquals($expected_fields$actual_fields'The UNIQUE INDEX field names don\'t match');
            
$this->assertEquals(1$constraint_info['fields'][$expected_fields[0]]['position'], 'The field position in the INDEX is not correct');
            
$this->assertEquals(2$constraint_info['fields'][$expected_fields[1]]['position'], 'The field position in the INDEX is not correct');
        }

        
//test FOREIGN KEYs
        
foreach (array_keys($this->constraints2) as $constraint_name) {
            
$constraint_info $this->db->reverse->getTableConstraintDefinition($this->table2$constraint_name);
            if (
MDB2::isError($constraint_info)) {
                
$this->fail('Error in getTableConstraintDefinition():'$constraint_info->getUserInfo());
            } else {
                
$this->_compareFKdefinitions($this->constraints2[$constraint_name], $constraint_info);
            }
        }
    }

    
/**
     * Check the original FK constraint definition against the reverse engineered one.
     *
     * Ideally, the retrieved FK constraint definition should be equal to the
     * one used to create the constraint, but not all the DBMS support all the
     * parameters, so check the common base and do some generic checks for the
     * other patameters.
     * @dataProvider provider
     */
    
public function _compareFKdefinitions($expected$actual) {
        
//ideal case: all the parameters are supported by all the DBMS:
        //$this->assertEquals($expected, $actual);

        
$this->assertEquals($expected['primary'], $actual['primary']);
        
$this->assertEquals($expected['unique'],  $actual['unique']);
        
$this->assertEquals($expected['foreign'], $actual['foreign']);
        
$this->assertEquals($expected['check'],   $actual['check']);
        
$this->assertEquals(array_keys($expected['fields']), array_keys($actual['fields']));
        
$this->assertEquals($expected['references'],   $actual['references']);
        
$this->assertEquals($expected['deferrable'],   $actual['deferrable']);
        
$this->assertEquals($expected['initiallydeferred'],   $actual['initiallydeferred']);
        
$this->assertTrue(!empty($actual['match']));
        
$this->assertTrue(!empty($actual['onupdate']));
        
$this->assertTrue(!empty($actual['ondelete']));
    }

    
/**
     * Test getSequenceDefinition($sequence)
     * @dataProvider provider
     */
    
public function testGetSequenceDefinition($ci) {
        
$this->manualSetUp($ci);

        
//setup
        
$this->db->loadModule('Manager'nulltrue);
        
$sequence 'test_sequence';
        
$sequences $this->db->manager->listSequences();
        if (!
in_array($sequence$sequences)) {
            
$result $this->db->manager->createSequence($sequence);
            
$action 'create sequence';
            if (
MDB2::isError($result)) {
                if (
$result->getCode() == MDB2_ERROR_NO_PERMISSION
                    
|| $result->getCode() == MDB2_ERROR_ACCESS_VIOLATION)
                {
                    
$this->markTestSkipped("Test user lacks permission to $action");
                }
                
$this->fail("Could not $action: " $result->getUserInfo());
            }
        }

        
//test
        
$start $this->db->nextId($sequence);
        
$def $this->db->reverse->getSequenceDefinition($sequence);
        
$this->assertEquals($start+1, (isset($def['start']) ? $def['start'] : 1), 'Error getting sequence definition');

        
//cleanup
        
$result $this->db->manager->dropSequence($sequence);
        
$this->assertFalse(MDB2::isError($result), 'Error dropping a sequence');
    }

    
/**
     * Test getTriggerDefinition($trigger)
     * @dataProvider provider
     */
    
public function testGetTriggerDefinition($ci) {
        
$this->manualSetUp($ci);

        
//setup
        
$trigger_name 'test_trigger';

        if (!
$this->nonstd) {
            
$this->markTestSkipped('No Nonstandard Helper for this phptype.');
        }

        
$action 'create trigger';
        
$result $this->nonstd->createTrigger($trigger_name$this->table);
        if (
MDB2::isError($result)) {
            if (
$result->getCode() == MDB2_ERROR_NO_PERMISSION
                
|| $result->getCode() == MDB2_ERROR_ACCESS_VIOLATION)
            {
                
$this->markTestSkipped("Test user lacks permission to $action");
            }
            
$this->fail("Could not $action: " $result->getUserInfo());
        }

        
//test
        
$def $this->db->reverse->getTriggerDefinition($trigger_name);
        if (
MDB2::isError($def)) {
            
$this->fail('getTriggerDefinition: '.$def->getUserInfo());
        } else {
            
$this->nonstd->checkTrigger($trigger_name$this->table$def);
        }

        
//cleanup
        
$result $this->nonstd->dropTrigger($trigger_name$this->table);
        if (
MDB2::isError($result)) {
            
$this->fail('Error dropping the trigger: '.$result->getUserInfo());
        }
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.7439 ]--