[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] com =?UTF-8?Q?pecl/database/mysql=5Fxdevapi=3A=20orabug=20=23=32=38=38=30?= =?UTF-8?Q?=35
From: hery ramilison <mysqlre () php ! net>
Date: 2018-12-13 21:27:33
Message-ID: php-mail-37b2bad820341b197382492903765d011045597671 () git ! php ! net
[Download RAW message or body]
Commit: 454cfe435c9234edadb80abc396beb7602525e27
Author: Darek Slusarczyk <dariusz.slusarczyk@oracle.com> Thu, 13 Dec 2018 \
22:27:33 +0100
Parents: 90d575f43c58e45aeddaafbb061bf5695015f99f
Branches: master
Link: http://git.php.net/?p=pecl/database/mysql_xdevapi.git;a=commitdiff;h=454cfe435c9234edadb80abc396beb7602525e27
Log:
orabug #28805757 how exactly are set() and replace() different?
- add test-case with comments explaining difference between set (can add new field, \
or overwrite existing one) and replace (cannot add new field, although can overwrite \
existing one)
Bugs:
https://bugs.php.net/28805757
Changed paths:
A tests/collection_modify_set_
M tests/connect.inc
Diff:
diff --git a/tests/collection_modify_set_ replace.phpt b/tests/collection_modify_set_ \
replace.phpt new file mode 100644
index 0000000..6c9da50
--- /dev/null
+++ b/tests/collection_modify_set_ replace.phpt
@@ -0,0 +1,158 @@
+--TEST--
+mysqlx collection modify set vs replace
+--SKIPIF--
+--FILE--
+<?php
+require("connect.inc");
+
+function run_query($query) {
+ $res = $query->execute();
+ expect_eq($res->getWarningsCount(), 0);
+ expect_eq($res->getWarnings(), []);
+ return $res->fetchAll();
+}
+
+function verify_record($record_data, $expected) {
+ assert(is_even(count($expected)));
+ $fields_count = count($expected) / 2;
+ for ($i = 0; $i < $fields_count; ++$i) {
+ $field_name_idx = $i * 2;
+ $field_name = $expected[$field_name_idx];
+
+ $field_value_idx = $field_name_idx + 1;
+ $field_value = $expected[$field_value_idx];
+
+ if ($field_value !== null) {
+ expect_eq($record_data[$field_name], $field_value);
+ } else {
+ expect_false(array_key_exists($field_name, $record_data));
+ }
+ }
+}
+
+function verify_query($query_find, $expected) {
+ $data = run_query($query_find);
+ $record_data = $data[0];
+ verify_record($record_data, $expected);
+}
+
+function modify_replace($field, $value) {
+ global $coll;
+ $query_replace = $coll->modify('name like :name');
+ $query_replace = $query_replace->bind(['name' => 'Antonella']);
+ $query_replace = $query_replace->replace($field, $value);
+ $query_replace->execute();
+}
+
+function modify_set($field, $value) {
+ global $coll;
+ $query_set = $coll->modify('name like :name');
+ $query_set = $query_set->bind(['name' => 'Antonella'])->limit(1);
+ $query_set = $query_set->set($field, $value);
+ $query_set->execute();
+}
+
+// -----
+
+$session = create_test_db();
+$schema = $session->getSchema($db);
+$coll = $schema->getCollection($test_collection_name);
+
+fill_db_collection($coll);
+
+$query_find = $coll->find('name like :name');
+$query_find = $query_find->bind(['name' => 'Antonella']);
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 42,
+ 'job', 'Studente'));
+
+// 'replace' can only overwrite existing field, ...
+modify_replace('age', 21);
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 21,
+ 'job', 'Studente'));
+
+// ...although should NOT add new field 'city'
+modify_replace('city', 'Katowice');
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 21,
+ 'job', 'Studente',
+ 'city', null));
+
+// 'set' can overwrite existing field, or add a brand new one
+// in this case it should add new field 'city'
+modify_set('city', 'Katowice');
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 21,
+ 'job', 'Studente',
+ 'city', 'Katowice'));
+
+// now 'replace' can overwrite 'city', because the field does exist
+modify_replace('city', 'Gdansk');
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 21,
+ 'job', 'Studente',
+ 'city', 'Gdansk'));
+
+// use 'set' to overwrite existing fields - 'city', ...
+modify_set('city', 'Munchen');
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', 21,
+ 'job', 'Studente',
+ 'city', 'Munchen'));
+
+// ...and 'age', also overwriting its type from int to string
+modify_set('age', '33');
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', '33',
+ 'job', 'Studente',
+ 'city', 'Munchen'));
+
+// 'replace' can also change type of existing field
+modify_replace('job', true);
+
+verify_query(
+ $query_find,
+ array(
+ 'name', 'Antonella',
+ 'age', '33',
+ 'job', true,
+ 'city', 'Munchen'));
+
+verify_expectations();
+print "done!\n";
+?>
+--CLEAN--
+<?php
+require("connect.inc");
+clean_test_db();
+?>
+--EXPECTF--
+done!%A
diff --git a/tests/connect.inc b/tests/connect.inc
index 65c95eb..2681ff3 100644
--- a/tests/connect.inc
+++ b/tests/connect.inc
@@ -46,6 +46,18 @@
// ----------------------------------------------------------------------
+ if (!function_exists('is_odd')) {
+ function is_odd($value) {
+ return ($value & 1) == 1;
+ }
+ }
+
+ if (!function_exists('is_even')) {
+ function is_even($value) {
+ return !is_odd($value);
+ }
+ }
+
if (!function_exists('is_in_range')) {
function is_in_range($value, $min, $max) {
return ($min <= $value) && ($value <= $max);
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic