Class CMISQLQueryMaker
- java.lang.Object
-
- org.nuxeo.ecm.core.opencmis.impl.server.CMISQLQueryMaker
-
- All Implemented Interfaces:
QueryMaker
public class CMISQLQueryMaker extends Object implements QueryMaker
Transformer of CMISQL queries into real SQL queries for the actual database.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classCMISQLQueryMaker.AnalyzingWalkerWalker of the WHERE clause to gather fulltext info.static classCMISQLQueryMaker.ClauseTypestatic classCMISQLQueryMaker.CMISQLMapMakerMap maker that can deal with aliased column names and computed values.classCMISQLQueryMaker.GeneratingWalkerWalker of the WHERE clause that generates final SQL.static classCMISQLQueryMaker.SqlColumnColumn corresponding to a returned value computed from an actual SQL expression.-
Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.storage.sql.jdbc.QueryMaker
QueryMaker.Query, QueryMaker.QueryCannotMatchException
-
-
Field Summary
Fields Modifier and Type Field Description protected Set<String>allQualifiersAll qualifiers used (includes virtual columns)protected Map<String,Map<String,Table>>allTablesMap of qualifier -> fragment -> tableprotected Map<String,String>canonicalQualifierQualifier to canonical qualifier (correlation name).static StringCMIS_PREFIXprotected Databasedatabasestatic StringDC_CREATED_KEYstatic StringDC_CREATOR_KEYstatic StringDC_DESCRIPTION_KEYstatic StringDC_FRAGMENT_NAMEstatic StringDC_LAST_CONTRIBUTOR_KEYstatic StringDC_MODIFIED_KEYstatic StringDC_TITLE_KEYprotected Dialectdialectprotected Dialect.FulltextMatchInfofulltextMatchInfoprotected TablehierTableprotected Set<String>lifecycleWhereClauseQualifiersprotected static Set<String>MIXINS_NOT_PER_INSTANCEThese mixins never match an instance mixin when used in a clause nuxeo:secondaryObjectTypeIds = 'foo'protected Set<String>mixinTypeWhereClauseQualifiersprotected Modelmodelstatic Set<String>NULL_IS_FALSE_COLUMNSstatic StringNX_PREFIXprotected Map<String,String>qualifierToTypeQualifier to type.protected org.apache.chemistry.opencmis.server.support.query.QueryObjectqueryprotected org.apache.chemistry.opencmis.server.support.query.QueryUtilStrictqueryUtilprotected List<CMISQLQueryMaker.SqlColumn>realColumnsThe columns we'll actually request from the database.protected List<String>realColumnsParamsParameters for above (for SCORE expressions on some databases)static StringREL_FRAGMENT_NAMEstatic StringREL_SOURCE_KEYstatic StringREL_TARGET_KEYprotected booleansearchLatestVersionSearch only latest version = !searchAllVersions.booleanskipDeletedstatic StringTYPEprotected Map<String,org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition<?>>typeInfoType info returned to caller.protected Set<String>versionableQualifiersThe qualifiers which correspond to versionable types.protected List<String>virtualColumnNamesused for diagnostic when using DISTINCTprotected Map<String,org.apache.chemistry.opencmis.server.support.query.ColumnReference>virtualColumnsThe non-real-columns we'll return as well.
-
Constructor Summary
Constructors Constructor Description CMISQLQueryMaker()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaccepts(String queryType)Checks if this query maker accepts a given query.protected voidaddSystemColumns(boolean addSystemColumns, boolean distinct)protected StringapplySecurityPolicyQueryTransformers(NuxeoCmisService service, NuxeoPrincipal principal, String statement)Applies security policies query transformers to the statement, if possible.QueryMaker.QuerybuildQuery(SQLInfo sqlInfo, Model model, Session.PathResolver pathResolver, String statement, QueryFilter queryFilter, Object... params)Builds the query.protected static StringcmisToFulltextQuery(String statement)protected voidfindVersionableQualifiers()protected ColumngetColumn(org.apache.chemistry.opencmis.server.support.query.ColumnReference col)Finds a database column from a CMIS reference.protected static StringgetColumnKey(org.apache.chemistry.opencmis.server.support.query.ColumnReference col)Get key to use in data returned to high-level caller.StringgetName()Gets the name for this query maker.protected static StringgetPropertyKey(String qual, String id)protected ColumngetSystemColumn(String id)protected ColumngetSystemColumn(String qual, String id)protected TablegetTable(Table table, String qual)protected StringgetTableAlias(Table table, String qual)protected org.apache.chemistry.opencmis.commons.definitions.TypeDefinitiongetTypeForQualifier(String qual)protected booleanisFacetsColumn(String name)protected voidrecordColumnFragment(String qual, Column column)Records a database column's fragment (to know what to join).protected voidrecordFragment(String qual, Table table)Records a database table and qualifier (to know what to join).protected voidrecordSelector(org.apache.chemistry.opencmis.server.support.query.CmisSelector sel, CMISQLQueryMaker.ClauseType clauseType)Records a JOIN / WHERE / ORDER BY selector, and associates it to a database column.protected voidrecordSelectSelector(org.apache.chemistry.opencmis.server.support.query.CmisSelector sel)Records a SELECT selector, and associates it to a database column.protected voidresolveQualifiers()Finds what qualifiers are allowed and to what correlation name they are mapped.
-
-
-
Field Detail
-
TYPE
public static final String TYPE
- See Also:
- Constant Field Values
-
CMIS_PREFIX
public static final String CMIS_PREFIX
- See Also:
- Constant Field Values
-
NX_PREFIX
public static final String NX_PREFIX
- See Also:
- Constant Field Values
-
DC_FRAGMENT_NAME
public static final String DC_FRAGMENT_NAME
- See Also:
- Constant Field Values
-
DC_TITLE_KEY
public static final String DC_TITLE_KEY
- See Also:
- Constant Field Values
-
DC_DESCRIPTION_KEY
public static final String DC_DESCRIPTION_KEY
- See Also:
- Constant Field Values
-
DC_CREATOR_KEY
public static final String DC_CREATOR_KEY
- See Also:
- Constant Field Values
-
DC_CREATED_KEY
public static final String DC_CREATED_KEY
- See Also:
- Constant Field Values
-
DC_MODIFIED_KEY
public static final String DC_MODIFIED_KEY
- See Also:
- Constant Field Values
-
DC_LAST_CONTRIBUTOR_KEY
public static final String DC_LAST_CONTRIBUTOR_KEY
- See Also:
- Constant Field Values
-
REL_FRAGMENT_NAME
public static final String REL_FRAGMENT_NAME
- See Also:
- Constant Field Values
-
REL_SOURCE_KEY
public static final String REL_SOURCE_KEY
- See Also:
- Constant Field Values
-
REL_TARGET_KEY
public static final String REL_TARGET_KEY
- See Also:
- Constant Field Values
-
MIXINS_NOT_PER_INSTANCE
protected static final Set<String> MIXINS_NOT_PER_INSTANCE
These mixins never match an instance mixin when used in a clause nuxeo:secondaryObjectTypeIds = 'foo'
-
database
protected Database database
-
dialect
protected Dialect dialect
-
model
protected Model model
-
hierTable
protected Table hierTable
-
skipDeleted
public boolean skipDeleted
-
queryUtil
protected org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict queryUtil
-
query
protected org.apache.chemistry.opencmis.server.support.query.QueryObject query
-
fulltextMatchInfo
protected Dialect.FulltextMatchInfo fulltextMatchInfo
-
canonicalQualifier
protected Map<String,String> canonicalQualifier
Qualifier to canonical qualifier (correlation name).
-
versionableQualifiers
protected Set<String> versionableQualifiers
The qualifiers which correspond to versionable types.
-
realColumns
protected List<CMISQLQueryMaker.SqlColumn> realColumns
The columns we'll actually request from the database.
-
realColumnsParams
protected List<String> realColumnsParams
Parameters for above (for SCORE expressions on some databases)
-
virtualColumns
protected Map<String,org.apache.chemistry.opencmis.server.support.query.ColumnReference> virtualColumns
The non-real-columns we'll return as well.
-
typeInfo
protected Map<String,org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition<?>> typeInfo
Type info returned to caller.
-
searchLatestVersion
protected boolean searchLatestVersion
Search only latest version = !searchAllVersions.
-
-
Method Detail
-
getName
public String getName()
Description copied from interface:QueryMakerGets the name for this query maker.- Specified by:
getNamein interfaceQueryMaker
-
accepts
public boolean accepts(String queryType)
Description copied from interface:QueryMakerChecks if this query maker accepts a given query.Called first.
- Specified by:
acceptsin interfaceQueryMaker- Parameters:
queryType- the query- Returns:
trueif the query is accepted
-
buildQuery
public QueryMaker.Query buildQuery(SQLInfo sqlInfo, Model model, Session.PathResolver pathResolver, String statement, QueryFilter queryFilter, Object... params)
Builds the query.The optional parameters must be passed:
params[0]is theNuxeoCmisService, optionalparams[1]is a type info map, optionalparams[2]is searchAllVersions (defaultBoolean.TRUEfor this method).- Specified by:
buildQueryin interfaceQueryMaker- Parameters:
sqlInfo- the sql infomodel- the modelpathResolver- the path resolverstatement- the queryqueryFilter- the query filterparams- additional parameters, maker-specific
-
applySecurityPolicyQueryTransformers
protected String applySecurityPolicyQueryTransformers(NuxeoCmisService service, NuxeoPrincipal principal, String statement)
Applies security policies query transformers to the statement, if possible. Otherwise raises an exception.- Throws:
org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException- If a security policy prevents doing CMIS queries.- Since:
- 5.7.2
-
findVersionableQualifiers
protected void findVersionableQualifiers()
-
isFacetsColumn
protected boolean isFacetsColumn(String name)
-
addSystemColumns
protected void addSystemColumns(boolean addSystemColumns, boolean distinct)
-
recordSelectSelector
protected void recordSelectSelector(org.apache.chemistry.opencmis.server.support.query.CmisSelector sel)
Records a SELECT selector, and associates it to a database column.
-
recordSelector
protected void recordSelector(org.apache.chemistry.opencmis.server.support.query.CmisSelector sel, CMISQLQueryMaker.ClauseType clauseType)Records a JOIN / WHERE / ORDER BY selector, and associates it to a database column.
-
recordColumnFragment
protected void recordColumnFragment(String qual, Column column)
Records a database column's fragment (to know what to join).
-
recordFragment
protected void recordFragment(String qual, Table table)
Records a database table and qualifier (to know what to join).
-
resolveQualifiers
protected void resolveQualifiers()
Finds what qualifiers are allowed and to what correlation name they are mapped.
-
getColumn
protected Column getColumn(org.apache.chemistry.opencmis.server.support.query.ColumnReference col)
Finds a database column from a CMIS reference.
-
getColumnKey
protected static String getColumnKey(org.apache.chemistry.opencmis.server.support.query.ColumnReference col)
Get key to use in data returned to high-level caller.
-
getTypeForQualifier
protected org.apache.chemistry.opencmis.commons.definitions.TypeDefinition getTypeForQualifier(String qual)
-
-