IDBInfo::GetLiteralInfo

Returns information about literals used in text commands, ITableDefinition, IIndexDefinition, and IOpenRowset, or any interface that takes DBIDs as arguments.

HRESULT GetLiteralInfo(
   ULONG                  cLiterals,
   const DBLITERAL         rgLiterals[],
   ULONG *                  pcLiteralInfo,
   DBLITERALINFO **   prgLiteralInfo,
   OLECHAR **            ppCharBuffer);

Parameters

cLiterals

[in]
The number of literals being asked about. If this is 0, the provider ignores rgLiterals and returns information about all of the literals it supports.

rgLiterals

[in]
An array of cLiterals literals about which to return information. If the consumer specifies an invalid DBLITERAL value in this array, GetLiteralInfo returns FALSE in fSupported in the corresponding element of the *prgLiteralInfo array.

If cLiterals is 0, this parameter is ignored.

pcLiteralInfo

[out]
A pointer to memory in which to return the number of literals for which information was returned. If cLiterals is 0, this is the total number of literals supported by the provider. If an error other than DB_E_ERRORSOCCURRED occurs, *pcLiteralInfo is set to 0.

prgLiteralInfo

[out]
A pointer to memory in which to return a pointer to an array of DBLITERALINFO structures. One structure is returned for each literal. The provider allocates memory for the structures and returns the address to this memory; the consumer releases this memory with IMalloc::Free when it no longer needs the structures. If *pcLiteralInfo is 0 on output or an error other than DB_E_ERRORSOCCURRED occurs, the provider does not allocate any memory and ensures that *prgLiteralInfo is a null pointer on output. For information about DBLITERALINFO structures, see the Comments section.

ppCharBuffer

[out]
A pointer to memory in which to return a pointer for all string values (pwszLiteralValue, pwszInvalidChars, and pwszInvalidStartingChars) within a single allocation block. The provider allocates this memory and the consumer releases it with IMalloc::Free when it no longer needs it. If *pcLiteralInfo is 0 on output or an error occurs, the provider does not allocate any memory and ensures that *ppCharBuffer is a null pointer on output. Each of the individual string values stored in this buffer is terminated by a null-termination character. Therefore, the buffer may contain one or more strings, each with its own null-termination character, and may contain embedded null-termination characters.

Return Code

S_OK
The method succeeded. In each structure returned in *prgLiteralInfo, the fSupported element is set to TRUE.

DB_S_ERRORSOCCURRED
rgLiterals contained at least one unsupported or invalid literal. In the structures returned in *prgLiteralInfo for unsupported or invalid literals, the fSupported element is set to FALSE.

E_FAIL
A provider-specific error occurred.

E_INVALIDARG
cLiterals was not equal to zero and rgLiterals was a null pointer.

pcLiteralInfo, prgLiteralInfo, or ppCharBuffer was a null pointer.

E_OUTOFMEMORY
The provider was unable to allocate sufficient memory in which to return the DBLITERALINFO structures or the strings containing the valid and starting characters.

E_UNEXPECTED
The data source object was in an uninitialized state.

DB_E_ERRORSOCCURRED
All literals were either invalid or unsupported. The provider allocates memory for *prgLiteralInfo and sets the value of the fSupported element in all of the structures to FALSE. The consumer frees this memory when it no longer needs the information.

Comments

In the context of GetLiteralInfo, a literal is one of several things:

Information about literals is returned in the DBLITERALINFO structure:

typedef struct tagDBLITERALINFO {
 LPOLESTR  pwszLiteralValue;
 LPOLESTR  pwszInvalidChars;
 LPOLESTR  pwszInvalidStartingChars;
 DBLITERAL lt;
 BOOL    fSupported;
 ULONG   cchMaxLen;
} DBLITERALINFO;

The elements of this structure are used as follows.

Element Description
pwszLiteralValue A pointer to a string in the *ppCharBuffer buffer containing the actual literal value.

For example, if lt is DBLITERAL_LIKE_PERCENT, and the percent character (%) is used to match zero or more characters in a LIKE clause, this would be "%". This is used for DBLITERAL_CATALOG_SEPARATOR, DBLITERAL_ESCAPE_PERCENT_PREFIX, DBLITERAL_ESCAPE_UNDERSCORE_PREFIX, DBLITERAL_LIKE_PERCENT, DBLITERAL_LIKE_UNDERSCORE, DBLITERAL_QUOTE_PREFIX, and DBLITERAL_SCHEMA_SEPARATOR. For all other DBLITERAL values, pwszLiteralValue is not used and is set to a null pointer.

pwszInvalidChars A pointer to a string in the *ppCharBuffer buffer containing the characters that are not valid in the literal.

For example, if table names can contain anything other than a numeric character, this would be "0123456789" when lt is DBLITERAL_TABLE_NAME. If the literal can contain any valid character, this is a null pointer. This is not used for DBLITERAL_BINARY_LITERAL, DBLITERAL_CATALOG_SEPARATOR, DBLITERAL_ESCAPE_PERCENT_PREFIX, DBLITERAL_ESCAPE_UNDERSCORE_PREFIX, DBLITERAL_LIKE_PERCENT, DBLITERAL_LIKE_UNDERSCORE, DBLITERAL_QUOTE_PREFIX, and DBLITERAL_SCHEMA_SEPARATOR; pwszInvalidChars is set to a null pointer for these DBLITERAL values.

pwszInvalidStartingChars A pointer to a string in the *ppCharBuffer buffer containing the characters that are not valid as the first character of the literal. If the literal can start with any valid character, this is a null pointer.

For example, if table names can begin with anything other than a numeric character, this would be "0123456789" when lt is DBLITERAL_TABLE_NAME. This is not used for DBLITERAL_BINARY_LITERAL, DBLITERAL_CATALOG_SEPARATOR, DBLITERAL_ESCAPE_PERCENT_PREFIX, DBLITERAL_ESCAPE_UNDERSCORE_PREFIX, DBLITERAL_LIKE_PERCENT, DBLITERAL_LIKE_UNDERSCORE, DBLITERAL_QUOTE_PREFIX, and DBLITERAL_SCHEMA_SEPARATOR; pwszInvalidStartingChars is set to a null pointer for these DBLITERAL values.

lt The literal described in the structure. For more information, see the following section.
fSupported TRUE if the provider supports the literal specified by lt. If cLiterals is 0, this is always TRUE, because GetLiteralInfo only returns information about literals it supports in this case.

FALSE if the provider does not support the literal; or the value of the corresponding element of the rgLiterals array was not a valid value in the DBLITERAL enumerated type.

cchMaxLen The maximum number of characters in the literal. If there is no maximum or the maximum is unknown, cchMaxLen is set to ~0 (bitwise, the value is not 0; that is, all bits are set to 1). For DBLITERAL_CATALOG_SEPARATOR, DBLITERAL_ESCAPE_PERCENT_PREFIX, DBLITERAL_ESCAPE_UNDERSCORE_PREFIX, DBLITERAL_LIKE_PERCENT, DBLITERAL_LIKE_UNDERSCORE, DBLITERAL_QUOTE_PREFIX, and DBLITERAL_SCHEMA_SEPARATOR, this is the actual number of characters in the literal.

The following values of DBLITERAL are supported.

Value Description
DBLITERAL_INVALID An invalid value.
DBLITERAL_
BINARY_LITERAL
A binary literal in a text command.
DBLITERAL_
CATALOG_NAME
A catalog name in a text command.
DBLITERAL_
CATALOG_SEPARATOR
The character that separates the catalog name from the rest of the identifier in a text command.
DBLITERAL_
CHAR_LITERAL
A character literal in a text command.
DBLITERAL_
COLUMN_ALIAS
A column alias in a text command.
DBLITERAL_
COLUMN_NAME
A column name used in a text command or in a data-definition interface.
DBLITERAL_
CORRELATION_NAME
A correlation name (table alias) in a text command.
DBLITERAL_
CURSOR_NAME
A cursor name in a text command.
DBLITERAL_
ESCAPE_PERCENT_PREFIX
The character used in a LIKE clause to escape the character returned for the DBLITERAL_LIKE_PERCENT literal. For example, if a percent sign (%) is used to match zero or more characters and this is a backslash (\), the characters "abc\%%" match all character values that start with "abc%".
Some SQL dialects support a clause (the ESCAPE clause) that can be used to override this value.
DBLITERAL_ESCAPE_PERCENT_SUFFIX The escape character, if any, used to suffix the character returned for the DBLITERAL_LIKE_PERCENT literal. For example, if a percent sign (%) is used to match zero or more characters, and percent signs are escaped by enclosing in open and close square brackets, DBLITERAL_ESCAPE_PERCENT_PREFIX is "[", DBLITERAL_ESCAPE_PERCENT_SUFFIX is "]", and the characters "abc[%]%" match all character values that start with "abc%". Providers that do not use a suffix character to escape the DBLITERAL_ESCAPE_PERCENT character do not return this literal value, and set the lt member of the DBLITERAL structure to DBLITERAL_INVALID if requested.
DBLITERAL_
ESCAPE_UNDERSCORE_PREFIX
The character used in a LIKE clause to escape the character returned for the DBLITERAL_LIKE_UNDERSCORE literal. For example, if an underscore (_) is used to match exactly one character and this is a backslash (\), the characters "abc\_ _" match all character values that are five characters long and start with "abc_".

Some SQL dialects support a clause (the ESCAPE clause) that can be used to override this value.

DBLITERAL_ESCAPE_UNDERSCORE_SUFFIX The escape character, if any, used to suffix the character returned for the DBLITERAL_LIKE_UNDERSCORE literal. For example, if an underscore (_) is used to match exactly one character, and underscores are escaped by enclosing in open and close square brackets, DBLITERAL_ESCAPE_UNDERSCORE_PREFIX is "[", DBLITERAL_ESCAPE_UNDERSCORE_SUFFIX is "]", and the characters "abc[_]_" match all character values that are five characters long and start with "abc_". Providers that do not use a suffix character to escape the DBLITERAL_ESCAPE_UNDERSCORE character do not return this literal value, and set the lt member of the DBLITERAL structure to DBLITERAL_INVALID if requested.
DBLITERAL_
INDEX_NAME
An index name used in a text command or in a data-definition interface.
DBLITERAL_
LIKE_PERCENT
The character used in a LIKE clause to match zero or more characters. For example, if this is a percent sign (%), the characters "abc%" match all character values that start with "abc".
DBLITERAL_
LIKE_UNDERSCORE
The character used in a LIKE clause to match exactly one character. For example, if this is an underscore (_), the characters "abc_" match all character values that are four characters long and start with "abc".
DBLITERAL_
PROCEDURE_NAME
A procedure name in a text command.
DBLITERAL_
SCHEMA_NAME
A schema name in a text command.
DBLITERAL_
SCHEMA_SEPARATOR
The character that separates the schema name from the rest of the identifier in a text command.
DBLITERAL_
TABLE_NAME
A table name used in a text command or in a data-definition interface.
DBLITERAL_
TEXT_COMMAND
A text command, such as an SQL statement.
DBLITERAL_
USER_NAME
A user name in a text command.
DBLITERAL_
VIEW_NAME
A view name in a text command.
DBLITERAL_QUOTE_PREFIX The character used in a text command as the opening quote for quoting identifiers that contain special characters.
DBLITERAL_QUOTE_SUFFIX The character used in a text command as the closing quote for quoting identifiers that contain special characters. 1.x providers that use the same character as the prefix and suffix may not return this literal value, and set the lt member of the DBLITERAL structure to DBLITERAL_INVALID if requested.

Note  If a provider returns non-NULL CATALOG or SCHEMA column values in schema rowsets, then it must support IDBInfo to describe how a fully qualified name is assembled. A provider that does not support IDBInfo must return NULL values for CATALOG and SCHEMA columns in all schema rowsets.

See Also

IDBInfo::GetKeywords, IDBProperties::GetProperties