|
xCMISSQLQueryUsecases
CMIS provides a type-based query service for discovering objects that match specified criteria, by defining a read-only projection of the CMIS data
query This document refers to 1.1.x and 1.2.x version of xCMIS.
CMIS SQL queryCMIS provides a type-based query service for discovering objects that match specified criteria, by defining a read-only projection of the CMIS data model into a Relational View. Query lifecycleTODO update to new SPI We can make query: Query query = new Query(statement, true); Execute query: ItemsIterator<Result> result = storage.query(query); Object type attributes that affects to queryTODO update to new SPI Each CMIS ObjectType definition has next query attributes:
Property definition also contains queryName and queriable attributes with same usage. Get CapabilitiesGet query capabilities. // Get description of storage and its capabilities RepositoryCapabilities repCapabilities = storage.getRepositoryInfo().getCapabilities(); // Get capability repCapabilities.getCapabilityQuery(); // Get get capability join repCapabilities.getCapabilityJoin(); // Check for PWC searchability repCapabilities.isCapabilityPWCSearchable(); // Check for versions searchability repCapabilities.isCapabilityAllVersionsSearchable(); Query examplesConstraintSimple queryQuery : Select all NASA_DOCUMENT. String statement = "SELECT * FROM " + NASA_DOCUMENT; // create query object Query query = new Query(sql.toString(), true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: All documents from Apollo program. AND, ORFind document by several constraintsQuery : Select all documents where exo:Booster is 'Saturn V' and exo:Commander is Frank F. Borman, II or James A. Lovell, Jr. Initial data:
StringBuffer sql = new StringBuffer();
sql.append("SELECT * ");
sql.append("FROM ");
sql.append(NASA_DOCUMENT);
sql.append(" WHERE ");
sql.append(PROPERTY_BOOSTER + " = " + "'Saturn V'");
sql.append(" AND ( " + PROPERTY_COMMANDER + " = 'Frank F. Borman, II' ");
sql.append(" OR " + PROPERTY_COMMANDER + " = 'James A. Lovell, Jr.' )");
// create query object
Query query = new Query(sql.toString(), true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document2 and document3 Full-text searchSimple full-text searchFull-text search from jcr:content Query : Select all documents that contains "here" word. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE CONTAINS(\"here\")"; // create query object Query query = new Query(sql.toString(), true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document2. Extended full-text searchQuery : Select all documents that contains "There must" phrase and do not contain "check-word" word. Initial data:
String statement =
"SELECT * FROM " + NASA_DOCUMENT + " WHERE CONTAINS(\"\\\"There must\\\" -\\\"check\\-word\\\"\")";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document1. ComparisonDate property comparisonQuery : Select all documents where cmis:lastModificationDate more than 2007-01-01. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE ( cmis:lastModificationDate >= TIMESTAMP '2007-01-01T00:00:00.000Z' )"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document2. Boolean property comparisonQuery : Select all documents where property PROPERTY_STATUS equals to false. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE (" + PROPERTY_STATUS + " = FALSE )";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document2. IN ConstraintFind document where property are any value from defined setQuery : Select all documents where PROPERTY_COMMANDER is in set {'Virgil I. Grissom', 'Frank F. Borman, II', 'James A. Lovell, Jr.'}. Initial data:
String statement =
"SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY_COMMANDER
+ " IN ('Virgil I. Grissom', 'Frank F. Borman, II', 'James A. Lovell, Jr.')";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document2 and document3. Select all documents where longprop property NOT IN setQuery : Select all documents where PROPERTY_COMMANDER property not in set {'Walter M. Schirra', 'James A. Lovell, Jr.'}. Initial data:
String statement =
"SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY_COMMANDER
+ " NOT IN ('Walter M. Schirra', 'James A. Lovell, Jr.')";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document2, document4. Select all documents where longprop property NOT NOT IN setQuery : Select all documents where PROPERTY_COMMANDER property NOT NOT IN set {'James A. Lovell, Jr.'}. Initial data:
String statement =
"SELECT * FROM " + NASA_DOCUMENT + " WHERE NOT (" + PROPERTY_COMMANDER + " NOT IN ('James A. Lovell, Jr.'))";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document3. IN_FOLDER constarintSelect all folders that are in specified folderQuery : Select all folders that are in folder1. Initial data:
document1: Title - node1 folder4: document2: Title - node2 String statement = "SELECT * FROM cmis:folder WHERE IN_FOLDER( '" + folder1.getObjectId() + "')"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: folder3. Select all documents that are in specified folderQuery : Select all documents that are in folder1. Initial data:
document1: Title - node1 document2: Title - node2 String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE IN_FOLDER( '" + folder1.getObjectId() + "')"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document1. Select all documents where query supertype is cmis:articleQuery : Select all documents where query supertype is cmis:article. Initial data:
String stat = "SELECT * FROM cmis:article WHERE IN_FOLDER( '" + testRoot.getObjectId() + "')"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document1,document2. IN_TREE constraintSelect all documents that are in tree of specified folderQuery : Select all documents that are in tree of folder1. Initial data:
document1 document2 String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE IN_TREE('" + folder1.getObjectId() + "')";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document1, document2. LIKE ComparisonSelect all documents where PROPERTY_COMMANDER begins with "James"Query : Select all documents where PROPERTY_COMMANDER begins with "James". Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " AS doc WHERE " + PROPERTY_COMMANDER + " LIKE 'James%'"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document3. Test LIKE constraint with escape symbolsQuery : Select all documents where PROPERTY like 'ad\\%min%'. Initial data:
String statement =
"SELECT * FROM " + NASA_DOCUMENT + " AS doc WHERE " + PROPERTY + " LIKE 'ad\\%min%'";
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document1. NOT constraintSelect all documents that not contains "world" wordQuery : Select all documents that not contains "world" word. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE NOT CONTAINS(\"world\")"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document2. Property existanseSelect all documents by property existanceQuery : Select all documents that has PROPERTY_COMMANDER property IS NOT NULL. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY_COMMANDER + " IS NOT NULL"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document1, document3. ORDER BYORDER BY defaultQuery : Select all documents in default order (by document name). Initial data:
StringBuffer sql = new StringBuffer();
sql.append("SELECT ");
sql.append(CmisConstants.LAST_MODIFIED_BY + ", ");
sql.append(CmisConstants.OBJECT_ID + ", ");
sql.append(CmisConstants.LAST_MODIFICATION_DATE);
sql.append(" FROM ");
sql.append(NASA_DOCUMENT);
String statement = sql.toString();
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document3, document4, document1, document2. ORDER BY ASCQuery : Order by PROPERTY_COMMANDER property value (in ascending order). Initial data:
StringBuffer sql = new StringBuffer();
sql.append("SELECT ");
sql.append(CmisConstants.LAST_MODIFIED_BY + ", ");
sql.append(CmisConstants.OBJECT_ID + ", ");
sql.append(CmisConstants.LAST_MODIFICATION_DATE);
sql.append(" FROM ");
sql.append(NASA_DOCUMENT);
sql.append(" ORDER BY ");
sql.append(PROPERTY_COMMANDER);
String statement = sql.toString();
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document4, document2, document3, document1. ORDER BY DESCQuery : Order by PROPERTY_COMMANDER property value (in decending order). Initial data:
StringBuffer sql = new StringBuffer();
sql.append("SELECT ");
sql.append(CmisConstants.LAST_MODIFIED_BY + " as last , ");
sql.append(CmisConstants.OBJECT_ID + " , ");
sql.append(CmisConstants.LAST_MODIFICATION_DATE);
sql.append(" FROM ");
sql.append(NASA_DOCUMENT);
sql.append(" ORDER BY ");
sql.append(PROPERTY_COMMANDER);
sql.append(" DESC");
String statement = sql.toString();
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document1, document3, document2, document4. ORDER BY SCORE (as columns)Query : Select all documents which contains word "moon" ordered by score. Initial data:
StringBuffer sql = new StringBuffer();
sql.append("SELECT ");
sql.append(" SCORE() AS scoreCol, ");
sql.append(CmisConstants.LAST_MODIFIED_BY + ", ");
sql.append(CmisConstants.OBJECT_ID + ", ");
sql.append(CmisConstants.LAST_MODIFICATION_DATE);
sql.append(" FROM ");
sql.append(NASA_DOCUMENT);
sql.append(" WHERE CONTAINS(\"moon\") ");
sql.append(" ORDER BY SCORE() ");
String statement = sql.toString();
// create query object
Query query = new Query(statement, true);
// execute query
ItemsIterator<Result> result = storage.query(query);Query result: document2, document3. Not equal comparsion (<>)Not equal comparison (decimal)Query : Select all documents property PROPERTY_BOOSTER_MASS not equal to 3. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY_BOOSTER_MASS + " <> 3"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document2. Not equal comparison (string)Query : Select all documents property PROPERTY not equals to "test word second". Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY + " <> 'test word second'"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document1. More than comparison (>)Query : Select all documents property PROPERTY_BOOSTER_MASS more than 5. Initial data:
String statement = "SELECT * FROM " + NASA_DOCUMENT + " WHERE " + PROPERTY_BOOSTER_MASS + " > 5"; // create query object Query query = new Query(statement, true); // execute query ItemsIterator<Result> result = storage.query(query); Query result: document2. | |||||||||||||||