--TEST-- Complex Query Test --DESCRIPTION-- Verifies the behavior of INSERT queries with and without the IDENTITY flag set. --ENV-- PHPT_EXEC=true --SKIPIF-- --FILE-- -204401468, "c2_tinyint" => 168, "c3_smallint" => 4787, "c4_bigint" =>1583186637, "c5_varchar" => "î<ÄäC~zããa.Oa._ߣ*©£ÃZUÄ/ä_ZãðäåhüCã+/.obî|ößß,ð¢ðð:ÄÐ:*/>+/¢aö.öÄ<ð:>äO~*~ßÄzå¢<ª£ðý.O,>Ü,åbü@böhýC*<<î:/Ur î¢UßåOaÄ:a|++ª©.r~:/+ä|©ýo++v_@BZ:©©AßCð.©/Ab<,îß>UãÜÜöbb|ßÐߣ:î<Ü<|ÖzÃz@>¢ª:a,CÜr__ª.<öÜCã+UÖU¢_üzü bÃ~ßo|, .î,b/U>äýaBZ@Ü£: bÖvýb>Ã/ÜÃ@üÖ/äb¢+r:Zß>ÐÜ|üu©ßZAC:Cßh *.ã£_ýîu|Urå.:aAUv@u>@<Öü.<ãZ böZAÜÖ£oüÐä*,ü:ðä"); $stmt = insertTest($conn1, $tableName, true, $inputs); $query = "SET IDENTITY_INSERT [$tableName] OFF;"; $stmt = sqlsrv_query($conn1, $query); if (!$stmt) { die("Unexpected execution outcome for \'$query\'."); } // expect this to fail $inputs = array("c1_int" => 1264768176, "c2_tinyint" => 111, "c3_smallint" => 23449, "c4_bigint" =>1421472052, "c5_varchar" => "uå©C@bðUOv~,©v,BZÜ*oh>zb_åÐä<@*OOå_Ö<ãuß/oßr <ðãbÜUßÜÃÖÄ~¢~£ bÜ©î.uÜТª:|_ÐüÄBÐbüåßÃv@,©/Ub,+AЩî:ÖrýB+~~ßßßãÜ+_ABðöU/O<ÖãüªOãuߣ~uÖ+ßÄrbî/:ÖÖo /_ÃO:uÃzðUvã£Aã_BÐ/>UCr,Äå aÄÐaãvÖZ@ªr*_::~/+.å~ð©aÄßbz*z<~rU~O+Z|A<_Büß©¢ö ::.Übýüßr/örh¢:ääU äOA~Aîr<¢äv¢Ä+hC/vßoUª+Oãªã*ð¢Bö.Zbh/ä,åä>*öðßUßý>aªbBbvßãÖ/bã|ýÖ u.zý©~äðzÐU.UA*a*.¢>î rß ~Cüßaö+rª~ß@aã/ÐCß*a,ªÄbb*~"); $stmt = insertTest($conn1, $tableName, false, $inputs); // expect this to pass $query = "SET IDENTITY_INSERT [$tableName] ON; SQL; SET IDENTITY_INSERT [$tableName] OFF;"; if (AE\isColEncrypted()){ // When AE is enabled, SQL types must be specified for sqlsrv_query $inputs = array("c1_int" => array(-411114769, null, null, SQLSRV_SQLTYPE_INT), "c2_tinyint" => array(198, null, null, SQLSRV_SQLTYPE_TINYINT), "c3_smallint" => array(1378, null, null, SQLSRV_SQLTYPE_SMALLINT), "c4_bigint" => array(140345831, null, null, SQLSRV_SQLTYPE_BIGINT), "c5_varchar" => array("Ü@ßaörêA*ÐüßA>_hOüv@|h~O<¢+*ÃÐCbazÜaåZ/Öö:ýãuöÐaz£ÐAh+u+rß:| U*¢ªåßÄÐ_vî@@~ChÐö_å*AAýBö¢B,ßbßå.ÃB+u*CAvÜ,ã>ªßCU<åî©ürz¢@ör¢*Öub¢BåaÜ@ª.äBv¢o~ ßýo oîu/>ÜÐÄ,ð,ðaOÖå>ðC:öZ>ßåð©<ð¢+£r.bO.©,uAßr>ÐÃÜ£B¢AªvaîvýßCÜUß åvöuª><îÐUC*aÖU©rªhr+>|äýî|oðröУ<ª<Ö|AªohäAî_vu~:~£Ãhü+ÃBuÄð ü@Z+Ä@hÖî¢|@bU£_ü/£ |:¢zb>@Uß© Ãão Ö@ãÐBã_öBOBÄÐhCÜb~Ö>îü rýåüUzuãrbzß/ªîUÐð©uå.ß@£__vBb©/Ür¢Öuåz£ä*å£/*ÃO", null, null, SQLSRV_SQLTYPE_VARCHAR(512))); $stmt = insertTest($conn1, $tableName, true, $inputs, $query); } else { $inputs = array("c1_int" => -411114769, "c2_tinyint" => 198, "c3_smallint" => 1378, "c4_bigint" => 140345831, "c5_varchar" => "Ü@ßaörêA*ÐüßA>_hOüv@|h~O<¢+*ÃÐCbazÜaåZ/Öö:ýãuöÐaz£ÐAh+u+rß:| U*¢ªåßÄÐ_vî@@~ChÐö_å*AAýBö¢B,ßbßå.ÃB+u*CAvÜ,ã>ªßCU<åî©ürz¢@ör¢*Öub¢BåaÜ@ª.äBv¢o~ ßýo oîu/>ÜÐÄ,ð,ðaOÖå>ðC:öZ>ßåð©<ð¢+£r.bO.©,uAßr>ÐÃÜ£B¢AªvaîvýßCÜUß åvöuª><îÐUC*aÖU©rªhr+>|äýî|oðröУ<ª<Ö|AªohäAî_vu~:~£Ãhü+ÃBuÄð ü@Z+Ä@hÖî¢|@bU£_ü/£ |:¢zb>@Uß© Ãão Ö@ãÐBã_öBOBÄÐhCÜb~Ö>îü rýåüUzuãrbzß/ªîUÐð©uå.ß@£__vBb©/Ür¢Öuåz£ä*å£/*ÃO"); $stmt = insertTest($conn1, $tableName, true, $inputs, $query); } $stmt1 = selectFromTable($conn1, $tableName); $rowCount = rowCount($stmt1); sqlsrv_free_stmt($stmt1); if ($rowCount != 2) { die("Table $tableName has $rowCount rows instead of 2."); } dropTable($conn1, $tableName); sqlsrv_close($conn1); endTest($testName); } function insertTest($conn, $tableName, $expectedOutcome, $inputs, $query = null) { $stmt = null; if (!AE\isColEncrypted()) { $insertSql = AE\getInsertSqlComplete($tableName, $inputs); if (! is_null($query)) { $sql = str_replace("SQL", $insertSql, $query); } else { $sql = $insertSql; } $stmt = sqlsrv_query($conn, $sql); $actualOutcome = ($stmt !== false); } else { // must bind parameters $insertSql = AE\getInsertSqlPlaceholders($tableName, $inputs); $params = array(); foreach ($inputs as $key => $input) { array_push($params, $inputs[$key]); } if (! is_null($query)) { // this contains a batch of sql statements, // with set identity_insert on or off // thus, sqlsrv_query should be called $sql = str_replace("SQL", $insertSql, $query); $stmt = sqlsrv_query($conn, $sql, $params); $actualOutcome = ($stmt !== false); } else { // just a regular insert, so use sqlsrv_prepare $sql = $insertSql; $actualOutcome = true; $stmt = sqlsrv_prepare($conn, $sql, $params); if ($stmt) { $result = sqlsrv_execute($stmt); $actualOutcome = ($result !== false); } } } if ($actualOutcome != $expectedOutcome) { die("Unexpected execution outcome for \'$sql\'."); } } try { complexQuery(); } catch (Exception $e) { echo $e->getMessage(); } ?> --EXPECT-- Test "Statement - Complex Query" completed successfully.