Позволяет иметь довольно простую схему TDE:
<tde:template xmlns:tde='http://marklogic.com/xdmp/tde'>
<tde:description>testing a TDE view</tde:description>
<tde:context>/test</tde:context>
<tde:enabled>true</tde:enabled>
<tde:rows>
<tde:row>
<tde:schema-name>sitefusion</tde:schema-name>
<tde:view-name>test</tde:view-name>
<tde:columns>
<tde:column>
<tde:name>name</tde:name>
<tde:scalar-type>string</tde:scalar-type>
<tde:val>name</tde:val>
<tde:nullable>false</tde:nullable>
<tde:collation>http://marklogic.com/collation/en/S1</tde:collation>
</tde:column>
</tde:columns>
</tde:row>
</tde:rows>
</tde:template>
Эта схема имеет параметры сортировки http://marklogic.com/collation/en/S1
, означающие, что она case and diacritic insensitive
.Имея это в виду, я вставил тестовый документ с именем верхнего регистра в верхнем регистре Test
:
let $doc :=
<test>
<name>Test</name>
</test>
return xdmp:document-insert("/test/1.xml", $doc);
let $data := xdmp:sql("select name from test")
return json:array-pop($data)[2];
Результатом этого xquery является ожидаемое значение имени Test
.
Теперь давайте обновим name
и поместим в него строчную букву test
:
let $doc :=
<test>
<name>test</name>
</test>
return xdmp:document-insert("/test/1.xml", $doc);
let $data := xdmp:sql("select name from test")
return (
json:array-pop($data)[2],
doc("/test/1.xml")
)
Это по некоторым причинам теперь также выводит Test
с заглавной буквы T
.Почему это так?Вывод doc("/test/1.xml")
показывает правильный документ:
<test>
<name>test</name>
</test>
Это правильное поведение?Влияет ли сопоставление не только на сравнение (как в предложении where), но и на прием пищи?Есть ли способ получить данные с учетом регистра и сравнение без учета регистра?
Редактировать: Использование MarkLogic 9.0-7.2
.