增加oracle 11g x86版 instantclient
diff --git a/sdk/include/ocixstream.h b/sdk/include/ocixstream.h
new file mode 100755
index 0000000..9a25ed7
--- /dev/null
+++ b/sdk/include/ocixstream.h
@@ -0,0 +1,2116 @@
+/* Copyright (c) 2006, 2013, Oracle and/or its affiliates. 
+All rights reserved. */
+ 
+/* 
+   NAME 
+     ocixstream.h - OCI XStream APIs
+
+   DESCRIPTION 
+     OCI APIs for XStream
+
+   RELATED DOCUMENTS 
+ 
+   EXPORT FUNCTION(S) 
+
+   INTERNAL FUNCTION(S)
+
+   EXAMPLES
+
+   NOTES
+
+   MODIFIED   (MM/DD/YY)
+   fergutie    01/30/13 - Backport fergutie_bug-14496414 from main
+   thoang      02/15/12 - Backport thoang_bug-13444033 from main
+   huntran     09/02/12 - Backport huntran_bug-13471035 from
+   huntran     05/09/12 - Backport huntran_bug-13042334 from main
+   apfwkr      02/13/12 - Backport vchandar_bug-13058458 from main
+   elu         06/06/11 - Backport elu_bug-12592488 from main
+   bpwang      04/14/11 - Backport bpwang_bug-11815316 from main
+   elu         04/12/11 - xmlschema
+   elu         03/28/11 - xmlschema
+   tianli      03/21/11 - Backport tianli_bug-11875662 from main
+   thoang      12/04/11 - Add OCI_ROWLCR_IS_INFLIGHT_TXN
+   elu         05/25/11 - remove xml schema
+   thoang      03/10/10 - Add OCIXSTREAM_IN_ATTACH_RESTART_INBOUND mode
+   thoang      12/28/09 - Update comments
+   elu         01/07/10 - stmt lcr
+   thoang      12/15/09 - Remove non-oracle src mode 
+   thoang      12/09/09 - Add note to OCIXStreamInErrorGet
+   thoang      12/04/09 - Remove ProcessedLWMGet2/Set2 
+   rmao        11/20/09 - add OCI_ROWLCR_SEQ_LCR
+   thoang      10/20/09 - Add rollback and start_tx cmd.  
+   bpwang      10/09/09 - Add OCI_ROWLCR_HAS_ID_KEY_ONLY
+   elu         10/05/09 - add stmt LCR
+   rihuang     10/06/09 - Add OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE
+   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 - xstream 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"
+#define OCI_LCR_ROW_CMD_ROLLBACK        "ROLLBACK"
+#define OCI_LCR_ROW_CMD_START_TX        "START_TX"      /* start transaction */
+#define OCI_LCR_ROW_CMD_CTRL_INFO       "CONTROL INFO"        /* contorl lcr */
+
+/* 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"
+#define OCI_LCR_ATTR_CURRENT_USER      "CURRENT_USER"
+#define OCI_LCR_ATTR_OLD_OWNER         "OLD_OWNER"
+#define OCI_LCR_ATTR_OLD_ONAME         "OLD_ONAME"
+
+/* 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
+ * NOTE: This MUST be consistent with DefaultRowLCRCache.MaxLowWaterMarkLength
+ * in DefaultRowLCRCache.java
+ */
+#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.
+ * NOTE: last byte reserved for private OCIP_LCR flags.
+ */
+#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 the flag parameter in the following APIS:
+ * - OCILCRHeaderGet
+ * - OCILCRHeaderSet
+ */
+#define OCI_ROWLCR_HAS_ID_KEY_ONLY  (0x00000001)     /* only has ID key cols */
+                                                 /* (0x00000002) is RESERVED */
+                                                 /* (0x00000004) is RESERVED */
+                                                 /* (0x00000008) is RESERVED */
+#define OCI_ROWLCR_SEQ_LCR          (0x00000010)             /* sequence lcr */
+
+/* LCR belongs to an inflight transaction, i.e., transaction was started
+ * before the outbound server's starting position.
+ */ 
+#define OCI_ROWLCR_IS_INFLIGHT_TXN  (0x00000020)  
+
+/* 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      */
+
+/* Valid mode flag for OCIXStreamInFlush */
+                                   /* Synchronous mode for OCIXStreamInFlush */
+#define OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE  (0x00000001)
+
+/* SessionSet attributes */
+#define  OCIXSTREAM_SESSION_SET_MAX_PARAM_LEN   128
+#define  OCIXSTREAM_ATTR_ATTACH_TIMEOUT        "ATTACH_TIMEOUT_SECS"
+#define  OCIXSTREAM_ATTR_MAX_ATTACH_RETRIES    "MAX_ATTACH_RETRIES"
+
+/*---------------------------------------------------------------------------
+                     PRIVATE TYPES AND CONSTANTS
+  ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+                           EXPORT FUNCTIONS
+  ---------------------------------------------------------------------------*/
+/*
+------------------------------------------------------------------------------=
+NAME
+  OCILCRNew - OCI LCR NEW
+DESCRIPTION
+  Create a new XStream 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)  - XStream 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 XStream LCR specified by the user
+PARAMETERS
+  svchp        (IN)      - OCI service context
+  errhp        (IN)      - OCI Error Handle
+  lcrp         (IN/OUT)  - XStream 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 XStream 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) - XStream 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 XStream 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) - XStream 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)- XStream 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)    - XStream 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) - XStream 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)  - XStream 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)- XStream (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)    - XStream (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)    - XStream 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)- XStream 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);
+
+/*---------------------------------------------------------------------------
+                        XSTREAM OUT FUNCTIONS
+  ---------------------------------------------------------------------------*/
+
+/*------------------------- OCIXStreamOutAttach -----------------------------*/
+/*
+   NAME
+       OCIXStreamOutAttach - OCI Attach to XStream 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 (see below) 
+   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);  
+
+/* Valid modes for OCIXStreamOutAttach call */
+#define OCIXSTREAM_OUT_ATTACH_RESERVED_1              (0x00000001) 
+/* Application is in charge of freeing the LCRs from the outbound server */ 
+#define OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR            (0x00000002) 
+
+/*---------------------- 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. 
+
+        If the OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR mode is passed to 
+        OCIXStreamOutAttach call then the application is in charge of calling
+        OCILCRFree to free each LCR. Note, this mode does not apply to the 
+        chunk data associated with each LCR. Each chunk data is freed 
+        immediately after each OCIXStreamOutChunkReceive call.
+        
+      - 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 since 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. 
+       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.
+
+       The client must not modify the LCR received from the outbound server.
+       The duration of each LCR is until the next OCIXStreamOutLCRReceive call.
+       If the OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR mode is passed to 
+       OCIXStreamOutAttach call then the application is in charge of calling
+       OCILCRFree to free each LCR. Note, this mode does not apply to the 
+       chunk data associated with each LCR. Each chunk data is freed 
+       immediately after each OCIXStreamOutChunkReceive call.
+
+       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.
+
+     The fetch low watermark is used to indicate all transactions
+     with commit position below this have been received by the XStream
+     outbound server.
+*/
+
+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);
+
+/*---------------------------------------------------------------------------
+                        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);
+
+/*--------- Valid modes for OCIXStreamInAttach -------------*/
+/* Restart inbound server regardless if it's in DISABLED or ABORTED state. */
+#define OCIXSTREAM_IN_ATTACH_RESTART_INBOUND          (0x00000001)
+
+/*-------------------- 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);
+
+/*--------- Valid modes for OCIXStreamInDetach -------------*/
+/* Restart inbound server when calling detach. */
+#define OCIXSTREAM_IN_DETACH_RESTART_INBOUND          (0x00000001)
+
+/*--------------------- 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 (see below)
+   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. 
+
+  Valid Mode flags:
+  - OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE :  flush network and wait for all
+    complete and rollback transactions sent to the inbound server to complete
+    before returning control to the client.
+      
+*/
+sword OCIXStreamInFlush(
+       OCISvcCtx *svchp,
+       OCIError  *errhp,
+       ub4        mode);
+
+
+/*-------------------------- OCIXStreamInCommit -----------------------------*/
+/*
+   NAME
+       OCIXStreamInCommit - OCI XStream In Commit 
+   DESCRIPTION
+       Commits current transaction
+   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. Must
+                                             be a commit LCR.
+       mode                           (IN) - Mode flags (For future extension.
+                                             Not used currently)
+   RETURNS
+       OCI_SUCCESS or OCI_ERROR.
+   NOTES
+       The position of the input LCR must be higher than
+       DBA_XSTREAM_INBOUND_PROGRESS.APPLIED_HIGH_POSITION and the LCR's source
+       database must match DBA_APPLY_PROGRESS.SOURCE_DATABASE of the attached
+       inbound server.
+
+       Upon receiving this LCR, the inbound server will check if there is any
+       unapplied complete or rollback transaction remaining. If none is found
+       it inserts a row to the apply progress table based on the input LCR and
+       commit the current transaction; otherwise, it returns an error.
+
+       If there is any pre-commit handler defined, it will be executed when
+       this commit LCR is executed.
+*/
+sword OCIXStreamInCommit(
+  OCISvcCtx *svchp,
+  OCIError  *errhp,
+  void      *lcrp,
+  ub4        mode);
+
+/*-------------------------- OCIXStreamInErrorGet ---------------------------*/
+/*
+   NAME
+     OCIXStreamInErrorGet - OCI XStream In Get Error Info
+   DESCRIPTION
+     Returns the first error encountered by the inbound server since the 
+     Attach call.
+   PARAMETERS
+     svchp                      (IN/OUT) - OCI service handle
+     errhp                      (IN/OUT) - Error Handle
+     errcodep                   (OUT)    - Error code
+     msgbuf                     (IN/OUT) - Pre-allocated message buffer
+     msg_bufsize                (IN)     - Message buffer size
+     msg_len                    (OUT)    - Length of returned error message
+     txn_id                     (IN/OUT) - Pre-allocated txn id buffer
+     txn_id_bufsize             (IN)     - Txn_id buffer size
+     txn_id_len                 (OUT)    - Length of returned txn id
+   RETURNS
+     OCI_SUCCESS or OCI_ERROR.
+   NOTES
+     The maximum size for the returned txn id is OCI_LCR_MAX_TXID_LEN. If the 
+     allocated buffer for txn_id is too small, this routine returns ORA-29258.
+     The maximum size for the returned error msg is OCI_ERROR_MAXMSG_SIZE. If
+     the allocated size for msgbuf is too small, the returned message will be
+     truncated.
+*/
+sword OCIXStreamInErrorGet(
+       OCISvcCtx *svchp,
+       OCIError  *errhp,
+       sb4       *errcodep,   
+       oratext   *msgbuf,    
+       ub2        msg_bufsize,
+       ub2       *msg_len,
+       oratext   *txn_id,
+       ub2        txn_id_bufsize, 
+       ub2       *txn_id_len);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+  OCIXStreamOutSessionSet - OCI XStream Out Session Set attribute
+DESCRIPTION
+  Sets session attributes for XStream Out
+PARAMETERS
+  svchp                   (IN) - OCI service context
+  errhp                   (IN) - OCI Error Handle
+  attribute_name          (IN) - Attribute name
+  attribute_name_len      (IN) - Attribute name length
+  attribute_value         (IN) - Attribute value
+  attribute_value_len     (IN) - Attribute value length
+  attribute_dty           (IN) - Attribute dty
+  mode                    (IN) - mode
+RETURNS
+  OCI_SUCCESS if successful, OCI_ERROR otherwise
+NOTES
+------------------------------------------------------------------------------=
+*/
+sword OCIXStreamOutSessionSet(OCISvcCtx   *svchp,
+                              OCIError    *errhp,
+                              oratext     *attribute_name,
+                              ub2          attribute_name_len,
+                              void        *attribute_value,
+                              ub2          attribute_value_len,
+                              ub2          attribute_dty,
+                              ub4          mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+  OCIXStreamInSessionSet - OCI XStream In Session Set attribute
+DESCRIPTION
+  Sets session attributes for XStream In
+PARAMETERS
+  svchp                   (IN) - OCI service context
+  errhp                   (IN) - OCI Error Handle
+  attribute_name          (IN) - Attribute name
+  attribute_name_len      (IN) - Attribute name length
+  attribute_value         (IN) - Attribute value
+  attribute_value_len     (IN) - Attribute value length
+  attribute_dty           (IN) - Attribute dty
+  mode                    (IN) - mode
+RETURNS
+  OCI_SUCCESS if successful, OCI_ERROR otherwise
+NOTES
+------------------------------------------------------------------------------=
+*/
+sword OCIXStreamInSessionSet(OCISvcCtx   *svchp,
+                             OCIError    *errhp,
+                             oratext     *attribute_name,
+                             ub2          attribute_name_len,
+                             void        *attribute_value,
+                             ub2          attribute_value_len,
+                             ub2          attribute_dty,
+                             ub4          mode);
+
+/*---------------------------------------------------------------------------
+                          INTERNAL FUNCTIONS
+  ---------------------------------------------------------------------------*/
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif                                                  /* OCIXSTREAM_ORACLE */