Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -241,4 +241,4 @@ public Sequence eval(final Sequence[] args, final Sequence contextSequence) thro
return map.get((AtomicValue) args[0].itemAt(0));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -259,12 +259,10 @@ private Sequence merge(final Sequence[] args) throws XPathException {
throw new XPathException(this, ErrorCodes.FOJS0005, "value for duplicates key was not recognised: " + mapValue.getStringValue());
}
} else {
// TODO(AR) the XQ3.1 spec says that the default for fn:merge#2 should be USE_FIRST... this needs to be revised in a major release of eXist-db
mergeDuplicates = MergeDuplicates.USE_LAST;
mergeDuplicates = MergeDuplicates.USE_FIRST;
}
} else {
// TODO(AR) the XQ3.1 spec says that the default for fn:merge#1 should be USE_FIRST... this needs to be revised in a major release of eXist-db
mergeDuplicates = MergeDuplicates.USE_LAST;
mergeDuplicates = MergeDuplicates.USE_FIRST;
}

final Sequence maps = args[0];
Expand Down
37 changes: 12 additions & 25 deletions exist-core/src/test/xquery/maps/maps.xqm
Original file line number Diff line number Diff line change
Expand Up @@ -196,23 +196,17 @@ function mt:createWithSingleKey() {
$map("Su")
};

(:~
: TODO(AR) implicit behaviour of map:merge according to XQ3.1 specification should be use-first not use-last
:)
declare
%test:assertEquals("Saturday", "Caturday")
function mt:merge-duplicate-keys-use-last-implicit-1() {
%test:assertEquals("Saturday", "Saturday")
function mt:merge-duplicate-keys-use-first-implicit-1() {
let $specialWeek := map:merge(($mt:integerKeys, map { 7 : "Caturday" }))
return
($mt:integerKeys(7), $specialWeek(7))
};

(:~
: TODO(AR) implicit behaviour of map:merge according to XQ3.1 specification should be use-first not use-last
:)
declare
%test:assertEquals("Saturday", "Saturday")
function mt:merge-duplicate-keys-use-last-implicit-2() {
%test:assertEquals("Saturday", "Caturday")
function mt:merge-duplicate-keys-use-first-implicit-2() {
let $specialWeek := map:merge((map { 7 : "Caturday" }, $mt:integerKeys))
return
($mt:integerKeys(7), $specialWeek(7))
Expand Down Expand Up @@ -588,10 +582,10 @@ declare
%test:assertEquals(3)
%test:args("Three")
%test:assertEmpty
function mt:doubleKeys($key as item()) {
function mt:double-keys($key as item()) {
let $map := map { xs:double(1.1) : 1, xs:double(2) : 2 }
return
map:merge(($map, map:entry(xs:double(2), 3)))($key)
map:merge((map:entry(xs:double(2), 3), $map))($key)
};

declare
Expand Down Expand Up @@ -797,7 +791,7 @@ declare
function mt:immutable-put-then-merge() {
let $extended := map:put(mt:create-test-map(), $mt:test-key-two, false())
let $expected := $extended($mt:test-key-one)
let $result := map:merge(($extended, map { $mt:test-key-one : false() }))
let $result := map:merge((map { $mt:test-key-one : false() }, $extended))
return
(
$expected eq $extended($mt:test-key-one),
Expand Down Expand Up @@ -839,7 +833,7 @@ declare
function mt:immutable-remove-then-merge() {
let $removed := map:remove(mt:create-test-map(), $mt:test-key-two)
let $expected := $removed($mt:test-key-one)
let $result := map:merge(($removed, map { $mt:test-key-one : false() }))
let $result := map:merge((map { $mt:test-key-one : false() }, $removed))
return
(
$expected eq $removed($mt:test-key-one),
Expand Down Expand Up @@ -880,7 +874,7 @@ declare
function mt:immutable-merge-then-merge() {
let $merged := map:merge(mt:create-test-map())
let $expected := $merged($mt:test-key-one)
let $result := map:merge(($merged, map { $mt:test-key-one : false() }))
let $result := map:merge((map { $mt:test-key-one : false() }, $merged))
return
(
$expected eq $merged($mt:test-key-one),
Expand Down Expand Up @@ -916,12 +910,8 @@ function mt:immutable-merge2-then-remove() {
)
};

(:~
: TODO(AR) implicit behaviour of map:merge according to XQ3.1 specification should be use-first not use-last,
: therefore the result should be ("true", "true") instead
:)
declare
%test:assertEquals("true", "false")
%test:assertEquals("true", "true")
function mt:immutable-merge2-then-merge() {
let $merged := map:merge((mt:create-test-map(), mt:create-test-map2()))
let $expected := $merged($mt:test-key-one)
Expand All @@ -932,6 +922,7 @@ function mt:immutable-merge2-then-merge() {
$expected ne $result($mt:test-key-one)
)
};

declare
%test:assertEquals("true", "true")
function mt:immutable-merge-duplicates-then-put() {
Expand Down Expand Up @@ -960,12 +951,8 @@ function mt:immutable-merge-duplicates-then-remove() {
)
};

(:~
: TODO(AR) implicit behaviour of map:merge according to XQ3.1 specification should be use-first not use-last,
: therefore the result should be ("true", "true") instead
:)
declare
%test:assertEquals("true", "false")
%test:assertEquals("true", "true")
function mt:immutable-merge-duplicates-then-merge() {
let $merged := map:merge((mt:create-test-map(), mt:create-test-map()))
let $expected := $merged($mt:test-key-one)
Expand Down