Annotation of embedaddon/php/ext/pdo_mysql/tests/mysql_pdo_test.inc, revision 1.1

1.1     ! misho       1: <?php
        !             2: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc');
        !             3: require_once(dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc');
        !             4: 
        !             5: class MySQLPDOTest extends PDOTest {
        !             6: 
        !             7:        static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null, $mydsn = null) {
        !             8: 
        !             9:                $dsn    = self::getDSN($mydsn);
        !            10:                $user   = PDO_MYSQL_TEST_USER;
        !            11:                $pass   = PDO_MYSQL_TEST_PASS;
        !            12:                $attr   = getenv('PDOTEST_ATTR');
        !            13: 
        !            14:                if (is_string($attr) && strlen($attr)) {
        !            15:                        $attr = unserialize($attr);
        !            16:                } else {
        !            17:                        $attr = null;
        !            18:                }
        !            19:                if ($user === false)
        !            20:                        $user = NULL;
        !            21:                if ($pass === false)
        !            22:                        $pass = NULL;
        !            23: 
        !            24:                $db = new $classname($dsn, $user, $pass, $attr);
        !            25:                if (!$db) {
        !            26:                        die("Could not create PDO object (DSN=$dsn, user=$user)\n");
        !            27:                }
        !            28: 
        !            29:                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        !            30:                $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
        !            31: 
        !            32:                return $db;
        !            33:        }
        !            34: 
        !            35:        static function createTestTable($db, $engine = null) {
        !            36:                if (!$engine)
        !            37:                        $engine = PDO_MYSQL_TEST_ENGINE;
        !            38: 
        !            39:                $db->exec('DROP TABLE IF EXISTS test');
        !            40:                $db->exec('CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine);
        !            41:                $db->exec("INSERT INTO test(id, label) VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f')");
        !            42:        }
        !            43: 
        !            44:        static function getTableEngine() {
        !            45:                return PDO_MYSQL_TEST_ENGINE;
        !            46:        }
        !            47: 
        !            48: 
        !            49:        static function getDSN($new_options = null, $addition = '') {
        !            50:                if (!$new_options)
        !            51:                        return PDO_MYSQL_TEST_DSN . $addition;
        !            52: 
        !            53:                $old_options = array();
        !            54:                $dsn = substr(PDO_MYSQL_TEST_DSN,
        !            55:                        strpos(PDO_MYSQL_TEST_DSN, ':') + 1,
        !            56:                        strlen(PDO_MYSQL_TEST_DSN));
        !            57: 
        !            58:                // no real parser - any excotic setting can fool us
        !            59:                $parts = explode(';', $dsn);
        !            60:                foreach ($parts as $k => $v) {
        !            61:                        $tmp = explode('=', $v);
        !            62:                        if (count($tmp) == 2)
        !            63:                                $old_options[$tmp[0]] = $tmp[1];
        !            64:                }
        !            65: 
        !            66:                $options = $old_options;
        !            67:                foreach ($new_options as $k => $v)
        !            68:                        $options[$k] = $v;
        !            69: 
        !            70:                $dsn = 'mysql:';
        !            71:                foreach ($options as $k => $v)
        !            72:                        $dsn .= sprintf('%s=%s;', $k, $v);
        !            73: 
        !            74:                if ($addition)
        !            75:                        $dsn .= $addition;
        !            76:                else
        !            77:                        $dsn = substr($dsn, 0, strlen($dsn) -1);
        !            78: 
        !            79:                return $dsn;
        !            80:        }
        !            81: 
        !            82:        static function getClientVersion($db) {
        !            83:                return self::extractVersion($db->getAttribute(PDO::ATTR_CLIENT_VERSION));
        !            84:        }
        !            85: 
        !            86:        static function getServerVersion($db) {
        !            87:                return self::extractVersion($db->getAttribute(PDO::ATTR_SERVER_VERSION));
        !            88:        }
        !            89: 
        !            90:        static function extractVersion($version_string) {
        !            91:                /*
        !            92:                TODO:
        !            93:                We're a bit in trouble: PDO_MYSQL returns version strings.
        !            94:                That's wrong according to the manual. According to the manual
        !            95:                integers should be returned. However, this code needs to work
        !            96:                with stinky PDO_MYSQL and hopefully better PDO_MYSQLND.
        !            97:                */
        !            98: 
        !            99:                // already an int value?
        !           100:                if (is_int($version_string))
        !           101:                        return $version_string;
        !           102: 
        !           103:                // string but int value?
        !           104:                $tmp = (int)$version_string;
        !           105:                if (((string)$tmp) === $version_string)
        !           106:                        return $tmp;
        !           107: 
        !           108:                // stinky string which we need to parse
        !           109:                $parts = explode('.', $version_string);
        !           110:                if (count($parts) != 3)
        !           111:                        return -1;
        !           112: 
        !           113:                $version = (int)$parts[0] * 10000;
        !           114:                $version+= (int)$parts[1] * 100;
        !           115:                $version+= (int)$parts[2];
        !           116: 
        !           117:                return $version;
        !           118:        }
        !           119: 
        !           120:        static function getTempDir() {
        !           121: 
        !           122:                if (!function_exists('sys_get_temp_dir')) {
        !           123: 
        !           124:                        if (!empty($_ENV['TMP']))
        !           125:                                return realpath( $_ENV['TMP'] );
        !           126:                        if (!empty($_ENV['TMPDIR']))
        !           127:                                return realpath( $_ENV['TMPDIR'] );
        !           128:                        if (!empty($_ENV['TEMP']))
        !           129:                                return realpath( $_ENV['TEMP'] );
        !           130: 
        !           131:                        $temp_file = tempnam(md5(uniqid(rand(), TRUE)), '');
        !           132:                        if ($temp_file) {
        !           133:                                $temp_dir = realpath(dirname($temp_file));
        !           134:                                unlink($temp_file);
        !           135:                                return $temp_dir;
        !           136:                        }
        !           137:                        return FALSE;
        !           138:                } else {
        !           139:                        return sys_get_temp_dir();
        !           140:                }
        !           141: 
        !           142:        }
        !           143: 
        !           144:        static function detect_transactional_mysql_engine($db) {                
        !           145:                foreach ($db->query("show variables like 'have%'") as $row) {
        !           146:                        if (!empty($row) && $row[1] == 'YES' && ($row[0] == 'have_innodb' || $row[0] == 'have_bdb')) {
        !           147:                                return str_replace("have_", "", $row[0]);
        !           148:                        }
        !           149:                }
        !           150:                /* MySQL 5.6.1+ */
        !           151:                foreach ($db->query("SHOW ENGINES") as $row) {
        !           152:                        if (isset($row['engine']) && isset($row['support'])) {
        !           153:                                 if ('InnoDB' == $row['engine'] && ('YES' == $row['support'] || 'DEFAULT' == $row['support']))
        !           154:                                        return 'innodb';
        !           155:                        }
        !           156:                }
        !           157:                return false;
        !           158:        }
        !           159: 
        !           160:        static function isPDOMySQLnd() {
        !           161:                        ob_start();
        !           162:                        phpinfo();
        !           163:                        $tmp = ob_get_contents();
        !           164:                        ob_end_clean();
        !           165:                        $tmp = stristr($tmp, "PDO Driver for MySQL => enabled");
        !           166:                        return (bool)preg_match('/Client API version.*mysqlnd/', $tmp);
        !           167:        }
        !           168: 
        !           169:        static function dropTestTable($db = NULL) {
        !           170:                if (is_null($db))
        !           171:                        $db = self::factory();
        !           172: 
        !           173:                $db->exec('DROP TABLE IF EXISTS test');
        !           174:        }
        !           175: 
        !           176: }
        !           177: ?>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>