Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
6b4fd89
[BUG] - When PostgreSQL version is higher than 8.1, fixes the message…
phackwer Jul 19, 2016
069a9e0
[ADD] - small test
phackwer Jul 19, 2016
ec17cd5
[FIX] - almost PR the wrong number
phackwer Jul 19, 2016
f16c0eb
[FIX] - lastInsertId test was incomplete
phackwer Jul 19, 2016
d0083ab
[FIX] - expect adjusted
phackwer Jul 20, 2016
873d843
[UPD] - New try for the bloody test
phackwer Jul 20, 2016
5662ae7
[FIX] - Test works!
phackwer Jul 20, 2016
75f35cd
[FIX] - Test works and code too! Woohoo
phackwer Jul 20, 2016
e18226f
[FIX] - Test works and code too! Woohoo! Small error fixed for server…
phackwer Jul 20, 2016
57a7054
Merge remote-tracking branch 'php-src/PHP-7.0.9' into PHP-7.0.9
phackwer Jul 20, 2016
b91a7b5
[UPD] - Replaced the return NULL when no name is provided by a LASTVA…
phackwer Jul 20, 2016
53aa5a6
[UPD] - Removing commented code
phackwer Jul 20, 2016
f3e3f37
Update bug_last_insert_id.phpt
phackwer Jul 20, 2016
88f36ad
Update pgsql_driver.c
phackwer Jul 20, 2016
32984fd
[FIX] - 2 leaks
phackwer Jul 20, 2016
58ea586
FIX memory leak - passed all local tests
phackwer Jul 20, 2016
39ad332
Removed authoring :-(
phackwer Jul 21, 2016
68cc4de
Removed authoring :-(
phackwer Jul 21, 2016
739df6d
Removing user and password, commited by accident
phackwer Jul 21, 2016
04f3bc7
Using PQserverVersion - less queries, no atoi
phackwer Jul 22, 2016
26eb287
Update pgsql_driver.c
phackwer Jul 26, 2016
b241486
[FIX] - Adjust to use the same DB instance
phackwer Jul 26, 2016
c577ac3
[UPD] - spaces, tabs, and everything nice.
phackwer Jul 26, 2016
2d03c4d
[UPD] - Fix typo
Jul 26, 2016
d79d963
[FIX] - Ident!
phackwer Jul 26, 2016
8e2daab
FIx the 3 lines on test name.
phackwer Jul 27, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions ext/pdo_pgsql/pgsql_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,31 +361,30 @@ static char *pdo_pgsql_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t *
{
pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
char *id = NULL;
PGresult *res;
ExecStatusType status;
const char *q[1];
q[0] = name;

if (name == NULL) {
if (H->pgoid == InvalidOid) {
return NULL;
}
*len = spprintf(&id, 0, ZEND_LONG_FMT, (zend_long) H->pgoid);
if (PHP_PDO_PGSQL_LASTVAL_PG_VERSION <= PQserverVersion(H->server) && name == NULL) {
res = PQexec(H->server, "SELECT LASTVAL()");
} else {
PGresult *res;
ExecStatusType status;
const char *q[1];
q[0] = name;
res = PQexecParams(H->server, "SELECT CURRVAL($1)", 1, NULL, q, NULL, NULL, 0);
status = PQresultStatus(res);
}
status = PQresultStatus(res);

if (res && (status == PGRES_TUPLES_OK)) {
id = estrdup((char *)PQgetvalue(res, 0, 0));
*len = PQgetlength(res, 0, 0);
} else {
pdo_pgsql_error(dbh, status, pdo_pgsql_sqlstate(res));
}
if (res && (status == PGRES_TUPLES_OK)) {
id = estrdup((char *)PQgetvalue(res, 0, 0));
*len = PQgetlength(res, 0, 0);
} else {
pdo_pgsql_error(dbh, status, pdo_pgsql_sqlstate(res));
*len = spprintf(&id, 0, ZEND_LONG_FMT, (zend_long) H->pgoid);
}

if (res) {
PQclear(res);
}
if (res) {
PQclear(res);
}

return id;
}

Expand Down
2 changes: 2 additions & 0 deletions ext/pdo_pgsql/php_pdo_pgsql_int.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

#define PHP_PDO_PGSQL_CONNECTION_FAILURE_SQLSTATE "08006"

#define PHP_PDO_PGSQL_LASTVAL_PG_VERSION 80100

typedef struct {
const char *file;
int line;
Expand Down
36 changes: 36 additions & 0 deletions ext/pdo_pgsql/tests/bug_last_insert_id.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
--TEST--
currval() vs lastval() - PDO PgSQL Bug #1134 [BUG] New record, PostgreSQL and the Primary key https://github.com/phalcon/cphalcon/issues/1134
--SKIPIF--
<?php
if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
require dirname(__FILE__) . '/config.inc';
require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
PDOTest::skip();
?>
--FILE--
<?php

require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';

$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');

$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

@$db->query('CREATE TABLE test_last_id (id SERIAL NOT NULL, field1 VARCHAR(10))');

$stmt = $db->prepare("INSERT INTO test_last_id (field1) VALUES ('test')");

$stmt->execute();

/**
* No sequence name informed
*/
var_dump($db->lastInsertId());
/**
* Sequence name informed
*/
var_dump($db->lastInsertId('test_last_id_id_seq'));
?>
--EXPECTREGEX--
string\([0-9]*\)\ \"[0-9]*\"
string\([0-9]*\)\ \"[0-9]*\"
4 changes: 2 additions & 2 deletions ext/pdo_pgsql/tests/common.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Postgres
if (!extension_loaded('pdo_pgsql')) print 'skip'; ?>
--REDIRECTTEST--
# magic auto-configuration
# Also update config.inc if you make changes here...
# Also update config.inc if you make changes here...

$config = array(
'TESTS' => __DIR__ . '/ext/pdo/tests'
Expand All @@ -20,5 +20,5 @@ if (false !== getenv('PDO_PGSQL_TEST_DSN')) {
} else {
$config['ENV']['PDOTEST_DSN'] = 'pgsql:host=localhost port=5432 dbname=test user= password=';
}

return $config;