fix memory leak caused by pecalloced persistent connection; fix test indentation

This commit is contained in:
v-kaywon 2017-03-17 16:46:02 -07:00
parent b701fab642
commit c9492ae487
3 changed files with 26 additions and 25 deletions

View file

@ -433,6 +433,7 @@ int pdo_sqlsrv_db_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC)
} }
// throws PDOException if the ATTR_PERSISTENT is in connection options // throws PDOException if the ATTR_PERSISTENT is in connection options
CHECK_CUSTOM_ERROR( dbh->is_persistent, *g_henv_cp, PDO_SQLSRV_ERROR_UNSUPPORTED_DBH_ATTR ) { CHECK_CUSTOM_ERROR( dbh->is_persistent, *g_henv_cp, PDO_SQLSRV_ERROR_UNSUPPORTED_DBH_ATTR ) {
dbh->refcount--;
throw pdo::PDOException(); throw pdo::PDOException();
} }

View file

@ -6,33 +6,33 @@ Exception is thrown if the unsupported attribute ATTR_PERSISTENT is put into the
include 'pdo_tools.inc'; include 'pdo_tools.inc';
require_once("autonomous_setup.php"); require_once("autonomous_setup.php");
$database = "tempdb"; $database = "tempdb";
$dsn = "sqlsrv:Server = $serverName;Database = $database;"; $dsn = "sqlsrv:Server = $serverName;Database = $database;";
try{ try{
echo "Testing a connection with ATTR_PERSISTENT...\n"; echo "Testing a connection with ATTR_PERSISTENT...\n";
// setting PDO::ATTR_PERSISTENT in PDO constructor returns an exception // setting PDO::ATTR_PERSISTENT in PDO constructor returns an exception
$attr = array(PDO::ATTR_PERSISTENT => true); $attr = array(PDO::ATTR_PERSISTENT => true);
$conn = new PDO( $dsn, $username, $password, $attr); $conn = new PDO( $dsn, $username, $password, $attr);
//free the statement and connection //free the statement and connection
$stmt=null; $stmt=null;
$conn=null; $conn=null;
} }
catch( PDOException $e ) { catch( PDOException $e ) {
echo "Exception from unsupported attribute (ATTR_PERSISTENT) is caught\n"; echo "Exception from unsupported attribute (ATTR_PERSISTENT) is caught\n";
//exit; //exit;
} }
try{ try{
echo "\nTesting new connection after exception thrown in previous connection...\n"; echo "\nTesting new connection after exception thrown in previous connection...\n";
$tableName1 = GetTempTableName('tab1'); $tableName1 = GetTempTableName('tab1');
$conn = new PDO( $dsn, $username, $password ); $conn = new PDO( $dsn, $username, $password );
$sql = "CREATE TABLE $tableName1 (c1 int, c2 varchar(10))"; $sql = "CREATE TABLE $tableName1 (c1 int, c2 varchar(10))";
$stmt = $conn->query($sql); $stmt = $conn->query($sql);
$ret = $conn->exec("INSERT INTO $tableName1 VALUES(1, 'column2')"); $ret = $conn->exec("INSERT INTO $tableName1 VALUES(1, 'column2')");
$stmt = $conn->query("SELECT * FROM $tableName1"); $stmt = $conn->query("SELECT * FROM $tableName1");
$result = $stmt->fetch(PDO::FETCH_ASSOC); $result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result['c1'] == 1 && $result['c2'] == 'column2') { if ($result['c1'] == 1 && $result['c2'] == 'column2') {
echo "Test successfully"; echo "Test successfully";
} }
} }
catch( PDOException $e ) { catch( PDOException $e ) {
var_dump( $e); var_dump( $e);

View file

@ -6,20 +6,20 @@ Exception is thrown for the unsupported connection attribute ATTR_PREFETCH only
include 'pdo_tools.inc'; include 'pdo_tools.inc';
require_once("autonomous_setup.php"); require_once("autonomous_setup.php");
$database = "tempdb"; $database = "tempdb";
$dsn = "sqlsrv:Server = $serverName;Database = $database;"; $dsn = "sqlsrv:Server = $serverName;Database = $database;";
try{ try{
echo "Testing a connection with ATTR_PREFETCH before ERRMODE_EXCEPTION...\n"; echo "Testing a connection with ATTR_PREFETCH before ERRMODE_EXCEPTION...\n";
// setting PDO::ATTR_PERSISTENT in PDO constructor returns an exception // setting PDO::ATTR_PERSISTENT in PDO constructor returns an exception
$attr = array(PDO::ATTR_PREFETCH => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $attr = array(PDO::ATTR_PREFETCH => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$conn = new PDO( $dsn, $username, $password, $attr); $conn = new PDO( $dsn, $username, $password, $attr);
echo "Error from supported attribute (ATTR_PREFETCH) is silented\n\n"; echo "Error from supported attribute (ATTR_PREFETCH) is silented\n\n";
echo "Testing a connection with ATTR_PREFETCH after ERRMODE_EXCEPTION...\n"; echo "Testing a connection with ATTR_PREFETCH after ERRMODE_EXCEPTION...\n";
$attr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PREFETCH => true); $attr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PREFETCH => true);
$conn = new PDO( $dsn, $username, $password, $attr); $conn = new PDO( $dsn, $username, $password, $attr);
//free the statement and connection //free the statement and connection
$stmt=null; $stmt=null;
$conn=null; $conn=null;
} }
catch( PDOException $e ) { catch( PDOException $e ) {
echo "Exception from unsupported attribute (ATTR_PREFETCH) is caught\n"; echo "Exception from unsupported attribute (ATTR_PREFETCH) is caught\n";