PHP  
 PHP_5_5
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Test Failure Report for ext/pdo_odbc/tests/long_columns.phpt ('PDO ODBC "long" columns')

Script

1: <?php
2:
// setup: set PDOTEST_DSN environment variable
3: //        for MyODBC (MySQL) and MS SQL Server, you need to also set PDOTEST_USER and PDOTEST_PASS
4: //
5: // can use MS SQL Server on Linux - using unixODBC
6: //   -RHEL6.2
7: //   -download & instructions: http://www.microsoft.com/en-us/download/details.aspx?id=28160
8: //      -Linux6\sqlncli-11.0.1790.0.tar.gz (it calls RHEL6.x 'Linux6' for some reason)
9: //   -follow instructions on web page and install script
10: //   -may have to specify connection info in connection string without using a DSN (DSN-less connection)
11: //      -for example:
12: //            set PDOTEST_DSN='odbc:Driver=SQL Server Native Client 11.0;Server=10.200.51.179;Database=testdb'
13: //            set PDOTEST_USER=sa
14: //            set PDOTEST_PASS=Password01
15: //
16: // on Windows, the easy way to do this:
17: // 1. install MS Access (part of MS Office) and include ODBC (Development tools feature)
18: //       install the x86 build of the Drivers. You might not be able to load the x64 drivers.
19: // 2. in Control Panel, search for ODBC and open "Setup data sources (ODBC)"
20: // 3. click on System DSN tab
21: // 4. click Add and choose "Microsoft Access Driver (*.mdb, *.accdb)" driver
22: // 5. enter a DSN, ex: accdb12
23: // 6. click 'Create' and select a file to save the database as
24: //       -otherwise, you'll have to open MS Access, create a database, then load that file in this Window to map it to a DSN
25: // 7. set the environment variable PDOTEST_DSN="odbc:<system dsn from step 5>" ex: SET PDOTEST_DSN=odbc:accdb12
26: //         -note: on Windows, " is included in environment variable
27: // 
28: // easy way to compile:
29: // configure --disable-all --enable-cli --enable-zts --enable-pdo --with-pdo-odbc --enable-debug
30: // configure --disable-all --eanble-cli --enable-pdo --with-pdo-odbc=unixODBC,/usr,/usr --with-unixODBC=/usr --enable-debug
31: //
32:
33:
require 'ext/pdo/tests/pdo_test.inc';
34:
$db PDOTest::test_factory('ext/pdo_odbc/tests/common.phpt');
35:
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_SILENT);
36:
37: if (
false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data CLOB)')) {
38:     if (
false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data longtext)')) {
39:         if (
false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data varchar(4000))')) {
40:             die(
"BORK: don't know how to create a long column here:\n" implode(", "$db->errorInfo()));
41:         }
42:     }
43: }
44:
45:
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
46:
47:
// the driver reads columns in blocks of 255 bytes and then reassembles those blocks into a single buffer.
48: // test sizes around 255 to make sure that the reassembly works (and that the column is split into 255 byte blocks by the database)
49: // also, test sizes below 255 to make sure that they work - and are not treated as a long column (should be read in a single read)
50:
$sizes = array(325364791282532542552562572581022102310241025102651051151251351412781279128012811282204620472048204920501534153515361537153830703071307230733074399839994000);
51:
52: function 
alpha_repeat($len) {
53:     
// use the alphabet instead of 'i' characters to make sure the blocks don't overlap when they are reassembled
54:     
$out "";
55:     while (
strlen($out) < $len) {
56:         
$out .= "abcdefghijklmnopqrstuvwxyz";
57:     }
58:     return 
substr($out0$len);
59: }
60:
61:
// don't use Prepared Statements. that fails on MS SQL server (works with Access, MyODBC), which is a separate failure, feature/code-path from what
62: // this test does - nice to be able to test using MS SQL server
63:
foreach ($sizes as $num) {
64:     
$text alpha_repeat($num);
65:     
$db->exec("INSERT INTO TEST VALUES($num, '$text')");
66: }
67:
68:
// verify data
69:
foreach ($db->query('SELECT id, data from TEST') as $row) {
70:     
$expect alpha_repeat($row[0]);
71:     if (
strcmp($expect$row[1])) {
72:         echo 
"Failed on size $row[id]:\n";
73:         
printf("Expected %d bytes, got %d\n"strlen($expect), strlen($row['data']));
74:         echo (
$expect) . "\n";
75:         echo (
$row['data']) . "\n";
76:     } else {
77:         echo 
"Passed on size $row[id]\n";
78:     }
79: }
80:
81: echo 
"Finished\n";
82:
83:

Expected

Passed on size 32
Passed on size 53
Passed on size 64
Passed on size 79
Passed on size 128
Passed on size 253
Passed on size 254
Passed on size 255
Passed on size 256
Passed on size 257
Passed on size 258
Passed on size 1022
Passed on size 1023
Passed on size 1024
Passed on size 1025
Passed on size 1026
Passed on size 510
Passed on size 511
Passed on size 512
Passed on size 513
Passed on size 514
Passed on size 1278
Passed on size 1279
Passed on size 1280
Passed on size 1281
Passed on size 1282
Passed on size 2046
Passed on size 2047
Passed on size 2048
Passed on size 2049
Passed on size 2050
Passed on size 1534
Passed on size 1535
Passed on size 1536
Passed on size 1537
Passed on size 1538
Passed on size 3070
Passed on size 3071
Passed on size 3072
Passed on size 3073
Passed on size 3074
Passed on size 3998
Passed on size 3999
Passed on size 4000
Finished

Output

BORK: don't know how to create a long column here:
42S01, 1050, [MySQL][ODBC 5.1 Driver][mysqld-5.1.73]Table 'TEST' already exists (SQLExecDirect[1050] at /var/php_gcov/PHP_5_5/ext/pdo_odbc/odbc_driver.c:247), 42S01

Diff

001+ BORK: don't know how to create a long column here:
002+ 42S01, 1050, [MySQL][ODBC 5.1 Driver][mysqld-5.1.73]Table 'TEST' already exists (SQLExecDirect[1050] at /var/php_gcov/PHP_5_5/ext/pdo_odbc/odbc_driver.c:247), 42S01
001- Passed on size 32
002- Passed on size 53
003- Passed on size 64
004- Passed on size 79
005- Passed on size 128
006- Passed on size 253
007- Passed on size 254
008- Passed on size 255
009- Passed on size 256
010- Passed on size 257
011- Passed on size 258
012- Passed on size 1022
013- Passed on size 1023
014- Passed on size 1024
015- Passed on size 1025
016- Passed on size 1026
017- Passed on size 510
018- Passed on size 511
019- Passed on size 512
020- Passed on size 513
021- Passed on size 514
022- Passed on size 1278
023- Passed on size 1279
024- Passed on size 1280
025- Passed on size 1281
026- Passed on size 1282
027- Passed on size 2046
028- Passed on size 2047
029- Passed on size 2048
030- Passed on size 2049
031- Passed on size 2050
032- Passed on size 1534
033- Passed on size 1535
034- Passed on size 1536
035- Passed on size 1537
036- Passed on size 1538
037- Passed on size 3070
038- Passed on size 3071
039- Passed on size 3072
040- Passed on size 3073
041- Passed on size 3074
042- Passed on size 3998
043- Passed on size 3999
044- Passed on size 4000
045- Finished

 

Generated at Tue, 26 Aug 2014 07:13:55 +0000 (6 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.