Purpose:
This class is a specific version of dkDatastore to implement the Content Manager datastore. It provides documents, parts and folders storage, a retrieval mechanism as well as query and search abilities, along with other document processing features supported by the Content Manager datastore.
The execute() and evaluate() functions of DKDatastoreDL take parametric query strings expressed in parametric query language type. The syntax of this query string is described below. DKParametricQuery object accepts queries in this syntax; the DKParametricQuery object delegates the low level query processing tasks to DKDatastoreDL.
By itself, Content Manager only supports parametric queries. Integration with other search engines, such as SearchManager/Text Search Engine or Image Search/QBIC, gives Content Manager the capability to index texts and images and collectively process combined queries. Combined query processing is performed by the DKCombinedQuery class, with the help of the associated datastore classes (DKDatastoreDL, TS, or QBIC, for example).
In addition to the functions described in dkDatastore, DKDatastoreDL provides some additional functions described below:
Class summary:
class DKEXPORT DKDatastoreDL : public dkDatastore { public: DKDatastoreDL(); DKDatastoreDL(const char* configuration); virtual ~DKDatastoreDL(); virtual void connect (const char* datastore_name, const char* user_name = "", const char* authentication = "", const char* connect_string = ""); virtual void disconnect(); virtual void getOption(long option, DKAny& value); virtual void setOption(long option, DKAny& value); virtual DKAny evaluate(const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms = 0); virtual DKAny evaluate( dkQuery* query); virtual DKAny evaluate(DKCQExpr* qe); virtual dkResultSetCursor* execute( const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms = 0); virtual dkResultSetCursor* execute( dkQuery* query); virtual dkResultSetCursor* execute( DKCQExpr* qe); virtual void executeWithCallback( const char* command, const short commandLangType, const DKNVPair* parms, dkCallback* callbackObj); virtual void executeWithCallback( dkQuery* query, dkCallback* callbackObj); virtual void executeWithCallback( DKCQExpr* qe, dkCallback* callbackObj); virtual dkQuery* createQuery(const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms=0); virtual dkQuery* createQuery(DKCQExpr* qe); virtual void addObject(dkDataObject* dataObject); virtual void deleteObject(dkDataObject* dataObject); virtual void retrieveObject(dkDataObject* dataObject); virtual dkCollection* retrieveObjects(const char** itemIds, long& arraySize, DKNVPair& errMsg); virtual void updateObject(dkDataObject* dataObject); virtual void startTransaction(); virtual void commit (); virtual void rollback (); virtual DKBoolean isConnected(); virtual DKHandle* connection(); virtual DKHandle* transactionConnection(); virtual DKHandle* handle(const char* type); virtual void wakeUpService(const char* searchEngine); virtual void invokeSearchEngine(const char* searchEngine, const char* searchIndex); virtual dkCollection* listDataSources(); virtual DKString* listDataSourceNames(long& arrarySize); virtual DKAny listServers(); virtual DKAny listSchema(); virtual DKAny listSchemaAttributes(const char* schemaEntry); virtual dkCollection* listEntities(); virtual DKString* listEntityNames(long& arraySize); virtual dkCollection* listEntityAttrs(const char* entityName); virtual DKString* listEntityAttrNames(const char* entityName, long& arraySize); // <1> virtual dkCollection* listAttrs(); virtual DKString* listAttrNames(long& arraySize); // <1> virtual void addFolderItem(const char* folderId, const char* memberId); virtual void removeFolderItem(const char* folderId, const char* memberId); virtual DKBoolean isCheckedOut(dkDataObject* dataObject); virtual DKString checkedOutUserid(dkDataObject* dataObject); virtual void unlockCheckedOut(dkDataObject* dataObject); virtual void checkOut(dkDataObject* dataObject); virtual void checkIn(dkDataObject* dataObject); virtual dkDatastoreDef* datastoreDef(); virtual DKWorkFlowServiceDL* createWorkFlowService(); virtual DKString registerMapping(DKNVPair* sourceMap); virtual void unRegisterMapping(const char* mappingName); virtual DKString* listMappingNames(long& arraySize); virtual dkSchemaMapping* getMapping(const char* mappingName); virtual dkExtension* getExtension(const char* extensionName); virtual void addExtension(const char* extensionName, dkExtension* extensionObj); virtual void removeExtension(const char* extensionName); virtual DKString* listExtensionNames(long& arraySize); virtual DKDDO* createDDO(const char* objectType, long Flags); virtual DKCQExpr* translate(DKCQExpr* cqe); virtual dkXDO* retrieveFormOverlay(const char* objid); virtual void moveObject(dkDataObject* dataObject, const char* entityName); virtual DKString* listRefFolders(dkDataObject* dataObject, long& arraySize); };
Members:
DKDatastoreDL(); DKDatastoreDL(const char* configuration); virtual ~DKDatastoreDL();
Exceptions
virtual void connect (const char* datastore_name, const char* user_name = "", const char* authentication = "", const char* connect_string = "");
virtual void disconnect();
Restriction: for media objects, only the following values are valid:
DK_DL_RETRIEVAL_GET_IT
DK_DL_RETRIEVAL_STAGE_IT
DK_DL_RETRIEVAL_STAGE_IT_PREFETCH
The valid values for media objects are:
virtual void getOption(long option, DKAny& value);
Restriction: for media objects, only the following values are valid:
DK_DL_RETRIEVAL_GET_IT
DK_DL_RETRIEVAL_STAGE_IT
DK_DL_RETRIEVAL_STAGE_IT_PREFETCH
The valid values for media objects are:
virtual void setOption(long option, DKAny& value);
virtual DKAny evaluate(const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms = 0); virtual DKAny evaluate( dkQuery* query); virtual DKAny evaluate(DKCQExpr* qe);
virtual dkResultSetCursor* execute( const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms = 0); virtual dkResultSetCursor execute( dkQuery* query); virtual dkResultSetCursor* execute( DKCQExpr* qe);
virtual void executeWithCallback( const char* command, const short commandLangType, const DKNVPair* parms, dkCallback* callbackObj); virtual void executeWithCallback( dkQuery* query, dkCallback* callbackObj); virtual void executeWithCallback( DKCQExpr* qe, dkCallback* callbackObj);
virtual dkQuery* createQuery(const char* command, const short commandLangType = DK_CM_PARAMETRIC_QL_TYPE, const DKNVPair* parms=0); virtual dkQuery* createQuery(DKCQExpr* qe);
virtual void addObject(dkDataObject* dataObject);
virtual void deleteObject(dkDataObject* dataObject);
virtual void retrieveObject(dkDataObject* dataObject);
virtual dkCollection* retrieveObjects(const char** itemIds, long& arraySize, DKNVPair& errMsg);
virtual void updateObject(dkDataObject* dataObject);
Exceptions
virtual void startTransaction();
virtual void commit ();
virtual void rollback ();
virtual DKBoolean isConnected();
virtual DKHandle* connection();
virtual DKHandle* transactionConnection();
virtual DKHandle* handle(const char* type);
virtual void wakeUpService(const char* searchEngine);
The searchEngine is the search engine name (for example, QBIC) and the searchIndex is the search index ID (for example, QBICDB-QBICCAT-QBICSRV, where QBICDB = an image search database name, QBICCAT = an image search catalog name, and QBICSRV = an image search alias for an image search server). For Text Search, the search engine name is SM. The searchIndex can be TM-TMINDEX, where TM is the text search service name and TMINDEX is a text search index. You can specify an empty string ("") for the searchIndex if you want all items for that search engine to be processed.
Exceptions
virtual void invokeSearchEngine(const char* searchEngine, const char* searchIndex);
virtual dkCollection* listDataSources();
virtual DKString* listDataSourceNames(long& arrarySize);
virtual DKAny listServers();
virtual DKAny listSchema();
virtual DKAny listSchemaAttributes(const char* schemaEntry);
virtual dkCollection* listEntities();
virtual DKString* listEntityNames(long& arraySize);
virtual dkCollection* listEntityAttrs(const char* entityName);
virtual DKString* listEntityAttrNames(const char* entityName, long& arraySize);
virtual dkCollection* listAttrs();
virtual DKString* listAttrNames(long& arraySize);
virtual void addFolderItem(const char* folderId, const char* memberId);
virtual void removeFolderItem(const char* folderId, const char* memberId);
virtual DKBoolean isCheckedOut(dkDataObject* dataObject);
virtual DKString checkedOutUserid(dkDataObject* dataObject);
virtual void unlockCheckedOut(dkDataObject* dataObject);
Exceptions
virtual void checkOut(dkDataObject* dataObject);
Exceptions
virtual void checkIn(dkDataObject* dataObject);
virtual dkDatastoreDef* datastoreDef();
virtual DKWorkFlowServiceDL* createWorkFlowService();
virtual DKString registerMapping(DKNVPair* sourceMap);
virtual void unRegisterMapping(const char* mappingName);
virtual DKString* listMappingNames(long& arraySize);
virtual dkSchemaMapping* getMapping(const char* mappingName);
virtual dkExtension* getExtension(const char* extensionName);
virtual void addExtension(const char* extensionName, dkExtension* extensionObj);
virtual void removeExtension(const char* extensionName);
virtual DKString* listExtensionNames(long& arraySize);
virtual DKDDO* createDDO(const char* objectType, long Flags);
virtual DKCQExpr* translate(DKCQExpr* cqe);
virtual dkXDO* retrieveFormOverlay(const char* objid);
virtual void moveObject(dkDataObject* dataObject, const char* entityName);
virtual DKString* listRefFolders(dkDataObject* dataObject, long& arraySize);
Content Manager parametric query string
The syntax of Content Manager parametric query string is as follows:
SEARCH=([INDEX_CLASS=index_class_name,] [MAX_RESULTS=maximum_results,] COND=(conditional_expression) [; ...] ); [OPTION=([CONTENT=yes_no_attronly,] [TYPE_QUERY=type_of_query,] [TYPE_FILTER=doc_and_or_folder] [WIPSTATUS=work_in_process_filter,] [SUSPEND=suspension_status_filter] )]
Words in uppercase are keywords. Lowercase words are parameters supplied by users, they are described below. Note that DBCS (double-byte character set) attribute names are in SBCS (single-byte character set) single quotes; DBCS (double-byte character set) attribute values can also be specified in SBCS double quotes. All other characters are SBCS.
Logical operators are NOT (or ^), AND (or &), and OR (or |). Relational operators are EQ (or ==), LEQ (or <=), GEQ (or >=), LT (or <), GT (or >), NEQ (or <>), IN, NOTIN, LIKE, NOTLIKE, BETWEEN, and NOTBETWEEN. These last two operators take a pair of attribute values as a range.
An example of a conditional expression is:
(DLSEARCH_Date >= "1990") AND (DLSEARCH_Date <= "1993") AND (DLSEARCH_Volume BETWEEN 1 3)
Attribute names with spaces must be enclosed within single quotes; this also includes DBCS characters. For example:
('last name' == "Smith") AND ('first name' <> "Joe")
Attribute values with DBCS characters must be enclosed within double quotes.
The sequence of INDEX_CLASS, MAX_RESULTS, and COND can be repeated for other index classes to formulate a parametric query using multiple criteria. Each sequence should be separated by a semicolon.
If the user wishes to search for a single quote in a string, the single quote character is specified as follows:
If the user wishes to search for a double quote in a string, the double quote character can be specified in two ways.
For example, content value YES would cause the resulting document or folder DDOs to have their PID, object type, properties and all attributes set. This option also causes the DKParts attribute to be set to a collection of parts with no content. Similarly, the DKFolder attribute is also set to a collection of DDOs with NO content. If the CONTENT value is ATTRONLY, the resulting document or folder DDOs PID, object type, properties, and all attributes are set. If the CONTENT value is NO, the resulting document or folder DDOs PID, object type, and properties are set. The part or DDO content can be retrieved explicitly when needed.
Searches for items removed from a workflow
Searches for compled items in a workflow
Searches for items in a workflow
Searches for items not in a workflow
Searches for items regardless of their work-in-process status. Using this value is equivalent to using all the other values simultaneously. If you specify this value, you cannot specify any other values.
Searches for suspended items
Searches for items that are not suspended
Searches for items regardless of their work-in-process status. Using this value is equivalent to using all the other values simultaneously. If you specify this value, you cannot specify any other values.
Data type conversion
The following table displays the default data type conversions when you
transfer data between a Content Manager server and the class library.
Class library type | Content Manager server data type |
DKString | VSTRING |
DKString | FSTRING |
short | SHORT |
long | LONG |
DKString | DECIMAL |
DKDate | DATE |
DKTime | TIME |
DKTimestamp | TIMESTAMP |
DKBlob | BLOB (parts) |
Notes
(c) Copyright International Business Machines Corporation 1996, 2003. IBM Corp. All rights reserved.