r1420 - in xwiki/trunk: core/src/main/java/com/xpn/xwiki/objects/classes core/src/main/java/com/xpn/xwiki/plugin/query src/main/xwiki/jcrdb src/main/xwiki/jcrdb/XWiki src/test/java/com/xpn/xwiki/test/plugin/query
Artem Melentev
amelentev at users.forge.objectweb.org
Fri Oct 20 13:12:48 CEST 2006
Author: amelentev
Date: 2006-10-20 13:12:47 +0200 (Fri, 20 Oct 2006)
New Revision: 1420
Modified:
xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/ListClass.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/NumberClass.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/StringClass.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/HibernateQuery.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/IQueryFactory.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/QueryPlugin.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/SecHibernateQuery.java
xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/XWikiNamespaceResolver.java
xwiki/trunk/src/main/xwiki/jcrdb/XWiki.Import
xwiki/trunk/src/main/xwiki/jcrdb/XWiki/XWikiGroups
xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryGeneratorTest.java
xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginApiTest.java
xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginTest.java
Log:
QueryPlugin for Hibernate:
change prefix for xwiki property from f: to xp:
jcr:contains function - is full _text_ search and unsupported in hibernate.
For DbStringList supported:
general comparison: @xp:list (=,!=,<,>,<=,=>) '1' - test at least one value,
value comparison @xp:list (eq,ne,lt,le,gt,ge) '1' - test all values
example:
/Blog/*/obj/Blog/Articles[@xp:category='News']/jcr:deref(@doc,'*')/@fullName
- return articles, contains category 'News'.
--
XWiki on Hibernate is now working on jcrdb data, without any hql queryes in scripts!
Except Search (jcr:contains used).
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/ListClass.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/ListClass.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/ListClass.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -440,14 +440,14 @@
}
if (values instanceof String) {
- criteriaList.add("jcr:contains(@f:" + getName() + ",'" + values.toString() + "')");
- // testQueryGenerator(query, "//*/*/obj/Test/TestClass[jcr:contains(@f:category, '1') or jcr:contains(@f:category, '2')]");
+ // general comparison '=' - tests at least one value =
+ criteriaList.add("@xp:" + getName() + "='" + values.toString() + "'");
}
else {
String[] valuesarray = (String[])values;
String[] criteriaarray = new String[valuesarray.length];
for (int i=0;i<valuesarray.length;i++) {
- criteriaarray[i] = "jcr:contains(@f:" + getName() + ",'" + valuesarray[i] + "')";
+ criteriaarray[i] = "@xp:" + getName() + "='" + valuesarray[i] + "'";
}
criteriaList.add("(" + StringUtils.join(criteriaarray, " or ") + ")");
}
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/NumberClass.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/NumberClass.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/NumberClass.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -147,19 +147,19 @@
public void makeQuery(Map map, String prefix, XWikiCriteria query, List criteriaList) {
Number value = (Number)map.get(prefix);
if ((value!=null)&&(!value.equals(""))) {
- criteriaList.add("@f:" + getName() + "=" + value.toString());
+ criteriaList.add("@xp:" + getName() + "=" + value.toString());
return;
}
value = (Number)map.get(prefix + "lessthan");
if ((value!=null)&&(!value.equals(""))) {
- criteriaList.add("@f:" + getName() + "<=" + value.toString());
+ criteriaList.add("@xp:" + getName() + "<=" + value.toString());
return;
}
value = (Number)map.get(prefix + "morethan");
if ((value!=null)&&(!value.equals(""))) {
- criteriaList.add("@f:" + getName() + ">=" + value.toString());
+ criteriaList.add("@xp:" + getName() + ">=" + value.toString());
return;
}
}
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/StringClass.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/StringClass.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/objects/classes/StringClass.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -102,23 +102,23 @@
String startsWith = (String)map.get(prefix + "startswith");
String endsWith = (String)map.get(prefix + "endswith");
if( "1".equals(startsWith))
- criteriaList.add("jcr:like(@f:" + getName() + ", '" + value + "%')");
+ criteriaList.add("jcr:like(@xp:" + getName() + ", '" + value + "%')");
else if("1".equals(endsWith))
- criteriaList.add("jcr:like(@f:" + getName() + ", '%" + value + "')");
+ criteriaList.add("jcr:like(@xp:" + getName() + ", '%" + value + "')");
else
- criteriaList.add("jcr:like(@f:" + getName() + ", '%" + value + "%')");
+ criteriaList.add("jcr:like(@xp:" + getName() + ", '%" + value + "%')");
return;
}
value = (String)map.get(prefix + "exact");
if ((value!=null)&&(!value.equals(""))) {
- criteriaList.add("@f:" + getName() + "='" + value + "'");
+ criteriaList.add("@xp:" + getName() + "='" + value + "'");
return;
}
value = (String)map.get(prefix + "not");
if ((value!=null)&&(!value.equals(""))) {
- criteriaList.add("@f:" + getName() + "!='" + value + "'");
+ criteriaList.add("@xp:" + getName() + "!='" + value + "'");
return;
}
}
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/HibernateQuery.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/HibernateQuery.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/HibernateQuery.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -36,6 +36,7 @@
import com.xpn.xwiki.util.Util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.name.NameFormat;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.core.query.*;
import org.hibernate.Query;
@@ -101,7 +102,7 @@
static QName fromJCRName(String s) {
try {
- return QName.fromJCRName(s, XWikiNamespaceResolver.getInstance());
+ return NameFormat.parse(s, XWikiNamespaceResolver.getInstance());
} catch (Throwable e) {
throw new TranslateException("unknown name:"+s, e);
}
@@ -111,7 +112,8 @@
static final QName qn_xwiki_object = fromJCRName("xwiki:object");
static final QName qn_xwiki_attachment = fromJCRName("xwiki:attachment");
static final QName qn_property = fromJCRName("property");
- static final QName qn_flexproperty = fromJCRName("f:property");
+ static final QName qn_xwikiproperty = fromJCRName("xp:property");
+ static final QName qn_listproperty = fromJCRName("xp:listproperty");
/** Abridgement of jcr classes */
static final Map abr_xwiki_classes = new HashMap();
/** Mapping of jcr classes to Hibernate classes */
@@ -425,7 +427,8 @@
}
public Object visit(TextsearchQueryNode node, Object data) { // jcr:contain
- if (data==null)
+ throw new TranslateException("Text search is not implemented for hibernate");
+ /*if (data==null)
throw new TranslateException("No object for relation");
if (node.getPropertyName()==null)
throw new TranslateException("Full search is not implemented");
@@ -440,7 +443,7 @@
_userwhere.append(prop.getHqlName()).append(" LIKE ").append("'%").append(node.getQuery()).append("%'");
else if (type==TYPE_LIST)
_userwhere.append("'").append(node.getQuery()).append("'").append(" in elements(").append(prop.getHqlName()).append(")");
- return data;
+ return data;*/
}
public Object visit(RelationQueryNode node, Object data) {
@@ -454,24 +457,37 @@
final QName prop = node.getProperty();
if (node.getParent() instanceof LocationStepQueryNode)
_userwhere.appendSeparator();
- final ObjProperty oprop = getProp(prop, obj, objclass);
- _userwhere.append(oprop.getHqlName());
+ final ObjProperty oprop = getProp(prop, obj, objclass);
int op = node.getOperation();
- final String sop = (String) _mapOphql.get(new Integer(op));
- _userwhere.append(sop);
+ final String sop = XWikiQueryConstants.getHqlOperation(op);
int vt = node.getValueType();
+ boolean isGeneralComp = XWikiQueryConstants.isGeneralComparisonType(op);
+ boolean isValueComp = XWikiQueryConstants.isValueComparisonType(op);
+ boolean isMultyValue = oprop.isMultiValue();
+
+ StringBuffer svalue = new StringBuffer();
if (vt == QueryConstants.TYPE_DOUBLE) {
- _userwhere.append(node.getDoubleValue());
+ svalue.append(node.getDoubleValue());
} else if (vt == QueryConstants.TYPE_LONG) {
- _userwhere.append(node.getLongValue());
+ svalue.append(node.getLongValue());
} else if (vt == QueryConstants.TYPE_POSITION) {
- _userwhere.append(node.getPositionValue()); // XXX: I don`t know that is it. [1]?
+ svalue.append(node.getPositionValue()); // [1]. unuseful.
} else if (vt == QueryConstants.TYPE_STRING) {
- _userwhere.append("'").append(tosqlstring(node.getStringValue())).append("'");
+ svalue.append("'").append(tosqlstring(node.getStringValue())).append("'");
} else if (vt == QueryConstants.TYPE_TIMESTAMP || vt == QueryConstants.TYPE_DATE) {
String datename = newNameParam("pvd", node.getDateValue());
- _userwhere.append(":").append(datename);
+ svalue.append(":").append(datename);
}
+
+ if (isMultyValue && isGeneralComp) {
+ _userwhere.append(svalue.toString()).append(sop).append(" some elements(").append(oprop.getHqlName()).append(')');
+ } else
+ if (isMultyValue && isValueComp) {
+ _userwhere.append(svalue.toString()).append(sop).append(" all elements(").append(oprop.getHqlName()).append(')');
+ } else {
+ _userwhere.append(oprop.getHqlName()).append(sop).append(svalue.toString());
+ }
+
return data;
}
@@ -566,8 +582,6 @@
}
private final String tosqlstring(String s) {
return s;
- //if (s==null) s=""; XXX: is this needed?
- //return s.replace('\'', '`');
}
/** Map obj - BaseClass.name */
@@ -595,7 +609,7 @@
return new ObjPropProperty(objname, BaseObject.class, prop);
}
Class objjclass = (Class) jcl_xwiki_classes.get(getLastQNClass());
- if (!XWikiNamespaceResolver.NS_FLEX_URI.equals(qname.getNamespaceURI()))
+ if (!XWikiNamespaceResolver.NS_XWIKI_PROPERTY_URI.equals(qname.getNamespaceURI()))
return new ObjPropProperty(obj, objjclass, prop);
if (!qn_xwiki_object.equals(objclass))
@@ -632,7 +646,11 @@
if (suff==null)
suff = "value";
hqls += "."+suff;
-
+ /*if ("com.xpn.xwiki.objects.DBStringListProperty".equals(propclassname)) {
+ String newhqls = newNameClass(qn_listproperty);
+ _from.append(" join ").append(hqls).append(" as ").append(newhqls);
+ hqls = newhqls;
+ }*/
oprop = new ObjFlexProperty(obj, objjclass, pc.getClass(), prop, hqls, propclass);
_propertyes.put(obj+"|"+prop, oprop);
@@ -659,6 +677,9 @@
public String getHqlName() {
return obj;
}
+ public boolean isMultiValue() {
+ return false;
+ }
}
class ObjPropProperty extends ObjProperty {
String propname;
@@ -688,36 +709,12 @@
return TYPE_LIST;
return TYPE_DEFAULT;
}
+ public boolean isMultiValue() {
+ return getResultType()==TYPE_LIST;
+ }
}
}
-
- private static Map _mapOphql = new HashMap();
- static {
- _mapOphql.put(new Integer(QueryConstants.OPERATION_EQ_VALUE), "=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_EQ_GENERAL), "=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_NE_VALUE), "<>");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_NE_GENERAL), "<>");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_LT_VALUE), "<");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_LT_GENERAL), "<");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_GT_VALUE), ">");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_GT_GENERAL), ">");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_GE_VALUE), ">=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_GE_GENERAL), ">=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_LE_VALUE), "<=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_LE_GENERAL), "<=");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_LIKE), " like ");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_BETWEEN), " between ");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_IN), " in ");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_NULL), " is null ");
- _mapOphql.put(new Integer(QueryConstants.OPERATION_NOT_NULL), " is not null ");
- }
- /*private static Map _mapObjClass = new HashMap();
- static {
- _mapObjClass.put("doc", "XWikiDocument");
- _mapObjClass.put("attach", "XWikiAttachment");
- _mapObjClass.put("obj", "BaseObject");
- _mapObjClass.put("prop", "BaseProperty");
- }*/
+
/** Value name for classes properties */
private static Map _mapPropValue = new HashMap();
static {
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/IQueryFactory.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/IQueryFactory.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/IQueryFactory.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -62,7 +62,7 @@
/** create query for objects
* @param oclass - full name of object class (web/name | web.name). if any(name|web) - *
- * @param prop. for flex-attributes use @f:flexname
+ * @param prop. for flex-attributes use @xp:propname
* @see getDocs
* @throws InvalidQueryException
*/
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/QueryPlugin.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/QueryPlugin.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/QueryPlugin.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -100,7 +100,7 @@
try {
return new HibernateQuery( parse(q, Query.XPATH), this);
} catch (InvalidQueryException e) {
- throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, XWikiException.ERROR_XWIKI_UNKNOWN, "Invalid xpath query: " + q);
+ throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, XWikiException.ERROR_XWIKI_UNKNOWN, "Invalid xpath query: " + q, e);
}
if (isJcr())
return new JcrQuery( q, Query.XPATH, this );
@@ -129,6 +129,7 @@
* @throws XWikiException
* */
public IQuery getDocs(String docname, String prop, String order) throws XWikiException {
+ //if (prop==null) prop = "@fullName";
return xpath("/"+getXPathName(docname) + getPropertyXPath(prop) + getOrderXPath(order));
}
/** create query for child documents
@@ -230,11 +231,11 @@
if (classes.size()>1)
throw new XWikiException(XWikiException.MODULE_XWIKI_STORE, XWikiException.ERROR_XWIKI_STORE_SEARCH_NOTIMPL, "Search with more than one class is not implemented");
if (classes.size()==0)
- return "//*/*";
+ return "/*/*";
String className = (String) classes.toArray()[0];
BaseClass bclass = context.getWiki().getClass(className, context);
- xpath.append("//*/*/obj/");
+ xpath.append("/*/*/obj/");
xpath.append(className.replace('.','/'));
String where= bclass.makeQuery(query);
if (where.equals(""))
@@ -245,7 +246,7 @@
xpath.append(where);
xpath.append("]");
}
- xpath.append("/@doc:fullName");
+ xpath.append("/jcr:deref(@doc, '*')/@fullName");
List oProps = query.getOrderProperties();
String orderClause = "";
@@ -261,7 +262,7 @@
if (!orderClause.equals("")) {
orderClause += " and ";
}
- orderClause += "@f:" + propName;
+ orderClause += "@xp:" + propName;
if (clause.getOrder()==OrderClause.DESC)
orderClause += " descending";
}
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/SecHibernateQuery.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/SecHibernateQuery.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/SecHibernateQuery.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -22,8 +22,16 @@
package com.xpn.xwiki.plugin.query;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.jackrabbit.core.query.QueryRootNode;
+import org.apache.jackrabbit.name.QName;
+
import com.xpn.xwiki.XWikiException;
-import com.xpn.xwiki.api.Document;
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseObject;
@@ -31,11 +39,7 @@
import com.xpn.xwiki.plugin.query.HibernateQuery.XWikiHibernateQueryTranslator.ObjPropProperty;
import com.xpn.xwiki.plugin.query.HibernateQuery.XWikiHibernateQueryTranslator.ObjProperty;
import com.xpn.xwiki.user.api.XWikiRightService;
-import org.apache.jackrabbit.core.query.QueryRootNode;
-import org.apache.jackrabbit.name.QName;
-import java.util.*;
-
/** Security version of HibernateQuery */
public class SecHibernateQuery extends HibernateQuery {
public SecHibernateQuery(QueryRootNode tree, IQueryFactory qf) {
Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/XWikiNamespaceResolver.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/XWikiNamespaceResolver.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/plugin/query/XWikiNamespaceResolver.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -35,16 +35,14 @@
static Map prefixToURI = new HashMap();
static Map uriToPrefix = new HashMap();
public static final String
- NS_FLEX_PREFFIX = "f",
- NS_FLEX_URI = "flex",
+ NS_XWIKI_PROPERTY_PREFFIX = "xp",
+ NS_XWIKI_PROPERTY_URI = "http://www.xwiki.org/property",
NS_DOC_PREFFIX = "doc",
NS_DOC_URI = "XWikiDocument",
NS_OBJ_PREFFIX = "obj",
NS_OBJ_URI = "BaseObject",
NS_XWIKI_PREFFIX = "xwiki",
NS_XWIKI_URI = "http://www.xwiki.org/";
- //NS_XWIKI_PROPERTY_PREFFIX = "xp",
- //NS_XWIKI_PROPERTY_URI = "http://www.xwiki.org/property";
private static void addnamespace(String pref, String uri) {
prefixToURI.put(pref, uri);
uriToPrefix.put(uri, pref);
@@ -72,7 +70,7 @@
addnamespace("xs", SearchManager.NS_XS_URI);
// XWiki namespaces
- addnamespace(NS_FLEX_PREFFIX, NS_FLEX_URI);
+ addnamespace(NS_XWIKI_PROPERTY_PREFFIX, NS_XWIKI_PROPERTY_URI);
addnamespace(NS_DOC_PREFFIX, NS_DOC_URI); // XXX: hibernate-specific
addnamespace(NS_OBJ_PREFFIX, NS_OBJ_URI); // XXX: hibernate-specific
addnamespace(NS_XWIKI_PREFFIX, NS_XWIKI_URI);
Modified: xwiki/trunk/src/main/xwiki/jcrdb/XWiki/XWikiGroups
===================================================================
--- xwiki/trunk/src/main/xwiki/jcrdb/XWiki/XWikiGroups 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/src/main/xwiki/jcrdb/XWiki/XWikiGroups 2006-10-20 11:12:47 UTC (rev 1420)
@@ -48,8 +48,8 @@
1 Current XWiki Groups
-#set ($xpath = "*/*/obj/XWiki/XWikiGroups/jcr:deref(@doc, '*')")
-#foreach ($item in $xwiki.query.getDocs($xpath, "@fullName", "").list())
+#set ($xpath = "*/*[@fullName!='XWiki.XWikiGroupTemplate']/obj/XWiki/XWikiGroups/jcr:deref(@doc, '*')")
+#foreach ($item in $xwiki.query.getDocs($xpath, "@fullName", "").setDistinct(true).list())
* [$item]
#end
Modified: xwiki/trunk/src/main/xwiki/jcrdb/XWiki.Import
===================================================================
--- xwiki/trunk/src/main/xwiki/jcrdb/XWiki.Import 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/src/main/xwiki/jcrdb/XWiki.Import 2006-10-20 11:12:47 UTC (rev 1420)
@@ -10,10 +10,8 @@
Import from dir : <%print new File(fromdir).getAbsolutePath()%>
-To import please append "?force" to url
+Click <a href="?force">force</a> to import.
-<a href="?force">force</a>
-
<% } else {
println "Starting import\n"
@@ -30,8 +28,6 @@
println "Installing documents\n"
pack.install(context.getContext())
-xwiki.getXWiki().getNotCacheStore().shutdown(context.getContext())
-
println "Finished.\n"
}
Modified: xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryGeneratorTest.java
===================================================================
--- xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryGeneratorTest.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryGeneratorTest.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -1,20 +1,18 @@
package com.xpn.xwiki.test.plugin.query;
-import com.xpn.xwiki.plugin.query.XWikiQuery;
-import com.xpn.xwiki.plugin.query.IQueryFactory;
-import com.xpn.xwiki.plugin.query.QueryPlugin;
-import com.xpn.xwiki.plugin.XWikiPluginManager;
import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.objects.classes.BaseClass;
import com.xpn.xwiki.objects.classes.PropertyClass;
-import com.xpn.xwiki.objects.BaseObject;
-import com.xpn.xwiki.test.Utils;
-import com.xpn.xwiki.test.HibernateTestCase;
-import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.plugin.XWikiPluginManager;
+import com.xpn.xwiki.plugin.query.IQueryFactory;
+import com.xpn.xwiki.plugin.query.QueryPlugin;
+import com.xpn.xwiki.plugin.query.XWikiQuery;
import com.xpn.xwiki.store.XWikiHibernateStore;
+import com.xpn.xwiki.test.HibernateTestCase;
+import com.xpn.xwiki.test.Utils;
-import java.util.List;
-
/**
* Created by IntelliJ IDEA.
* User: ldubost
@@ -50,26 +48,26 @@
assertEquals(query.getClasses().size(), 1);
assertTrue(query.getClasses().contains("Test.TestClass"));
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[jcr:like(@f:first_name, '%Artem%')]/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[jcr:like(@xp:first_name, '%Artem%')]/jcr:deref(@doc, '*')/@fullName");
query = new XWikiQuery();
query.setParam("Test.TestClass_first_name_exact", "Artem");
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[@f:first_name='Artem']/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[@xp:first_name='Artem']/jcr:deref(@doc, '*')/@fullName");
query = new XWikiQuery();
query.setParam("Test.TestClass_first_name_not", "Artem");
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[@f:first_name!='Artem']/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[@xp:first_name!='Artem']/jcr:deref(@doc, '*')/@fullName");
query = new XWikiQuery();
query.setParam("Test.TestClass_age_morethan", new Integer(20));
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[@f:age>=20]/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[@xp:age>=20]/jcr:deref(@doc, '*')/@fullName");
query = new XWikiQuery();
query.setParam("Test.TestClass_age_lessthan", new Integer(20));
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[@f:age<=20]/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[@xp:age<=20]/jcr:deref(@doc, '*')/@fullName");
query = new XWikiQuery();
query.setParam("Test.TestClass_category", "1");
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[jcr:contains(@f:category,'1')]/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[@xp:category='1']/jcr:deref(@doc, '*')/@fullName");
String[] params = {"1", "2"};
query = new XWikiQuery();
query.setParam("Test.TestClass_category", params);
- testQueryGenerator(query, "//*/*/obj/Test/TestClass[(jcr:contains(@f:category,'1') or jcr:contains(@f:category,'2'))]/@name");
+ testQueryGenerator(query, "/*/*/obj/Test/TestClass[(@xp:category='1' or @xp:category='2')]/jcr:deref(@doc, '*')/@fullName");
}
public void prepareData(XWikiHibernateStore hb) throws XWikiException {
Modified: xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginApiTest.java
===================================================================
--- xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginApiTest.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginApiTest.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -62,7 +62,7 @@
assertEquals(obj0[j], exp0[j]);
}
} else {
- if (exp==obj) continue; // XXX: bugs with proxy objects?
+ if (exp==obj) continue;
assertEquals("Objects #"+i+" not equals", obj, exp);
}
}
@@ -127,7 +127,7 @@
getXWiki().flushCache();
testSearchXPnQl1("/Test/Test0", "select * from xwiki:document where fullName='Test.Test0'", secdoc1);
testSearchXP("//doc/Test/Test0", new Object[]{secdoc1});
- testSearchXPnQl1("//element(Test0, xwiki:document)", "select * from xwiki:document where name='Test0'", secdoc1);
+ testSearchXPnQl1("/element(Test0, xwiki:document)", "select * from xwiki:document where name='Test0'", secdoc1);
testSearchXPnQl1("/Test/element(*, xwiki:document)", "select * from xwiki:document where web='Test'", secdoc1);
//hb.endTransaction(getXWikiContext(), false);
@@ -141,12 +141,12 @@
testSearchXP("/*/*/obj/Class/Class0", new Object[]{secobj1});
testSearchXPnQl1("//obj/*/*", "select * from xwiki:object", secobj1);
testSearchXP("/Test/Test0/obj/Class/Class0/@name", new Object[]{"Test.Test0"});
- testSearchXP("/Test/Test0/obj/Class/Class0/@f:first_name", new Object[]{"Artem"});
- testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at f:first_name)", new Object[]{new Object[]{"Test.Test0","Artem"}});
- testSearchXPnQl1("//obj/Class/Class0/(@name, at f:first_name)", "select name,f:first_name from xwiki:object where className='Class.Class0'", new Object[]{"Test.Test0","Artem"});
+ testSearchXP("/Test/Test0/obj/Class/Class0/@xp:first_name", new Object[]{"Artem"});
+ testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at xp:first_name)", new Object[]{new Object[]{"Test.Test0","Artem"}});
+ testSearchXPnQl1("//obj/Class/Class0/(@name, at xp:first_name)", "select name,xp:first_name from xwiki:object where className='Class.Class0'", new Object[]{"Test.Test0","Artem"});
try {
- testSearchXP("//Test/Test0/obj/Class/Class0/@f:password", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/@xp:password", EMPTY);
assertTrue(false);
} catch (XWikiException e) {
assertEquals(e.getCode(), XWikiException.ERROR_XWIKI_ACCESS_DENIED);
@@ -156,7 +156,7 @@
getXWiki().flushCache();
testSearchXPnQl("/Test/Test0", "select * from xwiki:document where fullName='Test.Test0'", EMPTY);
testSearchXP("//doc/Test/Test0", EMPTY);
- testSearchXPnQl("//element(Test0, xwiki:document)", "select * from xwiki:document where name='Test0'", EMPTY);
+ testSearchXPnQl("/element(Test0, xwiki:document)", "select * from xwiki:document where name='Test0'", EMPTY);
testSearchXPnQl("/Test/element(*, xwiki:document)", "select * from xwiki:document where web='Test'", EMPTY);
testSearchXPnQl("/Test/Test0/@name", "select name from xwiki:document where fullName='Test.Test0'", EMPTY);
@@ -169,35 +169,35 @@
testSearchXP("/*/*/obj/Class/Class0", EMPTY);
testSearchXPnQl("//obj/Class/Class0", "select * from xwiki:object where className='Class.Class0'", EMPTY);
testSearchXP("/Test/Test0/obj/Class/Class0/@name", EMPTY);
- testSearchXP("/Test/Test0/obj/Class/Class0/@f:first_name", EMPTY);
- testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at f:first_name)", EMPTY);
- testSearchXPnQl("//obj/Class/Class0/(@name, at f:first_name)", "select name,f:first_name from xwiki:object where className='Class.Class0'", EMPTY);
-
+ testSearchXP("/Test/Test0/obj/Class/Class0/@xp:first_name", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at xp:first_name)", EMPTY);
+ testSearchXPnQl("//obj/Class/Class0/(@name, at xp:first_name)", "select name,xp:first_name from xwiki:object where className='Class.Class0'", EMPTY);
+
Utils.updateRight(getXWiki(), getXWikiContext(), "Test.Test0", "XWiki.XWikiGuest", "", "query", false, false);
getXWiki().flushCache();
- testSearchXP("//Test/Test0", EMPTY);
- testSearchXP("//Test/Test0/@name", new Object[]{"Test0"});
- testSearchXP("//Test/Test0/@web", EMPTY);
- testSearchXP("//Test/Test0/@fullName", new Object[]{"Test.Test0"});
- testSearchXP("//Test/Test0/(@name, at author)", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0/@name", new Object[]{"Test.Test0"});
- testSearchXP("//Test/Test0/obj/Class/Class0/@classname", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0/@f:first_name", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0/(@name, at f:first_name)", EMPTY);
+ testSearchXP("/Test/Test0", EMPTY);
+ testSearchXP("/Test/Test0/@name", new Object[]{"Test0"});
+ testSearchXP("/Test/Test0/@web", EMPTY);
+ testSearchXP("/Test/Test0/@fullName", new Object[]{"Test.Test0"});
+ testSearchXP("/Test/Test0/(@name, at author)", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/@name", new Object[]{"Test.Test0"});
+ testSearchXP("/Test/Test0/obj/Class/Class0/@classname", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/@xp:first_name", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at xp:first_name)", EMPTY);
Utils.updateRight(getXWiki(), getXWikiContext(), "Test.Test0", "XWiki.XWikiGuest", "", "view", false, false);
getXWiki().flushCache();
doc1 = getXWiki().getStore().loadXWikiDoc(doc1, getXWikiContext());
secdoc1 = doc1.newDocument(getXWikiContext());
- testSearchXP("//Test/Test0", new Object[]{secdoc1});
- testSearchXP("//Test/Test0/@name", EMPTY);
- testSearchXP("//Test/Test0/@web", new Object[]{"Test"});
- testSearchXP("//Test/Test0/@fullName", EMPTY);
- testSearchXP("//Test/Test0/(@name, at creationDate)", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0", new Object[]{secobj1});
- testSearchXP("//Test/Test0/obj/Class/Class0/@name", EMPTY);
- testSearchXP("//Test/Test0/obj/Class/Class0/@f:first_name", new Object[]{"Artem"});
- testSearchXP("//Test/Test0/obj/Class/Class0/(@name, at f:first_name)", EMPTY);
+ testSearchXP("/Test/Test0", new Object[]{secdoc1});
+ testSearchXP("/Test/Test0/@name", EMPTY);
+ testSearchXP("/Test/Test0/@web", new Object[]{"Test"});
+ testSearchXP("/Test/Test0/@fullName", EMPTY);
+ testSearchXP("/Test/Test0/(@name, at creationDate)", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0", new Object[]{secobj1});
+ testSearchXP("/Test/Test0/obj/Class/Class0/@name", EMPTY);
+ testSearchXP("/Test/Test0/obj/Class/Class0/@xp:first_name", new Object[]{"Artem"});
+ testSearchXP("/Test/Test0/obj/Class/Class0/(@name, at xp:first_name)", EMPTY);
}
}
Modified: xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginTest.java
===================================================================
--- xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginTest.java 2006-10-20 10:54:15 UTC (rev 1419)
+++ xwiki/trunk/src/test/java/com/xpn/xwiki/test/plugin/query/QueryPluginTest.java 2006-10-20 11:12:47 UTC (rev 1420)
@@ -137,9 +137,7 @@
}
public void testWebDocs() throws XWikiException, InvalidQueryException {
- XWikiHibernateStore hibstore = getXWiki().getHibernateStore();
-
- testSearchXP("//*/*", NOTHING);
+ testSearchXP("/*/*", NOTHING);
checkEquals(qf.getDocs("*/*", null, null).list(), NOTHING);
XWikiDocument doc1 = new XWikiDocument("Main", "WebHome");
@@ -149,17 +147,17 @@
xwiki.saveDocument(doc1, getXWikiContext());
doc1 = xwiki.getDocument(doc1.getFullName(), getXWikiContext());
- testSearchXP1("//*/*", doc1);
+ testSearchXP1("/*/*", doc1);
checkEquals(qf.getDocs("*/*", null, null).list(), new Object[]{doc1});
- testSearchXP1("//Main/WebHome", doc1);
+ testSearchXP1("/Main/WebHome", doc1);
checkEquals(qf.getDocs("Main.WebHome", null, null).list(), new Object[]{doc1});
- testSearchXP1("//*/WebHome", doc1);
+ testSearchXP1("/*/WebHome", doc1);
checkEquals(qf.getDocs("*.WebHome", null, null).list(), new Object[]{doc1});
- testSearchXP1("//Main/*", doc1);
+ testSearchXP1("/Main/*", doc1);
checkEquals(qf.getDocs("Main/*", null, null).list(), new Object[]{doc1});
- testSearchXP1("//Main/*[@parent='Main.WebHome']", doc1);
+ testSearchXP1("/Main/*[@parent='Main.WebHome']", doc1);
checkEquals(qf.getChildDocs("Main/WebHome", null, null).list(), new Object[]{doc1});
- testSearchXP("//Main/*[@parent!='Main.WebHome']", NOTHING);
+ testSearchXP("/Main/*[@parent!='Main.WebHome']", NOTHING);
checkEquals(qf.getDocs("Main/*[@parent!='Main.WebHome']", null, null).list(), NOTHING);
try {
@@ -173,19 +171,19 @@
xwiki.saveDocument(doc2, getXWikiContext());
doc2 = xwiki.getDocument(doc2.getFullName(), getXWikiContext());
- testSearchXP("//*/*", new Object[]{doc1, doc2});
+ testSearchXP("/*/*", new Object[]{doc1, doc2});
checkEquals(qf.getDocs("*/*", null, null).list(), new Object[]{doc1, doc2});
- testSearchXP("//*/* order by @creationDate descending", new Object[]{doc2, doc1});
+ testSearchXP("/*/* order by @creationDate descending", new Object[]{doc2, doc1});
checkEquals(qf.getDocs("*/*", null, "- at creationDate").list(), new Object[]{doc2, doc1});
- testSearchXP("//*/*/@name", new Object[]{"WebHome", "WebHome2"});
+ testSearchXP("/*/*/@name", new Object[]{"WebHome", "WebHome2"});
checkEquals(qf.getDocs("*/*", "@name", null).list(), new Object[]{"WebHome", "WebHome2"});
- testSearchXP("//*/WebHome", new Object[]{doc1});
+ testSearchXP("/*/WebHome", new Object[]{doc1});
checkEquals(qf.getDocs("*/WebHome", null, null).list(), new Object[]{doc1});
- testSearchXP("//*/WebHome2", new Object[]{doc2});
+ testSearchXP("/*/WebHome2", new Object[]{doc2});
checkEquals(qf.getDocs("*/WebHome2", null, null).list(), new Object[]{doc2});
- testSearchXP("//Main/*", new Object[]{doc1,doc2});
+ testSearchXP("/Main/*", new Object[]{doc1,doc2});
checkEquals(qf.getDocs("Main/*", null, null).list(), new Object[]{doc1,doc2});
- testSearchXP("//Main/*[jcr:like(@name, '%2')]", new Object[]{doc2});
+ testSearchXP("/Main/*[jcr:like(@name, '%2')]", new Object[]{doc2});
checkEquals(qf.getDocs("Main/*[jcr:like(@name, '%2')]", null, null).list(), new Object[]{doc2});
try {
@@ -199,7 +197,7 @@
xwiki.saveDocument(doc3, getXWikiContext());
doc3 = xwiki.getDocument(doc3.getFullName(), getXWikiContext());
- testSearchXP("//*/*[@parent='Main.WebHome2']", new Object[]{doc3});
+ testSearchXP("/*/*[@parent='Main.WebHome2']", new Object[]{doc3});
checkEquals(qf.getChildDocs("Main/WebHome2", null, null).list(), new Object[]{doc3});
try {
@@ -213,20 +211,20 @@
xwiki.saveDocument(doc4, getXWikiContext());
doc4 = xwiki.getDocument(doc4.getFullName(), getXWikiContext());
- testSearchXP("//*/*[@parent='Main.WebHome2']", new Object[]{doc3, doc4});
+ testSearchXP("/*/*[@parent='Main.WebHome2']", new Object[]{doc3, doc4});
checkEquals(qf.getChildDocs("Main/WebHome2", null, null).list(), new Object[]{doc3, doc4});
- testSearchXP("//*/*[@author='Someone']", new Object[]{doc2, doc4});
+ testSearchXP("/*/*[@author='Someone']", new Object[]{doc2, doc4});
checkEquals(qf.getDocs("*/*[@author='Someone']", null, null).list(), new Object[]{doc2, doc4});
- testSearchXP("//*/*[@author!='Someone']", new Object[]{doc1, doc3});
+ testSearchXP("/*/*[@author!='Someone']", new Object[]{doc1, doc3});
checkEquals(qf.getDocs("*/*[@author!='Someone']", null, null).list(), new Object[]{doc1, doc3});
- testSearchXP("//Test/*[@author='Someone']", new Object[]{doc4});
+ testSearchXP("/Test/*[@author='Someone']", new Object[]{doc4});
checkEquals(qf.getDocs("Test/*[@author='Someone']", null, null).list(), new Object[]{doc4});
- testSearchXP("//*/*[@author!='Someone' and jcr:like(@name, '%3')]", new Object[]{doc3});
+ testSearchXP("/*/*[@author!='Someone' and jcr:like(@name, '%3')]", new Object[]{doc3});
checkEquals(qf.getDocs("*/*[@author!='Someone' and jcr:like(@name, '%3')]", null, null).list(), new Object[]{doc3});
- testSearchXP("//*/*[@author!='Someone' and not(jcr:like(@name, '%3'))]", new Object[]{doc1});
+ testSearchXP("/*/*[@author!='Someone' and not(jcr:like(@name, '%3'))]", new Object[]{doc1});
checkEquals(qf.getDocs("*/*[@author!='Someone' and not(jcr:like(@name, '%3'))]", null, null).list(), new Object[]{doc1});
- testSearchXP("//*/*[@author='Someone' or @author='Artem Melentev']", new Object[]{doc1,doc2,doc3,doc4});
+ testSearchXP("/*/*[@author='Someone' or @author='Artem Melentev']", new Object[]{doc1,doc2,doc3,doc4});
checkEquals(qf.getDocs("*/*[@author='Someone' or @author='Artem Melentev']", null, null).list(), new Object[]{doc1,doc2,doc3,doc4});
try {
@@ -240,14 +238,14 @@
xwiki.saveDocument(doc5, getXWikiContext());
doc5 = xwiki.getDocument(doc5.getFullName(), getXWikiContext());
- testSearchXP("//*/*[@parent='Main.WebHome2']", new Object[]{doc3,doc4,doc5});
+ testSearchXP("/*/*[@parent='Main.WebHome2']", new Object[]{doc3,doc4,doc5});
checkEquals(qf.getChildDocs("Main.WebHome2", null, null).list(), new Object[]{doc3,doc4,doc5});
- testSearchXP("//*/*[@parent='Main.WebHome2']/@name", new Object[]{doc3.getName(),doc4.getName(),doc5.getName()});
+ testSearchXP("/*/*[@parent='Main.WebHome2']/@name", new Object[]{doc3.getName(),doc4.getName(),doc5.getName()});
checkEquals(qf.getChildDocs("Main.WebHome2", "@name", null).list(), new Object[]{doc3.getName(),doc4.getName(),doc5.getName()});
- testSearchXP("//*/*[@parent='Main.WebHome2' and (@author='Artem Melentev' or @content='is content')]", new Object[]{doc3,doc5});
+ testSearchXP("/*/*[@parent='Main.WebHome2' and (@author='Artem Melentev' or @content='is content')]", new Object[]{doc3,doc5});
checkEquals(qf.getDocs("*/*[@parent='Main.WebHome2' and (@author='Artem Melentev' or @content='is content')]", null, null).list(), new Object[]{doc3,doc5});
- checkEquals(qf.xpath("//*/* order by @creationDate descending").setMaxResults(2).list(), new Object[]{doc5,doc4});
+ checkEquals(qf.xpath("/*/* order by @creationDate descending").setMaxResults(2).list(), new Object[]{doc5,doc4});
checkEquals(qf.getDocs("*/*", "", "- at creationDate").setMaxResults(2).list(), new Object[]{doc5,doc4});
checkEquals(qf.getDocs("*.*[@author='Artem Melentev']", "@author", "").setDistinct(true).list(), new Object[]{"Artem Melentev"});
@@ -258,14 +256,11 @@
// XXX: Attachments don`t store it`s document!!!
public void testAttachments() throws XWikiException, IOException, InvalidQueryException {
- XWikiHibernateStore hb = getXWiki().getHibernateStore();
- // hb.beginTransaction(getXWikiContext());
-
XWikiDocument doc1 = new XWikiDocument("Test", "TestAttach1");
doc1.setContent("no content");
doc1.setAuthor("Someone");
doc1.setParent("Test.WebHome");
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
Utils.setStandardData();
XWikiAttachment attachment1 = new XWikiAttachment(doc1, "testfile1");
@@ -273,25 +268,25 @@
attachment1.setContent(attachcontent1);
doc1.saveAttachmentContent(attachment1, getXWikiContext());
doc1.getAttachmentList().add(attachment1);
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
// attachment1 = (XWikiAttachment) hb.getSession(getXWikiContext()).load(XWikiAttachment.class, new Long(attachment1.getId()));
- testSearchXP("//*/*/attach/*", new Object[]{attachment1});
- testSearchXPnQl1("//element(*, xwiki:attachment)", "select * from xwiki:attachment", attachment1);
+ testSearchXP("/*/*/attach/*", new Object[]{attachment1});
+ testSearchXPnQl1("/element(*, xwiki:attachment)", "select * from xwiki:attachment", attachment1);
checkEquals(qf.getAttachment("*/*", "*", null).list(), new Object[]{attachment1});
- testSearchXP("//*/*/attach/*/@filename", new Object[]{attachment1.getFilename()});
+ testSearchXP("/*/*/attach/*/@filename", new Object[]{attachment1.getFilename()});
testSearchXPnQl1("/element(*, xwiki:attachment)/@filename", "select filename from xwiki:attachment", "testfile1");
- testSearchXP("//*/TestAttach1/attach/*", new Object[]{attachment1});
- testSearchXP1("//element(TestAttach1, xwiki:document)/attach/*", attachment1);
+ testSearchXP("/*/TestAttach1/attach/*", new Object[]{attachment1});
+ testSearchXP1("/element(TestAttach1, xwiki:document)/attach/*", attachment1);
testSearchXP1("/*/element(TestAttach1, xwiki:document)/attach/*", attachment1);
testSearchXP1("//element(TestAttach1, xwiki:document)/element(*, xwiki:attachment)", attachment1);
checkEquals(qf.getAttachment("*.TestAttach1", "*", null).list(), new Object[]{attachment1});
- testSearchXP("//Test/*/attach/*", new Object[]{attachment1});
- testSearchXP1("//Test/*/element(*,xwiki:attachment)", attachment1);
+ testSearchXP("/Test/*/attach/*", new Object[]{attachment1});
+ testSearchXP1("/Test/*/element(*,xwiki:attachment)", attachment1);
testSearchXP1("/element(*,xwiki:document)/element(*,xwiki:attachment)", attachment1);
checkEquals(qf.getAttachment("Test.*", "*", null).list(), new Object[]{attachment1});
- testSearchXP("//*/*/attach/testfile1", new Object[]{attachment1});
+ testSearchXP("/*/*/attach/testfile1", new Object[]{attachment1});
testSearchXP1("/attach/testfile1", attachment1);
checkEquals(qf.getAttachment("*/*", "testfile1", null).list(), new Object[]{attachment1});
@@ -301,26 +296,26 @@
attachment2.setComment("comment");
doc1.saveAttachmentContent(attachment2, getXWikiContext());
doc1.getAttachmentList().add(attachment2);
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
// attachment2 = (XWikiAttachment) hb.getSession(getXWikiContext()).load(XWikiAttachment.class, new Long(attachment2.getId()));
- testSearchXP("//*/*/attach/* order by @filename", new Object[]{attachment1, attachment2});
+ testSearchXP("/*/*/attach/* order by @filename", new Object[]{attachment1, attachment2});
testSearchXPnQl("/element(*,xwiki:attachment) order by @filename", "select * from xwiki:attachment order by filename", new Object[]{attachment1, attachment2});
checkEquals(qf.getAttachment("*/*", "*", "@filename").list(), new Object[]{attachment1,attachment2});
- testSearchXP("//*/*/attach/testfile1", new Object[]{attachment1});
+ testSearchXP("/*/*/attach/testfile1", new Object[]{attachment1});
checkEquals(qf.getAttachment("*/*", "testfile1", null).list(), new Object[]{attachment1});
- testSearchXP("//*/*/attach/testfile2", new Object[]{attachment2});
+ testSearchXP("/*/*/attach/testfile2", new Object[]{attachment2});
testSearchXPnQl1("/element(*, xwiki:document)/attach/element(testfile2, xwiki:attachment)", "select * from xwiki:attachment where filename='testfile2'", attachment2);
testSearchXP("//attach/testfile2", new Object[]{attachment2});
checkEquals(qf.getAttachment("*/*", "testfile2", null).list(), new Object[]{attachment2});
- testSearchXP("//Test/TestAttach1/attach/testfile1", new Object[]{attachment1});
+ testSearchXP("/Test/TestAttach1/attach/testfile1", new Object[]{attachment1});
checkEquals(qf.getAttachment("Test/TestAttach1", "testfile1", null).list(), new Object[]{attachment1});
XWikiDocument doc2 = new XWikiDocument("Test", "TestAttach2");
doc2.setContent("no content");
doc2.setAuthor("Someone over");
doc2.setParent("Test.WebHome");
- hb.saveXWikiDoc(doc2, getXWikiContext());
+ getXWiki().saveDocument(doc2, getXWikiContext());
XWikiAttachment attachment3 = new XWikiAttachment(doc2, "testfile1");
byte[] attachcontent3 = Utils.getDataAsBytes(new File(Utils.filename));
@@ -328,34 +323,33 @@
attachment3.setComment("test comment");
doc2.saveAttachmentContent(attachment3, getXWikiContext());
doc2.getAttachmentList().add(attachment3);
- hb.saveXWikiDoc(doc2, getXWikiContext());
+ getXWiki().saveDocument(doc2, getXWikiContext());
- testSearchXP("//*/*/attach/* order by @filename, @comment", new Object[]{attachment1, attachment3, attachment2});
+ testSearchXP("/*/*/attach/* order by @filename, @comment", new Object[]{attachment1, attachment3, attachment2});
checkEquals(qf.getAttachment("*/*", "*", "@filename, at comment").list(), new Object[]{attachment1,attachment3,attachment2});
- testSearchXP("//Test/TestAttach2/attach/*", new Object[]{attachment3});
+ testSearchXP("/Test/TestAttach2/attach/*", new Object[]{attachment3});
checkEquals(qf.getAttachment("Test.TestAttach2", "*", null).list(), new Object[]{attachment3});
- testSearchXP("//Test/TestAttach2/attach/testfile1", new Object[]{attachment3});
+ testSearchXP("/Test/TestAttach2/attach/testfile1", new Object[]{attachment3});
checkEquals(qf.getAttachment("Test.TestAttach2", "testfile1", null).list(), new Object[]{attachment3});
- testSearchXP("//*/*/attach/testfile1 order by @date", new Object[]{attachment1, attachment3});
+ testSearchXP("/*/*/attach/testfile1 order by @date", new Object[]{attachment1, attachment3});
checkEquals(qf.getAttachment("*.*", "testfile1", "date").list(), new Object[]{attachment1, attachment3});
- testSearchXP("//Test/*[@author='Someone']/attach/*[@comment!='']", new Object[]{attachment2});
+ testSearchXP("/Test/*[@author='Someone']/attach/*[@comment!='']", new Object[]{attachment2});
checkEquals(qf.getAttachment("Test.*[@author='Someone']", "*[@comment!='']", null).list(), new Object[]{attachment2});
// hb.endTransaction(getXWikiContext(), false);
}
public void testObjects() throws HibernateException, XWikiException, InvalidQueryException {
- XWikiHibernateStore hb = getXWiki().getHibernateStore();
XWikiDocument doc0, doc = doc0 = new XWikiDocument("Test", "TestClass");
BaseClass bclass1, bclass = bclass1 = Utils.prepareClass(doc, "Test.TestClass");
- hb.saveXWikiDoc(doc, getXWikiContext());
+ getXWiki().saveDocument(doc, getXWikiContext());
XWikiDocument doc1 = doc = new XWikiDocument("Test", "TestObject");
- hb.saveXWikiDoc(doc, getXWikiContext());
+ getXWiki().saveDocument(doc, getXWikiContext());
- testSearchXP("//*/*/obj/*/*", NOTHING);
+ testSearchXP("/*/*/obj/*/*", NOTHING);
checkEquals(qf.getObjects("*/*","*/*",null,null).list(), NOTHING);
- testSearchXP("//*/*/obj/*/*/@doc:self", NOTHING);
+ testSearchXP("/*/*/obj/*/*/@doc:self", NOTHING);
checkEquals(qf.getObjects("*/*","*.*","@doc:self",null).list(), NOTHING);
BaseObject object1, object = object1 = new BaseObject();
@@ -367,27 +361,27 @@
object.put("age", ((PropertyClass)bclass.get("age")).fromString("20"));
object.put("password", ((PropertyClass)bclass.get("password")).fromString("sesame"));
object.put("comment",((PropertyClass)bclass.get("comment")).fromString("Hello1\nHello2\nHello3\n"));
- hb.saveXWikiDoc(doc, getXWikiContext());
+ getXWiki().saveDocument(doc, getXWikiContext());
- testSearchXP("//*/*/obj/*/*", new Object[]{object1});
+ testSearchXP("/*/*/obj/*/*", new Object[]{object1});
checkEquals(qf.getObjects("*/*","*/*",null,null).list(), new Object[]{object1});
- testSearchXP("//Test/TestObject/obj/*/*", new Object[]{object1});
+ testSearchXP("/Test/TestObject/obj/*/*", new Object[]{object1});
checkEquals(qf.getObjects("Test.TestObject","*/*",null,null).list(), new Object[]{object1});
- testSearchXP("//Test/TestObject/obj/Test/TestClass", new Object[]{object1});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass", new Object[]{object1});
checkEquals(qf.getObjects("Test.TestObject","Test.TestClass",null,null).list(), new Object[]{object1});
- testSearchXP("//*/*/obj/*/*/@className", new Object[]{"Test.TestClass"});
+ testSearchXP("/*/*/obj/*/*/@className", new Object[]{"Test.TestClass"});
checkEquals(qf.getObjects("*/*","*/*","@className",null).list(), new Object[]{"Test.TestClass"});
- testSearchXP("//*/*/obj/*/*/@name", new Object[]{"Test.TestObject"});
+ testSearchXP("/*/*/obj/*/*/@name", new Object[]{"Test.TestObject"});
checkEquals(qf.getObjects("*/*","*/*","@name",null).list(), new Object[]{"Test.TestObject"});
- testSearchXP("//Test/TestObject/obj/Test/*", new Object[]{object1});
+ testSearchXP("/Test/TestObject/obj/Test/*", new Object[]{object1});
checkEquals(qf.getObjects("Test/TestObject","Test.*",null,null).list(), new Object[]{object1});
- testSearchXP("//Test/TestObject/obj/*/TestClass", new Object[]{object1});
+ testSearchXP("/Test/TestObject/obj/*/TestClass", new Object[]{object1});
checkEquals(qf.getObjects("Test.TestObject","*.TestClass",null,null).list(), new Object[]{object1});
- testSearchXP("//Test/TestObject/obj/Test/TestClass/(@name, at className)", new Object[]{new Object[]{"Test.TestObject", "Test.TestClass"}});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass/(@name, at className)", new Object[]{new Object[]{"Test.TestObject", "Test.TestClass"}});
checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@name, at className",null).list(), new Object[]{new Object[]{"Test.TestObject", "Test.TestClass"}});
- testSearchXP("//*/*/obj/*/*/@doc:self", new Object[]{doc1});
+ testSearchXP("/*/*/obj/*/*/@doc:self", new Object[]{doc1});
checkEquals(qf.getObjects("*/*","*/*","@doc:self",null).list(), new Object[]{doc1});
doc = doc1;
@@ -400,60 +394,60 @@
object.put("age", ((PropertyClass)bclass.get("age")).fromString("21"));
object.put("password", ((PropertyClass)bclass.get("password")).fromString("sesame"));
object.put("comment",((PropertyClass)bclass.get("comment")).fromString("Hello2\nHello3\nHello4\n"));
- getXWiki().getStore().saveXWikiDoc(doc, getXWikiContext());
+ getXWiki().saveDocument(doc, getXWikiContext());
- testSearchXP("//*/*/obj/*/* order by @number", new Object[]{object1, object2});
+ testSearchXP("/*/*/obj/*/* order by @number", new Object[]{object1, object2});
checkEquals(qf.getObjects("*/*","*/*",null,"+ at number").list(), new Object[]{object1, object2});
- testSearchXP("//*/*/obj/*/* order by @number descending", new Object[]{object2, object1});
+ testSearchXP("/*/*/obj/*/* order by @number descending", new Object[]{object2, object1});
checkEquals(qf.getObjects("*/*","*/*",null,"- at number").list(), new Object[]{object2, object1});
- testSearchXP("//Test/TestObject/obj/Test/TestClass order by @number", new Object[]{object1, object2});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass order by @number", new Object[]{object1, object2});
checkEquals(qf.getObjects("Test/TestObject","Test/TestClass",null,"@number").list(), new Object[]{object1, object2});
- testSearchXP("//*/*/obj/Test/TestClass/@f:first_name order by @f:first_name descending", new Object[]{"Ivan", "Artem"});
- checkEquals(qf.getObjects("*/*","Test/TestClass","@f:first_name","- at f:first_name").list(), new Object[]{"Ivan", "Artem"});
- testSearchXP("//*/*/obj/Test/TestClass/@f:age order by @f:age", new Object[]{new Integer(20), new Integer(21)});
- checkEquals(qf.getObjects("*/*","Test.TestClass","@f:age","+ at f:age").list(), new Object[]{new Integer(20), new Integer(21)});
- testSearchXP("//*/*/obj/Test/TestClass/@f:comment order by @number", new Object[]{"Hello1\nHello2\nHello3\n", "Hello2\nHello3\nHello4\n"});
- checkEquals(qf.getObjects("*/*","Test.TestClass","@f:comment","@number").list(), new Object[]{"Hello1\nHello2\nHello3\n", "Hello2\nHello3\nHello4\n"});
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name='Artem']", new Object[]{object1});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:first_name='Artem']",null,null).list(), new Object[]{object1});
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name!='Artem']", new Object[]{object2});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:first_name!='Artem']",null,null).list(), new Object[]{object2});
- testSearchXP("//Test/*/obj/Test/TestClass[@f:age>20]", new Object[]{object2});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:age>20]",null,null).list(), new Object[]{object2});
- testSearchXP("//Test/TestObject/obj/Test/TestClass[@f:age>20]/@f:age", new Object[]{new Integer(21)});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:age>20]","@f:age",null).list(), new Object[]{new Integer(21)});
- testSearchXP("//Test/TestObject/obj/Test/TestClass[@f:age<20]/@f:first_name", NOTHING);
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:age<20]","@f:first_name",null).list(), NOTHING);
- testSearchXP("//Test/TestObject/obj/Test/TestClass/@f:first_name order by @f:age", new Object[]{"Artem", "Ivan"});
- checkEquals(qf.getObjects("*/*","Test.TestClass","@f:first_name","+ at f:age").list(), new Object[]{"Artem", "Ivan"});
- testSearchXP("//Test/TestObject/obj/Test/TestClass/@f:first_name order by @f:age descending", new Object[]{"Ivan", "Artem"});
- checkEquals(qf.getObjects("*/*","Test.TestClass","@f:first_name","- at f:age").list(), new Object[]{"Ivan", "Artem"});
- checkEquals(qf.getObjects("*/*","Test.TestClass","@f:first_name","@f:age descending").list(), new Object[]{"Ivan", "Artem"});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:first_name order by @xp:first_name descending", new Object[]{"Ivan", "Artem"});
+ checkEquals(qf.getObjects("*/*","Test/TestClass","@xp:first_name","- at xp:first_name").list(), new Object[]{"Ivan", "Artem"});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:age order by @xp:age", new Object[]{new Integer(20), new Integer(21)});
+ checkEquals(qf.getObjects("*/*","Test.TestClass","@xp:age","+ at xp:age").list(), new Object[]{new Integer(20), new Integer(21)});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:comment order by @number", new Object[]{"Hello1\nHello2\nHello3\n", "Hello2\nHello3\nHello4\n"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass","@xp:comment","@number").list(), new Object[]{"Hello1\nHello2\nHello3\n", "Hello2\nHello3\nHello4\n"});
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name='Artem']", new Object[]{object1});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:first_name='Artem']",null,null).list(), new Object[]{object1});
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name!='Artem']", new Object[]{object2});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:first_name!='Artem']",null,null).list(), new Object[]{object2});
+ testSearchXP("/Test/*/obj/Test/TestClass[@xp:age>20]", new Object[]{object2});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:age>20]",null,null).list(), new Object[]{object2});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass[@xp:age>20]/@xp:age", new Object[]{new Integer(21)});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:age>20]","@xp:age",null).list(), new Object[]{new Integer(21)});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass[@xp:age<20]/@xp:first_name", NOTHING);
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:age<20]","@xp:first_name",null).list(), NOTHING);
+ testSearchXP("/Test/TestObject/obj/Test/TestClass/@xp:first_name order by @xp:age", new Object[]{"Artem", "Ivan"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass","@xp:first_name","+ at xp:age").list(), new Object[]{"Artem", "Ivan"});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass/@xp:first_name order by @xp:age descending", new Object[]{"Ivan", "Artem"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass","@xp:first_name","- at xp:age").list(), new Object[]{"Ivan", "Artem"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass","@xp:first_name","@xp:age descending").list(), new Object[]{"Ivan", "Artem"});
- testSearchXP("//Test/TestObject/obj/Test/TestClass[@f:age=20]/@f:password", new Object[]{"sesame"}); // security is in QueryPluginApi
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass[@f:age=20]","@f:password", null).list(), new Object[]{"sesame"});
- testSearchXP("//*/*/obj/Test/TestClass/@f:first_name order by @f:first_name", new Object[]{"Artem", "Ivan"});
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@f:first_name", "@f:first_name").list(), new Object[]{"Artem", "Ivan"});
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@f:first_name", "@f:first_name ascending").list(), new Object[]{"Artem", "Ivan"});
+ testSearchXP("/Test/TestObject/obj/Test/TestClass[@xp:age=20]/@xp:password", new Object[]{"sesame"}); // security is in QueryPluginApi
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass[@xp:age=20]","@xp:password", null).list(), new Object[]{"sesame"});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:first_name order by @xp:first_name", new Object[]{"Artem", "Ivan"});
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@xp:first_name", "@xp:first_name").list(), new Object[]{"Artem", "Ivan"});
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@xp:first_name", "@xp:first_name ascending").list(), new Object[]{"Artem", "Ivan"});
- testSearchXP("//*/*/obj/Test/TestClass/@f:first_name order by @f:password, @f:age", new Object[]{"Artem", "Ivan"});
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@f:first_name", "@f:password, at f:age").list(), new Object[]{"Artem", "Ivan"});
- testSearchXP("//*/*/obj/Test/TestClass/@f:first_name order by @f:password descending, @f:age descending", new Object[]{"Ivan", "Artem"});
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@f:first_name", "- at f:password,- at f:age").list(), new Object[]{"Ivan", "Artem"});
- testSearchXP("//*/*/obj/Test/TestClass/(@f:first_name, at f:age) order by @f:password descending, @f:age descending", new Object[]{new Object[]{"Ivan", new Long(21)}, new Object[]{"Artem", new Long(20)}});
- checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@f:first_name, at f:age", "- at f:password,- at f:age").list(), new Object[]{new Object[]{"Ivan", new Long(21)}, new Object[]{"Artem", new Long(20)}});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:first_name order by @xp:password, @xp:age", new Object[]{"Artem", "Ivan"});
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@xp:first_name", "@xp:password, at xp:age").list(), new Object[]{"Artem", "Ivan"});
+ testSearchXP("/*/*/obj/Test/TestClass/@xp:first_name order by @xp:password descending, @xp:age descending", new Object[]{"Ivan", "Artem"});
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@xp:first_name", "- at xp:password,- at xp:age").list(), new Object[]{"Ivan", "Artem"});
+ testSearchXP("/*/*/obj/Test/TestClass/(@xp:first_name, at xp:age) order by @xp:password descending, @xp:age descending", new Object[]{new Object[]{"Ivan", new Long(21)}, new Object[]{"Artem", new Long(20)}});
+ checkEquals(qf.getObjects("Test.TestObject","Test.TestClass","@xp:first_name, at xp:age", "- at xp:password,- at xp:age").list(), new Object[]{new Object[]{"Ivan", new Long(21)}, new Object[]{"Artem", new Long(20)}});
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name='Artem']/@doc:name", new Object[]{"TestObject"});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:first_name='Artem']","@doc:name",null).list(), new Object[]{"TestObject"});
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name!='Artem']/@doc:fullName", new Object[]{"Test.TestObject"});
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:first_name!='Artem']","@doc:fullName",null).list(), new Object[]{"Test.TestObject"});
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name!='Artem' and @f:first_name!='Ivan']/@doc:web", NOTHING);
- checkEquals(qf.getObjects("*/*","Test.TestClass[@f:first_name!='Artem' and @f:first_name!='Ivan']","@doc:fullName",null).list(), NOTHING);
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name='Artem']/@doc:name", new Object[]{"TestObject"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:first_name='Artem']","@doc:name",null).list(), new Object[]{"TestObject"});
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name!='Artem']/@doc:fullName", new Object[]{"Test.TestObject"});
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:first_name!='Artem']","@doc:fullName",null).list(), new Object[]{"Test.TestObject"});
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name!='Artem' and @xp:first_name!='Ivan']/@doc:web", NOTHING);
+ checkEquals(qf.getObjects("*/*","Test.TestClass[@xp:first_name!='Artem' and @xp:first_name!='Ivan']","@doc:fullName",null).list(), NOTHING);
- testSearchXP("//*/*/obj/Test/TestClass[@f:first_name!='Artem' and @f:first_name!='Ivan']/@f:first_name", NOTHING);
+ testSearchXP("/*/*/obj/Test/TestClass[@xp:first_name!='Artem' and @xp:first_name!='Ivan']/@xp:first_name", NOTHING);
}
- public void test_jcr_contain() throws HibernateException, XWikiException, InvalidQueryException {
+ public void testListQuery() throws HibernateException, XWikiException, InvalidQueryException {
XWikiHibernateStore hb = getXWiki().getHibernateStore();
XWikiDocument doc0, doc = doc0 = new XWikiDocument("Test", "Contains");
BaseClass bclass1, bclass = bclass1 = Utils.prepareClass(doc, "Test.Contains");
@@ -462,7 +456,7 @@
propclass.setMultiSelect(true);
propclass.setRelationalStorage(true);
bclass.put("dblist", propclass);
- hb.saveXWikiDoc(doc0, getXWikiContext());
+ getXWiki().saveDocument(doc0, getXWikiContext());
XWikiDocument doc1 = doc = new XWikiDocument("Test", "Doc");
BaseObject object = Utils.prepareAdvancedObject(doc);
@@ -474,20 +468,22 @@
object.put("category2", ((PropertyClass)bclass.get("category2")).fromString("1|2"));
object.put("category3", ((PropertyClass)bclass.get("category3")).fromString("1|2"));
object.put("dblist", ((PropertyClass)bclass.get("dblist")).fromString("XWikiUsers|test2"));
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
getXWiki().flushCache();
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:category2, '1')]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:category2, '2')]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:category, '2')]/@f:first_name", NOTHING);
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:dblist, 'XWikiUsers')]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:dblist, 'XWikiUsers1')]/@f:first_name", NOTHING);
- testSearchXP("/*/*/obj/Test/Contains[not(jcr:contains(@f:dblist,'XWikiUsers'))]/(@f:first_name)", NOTHING);
- testSearchXP("/*/*/obj/Test/Contains[not(jcr:contains(@f:dblist,'XWikiUsers1'))]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:dblist, 'test2')]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:dblist,'test2') and jcr:contains(@f:dblist,'XWikiUsers')]/@f:first_name", new Object[]{"Ludovic"});
- testSearchXP("/*/*/obj/Test/Contains[jcr:contains(@f:dblist,'test2') and jcr:contains(@f:dblist,'XWikiUsers1')]/@f:first_name", NOTHING);
- testSearchXP("/*/*/obj/Test/Contains[not(jcr:contains(@f:dblist,'test2'))and not(jcr:contains(@f:dblist,'XWikiUsers'))]/@f:first_name", NOTHING);
+ // 'general comparison' '=' - check that at least one value =
+ testSearchXP("/*/*/obj/Test/Contains[@xp:dblist='XWikiUsers']/@xp:first_name", new Object[]{"Ludovic"});
+ testSearchXP("/*/*/obj/Test/Contains[@xp:dblist='XWikiUsers1']/@xp:first_name", NOTHING);
+ // XXX: not for elements() is not working in hibernate?: testSearchXP("/*/*/obj/Test/Contains[not(@xp:dblist='XWikiUsers')]/(@xp:first_name)", NOTHING);
+
+ // 'value comparison' 'ne' - check that all values !=
+ testSearchXP("/*/*/obj/Test/Contains[@xp:dblist ne 'XWikiUsers']/(@xp:first_name)", NOTHING);
+ // XXX: testSearchXP1("/*/*/obj/Test/Contains[not(@xp:dblist ne 'XWikiUsers')]/(@xp:first_name)", "Ludovic");
+ testSearchXP("/*/*/obj/Test/Contains[@xp:dblist ne 'XWikiUsers1']/@xp:first_name", new Object[]{"Ludovic"});
+ testSearchXP("/*/*/obj/Test/Contains[@xp:dblist='test2']/@xp:first_name", new Object[]{"Ludovic"});
+ testSearchXP("/*/*/obj/Test/Contains[(@xp:dblist='test2') and (@xp:dblist='XWikiUsers')]/@xp:first_name", new Object[]{"Ludovic"});
+ testSearchXP("/*/*/obj/Test/Contains[(@xp:dblist='test2') and (@xp:dblist='XWikiUsers1')]/@xp:first_name", NOTHING);
+ testSearchXP("/*/*/obj/Test/Contains[(@xp:dblist ne 'test2') and (@xp:dblist ne 'XWikiUsers')]/@xp:first_name", NOTHING);
}
public void testReturnListS() throws XWikiException, InvalidQueryException {
@@ -499,7 +495,7 @@
propclass.setMultiSelect(true);
propclass.setRelationalStorage(true);
bclass.put("dblist", propclass);
- hb.saveXWikiDoc(doc0, getXWikiContext());
+ getXWiki().saveDocument(doc0, getXWikiContext());
XWikiDocument doc1 = doc = new XWikiDocument("Test", "Doc");
BaseObject object = Utils.prepareAdvancedObject(doc);
@@ -511,32 +507,30 @@
object.put("category2", ((PropertyClass)bclass.get("category2")).fromString("1|2"));
object.put("category3", ((PropertyClass)bclass.get("category3")).fromString("1|2"));
object.put("dblist", ((PropertyClass)bclass.get("dblist")).fromString("XWikiUsers|test2"));
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
getXWiki().flushCache();
- testSearchXP("/*/*/obj/Test/Contains/@f:category", new Object[]{"1"});
- testSearchXP("/*/*/obj/Test/Contains/@f:category2", new Object[]{"1|2"});
+ testSearchXP("/*/*/obj/Test/Contains/@xp:category", new Object[]{"1"});
+ testSearchXP("/*/*/obj/Test/Contains/@xp:category2", new Object[]{"1|2"});
// Hibernate(even 3.1) could not return lists..(NullPointer in parser) maybe needed special select query. question is posted
- //testsearch("/*/*/obj/Test/Contains/@f:dblist", new Object[]{Arrays.asList(new Object[]{"XWikiUsers", "test2"})});
+ //testsearch("/*/*/obj/Test/Contains/@xp:dblist", new Object[]{Arrays.asList(new Object[]{"XWikiUsers", "test2"})});
}
public void testDistinct() throws XWikiException, InvalidQueryException {
XWikiHibernateStore hb = getXWiki().getHibernateStore();
- hb.beginTransaction(getXWikiContext());
XWikiDocument doc1 = new XWikiDocument("Test", "TestObject");
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
XWikiDocument doc2 = new XWikiDocument("Test2", "TestObject");
- hb.saveXWikiDoc(doc2, getXWikiContext());
- hb.endTransaction(getXWikiContext(), true);
+ getXWiki().saveDocument(doc2, getXWikiContext());
- testSearchXP("//*/*/@name", new Object[]{"TestObject", "TestObject"});
+ testSearchXP("/*/*/@name", new Object[]{"TestObject", "TestObject"});
checkEquals(qf.getDocs("*.*", "@name", "").setDistinct(true).list(), new Object[]{"TestObject"});
checkEquals(qf.getDocs("*.*", "(@name, at name)", "").setDistinct(true).list(), new Object[]{new Object[]{"TestObject", "TestObject"}});
}
public void testJcrClasses() throws InvalidQueryException, XWikiException, IOException {
// test empty
- testSearchXPnQl("//element(*, xwiki:document)", "select * from xwiki:document", NOTHING);
+ testSearchXPnQl("/element(*, xwiki:document)", "select * from xwiki:document", NOTHING);
testSearchXPnQl("//element(*, xwiki:object)", "select * from xwiki:object", NOTHING);
testSearchXPnQl("//element(*, xwiki:attachment)", "select * from xwiki:attachment", NOTHING);
@@ -545,11 +539,11 @@
// new Class
XWikiDocument doc0, doc = doc0 = new XWikiDocument("Class", "Class1");
BaseClass bclass = Utils.prepareClass(doc, "Class.Class1");
- hb.saveXWikiDoc(doc0, getXWikiContext());
+ getXWiki().saveDocument(doc0, getXWikiContext());
// new Doc
XWikiDocument doc1 = doc = new XWikiDocument("Test", "Doc");
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
// new attach
Utils.setStandardData();
@@ -558,7 +552,7 @@
attachment1.setContent(attachcontent1);
doc1.saveAttachmentContent(attachment1, getXWikiContext());
doc1.getAttachmentList().add(attachment1);
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
// new Obj
doc = doc1;
@@ -571,26 +565,26 @@
object.put("password", ((PropertyClass)bclass.get("password")).fromString("sesame"));
object.put("comment",((PropertyClass)bclass.get("comment")).fromString("Hello1\nHello2\nHello3\n"));
doc.setObject(bclass.getName(), 0, object);
- hb.saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
- testSearchXPnQl("//element(*, xwiki:document)/(@web, at name) order by @web descending", "select web,name from xwiki:document order by web desc",
+ testSearchXPnQl("/element(*, xwiki:document)/(@web, at name) order by @web descending", "select web,name from xwiki:document order by web desc",
new Object[]{new Object[]{"Test", "Doc"}, new Object[]{"Class", "Class1"}});
- testSearchXPnQl1("//element(*, xwiki:object)[@className='Class.Class1']/@f:first_name", "select f:first_name from xwiki:object where className='Class.Class1'",
+ testSearchXPnQl1("//element(*, xwiki:object)[@className='Class.Class1']/@xp:first_name", "select xp:first_name from xwiki:object where className='Class.Class1'",
"Artem");
testSearchXPnQl1("//element(*, xwiki:attachment)/@filename", "select filename from xwiki:attachment",
"testfile1");
testSearchXPnQl1("/Test/element(*, xwiki:document)/@name", "select name from xwiki:document where web='Test'", "Doc");
- testSearchXPnQl1("//Class/element(Class1, xwiki:object)/@f:last_name", "select f:last_name from xwiki:object where className='Class.Class1'", "Melentev");
+ testSearchXPnQl1("//Class/element(Class1, xwiki:object)/@xp:last_name", "select xp:last_name from xwiki:object where className='Class.Class1'", "Melentev");
testSearchXP1("/doc/Class/*/@name", "Class1");
testSearchXP1("//obj/*/*/@name", "Test.Doc");
testSearchXP1("//attach/*/@filename", "testfile1");
getXWiki().getHibernateStore().beginTransaction(false, getXWikiContext());
- testSearchXP1("//element(Doc, xwiki:document)//element(*, xwiki:object)/@id", object1.getId());
+ testSearchXP1("/element(Doc, xwiki:document)//element(*, xwiki:object)/@id", object1.getId());
testSearchXP1("/Test/Doc/element(*, xwiki:object)/@id", object1.getId());
- //testSearchXP1("//element(Doc, xwiki:document)//*[@jcr:primaryType='xwiki:attachment']/@id", attachment1.getId());
+ //testSearchXP1("/element(Doc, xwiki:document)//*[@jcr:primaryType='xwiki:attachment']/@id", attachment1.getId());
testSearchXP1("/Test/Doc/element(*, xwiki:attachment)/@id", attachment1.getId());
testSearchXP1("/Test/Doc/element(*, xwiki:object)/@id", object1.getId());
getXWiki().getHibernateStore().endTransaction(getXWikiContext(), false);
@@ -600,10 +594,10 @@
XWikiDocument doc2 = new XWikiDocument("Test", "Doc2");
doc2.setParent("Test.Doc");
- hb.saveXWikiDoc(doc2, getXWikiContext());
+ getXWiki().saveDocument(doc2, getXWikiContext());
XWikiDocument doc3 = new XWikiDocument("Test", "Doc3");
doc3.setParent("Test.Doc2");
- hb.saveXWikiDoc(doc3, getXWikiContext());
+ getXWiki().saveDocument(doc3, getXWikiContext());
testSearchXP1("/Test/Doc/*/element(*, xwiki:document)/@fullName", "Test.Doc2"); // list all childs of Test.Doc
testSearchXP1("/Test/Doc/doc/*/*/@name", "Doc2");
@@ -619,7 +613,7 @@
BaseClass bclass = new BaseClass();
bclass.addDateField("date", "pdate");
doc.setxWikiClass(bclass);
- getXWiki().getStore().saveXWikiDoc(doc0, getXWikiContext());
+ getXWiki().saveDocument(doc0, getXWikiContext());
// new Doc
XWikiDocument doc1 = doc = new XWikiDocument("Test", "Doc");
@@ -640,14 +634,14 @@
Timestamp ts2 = new Timestamp(cal2.getTimeInMillis());
object.put("date", ((PropertyClass)bclass.get("date")).fromValue(ts2));
doc.setObject(bclass.getName(), 1, object2);
- getXWiki().getStore().saveXWikiDoc(doc1, getXWikiContext());
+ getXWiki().saveDocument(doc1, getXWikiContext());
- testSearchXPnQl("//obj/Class/Class1/@f:date order by @f:date", "select f:date from xwiki:object where className='Class.Class1' order by f:date", new Object[]{ts1, ts2});
+ testSearchXPnQl("//obj/Class/Class1/@xp:date order by @xp:date", "select xp:date from xwiki:object where className='Class.Class1' order by xp:date", new Object[]{ts1, ts2});
String sdate = qf.getValueFactory().createValue(cal1).getString();
- testSearchXPnQl("//obj/Class/Class1[@f:date < xs:dateTime('"+sdate+"')]/@f:date", "select f:date from xwiki:object where className='Class.Class1' and f:date < TIMESTAMP '"+sdate+"'", NOTHING);
- testSearchXPnQl1("//obj/Class/Class1[@f:date <= xs:dateTime('"+sdate+"')]/@f:date", "select f:date from xwiki:object where className='Class.Class1' and f:date <= TIMESTAMP '"+sdate+"'", ts1);
- testSearchXPnQl1("//obj/Class/Class1[@f:date > xs:dateTime('"+sdate+"')]/@f:date", "select f:date from xwiki:object where className='Class.Class1' and f:date > TIMESTAMP '"+sdate+"'", ts2);
- testSearchXPnQl("//obj/Class/Class1[@f:date >= xs:dateTime('"+sdate+"')]/@f:date order by @f:date descending", "select f:date from xwiki:object where className='Class.Class1' and f:date >= TIMESTAMP '"+sdate+"' order by f:date DESC", new Object[]{ts2, ts1});
+ testSearchXPnQl("//obj/Class/Class1[@xp:date < xs:dateTime('"+sdate+"')]/@xp:date", "select xp:date from xwiki:object where className='Class.Class1' and xp:date < TIMESTAMP '"+sdate+"'", NOTHING);
+ testSearchXPnQl1("//obj/Class/Class1[@xp:date <= xs:dateTime('"+sdate+"')]/@xp:date", "select xp:date from xwiki:object where className='Class.Class1' and xp:date <= TIMESTAMP '"+sdate+"'", ts1);
+ testSearchXPnQl1("//obj/Class/Class1[@xp:date > xs:dateTime('"+sdate+"')]/@xp:date", "select xp:date from xwiki:object where className='Class.Class1' and xp:date > TIMESTAMP '"+sdate+"'", ts2);
+ testSearchXPnQl("//obj/Class/Class1[@xp:date >= xs:dateTime('"+sdate+"')]/@xp:date order by @xp:date descending", "select xp:date from xwiki:object where className='Class.Class1' and xp:date >= TIMESTAMP '"+sdate+"' order by xp:date DESC", new Object[]{ts2, ts1});
}
public void testJcrDeref() throws XWikiException, IOException, InvalidQueryException {
XWikiStoreInterface store = xwiki.getStore();
More information about the Xwiki-notifications
mailing list