[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