From a1dd674c449eef88e42e0db4209866b0781228c9 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Wed, 19 Jul 2017 14:08:48 -0700 Subject: [PATCH] Tests added --- .../pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt | 60 ++++++++++++++++++ .../pdo_278_lastinsertid_seq_2.phpt | 62 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt create mode 100644 test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt diff --git a/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt new file mode 100644 index 00000000..fe7a7972 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt @@ -0,0 +1,60 @@ +--TEST-- +Provide name in lastInsertId to retrieve the last sequence number +--SKIPIF-- +--FILE-- +getAttribute(PDO::ATTR_SERVER_VERSION)); + if ($version_arr[0] < 11) { + echo "Done\n"; + } + else { + $tableName1 = GetTempTableName('tab1'); + $tableName2 = GetTempTableName('tab2'); + $sequenceName = 'sequence1'; + + $stmt = $conn->query("IF OBJECT_ID('$sequenceName', 'SO') IS NOT NULL DROP SEQUENCE $sequenceName"); + $sql = "CREATE TABLE $tableName1 (seqnum INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)"; + $stmt = $conn->query($sql); + $sql = "CREATE TABLE $tableName2 (ID INT IDENTITY(1,2), SomeValue char(10))"; + $stmt = $conn->query($sql); + + $sql = "CREATE SEQUENCE $sequenceName AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100 CYCLE"; + $stmt = $conn->query($sql); + + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 20 )"); + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 40 )"); + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 60 )"); + $ret = $conn->exec("INSERT INTO $tableName2 VALUES( '20' )"); + // return the last sequence number is sequence name is provided + $lastSeq = $conn->lastInsertId($sequenceName); + // defaults to $tableName2 -- because it returns the last inserted id value + $lastRow = $conn->lastInsertId(); + + if ($lastSeq == 3 && $lastRow == 1) { + echo "Done\n"; + } + else { + echo "sequence value or identity does not match as expected\n"; + } + $stmt = $conn->query("DROP TABLE $tableName1"); + $stmt = $conn->query("DROP TABLE $tableName2"); + $stmt = $conn->query("DROP SEQUENCE $sequenceName"); + $stmt = null; + } + $conn = null; +} +catch (Exception $e){ + echo "Exception $e\n"; +} + +?> +--EXPECT-- +Done \ No newline at end of file diff --git a/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt new file mode 100644 index 00000000..08cb7b92 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt @@ -0,0 +1,62 @@ +--TEST-- +LastInsertId returns the last sequences operating on the same table +--SKIPIF-- +--FILE-- +getAttribute(PDO::ATTR_SERVER_VERSION)); + if ($version_arr[0] < 11) { + echo "Done\n"; + } + else { + $tableName = GetTempTableName('tab'); + $sequence1 = 'sequence1'; + $sequence2 = 'sequenceNeg1'; + $stmt = $conn->query("IF OBJECT_ID('$sequence1', 'SO') IS NOT NULL DROP SEQUENCE $sequence1"); + $stmt = $conn->query("IF OBJECT_ID('$sequence2', 'SO') IS NOT NULL DROP SEQUENCE $sequence2"); + $sql = "CREATE TABLE $tableName (ID INT IDENTITY(1,1), SeqNumInc INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)"; + $stmt = $conn->query($sql); + $sql = "CREATE SEQUENCE $sequence1 AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100"; + $stmt = $conn->query($sql); + + $sql = "CREATE SEQUENCE $sequence2 AS INTEGER START WITH 200 INCREMENT BY -1 MINVALUE 101 MAXVALUE 200"; + $stmt = $conn->query($sql); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 20 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 180 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 40 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 160 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 60 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 140 )"); + // return the last sequence number of 'sequence1' + $lastSeq1 = $conn->lastInsertId($sequence1); + + // return the last sequence number of 'sequenceNeg1' + $lastSeq2 = $conn->lastInsertId($sequence2); + + // providing a table name in lastInsertId should return an empty string + $lastSeq3 = $conn->lastInsertId($tableName); + + if ($lastSeq1 == 3 && $lastSeq2 == 198 && $lastSeq3 == "") { + echo "Done\n"; + } + $stmt = $conn->query("DROP TABLE $tableName"); + $stmt = $conn->query("DROP SEQUENCE $sequence1"); + $stmt = $conn->query("DROP SEQUENCE $sequence2"); + $stmt = null; + } + $conn = null; +} + catch (Exception $e){ + echo "Exception $e\n"; +} + +?> +--EXPECT-- +Done \ No newline at end of file