mtollari 63d98e39cd Patch level : 12.0 no-patch
Files correlati     : 
Commento            : 
- Creazione nuova cartella per contenere tutte le librerie esterne
- Aggiunta nuova libreria sqlapi per interfacciare campo a vari DB

git-svn-id: svn://10.65.10.50/branches/R_10_00@24149 c028cbd2-c16b-5b4b-a496-9718f37d4682
2017-10-26 09:07:39 +00:00

1900 lines
94 KiB
C

/* Copyright (c) 2006, 2009, Oracle and/or its affiliates.
All rights reserved. */
/*
NAME
ocixstreams.h - OCI X-Stream APIs
DESCRIPTION
OCI APIs for X-Stream
RELATED DOCUMENTS
EXPORT FUNCTION(S)
INTERNAL FUNCTION(S)
EXAMPLES
NOTES
MODIFIED (MM/DD/YY)
thoang 05/08/09 - Add OCILCR_NEW_ONLY_MODE
praghuna 05/11/09 - removed 'TODO' comments
thoang 02/15/09 - Change lob_column_* to chunk_column_*
thoang 01/27/09 - 8216105 - add OLD/NEW column parms to OCILCRHeaderGet
rihuang 01/05/09 - Add OCI_LCR_ATTR_TRACKING_LABEL
tianli 11/28/08 - add DDL flags
tianli 11/20/08 - add OCILCRAttribute methods
thoang 11/20/08 - Define OCI_LCR_MAX_TXID_LEN
tianli 11/07/08 - add edition
thoang 11/10/08 - change return type to sword for consistency
thoang 10/16/08 - remove commit position arg
tianli 08/26/08 - rename client_name in XStreamIn attach call
thoang 06/30/08 - Support XStream APIs using two callbacks.
praghuna 05/14/08 - charset id is ub2, OCILcrGetRowStmtWithBindVar
thoang 06/02/08 - Define reserved attach mode for internal clients
elu 05/08/08 - add pos functions
thoang 04/29/08 - API changes
jinwu 04/28/08 - add OCILcrGetExtraAttributes
elu 04/14/08 - add OCI_LCR_MAX_POSITION_LEN
juyuan 03/27/08 - add flag for Set/GetHeader and Set/GetColumnInfo
thoang 02/25/08 - Add GetNextChunk and SetNextChunk
rihuang 03/24/08 - Signature change for OCILcrNew
elu 03/05/08 - add lcr id
praghuna 02/26/08 - Added OCILcrGetRowStmt
thoang 01/25/08 - Add wm_time parameter to XApply APIs
thoang 12/28/07 - Add mode parameter to XApplyDetach
thoang 11/07/07 - Change extapp apis to return ub1[] watermark
juyuan 05/23/07 - XStream In
thoang 11/13/06 - Add XStream Out methods
thoang 11/13/06 - Add LCR getter methods
nshodhan 05/12/06 - streams OCI APIs
nshodhan 05/12/06 - Creation
*/
#ifndef OCIXSTREAM_ORACLE
# define OCIXSTREAM_ORACLE
#ifndef ORATYPES
# include <oratypes.h>
#endif
#ifndef OCI_ORACLE
# include <oci.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------
PUBLIC TYPES AND CONSTANTS
---------------------------------------------------------------------------*/
/* LCR Types -- must match with values defined in kngo.h */
#define OCI_LCR_XROW (3) /* External Row LCR */
#define OCI_LCR_XDDL (4) /* External DDL LCR */
/* DML Command Types -- must match with values defined in kngl.h */
#define OCI_LCR_ROW_CMD_INSERT "INSERT"
#define OCI_LCR_ROW_CMD_DELETE "DELETE"
#define OCI_LCR_ROW_CMD_UPDATE "UPDATE"
#define OCI_LCR_ROW_CMD_COMMIT "COMMIT"
#define OCI_LCR_ROW_CMD_LOB_WRITE "LOB WRITE"
#define OCI_LCR_ROW_CMD_LOB_TRIM "LOB TRIM"
#define OCI_LCR_ROW_CMD_LOB_ERASE "LOB ERASE"
/* LCR Extra Attribute Name -- must match with values defined in knll.h */
#define OCI_LCR_ATTR_THREAD_NO "THREAD#"
#define OCI_LCR_ATTR_ROW_ID "ROW_ID"
#define OCI_LCR_ATTR_SESSION_NO "SESSION#"
#define OCI_LCR_ATTR_SERIAL_NO "SERIAL#"
#define OCI_LCR_ATTR_USERNAME "USERNAME"
#define OCI_LCR_ATTR_TX_NAME "TX_NAME"
/* below are non first class LCR field specific */
#define OCI_LCR_ATTR_EDITION_NAME "EDITION_NAME"
#define OCI_LCR_ATTR_MESSAGE_TRACKING_LABEL "MESSAGE_TRACKING_LABEL"
/* the maximum total number of attributes, total of extra attributes
* plus non first class LCR field. */
#define OCI_LCR_MAX_ATTRIBUTES 8
/* Row LCR column value types used in OCILCRRowColumnInfoGet/Set functions. */
#define OCI_LCR_ROW_COLVAL_OLD 0 /* OLD columns */
#define OCI_LCR_ROW_COLVAL_NEW 1 /* NEW columns */
/* maximum length for position */
#define OCI_LCR_MAX_POSITION_LEN 64
/* maximum length for txid */
#define OCI_LCR_MAX_TXID_LEN 128
/* Valid column flags used in OCILCRRowColumnInfoSet, OCILCRRowColumnInfoGet,
* OCILCRLobInfoSet, OCILCRLobInfoGet, OCIXStreamOutChunkReceive,
* OCIXStreamInChunkSend calls.
*/
#define OCI_LCR_COLUMN_LOB_DATA (0x00000001) /* col contains lob data */
#define OCI_LCR_COLUMN_LONG_DATA (0x00000002) /* col contains long data*/
#define OCI_LCR_COLUMN_EMPTY_LOB (0x00000004) /* col has an empty lob */
#define OCI_LCR_COLUMN_LAST_CHUNK (0x00000008) /* last chunk of current col*/
#define OCI_LCR_COLUMN_AL16UTF16 (0x00000010) /* col is in AL16UTF16 fmt */
#define OCI_LCR_COLUMN_NCLOB (0x00000020) /* col has NCLOB data */
#define OCI_LCR_COLUMN_XML_DATA (0x00000040) /* col contains xml data */
#define OCI_LCR_COLUMN_XML_DIFF (0x00000080)/* col contains xmldiff data */
#define OCI_LCR_COLUMN_ENCRYPTED (0x00000100) /* col is encrypted */
/* OCI_LCR_COLUMN_UPDATED is set only for the modified columns in the NEW
* column list of an update LCR.
*/
#define OCI_LCR_COLUMN_UPDATED (0x00000200) /* col is updated */
/* Valid bit values for flag parameter in the following APIs:
* - OCIXStreamOutChunkReceive & OCIXStreamOutLCRReceive
* - OCIXStreamInChunkSend & OCIXStreamInLCRSend
*/
#define OCI_XSTREAM_MORE_ROW_DATA (0x00000001) /* LCR contains more data */
/* Valid mode flag for OCILCRHeaderGet and OCILCRRowColumnInfoGet functions */
#define OCILCR_NEW_ONLY_MODE (0x0001) /* NEW columns only -- dont */
/* include OLD columns */
/*---------------------------------------------------------------------------
PRIVATE TYPES AND CONSTANTS
---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
EXPORT FUNCTIONS
---------------------------------------------------------------------------*/
/*
------------------------------------------------------------------------------=
NAME
OCILCRNew - OCI LCR NEW
DESCRIPTION
Create a new Streams LCR for the user specified duration and type
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
duration (IN) - allocation duration for LCR memory
lcrtype (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
lcrp (IN/OUT) - Streams LCR. (*lcrp must be initialized to null.)
mode (IN) - mode
NOTES
- memory will be based on the duration specified by the user
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRNew(OCISvcCtx *svchp,
OCIError *errhp,
OCIDuration duration,
ub1 lcrtype,
void **lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRFree - OCI LCR FREE
DESCRIPTION
Free Streams LCR specified by the user
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
lcrp (IN/OUT) - Streams LCR
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRFree(OCISvcCtx *svchp,
OCIError *errhp,
void *lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRHeaderSet - OCI LCR Set Header
DESCRIPTION
Initialize elements of Streams LCR's header
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
src_db_name (IN) - Pointer to Canonicalized source database name.
Must be non-NULL.
src_db_name_len (IN) - Length of source database name in bytes
excluding NULL terminator. Should follow Oracle
naming conventions and size limitations.
cmd_type (IN) - For ROW LCRs: OCI_LCR_ROW_CMD_XXXXXXX
For DDL LCRs: One of the command types
corresponding to OCI Reference manual
cmd_type_len (IN) - Length of cmd_type.
owner (IN) - Canonicalized table owner name. Not required
for COMMIT LCR.
owner_len (IN) - Length of owner name in bytes excluding the
NULL terminator. Should follow Oracle naming
conventions and size limitations.
oname (IN) - Canonicalized table name. Not required for
COMIT LCR.
oname_len (IN) - Length of table name in bytes excluding the
NULL terminator. Should follow Oracle naming
conventions and size limitations.
tag (IN) - A binary tag that enables tracking of the LCR.
For example, this tag can be used to determine
the original source database of the DML
statement if apply forwarding is used.
tag_len (IN) - Number of bytes in the tag. Cannot exceed 2000
bytes
txid (IN) - Transaction ID.
txid_len (IN) - Length of transaction id in bytes excluding the
NULL terminator. Should not exceeed
OCI_LCR_MAX_TXID_LEN bytes.
src_time (IN) - The time when the change was generated at the
source database.
position (IN) - position for LCR. Must be byte-comparable.
position_len (IN) - Length of position. Must be non-zero.
flag (IN) - LCR flag.
lcrp (IN/OUT) - Streams LCR
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
- This function clears the current contents of the input LCR before
setting the header to the new values.
------------------------------------------------------------------------------=
*/
sword OCILCRHeaderSet(OCISvcCtx *svchp,
OCIError *errhp,
oratext *src_db_name,
ub2 src_db_name_len,
oratext *cmd_type,
ub2 cmd_type_len,
oratext *owner,
ub2 owner_len,
oratext *oname,
ub2 oname_len,
ub1 *tag,
ub2 tag_len,
oratext *txid,
ub2 txid_len,
OCIDate *src_time,
ub1 *position,
ub2 position_len,
oraub8 flag,
void *lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRHeaderGet - OCI LCR Get Header
DESCRIPTION
Get header information from Streams LCR
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
src_db_name (OUT) - Pointer to Canonicalized source database name.
Optional, if src_db_name is specified then
must specify src_db_name_len as well.
src_db_name_len (OUT) - Length of source database name in bytes
excluding NULL terminator.
Optional, if specified src_db_name_len then
must specify src_db_name as well.
cmd_type (OUT) - Command type. Must be non-null if
cmd_type_len is non-null. Must be null if
cmd_type_len is NULL.
cmd_type_len (OUT) - Length of cmd_type. Optional.
owner (OUT) - Canonicalized table owner name.
Optional, if owner is specified then
must specify owner_len as well.
owner_len (OUT) - Length of owner name in bytes excluding the
NULL terminator.
Optional, if owner_len is specified then
must specify owner as well.
oname (OUT) - Canonicalized table name.
Optional, if oname is specified then
must specify oname_len as well.
oname_len (OUT) - Length of table name in bytes excluding the
NULL terminator.
Optional, if oname_len is specified then
must specify oname as well.
tag (OUT) - A binary tag that enables tracking of the LCR.
For example, this tag can be used to determine
the original source database of the
DML statement if apply forwarding is used.
Optional, if tag is specified then
must specify tag_len as well.
tag_len (OUT) - Number of bytes in the tag.
Optional, if tag_len is specified then
must specify tag as well.
txid (OUT) - Transaction ID.
Optional, if txid is specified then
must specify txid_len as well.
txid_len (OUT) - Length of transaction id in bytes excluding
the NULL terminator.
Optional, if txid_len is specified then
must specify txid as well.
src_time (OUT) - The time when the change was generated at the
source database. Optional.
old_columns (OUT) - Number of columns in the OLD column list.
Return 0 if input lcr is DDL LCR. Optional.
new_columns (OUT) - Number of columns present in either
the OLD or NEW column list.
Return 0 if input lcr is DDL LCR. Optional.
See NOTES below for the special mode supported
by this function.
position (OUT) - LCR position. Optional.
position_len (OUT) - Length of position. Must be non-null if
position is non-null. Must be null if
position is null.
flag (OUT) - LCR flag. Optional.
lcrp (IN) - Streams LCR
mode (IN) - mode (see NOTES)
NOTES
- Parameter src_time is optional. If specified the appropriate return
structure must be pre-allocated before calling OCILCRHeaderGet.
- The return values for src_db_name, cmd_type, owner, oname, tag, txid and
position are shallow-copied (i.e., they point directly into the LCR
structure).
- Valid mode flags:
- OCILCR_NEW_ONLY_MODE: if this mode is specified then the new_columns
returned is the count of the columns in the NEW column list only.
Otherwise, the new_columns returned is the number of distinct
columns present in either the NEW or the OLD column list of the given
ROW LCR.
------------------------------------------------------------------------------=
*/
sword OCILCRHeaderGet(OCISvcCtx *svchp,
OCIError *errhp,
oratext **src_db_name,
ub2 *src_db_name_len,
oratext **cmd_type,
ub2 *cmd_type_len,
oratext **owner,
ub2 *owner_len,
oratext **oname,
ub2 *oname_len,
ub1 **tag,
ub2 *tag_len,
oratext **txid,
ub2 *txid_len,
OCIDate *src_time,
ub2 *old_columns,
ub2 *new_columns,
ub1 **position,
ub2 *position_len,
oraub8 *flag,
void *lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRRowColumnInfoSet - OCI LCR ROW SET COLUMN INFO
DESCRIPTION
Populates column information as specified by the user.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
column_value_type (IN) - ROW LCR column value type:
- OCI_LCR_ROW_COLVAL_OLD
- OCI_LCR_ROW_COLVAL_NEW
num_columns (IN) - Number of columns to be populated
column_names (IN) - Pointer to an array of column names. Column
names must be canonicalized. Column names should
follow Oracle naming conventions
column_name_lens (IN) - Pointer to an array of column name lengths
in bytes, excluding the NULL terminator.
column_dtyp (IN) - Pointer to an array of column datatypes.
column_valuesp (IN) - Pointer to an array of column data values.
column_indp (IN) - Pointer to an indicator array. For all datatypes,
this is a pointer to an array of OCIInd values
(OCI_IND_NULL/OCI_IND_NOTNULL).
column_alensp (IN) - Pointer to an array of actual column lengths in
bytes.
column_csetfp (IN) - Pointer to an array of character set forms for
the columns. The default form is SQLCS_IMPLICIT.
Setting this attribute will cause the database or
national character set to be used on the client
side. Set this attribute to SQLCS_NCHAR for the
national character set or SQLCS_IMPLICIT for the
database character set.
Pass 0 for non-character columns.
column_flags (IN) - Pointer to an array of column flags.
Possible bit values are OCI_LCR_COLUMN_* flags
listed above.
column_csid (IN) - Pointer to an array of column character set id.
The character set id is only required for
XMLType column; otherwise, the csid is ignored.
row_lcrp (IN/OUT)- Streams Row LCR pointer
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRRowColumnInfoSet(OCISvcCtx *svchp,
OCIError *errhp,
ub2 column_value_type,
ub2 num_columns,
oratext **column_names,
ub2 *column_name_lens,
ub2 *column_dtyp,
void **column_valuesp,
OCIInd *column_indp,
ub2 *column_alensp,
ub1 *column_csetfp,
oraub8 *column_flags,
ub2 *column_csid,
void *row_lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRRowColumnInfoGet - OCI LCR ROW GET COLUMN INFO
DESCRIPTION
Returns column information as requested by the user.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
column_value_type (IN) - ROW LCR column value type:
- OCI_LCR_ROW_COLVAL_OLD
- OCI_LCR_ROW_COLVAL_NEW
(See NOTES for special mode supported by this
function.)
num_columns (OUT) - Number of columns in requested column list
column_names (IN/OUT)- Pointer to an array of column names.
Optional. If specified then column_namesl must
be specified as well, and both arrays must be the
size specified by array_size parameter.
column_name_lens (IN/OUT)- Pointer to an array of column name lengths
in bytes, excluding the NULL terminator.
Optional. If specified then column_names must
be specified as well, and both arrays must be the
size specified by array_size parameter.
column_dtyp (IN/OUT)- Pointer to an array of column datatypes.
Optional. If specified then this array must be
the size specified by array_size parameter.
column_valuesp (IN/OUT)- Pointer to an array of column data values.
Optional. If specified then this array must be
the size specified by array_size parameter.
column_indp (IN/OUT)- Pointer to an indicator array. For all datatypes,
this is a pointer to an array of OCIInd values
(OCI_IND_NULL/OCI_IND_NOTNULL).
Optional. If specified then this array must be
the size specified by array_size parameter.
column_alensp (IN/OUT)- Pointer to an array of actual column lengths in
bytes.
Optional. If specified then this array must be
the size specified by array_size parameter.
column_csetfp (IN/OUT)- Pointer to an array of character set forms for
the columns.
Optional. If specified then this array must be
the size specified by array_size parameter.
column_flags (IN/OUT)- Pointer to an array of column flags for
the columns.
Optional. If specified then this array must be
the size specified by array_size parameter.
Possible bit values are OCI_LCR_COLUMN_* flags
listed above.
column_csid (IN/OUT)- Pointer to an array of column character set id for
the columns.
Optional. If specified then this array must be
the size specified by array_size parameter.
The column csid is returned only for XMLType
column.
row_lcrp (IN) - Streams Row LCR pointer
array_size (IN) - Size of each of above arrays
mode (IN) - mode (see NOTES)
NOTES
- For now, specify OCI_DEFAULT for mode
- If array_size is not large enough to accommodate the number of columns
in the requested column list then OCI_ERROR is returned. Parameter
num_columns will have the number of columns in the requested column list.
- The return values for column_names and column_valuesp will be shallow
copied (i.e., they reference directly into the LCR structure).
Client should not modify those pointers directly.
- Valid mode flags:
- OCILCR_NEW_ONLY_MODE: this mode is valid only for OCI_LCR_ROW_COLVAL_NEW
column_value_type; otherwise, an error is raised.
If this mode is specified then the columns returned include only the
columns in the NEW column list.
If this mode is not specified then the columns returned is the union
of the NEW columns plus the OLD columns that are not present in the
NEW column list.
------------------------------------------------------------------------------=
*/
sword OCILCRRowColumnInfoGet(OCISvcCtx *svchp,
OCIError *errhp,
ub2 column_value_type,
ub2 *num_columns,
oratext **column_names,
ub2 *column_name_lens,
ub2 *column_dtyp,
void **column_valuesp,
OCIInd *column_indp,
ub2 *column_alensp,
ub1 *column_csetfp,
oraub8 *column_flags,
ub2 *column_csid,
void *row_lcrp,
ub2 array_size,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRDDLInfoSet - OCI LCR SET DDL INFO
DESCRIPTION
populates DDL information as sepcified by the user.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
object_type (IN) - The type of object on which the DDL statement was
executed. The following are valid object types:
CLUSTER, FUNCTION, INDEX, LINK, OUTLINE,
PACKAGE, PACKAGE BODY, PROCEDURE, SEQUENCE,
SYNONYM, TABLE, TRIGGER, TYPE, USER, VIEW
LINK represents a database link.
NULL is also a valid object type. Specify NULL
for all object types not listed.
object_type_len (IN) - Length of object_type without the NULL terminator.
ddl_text (IN) - The text of the DDL statement. This parameter
should be set to a non-NULL value.
DDL text must be in Oracle DDL format.
ddl_text_len (IN) - DDL text length in bytes without NULL terminator.
logon_user (IN) - Canonicalized name of the user whose session
executed the DDL statement. Should follow Oracle
naming conventions and size limitations.
logon_user_len (IN) - logon user name length in bytes without NULL
terminator.
current_schema (IN) - The canonicalized schema name that is used if no
schema is specified explicitly for the modified
database objects in ddl_text. If a schema is
specified in ddl_text that differs from the one
specified for current_schema, then the schema
specified in ddl_text will be used.
This parameter should be set to a non-NULL value.
Should follow Oracle naming conventions and size
limitations.
current_schema_len (IN) - schema name length in bytes without NULL terminator
base_table_owner (IN) - If the DDL statement is a table related DDL
(such as CREATE TABLE and ALTER TABLE), or if the
DDL statement involves a table (such as creating
a trigger on a table), then base_table_owner
specifies the canonicalized owner of the table
involved. Otherwise, base_table_owner is NULL.
Should follow Oracle naming conventions and size
limitations.
base_table_owner_len (IN)- base table owner name length in bytes without NULL
terminator.
base_table_name (IN) - If the DDL statement is a table related DDL (such
as CREATE TABLE and ALTER TABLE), or if the DDL
statement involves a table (such as creating a
trigger on a table), then base_table_name
specifies the canonicalized name of the table
involved. Otherwise, base_table_name is NULL.
Length of the above string without the NULL
terminator. Should follow Oracle naming
conventions and size limitations.
Should follow Oracle naming conventions and size
limitations.
base_table_name_len (IN)- base table name length in bytes without NULL
terminator.
flag (IN) - DDL LCR flag.
ddl_lcrp (IN/OUT) - Streams Ddl LCR pointer
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRDDLInfoSet(OCISvcCtx *svchp,
OCIError *errhp,
oratext *object_type,
ub2 object_type_len,
oratext *ddl_text,
ub4 ddl_text_len,
oratext *logon_user,
ub2 logon_user_len,
oratext *current_schema,
ub2 current_schema_len,
oratext *base_table_owner,
ub2 base_table_owner_len,
oratext *base_table_name,
ub2 base_table_name_len,
oraub8 flag,
void *ddl_lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRDDLInfoGet - OCI LCR GET DDL INFO
DESCRIPTION
Returns DDL information from specified lcr.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
object_type (OUT) - The type of object on which the DDL statement
was executed.
Optional, if object_type is specified then
must specify object_type_len as well.
object_type_len (OUT) - Length of object_type without the NULL
terminator.
ddl_text (OUT) - The text of the DDL statement.
Optional, if ddl_text is specified then
must specify ddl_text_len as well.
ddl_text_len (OUT) - DDL text length in bytes without NULL
terminator.
logon_user (OUT) - Canonicalized name of the user whose session
executed the DDL statement.
Optional, if logon_user is specified then
must specify logon_user_len as well.
logon_user_len (OUT) - logon user name length in bytes without NULL
terminator.
current_schema (OUT) - The canonicalized schema name that is used if
no schema is specified explicitly for the
modified database objects in ddl_text.
Optional, if current_schema is specified then
must specify current_schema_len as well.
current_schema_len (OUT)- schema name length in bytes without NULL
terminator
base_table_owner (OUT) - If the DDL statement is a table related DDL
(such as CREATE TABLE and ALTER TABLE), or if
the DDL statement involves a table (such as
creating a trigger on a table), then
base_table_owner specifies the canonicalized
owner of the table involved. Otherwise,
base_table_owner is NULL. Optional, if
base_table_owner is specified then must specify
base_table_owner_len as well.
base_table_owner_len (OUT) - base table owner name length in bytes without
NULL terminator.
base_table_name (OUT) - If the DDL statement is a table related DDL
(such as CREATE TABLE and ALTER TABLE), or if
the DDL statement involves a table (such as
creating a trigger on a table), then
base_table_name specifies the canonicalized name
of the table involved. Otherwise,
base_table_name is NULL. Optional, if
base_table_name is specified then must specify
base_table_name_len as well.
base_table_name_len (OUT) - base table name length in bytes without NULL
terminator.
flag (OUT) - DDL LCR flag. Optional, data not returned if
NULL.
ddl_lcrp (IN) - Streams DDL LCR pointer
mode (IN) - mode (for future extention - not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRDDLInfoGet(OCISvcCtx *svchp,
OCIError *errhp,
oratext **object_type,
ub2 *object_type_len,
oratext **ddl_text,
ub4 *ddl_text_len,
oratext **logon_user,
ub2 *logon_user_len,
oratext **current_schema,
ub2 *current_schema_len,
oratext **base_table_owner,
ub2 *base_table_owner_len,
oratext **base_table_name,
ub2 *base_table_name_len,
oraub8 *flag,
void *ddl_lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRAttributesSet - OCI LCR SET ATTRIBUTES
DESCRIPTION
populates extra attribute information in ROW/DDL LCR, as well as any
non first class attributes that can not be set through
OCILCRHeaderSet, OCILCRDDLInfoSet, or OCILCRRowColumnInfoSet.
e.g. edition name
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
num_attrs (IN) - Number of extra attributes to be populated
attr_names (IN) - Pointer to an array of attribute names. Attribute
names must be canonicalized and should follow
Oracle naming conventions
attr_names_lens (IN) - Pointer to an array of attribute name lengths
in bytes, excluding the NULL terminator.
attr_dtyp (IN) - Pointer to an array of attribute datatypes.
attr_valuesp (IN) - Pointer to an array of attribute data values.
attr_indp (IN) - Pointer to an indicator array. For all datatypes,
this is a pointer to an array of OCIInd values
(OCI_IND_NULL/OCI_IND_NOTNULL).
attr_alensp (IN) - Pointer to an array of actual attribute lengths in
bytes.
lcrp (IN/OUT)- Streams (Row/DDL) LCR pointer
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRAttributesSet(OCISvcCtx *svchp,
OCIError *errhp,
ub2 num_attrs,
oratext **attr_names,
ub2 *attr_name_lens,
ub2 *attr_dtyp,
void **attr_valuesp,
OCIInd *attr_indp,
ub2 *attr_alensp,
void *lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRAttributesGet - OCI LCR GET EXTRA ATTRIBUTES
DESCRIPTION
Gets extra attribute information in (ROW/DDL) LCR, as well as any
non first class attributes that are not populated through
OCILCRHeaderGet, OCILCRDDLInfoGet, or OCILCRRowColumnInfoGet
e.g. edition name
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
num_attrs (OUT) - Number of extra attributes to be populated
attr_names (IN/OUT)- Pointer to an array of attribute names. Attribute
names must be canonicalized and should follow
Oracle naming conventions
attr_namesl (IN/OUT)- Pointer to an array of attribute name lengths
in bytes, excluding the NULL terminator.
attr_dtyp (IN/OUT)- Pointer to an array of attribute datatypes.
attr_valuesp (IN/OUT)- Pointer to an array of attribute data values.
attr_indp (IN/OUT)- Pointer to an indicator array. For all datatypes,
this is a pointer to an array of OCIInd values
(OCI_IND_NULL/OCI_IND_NOTNULL).
attr_alensp (IN/OUT)- Pointer to an array of actual attribute lengths in
bytes.
lcrp (IN) - Streams (Row/DDL) LCR pointer
array_size (IN) - Size of each of above arrays, use at least the size
defined by OCI_LCR_MAX_ATTRIBUTES
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
- If array_size is not large enough to accommodate the number of attributes
in the requested attribute list then OCI_ERROR is returned. Parameter
num_attrs will return the suggested size.
------------------------------------------------------------------------------=
*/
sword OCILCRAttributesGet(OCISvcCtx *svchp,
OCIError *errhp,
ub2 *num_attrs,
oratext **attr_names,
ub2 *attr_namesl,
ub2 *attr_dtyp,
void **attr_valuesp,
OCIInd *attr_indp,
ub2 *attr_alensp,
void *lcrp,
ub2 array_size,
ub4 mode);
/*--------------------- OCILCRWhereClauseGet ----------------------------*/
/*
NAME
OCILCRWhereClauseGet - OCI Get Where Clause
DESCRIPTION
Gets the Where clause statement for the given ROW LCR.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
wc_stmt (OUT) - Sql Statement equivalent to the
LCR has applied
wc_stmt_len (IN/OUT) - length of wc_stmt buffer
row_lcrp (IN) - row LCR to be converted to SQL
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- For now, specify OCI_DEFAULT for mode
- WHERE clause generated for INSERT lcr will have all the columns that
are being inserted. This WHERE clause could be used to identify the
inserted row after inserting. (like "returning ROWID").
INSERT INTO TAB(COL1) VALUES (10) -> WHERE COL1=10
- WHERE clause generated for UPDATE will have all the columns in the
old column list. However the values of the columns will be that of
new value if it exist in the new column list
of the UPDATE. If the column doesnt have new value then the old column
value will be used.
UPDATE TAB SET COL1 = 10 WHERE COL1 = 20 -> WHERE COL1 = 10
UPDATE TAB SET COL2 = 20 WHERE COL1 = 20 -> WHERE COL1 = 20
- WHERE clause for DELETE will use the columns and values from
old column lst
- LOB piecewise operations would use the new columns and values for
generating the WHERE clause.
*/
sword OCILCRWhereClauseGet(
OCISvcCtx *svchp,
OCIError *errhp,
oratext *wc_stmt,
ub4 *wc_stmt_len,
void *row_lcrp,
ub4 mode);
/*--------------------- OCILCRRowStmtGet ----------------------------*/
/*
NAME
OCILCRRowStmtGet - OCI Get Row Statement
DESCRIPTION
Gets the SQL statement for the given ROW LCR.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
row_stmt (OUT) - Sql Statement equivalent to the
LCR has applied
row_stmt_len (IN/OUT) - length of row_stmt buffer
row_lcrp (IN) - row LCR to be converted to SQL
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
None
*/
sword OCILCRRowStmtGet(
OCISvcCtx *svchp,
OCIError *errhp,
oratext *row_stmt,
ub4 *row_stmt_len,
void *row_lcrp,
ub4 mode);
/*--------------------- OCILCRWhereClauseWithBindVarGet ----------------------*/
/*
NAME
OCILCRWhereClauseWithBindVarGet - OCI Get Where clause with binds
DESCRIPTION
Gets the where clause statement with bind variables for the given ROW LCR.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
wc_stmt (OUT) - Sql Stmt equivalent to the LCR
wc_stmt_len (IN/OUT) - length of wc_stmt buffer
num_bind_var (OUT) - Number of bind variables
bind_var_dtyp (OUT) - Array of Data types of bind
variables
bind_var_valuesp (OUT) - Array of Values of bind variables
bind_var_indp (OUT) - Array of null indicators of
bind variables
bind_var_alensp (OUT) - Array of lengths of bind values
bind_var_csetidp (OUT) - Array of char set id of binds
bind_var_csetfp (OUT) - Array of char set form of binds
row_lcrp (IN) - row LCR to be converted to SQL
array_size (IN) - Size of the array of bind values
bind_var_syntax (IN) - Native syntax to be used for binds
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- For now, specify OCI_DEFAULT for mode
- If array_size is not large enough to accommodate the number of columns
in the requested column list then OCI_ERROR is returned. Expected
array_size is returned through num_bind_var parameter.
- bind_var_syntax for oracle should contain ":". This will generate
positional binds such as :1, :2, :3 etc. For other non-oracle databases
they can give the string that needs to be used for binds.
- WHERE clause generated for INSERT lcr will have all the columns that
are being inserted. This WHERE clause could be used to identify the
inserted row after inserting. (like "returning ROWID").
INSERT INTO TAB(COL1) VALUES (10) -> WHERE COL1=10
- WHERE clause generated for UPDATE will have all the columns in the
old column list. However the values of the columns will be that of
new column value of the column if it exist in the new values
of the UPDATE. If the column appears only in the old column then
old column value will be used.
UPDATE TAB SET COL1 = 10 WHERE COL1 = 20 -> WHERE COL1 = 10
UPDATE TAB SET COL2 = 20 WHERE COL1 = 20 -> WHERE COL1 = 20
- WHERE clause for DELETE will use the columns and values from
old column lst
- LOB piecewise operations would use the new columns and values for
generating the WHERE clause.
*/
sword OCILCRWhereClauseWithBindVarGet(
OCISvcCtx *svchp,
OCIError *errhp,
oratext *wc_stmt,
ub4 *wc_stmt_len,
ub2 *num_bind_var,
ub2 *bind_var_dtyp,
void **bind_var_valuesp,
OCIInd *bind_var_indp,
ub2 *bind_var_alensp,
ub2 *bind_var_csetidp,
ub1 *bind_var_csetfp,
void *row_lcrp,
ub2 array_size,
oratext *bind_var_syntax,
ub4 mode);
/*--------------------- OCILCRRowStmtWithBindVarGet ----------------------*/
/*
NAME
OCILCRRowStmtWithBindVarGet - OCI Get Row Statement
DESCRIPTION
Gets the SQL statement with bind variables for the given ROW LCR.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
row_stmt (OUT) - Sql Stmt equivalent to the LCR
row_stmt_len (IN/OUT) - length of row_stmt buffer
num_bind_var (OUT) - Number of bind variables
bind_var_dtyp (OUT) - Array of Data types of bind
variables
bind_var_valuesp (OUT) - Array of Values of bind variables
bind_var_indp (OUT) - Array of null indicators of
bind variables
bind_var_alensp (OUT) - Array of lengths od bind values
bind_var_csetidp (OUT) - Array of char set id of binds
bind_var_csetfp (OUT) - Array of char set form of binds
row_lcrp (IN) - row LCR to be converted to SQL
chunk_column_names (OUT) - Array of chunked column names in
lcr
chunk_column_namesl (OUT) - Length of chunk_column_names
chunk_column_flags (OUT) - flags of chunked columns in lcr
Possible bit values are
OCI_LCR_COLUMN_* flags listed
above.
array_size (IN) - Size of the array of bind values
bind_var_syntax (IN) - Native syntax to be used for binds
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- For now, specify OCI_DEFAULT for mode
- If array_size is not large enough to accommodate the number of columns
in the requested column list then OCI_ERROR is returned. Expected
array_size is returned through num_bind_var parameter.
- bind_var_syntax for oracle should contain ":". This will generate
positional binds such as :1, :2, :3 etc. For other non-oracle databases
they can give the string that needs to be used for binds.
*/
sword OCILCRRowStmtWithBindVarGet(
OCISvcCtx *svchp,
OCIError *errhp,
oratext *row_stmt,
ub4 *row_stmt_len,
ub2 *num_bind_var,
ub2 *bind_var_dtyp,
void **bind_var_valuesp,
OCIInd *bind_var_indp,
ub2 *bind_var_alensp,
ub2 *bind_var_csetidp,
ub1 *bind_var_csetfp,
void *row_lcrp,
oratext **chunk_column_names,
ub2 *chunk_column_namesl,
oraub8 *chunk_column_flags,
ub2 array_size,
oratext *bind_var_syntax,
ub4 mode);
/*
-------------------------------------------------------------------------------
NAME
OCILCRSCNsFromPosition - Get SCNs From Position
DESCRIPTION
Returns the SCN and commit SCN from the given position.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
position (IN) - LCR position
position_len (IN) - length of position
scn (OUT) - the SCN stored in position
commit_scn (OUT) - the commit SCN stored in position
mode (IN) - Mode flags (For future extension. Not used
currently)
RETURN
OCI_SUCCESS if the conversion succeeds, OCI_ERROR otherwise.
NOTE
The user must allocate memory for the return numbers.
The input position must conform to the format generated by an XStream
server.
-------------------------------------------------------------------------------
*/
sword OCILCRSCNsFromPosition(OCISvcCtx *svchp,
OCIError *errhp,
ub1 *position,
ub2 position_len,
OCINumber *scn,
OCINumber *commit_scn,
ub4 mode);
/*
-------------------------------------------------------------------------------
NAME
OCILCRSCNToPosition - Converts SCN To Position
DESCRIPTION
Converts an SCN to a position. The generated position can be passed as the
last_position to OCIXStreamOutAttach function to filter the LCRs
with commit SCN less than the given SCN and the LCR's SCN less than the
given SCN. This means the first LCR sent by the Outbound server is either
- a commit LCR at the given SCN, or
- the first LCR of the subsequent transaction with commit SCN greater
than or equal to the given SCN.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
position (OUT) - Result position. Must pre-allocate
OCI_LCR_MAX_POSITION_LEN bytes.
position_len (OUT) - Length of position
scn (IN) - The SCN to be stored in position
mode (IN) - Mode flags (for future extension)
RETURN
OCI_SUCCESS if the conversion succeeds, OCI_ERROR otherwise.
-------------------------------------------------------------------------------
*/
sword OCILCRSCNToPosition(OCISvcCtx *svchp,
OCIError *errhp,
ub1 *position,
ub2 *position_len,
OCINumber *scn,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRLobInfoGet - OCI LCR GET LOB INFO
DESCRIPTION
Returns the LOB information for a given piece-wise LOB LCR.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
column_name (OUT) - Pointer to the LOB column name.
Optional. If specified then column_name_len must
be specified as well.
column_name_len(OUT) - Length of LOB column name without the NULL
terminator.
column_dty (OUT) - LOB column dty - either SQLT_CHR (for CLOB) or
SQLT_BIN (for BLOB).
column_flag (OUT) - LOB column flag.
Possible bit values are OCI_LCR_COLUMN_* flags
listed above.
offset (OUT) - LOB operation offset in code points. Returned only
for LOB_TRIM and LOB_WRITE operations; otherwise,
a zero is returned.
This is the same as the 'soffset' parameter for
OCILobErase or the 'offset' parameter in
OCILobWrite functions.
size (OUT) - LOB operation size in code points. Returned only
for LOB_TRIM and LOB_ERASE operations; otherwise,
a zero is returned.
This is the same as the 'new_length' parameter in
OCILobTrim or the 'amtp' parameter in OCILobErase
functions.
row_lcrp (IN) - Streams Row LCR pointer
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRLobInfoGet(OCISvcCtx *svchp,
OCIError *errhp,
oratext **column_name,
ub2 *column_name_len,
ub2 *column_dty,
oraub8 *column_flag,
ub4 *offset,
ub4 *size,
void *row_lcrp,
ub4 mode);
/*
------------------------------------------------------------------------------=
NAME
OCILCRLobInfoSet - OCI LCR SET LOB INFO
DESCRIPTION
Sets the LOB information for a given piece-wise LOB LCR.
PARAMETERS
svchp (IN) - OCI service context
errhp (IN) - OCI Error Handle
column_name (IN) - Pointer to the LOB column name.
column_name_len(IN) - Length of LOB column name without the NULL
terminator.
column_dty (IN) - LOB column dty - either SQLT_CHR (for CLOB) or
SQLT_BIN (for BLOB).
column_flag (IN) - LOB column flag.
Possible bit values are OCI_LCR_COLUMN_* flags
listed above.
offset (IN) - LOB operation offset in code points. Returned only
for LOB_TRIM and LOB_WRITE operations; otherwise,
a zero is returned.
This is the same as the 'soffset' parameter for
OCILobErase or the 'offset' parameter in
OCILobWrite functions.
size (IN) - LOB operation size in code points. Returned only
for LOB_TRIM and LOB_ERASE operations; otherwise,
a zero is returned.
This is the same as the 'new_length' parameter in
OCILobTrim or the 'amtp' parameter in OCILobErase
functions.
row_lcrp (IN/OUT)- Streams Row LCR pointer
mode (IN) - mode
NOTES
- For now, specify OCI_DEFAULT for mode
------------------------------------------------------------------------------=
*/
sword OCILCRLobInfoSet(OCISvcCtx *svchp,
OCIError *errhp,
oratext *column_name,
ub2 column_name_len,
ub2 column_dty,
oraub8 column_flag,
ub4 offset,
ub4 size,
void *row_lcrp,
ub4 mode);
/*---------------------------------------------------------------------------
STREAMS XSTREAM OUT FUNCTIONS
---------------------------------------------------------------------------*/
/*------------------------- OCIXStreamOutAttach -----------------------------*/
/*
NAME
OCIXStreamOutAttach - OCI Attach to XStreams Out
DESCRIPTION
Given the name of the server process, attach to the outbound server.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle for error reporting
server_name (IN) - Server name.
server_name_len (IN) - Length of server name.
last_position (IN) - last rcv position. (Optional)
last_position_len (IN) - Length of last_position.
mode (IN) - Mode flags (future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
Specify OCI_DEFAULT for the mode parameter.
The name of the outbound server must be provided because multiple
outbound servers can be configured in one Oracle instance. This call
returns OCI_ERROR if it encounters any error while attaching to the
outbound server.
The last_position parameter is used to establish the starting point
of the stream. This call returns OCI_ERROR if the specified position
is non-null and less than the server's processed low-watermark;
otherwise, LCRs with position greater than last_position will be
sent to the user.
If last_position is null then the stream will start from the processed
low-watermark maintained in the server.
*/
sword OCIXStreamOutAttach (OCISvcCtx *svchp, OCIError *errhp,
oratext *server_name, ub2 server_name_len,
ub1 *last_position,
ub2 last_position_len,
ub4 mode);
#define OCIXSTREAM_OUT_ATTACH_RESERVED_1 (0x00000001)
/*---------------------- OCIXStreamOutProcessedLWMSet ----------------------*/
/*
NAME
OCIXStreamOutProcessedLWMSet - Set Processed Low-Watermark
DESCRIPTION
Sets the processed low-watermark maintained at the client.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle for error reporting
processed_low_position (IN) - processed low position.
processed_low_position_len (IN) - processed low position length.
mode (IN) - mode for future extension. (Not used
currently).
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
The processed low-watermark denotes all LCRs at or below this position
have been processed. After successfully attaching to an XStream
outbound server, a local copy of the processed low-watermark is
maintained at the client. Periodically, this watermark is sent to the
server so that archived logs containing already processed transactions
can be purged.
The following API is used to update the local copy of the processed
low-watermark. It can be called anytime between OCIXStreamOutAttach
and OCIXStreamOutDetach calls. Clients, using the callback mechanism
to stream LCRs from the server, can invoke this API while
in the callback functions.
*/
sword OCIXStreamOutProcessedLWMSet (OCISvcCtx *svchp, OCIError *errhp,
ub1 *processed_low_position,
ub2 processed_low_position_len,
ub4 mode);
/*-------------------- OCICallbackXStreamOutLCRProcess ----------------------*/
/*
NAME
OCICallbackXStreamOutLCRProcess - Callback to process each LCR received
DESCRIPTION
This callback is invoked during OCIXStreamOutLCRCallbackReceive
to process each LCR received from the outbound server.
PARAMETERS
usrctxp (IN/OUT) - Ptr to the user context.
lcrp (IN) - Pointer to the LCR just received.
lcrtyp (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set,
this means the current LCR has more
chunk data.
RETURNS
This callback function must return OCI_CONTINUE to continue processing
OCIXStreamOutLCRCallbackReceive call. Any return code other than
OCI_CONTINUE signals that the client wants to terminate
OCIXStreamOutLCRCallbackReceive immediately.
*/
typedef sb4 (*OCICallbackXStreamOutLCRProcess) (void *usrctxp, void *lcrp,
ub1 lcrtyp, oraub8 flag);
/*-------------------- OCICallbackXStreamOutChunkProcess --------------------*/
/*
NAME
OCICallbackXStreamOutChunkProcess - Callback to process each chunk
DESCRIPTION
This callback is invoked during OCIXStreamOutLCRCallbackReceive
to process each chunk in an LCR.
PARAMETERS
usrctxp (IN/OUT) - Ptr to the user context.
column_name (IN) - Column name for the current chunk.
column_name_len (IN) - Length of column name.
column_dty (IN) - Chunk data type (SQLT_CHR or SQLT_BIN).
column_flag (IN) - LCR column flags. Possible bit values are
OCI_LCR_COLUMN_* flags listed above.
column_csid (IN) - Column character set id. Relevant only if
the column is an XMLType column (i.e.,
column_flag has OCI_LCR_COLUMN_XML_DATA bit set).
chunk_bytes (IN) - Chunk data length in bytes.
chunk_data (IN) - Chunk data buffer.
flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set, this means
the current LCR has more chunks.
RETURNS
This callback function must return OCI_CONTINUE to continue processing
OCIXStreamOutLCRCallbackReceive call. Any return code other than
OCI_CONTINUE signals that the client wants to terminate
OCIXStreamOutLCRCallbackReceive immediately.
*/
typedef sb4 (*OCICallbackXStreamOutChunkProcess)
(void *usrctxp, oratext *column_name, ub2 column_name_len,
ub2 column_dty, oraub8 column_flag, ub2 column_csid,
ub4 chunk_bytes, ub1 *chunk_data, oraub8 flag);
/*-------------------- OCIXStreamOutLCRCallbackReceive ----------------------*/
/*
NAME
OCIXStreamOutLCRCallbackReceive - OCI Receive LCR stream using Callbacks
DESCRIPTION
This API is used to get the LCR stream from the outbound server using
callbacks to gain better performance. The user must supply a callback
function to be invoked for each LCR received. If some row changes
in the stream may contain LOB/LONG/XMLType columns then the data for
those columns are returned to the user in chunks. To receive those row
changes, the user must provide a second callback to be invoked to
process each chunk data.
If there is an LCR available in the stream, the processlcr_cb function
is invoked immediately. After the processlcr_cb function exits, if the
current LCR contains additional chunks then the processchunk_cb function
is invoked for each chunk belonging to that LCR.
If there is no LCR in the stream when the idle timeout expires (see
OCI_ATTR_XSTREAM_IDLE_TIMEOUT), this call returns a null LCR with
OCI_SUCCESS code.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle for error reporting
processlcr_cb (IN) - Client callback function for each LCR.
processchunk_cb (IN) - Client callback function for each
chunk.
usrctxp (IN) - Client context. (Optional)
fetch_low_position (OUT)- Fetch low watermark. (Optional)
fetch_low_position_len (OUT)- Fetch low watermark length.
mode (IN) - mode for future extension. (Not used
currently).
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- The fetch low watermark is used to indicate all transactions
with commit position below this have been received by the XStream
outbound server.
- If the LCR contains non-chunked column(s), the duration of that LCR is
limited to the processlcr_cb function. If the LCR contains some
chunk data then the duration of the LCR is extended until all the
chunks have been processed (that is, when the flag passing to
processchunk_cb function does not have OCI_XSTREAM_MORE_ROW_DATA flag
set). If the user wants to access the LCR data at a later time, a
copy of the LCR must be made. The client callback should not modify
or free the LCR passing to the callback.
- The given usrctxp is passed to both callbacks.
- An ACK interval is the interval in seconds which the outbound
server receives the processed LWM or the inbound server sends
the processed LWM. The default ACK interval is 30 seconds. This
value can be changed by setting the OCI_ATTR_XSTREAM_ACK_INTERVAL
attribute using OCIAttrSet API. This attribute is checked only
during the Attach call; thus, it must be set before invoking this API.
- The idle timeout is the interval in seconds after which the current
call will terminate if there is no LCR in the stream. The default
idle timeout is one second. This value can be changed by setting the
OCI_ATTR_XSTREAM_IDLE_TIMEOUT attribute using OCIAttrSet API. This
attribute is checked only during the Attach call; thus, it must be
set before invoking this API.
- The outbound server ends each call at the transaction boundary
after an ACK interval has elapsed from the start of the call
or when the idle timeout expires. This API returns the fetch
low watermark at the end of each call.
*/
sword OCIXStreamOutLCRCallbackReceive(
OCISvcCtx *svchp, OCIError *errhp,
OCICallbackXStreamOutLCRProcess processlcr_cb,
OCICallbackXStreamOutChunkProcess processchunk_cb, void *usrctxp,
ub1 *fetch_low_position, ub2 *fetch_low_position_len, ub4 mode);
/*---------------------- OCIXStreamOutLCRReceive -------------------------*/
/*
NAME
OCIXStreamOutLCRReceive - Receive LCR without using callback
DESCRIPTION
This API is used to receive an LCR from an outbound stream. If there
is an LCR available, this API immediately returns that LCR. The
duration of each LCR is limited to the processlcr_cb function.
When there is no LCR available in the stream, this call returns a
null LCR after the idle timeout (see OCI_ATTR_XSTREAM_IDLE_TIMEOUT)
has expired.
To avoid network round trip for every OCIXStreamOutLCRReceive call,
the connection is tied to this call to let the server fill up
the network buffer with LCRs so subsequent calls can quickly receive
the LCRs from the network. The server ends each call at the
transaction boundary after an ACK interval has elapsed since the start
of the call or when the idle timeout expires. See
OCI_ATTR_XSTREAM_ACK_INTERVAL & OCI_ATTR_XSTREAM_IDLE_TIMEOUT
attributes.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle for error reporting
lcrp (OUT) - Pointer to the LCR received from the
stream.
lcrtype (OUT) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set,
it means the current LCR has more
chunk data.
fetch_low_position (OUT)- Fetch low watermark. (Optional)
fetch_low_position_len (OUT)- Fetch low watermark length.
mode (IN) - mode for future extension. (Not used
currently).
RETURNS
- OCI_STILL_EXECUTING means the current call is still in progress. The
connection associated with the specified service context handle is
still tied to this call for streaming the LCRs from the server. An
error is returned if the user attempts to use the same connection to
execute any OCI calls that require database round trip, for example,
OCIStmtExecute, OCIStmtFetch, OCILobRead, etc. OCILcr* calls are
local calls; thus, they are valid while the stream is in progress.
- OCI_SUCCESS means the current call is completed. User is free to
execute OCIStmt*, OCILob*, etc. from the same service context.
- OCI_ERROR means the current call encounters some errors. Use
OCIErrorGet to obtain information about the error.
NOTES
This call always returns a null LCR when the return code is OCI_SUCCESS.
In addition, it returns the fetch low position to denote the outbound
server has received all transactions with commit position lower than or
equal to this value.
*/
sword OCIXStreamOutLCRReceive(
OCISvcCtx *svchp, OCIError *errhp,
void **lcrp,
ub1 *lcrtype,
oraub8 *flag,
ub1 *fetch_low_position,
ub2 *fetch_low_position_len,
ub4 mode);
/*-------------------------- OCIXStreamOutChunkReceive ---------------------*/
/*
NAME
OCIXStreamOutChunkReceive - Receive Chunk data
DESCRIPTION
Receives next chunk of LCR data from XStream Outbound server.
This API can only be called while OCIXStreamOutLCRReceive call is
in progress.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors should be reported
column_name (OUT) - Name of column for which data is retrieved.
column_name_len (OUT) - Length of column name.
column_dty (OUT) - LCR column data type.
column_flag (OUT) - LCR column flag. Possible bit values are
OCI_LCR_COLUMN_LOB_DATA
OCI_LCR_COLUMN_LONG_DATA
OCI_LCR_COLUMN_EMPTY_LOB
OCI_LCR_COLUMN_LAST_CHUNK
OCI_LCR_COLUMN_AL16UTF16
OCI_LCR_COLUMN_ENCRYPTED
OCI_LCR_COLUMN_NCLOB
OCI_LCR_COLUMN_XML_DATA
OCI_LCR_COLUMN_XML_DIFF
column_csid (OUT) - Column character set id. This is returned only
if the column is an XMLType column (i.e.,
column_flag has OCI_LCR_COLUMN_XML_DATA bit
set).
chunk_bytes (OUT) - Number of bytes in output buffer.
chunk_data (OUT) - Pointer to the chunk data in the LCR.
Client must not de-allocate this pointer.
flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set, it means
the current LCR has more data coming.
mode (IN) - mode for future extension. (Not used currently).
RETURNS
OCI_SUCCESS - Check colname_len and chunk_bytes to determine the
data just read.
OCI_ERROR - Error encountered. Execute OCIErrorGet to get information
about the error.
NOTES
- If the return code is OCI_SUCCESS, client should check chunk_bytes to
determine the # of bytes read and check column_name to determine
which LCR column the data associated with.
- All the chunks from one LOB/LONG/XMLType column are returned entirely
before the chunk value for the next LOB/LONG/XMLType column is
returned.
- The is no fixed ordering on how the LOB/LONG/XMLType columns is
returned. Users must check the column name to determine which column.
The column_flag will have OCI_LCR_COLUMN_LAST_CHUNK bit set when this
function returns the last chunk of each column.
- This call returns a null column name and null chunk data if it's
invoked when the current LCR contains only non-chunked columns.
- If OCIXStreamOutLCRReceive call returns OCI_XSTREAM_MORE_ROW_DATA flag
then the user must iteratively call OCIXStreamOutChunkReceive to
retrieve all the chunks belonging to the current row change before
calling the next OCIXStreamOutLCRReceive.
*/
sword OCIXStreamOutChunkReceive(OCISvcCtx *svchp, OCIError *errhp,
oratext **column_name, ub2 *column_name_len,
ub2 *column_dty, oraub8 *column_flag,
ub2 *column_csid, ub4 *chunk_bytes,
ub1 **chunk_data, oraub8 *flag, ub4 mode);
/*------------------------- OCIXStreamOutDetach -----------------------------*/
/*
NAME
OCIXStreamOutDetach - OCI Detach from XStream Out
DESCRIPTION
Detaches from the attached XStream outbound server. This call sends the
current local processed low-watermark to the server before detaching
from the outbound server. The outbound server automatically restarts
after this call. This API returns OCI_ERROR if it is invoked while a
ReceiveLCR call is in progress.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors should be reported
mode (IN) - mode for future extension. (Not used currently).
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
- The processed_low_position is passed to the server so it can update its
copy. This value if provided must be greater than or equal to the
value maintained in the server; otherwise, an error is returned.
*/
sword OCIXStreamOutDetach (OCISvcCtx *svchp, OCIError *errhp, ub4 mode);
/*---------------------------------------------------------------------------
STREAMS XSTREAM IN FUNCTIONS
---------------------------------------------------------------------------*/
/*------------------------ OCIXStreamInAttach -------------------------------*/
/*
NAME
OCIXStreamInAttach - OCI XStream In Attach
DESCRIPTION
Attaches to the specified XStream inbound server.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
server_name (IN) - XStream inbound server name.
server_name_len (IN) - Length of server name.
source_name (IN) - source name to identify the data src.
source_name_len (IN) - Length of source name.
last_position (OUT) - Last position received by inbound
server. Optional. If specified must
pre-allocate OCI_LCR_MAX_POSITION_LEN
bytes for return value.
last_position_len (OUT) - Length of last_position. Must be
non-NULL if last_position is non-NULL.
mode (IN) - Mode flags (For future extension.
(Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
The last_position parameter is returned to establish the starting point
to resume the inbound stream. The client should start sending LCRs with
positions greater than the last_position since the inbound server will
ignore all LCRs with positions less than or equal to this value.
*/
sword OCIXStreamInAttach(
OCISvcCtx *svchp,
OCIError *errhp,
oratext *server_name,
ub2 server_name_len,
oratext *source_name,
ub2 source_name_len,
ub1 *last_position,
ub2 *last_position_len,
ub4 mode);
/*-------------------- OCICallbackXStreamInLCRCreate ------------------------*/
/*
NAME
OCICallbackXStreamInLCRCreate - Callback to create an LCR
DESCRIPTION
This callback is invoked during OCIXStreamInLCRCallbackSend
to create each LCR to be sent to the inbound server.
PARAMETERS
usrctxp (IN/OUT) - Ptr to the user context
lcrp (OUT) - Pointer to the LCR to be sent
lcrtyp (OUT) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set,
this means the current LCR has more
chunk data.
RETURNS
This callback function must return OCI_CONTINUE to continue processing
OCIXStreamInLCRCallbackSend call. Any return code other than
OCI_CONTINUE signals that the client wants to terminate
OCIXStreamInLCRCallbackSend immediately.
*/
typedef sb4 (*OCICallbackXStreamInLCRCreate)(
void *usrctxp,
void **lcrp,
ub1 *lcrtyp,
oraub8 *flag);
/*-------------------- OCICallbackXStreamInChunkCreate --------------------*/
/*
NAME
OCICallbackXStreamInChunkCreate - Callback to create each chunk
DESCRIPTION
This callback is invoked during OCIXStreamInLCRCallbackSend
to create each chunk to be sent to the inbound server.
PARAMETERS
usrctxp (IN/OUT) - Ptr to the user context.
column_name (OUT) - Column name for the current chunk.
column_name_len (OUT) - Length of column name.
column_dty (OUT) - Chunk data type (SQLT_CHR or SQLT_BIN).
column_flag (OUT) - LCR column flags. Possible bit values are
OCI_LCR_COLUMN_* flags listed above.
column_csid (OUT) - Column character set id. Relevant only if
the column is an XMLType column (i.e.,
column_flag has OCI_LCR_COLUMN_XML_DATA bit
set).
chunk_bytes (OUT) - Chunk data length in bytes.
chunk_data (OUT) - Chunk data buffer.
flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set, this means
the current LCR has more chunks.
RETURNS
This callback function must return OCI_CONTINUE to continue processing
OCIXStreamInLCRCallbackSend call. Any return code other than
OCI_CONTINUE signals that the client wants to terminate
OCIXStreamInLCRCallbackSend immediately.
*/
typedef sb4 (*OCICallbackXStreamInChunkCreate)(
void *usrctxp,
oratext **column_name,
ub2 *column_name_len,
ub2 *column_dty,
oraub8 *column_flag,
ub2 *column_csid,
ub4 *chunk_bytes,
ub1 **chunk_data,
oraub8 *flag);
/*--------------------- OCIXStreamInLCRCallbackSend ------------------------*/
/*
NAME
OCIXStreamInLCRCallbackSend - OCI XStream In Send LCR to Inbound Server
DESCRIPTION
Sends LCR stream to XStream inbound server using callbacks.
The API invokes createlcr_cb function to obtain each LCR to send to the
server. If the return flag from the createlcr_cb function has
OCI_XSTREAM_MORE_ROW_DATA bit set, then it invokes createchunk_cb
procedure to obtain each chunk. It repeatedly calls createchunk_cb
function while the flag returned from this callback has
OCI_XSTREAM_MORE_ROW_DATA bit set. When this bit is not set, this API
cycles back to invoke createlcr_cb function to get the next LCR.
This cycle is repeated until the createlcr_cb function returns a null
LCR or when an ACK interval has elapsed since the start of the call.
See OCI_ATTR_XSTREAM_ACK_INTERVAL attribute.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
createlcr_cb (IN) - Callback function to be invoked
to generate an LCR for streaming.
Cannot be null.
createchunk_cb (IN) - Callback function to be invoked to
create each chunk. Can be null if the
user does not need to send any LCR with
LOB/LONG/XMLType columns. OCI_ERROR
will be returned if this argument is
null and the user attempts to send an
LCR with additional chunk data.
usrctxp (IN) - Client context to pass to both
callback functions.
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
None
*/
sword OCIXStreamInLCRCallbackSend(
OCISvcCtx *svchp,
OCIError *errhp,
OCICallbackXStreamInLCRCreate createlcr_cb,
OCICallbackXStreamInChunkCreate createchunk_cb,
void *userctxp,
ub4 mode);
/*---------------------------- OCIXStreamInLCRSend --------------------------*/
/*
NAME
OCIXStreamInLCRSend - OCI XStream In Send LCR to Inbound Server
DESCRIPTION
Sends LCR stream to XStream inbound server without using callbacks.
To avoid a network round trip for every OCIXStreamInLCRSend call,
the connection is tied to this call for at least the duration
specified by the OCI_ATTR_XSTREAM_ACK_INTERVAL attribute.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
lcrp (IN) - Pointer to the LCR to send. Cannot
be null.
lcrtype (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set,
it means the current LCR has more
chunk data.
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
- OCI_STILL_EXECUTING means the current call is still in progress. The
connection associated with the specified service context handle is
still tied to this call for streaming the LCRs to the server. An error
is returned if the user attempts to use the same connection to
execute any OCI calls that require database round trip, for example,
OCIStmtExecute, OCIStmtFetch, OCILobRead, etc. OCILcr* calls are
local calls; thus, they are valid while this call is in progress.
- OCI_SUCCESS means the current call is completed. User is free to
execute OCIStmt*, OCILob*, etc. from the same service context.
- OCI_ERROR means this call encounters some errors. Use OCIErrorGet to
obtain information about the error.
*/
sword OCIXStreamInLCRSend(
OCISvcCtx *svchp,
OCIError *errhp,
void *lcrp,
ub1 lcrtype,
oraub8 flag,
ub4 mode);
/*----------------------------- OCIXStreamInChunkSend -----------------------*/
/*
NAME
OCIXStreamInChunkSend - Send Chunk
DESCRIPTION
Sends the given chunk of column data to XStream Inbound server.
This chunk is associated with the LCR that is sent by the
most recent OCIXStreamInLCRSend call prior to this call.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors should be reported
column_name (IN) - Name of column for which data is sent.
Column names must be canonicalized and must
follow Oracle naming conventions.
column_name_len (IN) - Length of column name.
column_dty (IN) - LCR column data type (must be SQLT_CHR or
SQLT_BIN).
column_flag (IN) - LCR column flags. Possible bit values are
OCI_LCR_COLUMN_LOB_DATA
OCI_LCR_COLUMN_LONG_DATA
OCI_LCR_COLUMN_EMPTY_LOB
OCI_LCR_COLUMN_LAST_CHUNK
OCI_LCR_COLUMN_AL16UTF16
OCI_LCR_COLUMN_ENCRYPTED
OCI_LCR_COLUMN_NCLOB
OCI_LCR_COLUMN_XML_DATA
OCI_LCR_COLUMN_XML_DIFF
column_csid (IN) - Column character set id. This is required only
if the column is an XMLType column (i.e.,
column_flag has OCI_LCR_COLUMN_XML_DATA bit set).
chunk_bytes (IN) - Chunk data length in bytes.
chunk_data (IN) - Chunk data buffer.
flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set, it means
the current LCR has more data coming.
mode (IN) - mode for future extension. (Not used currently).
RETURNS
OCI_SUCCESS - Successful call.
OCI_ERROR - Error encountered. Execute OCIErrorGet to get information
about the error.
NOTES
- This function must be called while OCIXStreamInLCRSend is in progress.
- This function is valid only if the associated LCR's cmd type is
INSERT, UPDATE or LOB_WRITE. It can be invoked multiple times for the
same LCR.
- This API is not valid for LOB_ERASE and LOB_TRIM LCRs.
- The chunk values for different columns can not be interleaved. If a
column contains multiple chunks, this procedure must be called
consecutively using the same column name before proceeding to a new column.
The ordering in which the LOB/LONG/XMLType column values are set is
irrelevant.
- The OCI_LCR_COLUMN_LAST_CHUNK must be specified for the last chunk of
each column.
- Only one column can be specified for LOB_WRITE operation.
- For NCLOB or varying width CLOB, the input buffer must be in
AL16UTF16 format.
- For INSERT operation, each LOB/LONG/XMLType column, with value set using
OCIXStreamInChunkSend, must be included in the current LCR's NEW
column list. The value of that LOB/LONG/XMLType column must be set to
null and must have OCI_LCR_COLUMN_EMPTY_LOB flag defined.
*/
sword OCIXStreamInChunkSend (OCISvcCtx *svchp, OCIError *errhp,
oratext *column_name, ub2 column_name_len,
ub2 column_dty, oraub8 column_flag,
ub2 column_csid, ub4 chunk_bytes,
ub1 *chunk_data, oraub8 flag, ub4 mode);
/*--------------------- OCIXStreamInDetach ----------------------------*/
/*
NAME
OCIXStreamInDetach - OCI XStream In Detach from Inbound Server
DESCRIPTION
Detaches from XStream inbound server and returns the inbound server's
processed low-watermark.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
processed_low_position (OUT) - Inbound server's processed low
position. Must pre-allocate
OCI_LCR_MAX_POSITION_LEN bytes for
output buffer.
processed_low_position_len(OUT)- Processed_low_position length.
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
None
*/
sword OCIXStreamInDetach(
OCISvcCtx *svchp,
OCIError *errhp,
ub1 *processed_low_position,
ub2 *processed_low_position_len,
ub4 mode);
/*--------------------- OCIXStreamInProcessedLWMGet -------------------------*/
/*
NAME
OCIXStreamInProcessedLWMGet - OCI XStream In Get LowWatermark
DESCRIPTION
Returns XStream inbound server's processed low watermark
cached at the client.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
processed_low_position (OUT) - Inbound server's cached processed
low position. Must pre-
allocate OCI_LCR_MAX_POSITION_LEN
bytes for output buffer.
processed_low_position_len (OUT) - Processed_low_position length.
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
None
*/
sword OCIXStreamInProcessedLWMGet(
OCISvcCtx *svchp,
OCIError *errhp,
ub1 *processed_low_position,
ub2 *processed_low_position_len,
ub4 mode);
/*-------------------------- OCIXStreamInFlush ------------------------------*/
/*
NAME
OCIXStreamInFlush - OCI XStream In Flush network
DESCRIPTION
Flushes network and terminates any in-progress OCIXStreamInLCRSend or
OCIXStreamInLCRCallbackSend call associated with the given service handle.
PARAMETERS
svchp (IN/OUT) - OCI service handle
errhp (IN/OUT) - Error Handle to which errors
should be reported
mode (IN) - Mode flags (For future extension.
Not used currently)
RETURNS
OCI_SUCCESS or OCI_ERROR.
NOTES
Each call will incur a database round trip to get the server's processed
low-watermark, which the user can retrieve afterward using
OCIXStreamInProcessedLWMGet API. This API should be called only when
there is no LCR to send to the server and the client wants to know the
progress of the attached inbound server.
This call returns OCI_ERROR if it is invoked from the callback functions
of OCIXStreamInLCRCallbackSend API.
Client must have attached to an XStream inbound server prior to calling
this API.
*/
sword OCIXStreamInFlush(
OCISvcCtx *svchp,
OCIError *errhp,
ub4 mode);
/*---------------------------------------------------------------------------
INTERNAL FUNCTIONS
---------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* OCIXSTREAM_ORACLE */