MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/plsql/include/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/plsql/include/pvm.h

/* Copyright (c) 1998, 2017, Oracle and/or its affiliates. 
All rights reserved.*/
/* 
   NAME 
     pvm.h - PL/SQL Virtual Machine micro-kernel implementations.

     **!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     **!!!! THIS FILE IS SHIPPED FOR NCOMP.                        !!!!
     **!!!!                                                        !!!!
     **!!!! If you change it for a bug fix, you will need to make  !!!!
     **!!!! sure it is re-shipped also along with the new binaries.!!!!
     **!!!! Please make this note in the BUGDB along with your fix.!!!!
     **!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

   DESCRIPTION 
     PL/SQL runtime kernels. Implementation of most instructions.
     Contains runtime libraries/interfaces used by:
       -- ncomp generated C code
       -- native run-time libraries (pen.c, pvm.c, etc.)
       -- interpreted run-time (pfrrun.c/pvm.c, etc.).

     CAUTION:

     Do not put any interpreter specific definitions in pen.h (or files
     included by pen.h such as pvm.h/pdtyp.h/pptyp.h). Such definitions
     belong in pfrdef.h/pfmdef.h. Internal support functions not required
     by generated C code belongs to pet.h/pvm0.h.

   RELATED DOCUMENTS 
 
   EXPORT FUNCTION(S) 

   INTERNAL FUNCTION(S)

   EXAMPLES

   NOTES
     All routines in this module return a PVM processor status.
     Unless the instruction is a comparison which sets the
     processor status word, the return status will be
      PW_NONE - success
      PW_NUL  - failure. In this case percerr has the actual error
                code.

   MODIFIED   (MM/DD/YY)
   orortega    07/13/17 - 22201193: Size constraint for returning varchar2
   jolkin      02/25/17 - proj 68493: fix primary key
   jolkin      01/18/17 - proj 68493: direct memoptimized reads
   yehan       06/24/16 - 22186206 serialize boolean into JSON
   traney      09/26/15 - 21747846: JSON lob, date types
   traney      07/24/15 - 21145550: json_object, json_array
   traney      03/02/15 - Proj 47322: add pevm_JSON
   rdecker     01/16/15 - 20311100: remove toid_handle from pevm_BIND sig
   sylin       07/22/13 - add pevm_MOVRPAT
   sagrawal    08/11/11 - PL/SQL Package type Binds
   sagrawal    05/02/11 - PL/SQL Record Binds
   dbronnik    02/02/10 - Add CONCN_LOB
   wxli        02/20/08 - TPCC in native compilation mode
   sylin       05/11/07 - Sleeping beauties
   dbronnik    11/08/06 - 
   kmuthukk    09/29/06 - XbranchMerge kmuthukk_inlined_sql from st_rdbms_10.2
   wxli        09/22/05 - inlined SQL execution: select, updates
   kmuthukk    10/11/04 - inlined SQL execution: inserts
   sagrawal    10/03/06 - pevm_ENTER_TRG
   kmuthukk    02/21/06 - shared function result cache 
   lvbcheng    12/07/05 - REGEXP builtins in 11g 
   sagrawal    03/27/06 - Compound Triggers 
   mkandarp    03/07/06 - 5001170 : Add pevm_MOVXN 
   dbronnik    10/24/05 - Add modular integer operations
   cracicot    07/11/05 - ANSI prototypes; miscellaneous cleanup 
   bwadding    06/13/05 - ANSI prototypes; miscellaneous cleanup 
   dbronnik    07/02/04 - add real INSI routines for SCALAR and CURSREF
   astocks     05/07/04 - Simplify pevm_INSI_CURSREF
   jciminsk    04/28/04 - merge from RDBMS_MAIN_SOLARIS_040426 
   jciminsk    02/06/04 - merge from RDBMS_MAIN_SOLARIS_040203 
   kmuthukk    08/02/03 - grid: add pevm_BRRESTORE 
   astocks     04/01/04 - Add pevm_VCAL
   dbronnik    11/25/03 - Add pevm_RAISE_JUMP
   dbronnik    09/29/03 - Change exception handling
   astocks     09/11/03 - NVL 
   astocks     10/25/03 - Lint
   kmuthukk    06/12/03 - cache dynamic SQL cursors
   lvbcheng    09/24/03 - Remove subopcode from pevm_ADT 
   lvbcheng    09/19/03 - Add pevm_MSET_ADT 
   lvbcheng    09/02/03 - 2638641 
   dbronnik    08/27/03 - INHFA1
   dbronnik    06/30/03 - Add pevm_SUBSTR
   astocks     07/23/03 - Bug 3059375
   sylin       06/19/03 - Remove use_cstack, and set it in flags_pemtenter
   sylin       03/24/03 - Add pevm REGEXP function protos
   astocks     03/27/03 - Materialized booleans
   kmuthukk    03/24/03 - special get/ins for each collection type
   kmuthukk    03/14/03 - remove pevm_MOVSHADT
   kmuthukk    01/07/03 - ncomp tuning
   astocks     01/20/03 - Remove unused opcodes
   cbarclay    11/07/02 - overlaps
   astocks     01/10/03 - Native CTRL-C 
   cbarclay    11/06/02 - 
   eehrsam     10/30/02 - 
   sylin       01/09/03 - 2711796: Remove pevm_INSTNL
   dbronnik    11/04/02 - Faster MOVN
   kmuthukk    10/08/02 - plstimer: plsql perf analyzer
   dbronnik    09/24/02 - add VATTR and FTCHC_PSEUDO
   sylin       10/08/02 - Add line number argument to pevm_I4EXIM and
                          pevm_I4OPND
   sagrawal    07/09/02 - Sparse collection support for bulk binds
   rdecker     09/09/02 - added pevm_VALIST and pevm_VALISTINI
   sylin       09/10/02 - 1894991: Add use_cstack argument to pevm_ENTER
   astocks     07/10/02 - MOVFCU
   mxyang      04/26/02 - IEEE 754 FP support
   mvemulap    01/29/02 - change pevm_INRDH_common into macro
   sursrini    06/18/02 - 2269576: Drop off the unnecessary casting on 
                          pevm_INSI_ISSCALAR
   kmuthukk    04/05/02 - DEFINE instruction format change
   astocks     04/12/02 - pevm_MOVC
   mvemulap    01/16/02 - bug fix for 1827146
   kmuthukk    12/20/01 - remove pevm_MOVL, pevm_MOVCADT, pevm_MOVS
   cbarclay    09/26/01 - pevm_CMPIO
   sagrawal    09/07/01 - array of record in binds
   sagrawal    08/31/01 - bulk define of record collections
   sylin       09/20/01 - Modify prototype for pevm_PIPE()
   cbarclay    08/07/01 - treat
   cwethere    08/09/01 - Add ABSN.
   dbronnik    09/07/01 - Add pevm_CONCN.
   cwethere    08/27/01 - Add instructions.
   sagrawal    05/07/01 - pevm_DRCAL
   dbronnik    04/17/01 - add flags to i4exim
   mvemulap    04/08/01 - fix prototype for pevm_INBI_INDEXED_UROWID
   mvemulap    04/10/01 - bug fix for 1712683
   kmuthukk    02/02/01 - move pevm_BSETN to pfrrun.c
   kmuthukk    01/26/01 - fast reinit pkgs
   mvemulap    03/29/01 - compiler warnings
   mvemulap    03/07/01 - fix native compiler warnings
   mvemulap    02/28/01 - remove while(0) to reduce compile time
   mvemulap    02/12/01 - olint fixes
   mxyang      02/20/01 - remove pevm_MOVCT
   mxyang      02/09/01 - CMP3LOB
   kmuthukk    12/21/00 - remove obsolete COPM instruction
   kmuthukk    12/19/00 - INCI/DECI support
   kmuthukk    12/12/00 - optimize pevm_INSI_SSCALAR
   gviswana    12/01/00 - ub4 for line numbers
   kmuthukk    12/01/00 - remove s.h include
   kmuthukk    12/01/00 - pvm.h cannot refer to ped.h functions
   dbronnik    11/29/00 - add pvm_ctx_pub
   wxli        12/01/00 - remove pvm_cnschk() from this file
   mvemulap    11/02/00 - change pevm_SNCAL
   mvemulap    10/30/00 - move lnr to perc
   mvemulap    10/20/00 - add arg_block to pevm_RCAL
   mvemulap    10/16/00 -  
   mvemulap    10/05/00 - add HS to pevm_ENTER
   jmuller     10/23/00 - Fix bug 1089498: publish pvm_cnschk()
   mvemulap    09/28/00 -  
   wxli        09/07/00 - pevm_CCNST with ctx
   mvemulap    09/14/00 -  
   mvemulap    09/07/00 - change GRWFCC
   wxli        08/25/00 - set lensem into CHINFO
   mvemulap    08/24/00 - lrg
   mvemulap    08/14/00 -  
   mvemulap    06/21/00 - more microkernels
   mvemulap    06/19/00 - native exec
   mvemulap    05/19/00 - pvm -> pevm
   wxli        07/17/00 - char/nchar implicit conversion
   mvemulap    07/09/00 - nested coll
   asethi      07/12/00 - Bulk bind extensions
   sagrawal    07/03/00 - Dynamic dispatch
   kmuthukk    05/27/00 - newrep: remove pvm_MOVFADT
   kmuthukk    04/26/00 - change INRDH prototyp
   asethi      06/13/00 - Added code to process PIPE statement
   wxli        06/11/00 - length semantics implementation
   mvemulap    05/16/00 - 
   mvemulap    04/24/00 - plsql ncomp
   mvemulap    04/19/00 - more micros
   mvemulap    04/08/00 - more micro kernels
   mvemulap    02/23/00 - Microkernels for PL/SQL VM
   mvemulap    02/23/00 - Creation

*/

#ifndef PVM_ORACLE
# define PVM_ORACLE

#ifndef PDTYP_ORACLE
# include <pdtyp.h>
#endif

/*---------------------------------------------------------------------------
                     PUBLIC TYPES AND CONSTANTS
 ---------------------------------------------------------------------------*/

/* public part of the run-time context structure */
struct pvm_ctx_pub
{
  sb4 ctlc_cnt;
  void *pvm_ctx_pubAlaska;                                /* Sleeping Beauty */
};
typedef struct pvm_ctx_pub pvm_ctx_pub;

/* exception handling macro */
#define pevm_jmpbuf slgbuf
#define pevm_jmpset slgset
#define pevm_jmpjmp slgjmp

/*---------------------------------------------------------------------------
                     PRIVATE TYPES AND CONSTANTS
 ---------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
                           PUBLIC FUNCTIONS
 ---------------------------------------------------------------------------*/


/* Bad instructions */
void      pevm_BAD(void *ctx);

/* The following branch instructions are directly implemented, 
 * so should never execute them through PVM
 */
#define pevm_BRGE   pevm_BAD
#define pevm_BRGT   pevm_BAD
#define pevm_BRLE   pevm_BAD
#define pevm_BRNCH  pevm_BAD
#define pevm_BRNE   pevm_BAD
#define pevm_BRNEG  pevm_BAD
#define pevm_BRNUL  pevm_BAD
#define pevm_BRZER  pevm_BAD

/*
 * BRREINI (Special Branch): used for fast package reinitialization.
 */
boolean pevm_BRREINI(void *ctx);
boolean pevm_BRRESTORE(void *ctx);

void      pevm_ABSI(void *ctx, void const *src1, void *dst);
void      pevm_ADDI(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_ADDN(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_BNDUC(void *ctx, void const *src1, ub2 position, ub2 tmpub2, ub2
              flags);
void      pevm_BREAK(void *ctx);
pevm_excs pevm_BFTCHC(void *ctx, void const *src1, void const *src2);
void      pevm_CLREX(void *ctx);
void      pevm_RASRX(void *ctx, boolean native_exec);
void      pevm_CBEG(void *ctx, ub1 subopc, 
                    void const *src1, void *dst, void const *src2);
void      pevm_CSBEG(void *ctx, ub1 subopc, void *dst, void const *src1);
pevm_excs pevm_CMP3C(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3D(void *ctx, ub1 opc, void const *src1, void const *src2);
pevm_excs pevm_CMP3I(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3N(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3R(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3LOB(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3REF(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3UR(void *ctx, void const *src1, void const *src2);
void      pevm_CNVMSC(void *ctx, void const *src1, ub1 opc, void *dst);
void      pevm_CONCN(void *ctx, void **args, ub4 nargs, boolean nocheck);
void      pevm_CONCN_LOB(void *ctx, void **args, ub4 nargs, boolean nocheck);
#define    pevm_CVTCD(ctx, src1, dst) pevm_CVTCFD(ctx, src1, (void *)0, dst)
void      pevm_CVTCFD(void *ctx, void const *src1, void const *src2, 
                      void *dst);
#define   pevm_CVTCL(ctx, src1, dst) pevm_CVTCFL(ctx, src1, (void *)0, dst)
void      pevm_CVTCFL(void *ctx, void const *src1, void const *src2, 
                      void *dst);
#define   pevm_CVTCI(ctx, src1, dst) pevm_CVTCI_i(ctx, src1, dst, TRUE)
#define   pevm_CVTNI(ctx, src1, dst) pevm_CVTCI_i(ctx, src1, dst, FALSE)
void      pevm_CVTCI_i(void *ctx, void const *src1, void *dst, boolean cvtci);
void      pevm_CVTCN(void *ctx, void const *src1, void *dst);
void      pevm_CVTCUR(void *ctx, void const *src1, void *dst);
#define   pevm_CVTDC(ctx, src1, dst) pevm_CVTDFC(ctx, src1, (void *)0, dst)
void      pevm_CVTDFC(void *ctx, void const *src1, void const *src2, 
                      void *dst);
void      pevm_CVTEI(void *ctx, void const *src1, void *dst);
void      pevm_CVTHR(void *ctx, void const *src1, void *dst);
void      pevm_CVTIC(void *ctx, void const *src1, void *dst);
void      pevm_CVTIE(void *ctx, void const *src1, void *dst);
void      pevm_CVTIN(void *ctx, void const *src1, void *dst);
#define   pevm_CVTLC(ctx, src1, dst) pevm_CVTLFC(ctx, src1, (void *)0, dst)
void      pevm_CVTLFC(void *ctx, void const *src1, void const *src2, 
                      void *dst);
#define   pevm_CVTNC(ctx, src1, dst) pevm_CVTNFC(ctx, src1, (void *)0, dst)
void      pevm_CVTNFC(void *ctx, void const *src1, void const *src2, 
                      void *dst);
void      pevm_CVTRH(void *ctx, void const *src1, void *dst);
void      pevm_CVTURC(void *ctx, void const *src1, void *dst);
void      pevm_DECI(void *ctx, void *src1);                 /* pls_integer-- */
void      pevm_DIVN(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_EXECC(void *ctx, void const *src1, ub4 tmpub4);
#define   pevm_FTCHC(ctx, src1) pevm_BFTCHC(ctx, src1, (void *)0)

/* dynamic sql: initialize stmt (cursor) for execute immediate */
void      pevm_I4EXIM(void *ctx, void *stmt, const void *sql_str, ub2 nbinds,
                      ub2   ndefines, ub4 epurity, ub4 opf, sb4 line,
                      void *cached_cursor);

/* dynamic : execute immediate */
void      pevm_EXIM(void *ctx, void const *src1);

/* initialize for opening a cursor for a dynamic string */
void      pevm_I4OPND(void *ctx, ub1 regs, sb4 offs, void *stmt,
                      void const *sql_str, ub2 nbinds, ub4 epurity, sb4 line);

/* dynamic sql: do a dynamic OPEN on a query string */
void      pevm_OPND(void *ctx, void const *src1);

void      pevm_INCI(void *ctx, void *src1);                 /* pls_integer++ */
pevm_excs pevm_INITX(void *ctx, void const *src1, const void *src2);
void      pevm_MODABSI(void *ctx, void const *src1, void *dst);
void      pevm_MODADDI(void *ctx,
                       void const *src1, void const *src2, void *dst);
void      pevm_MODMULI(void *ctx,
                       void const *src1, void const *src2, void *dst);
void      pevm_MODNEGI(void *ctx, void const *src1, void *dst);
void      pevm_MODSUBI(void *ctx,
                       void const *src1, void const *src2, void *dst);
void      pevm_MODINCI(void *ctx, void const *src1);
void      pevm_MODDECI(void *ctx, void const *src1);
void      pevm_MOVA(void *ctx, void const *src1, void *dst);
void      pevm_MOVADT(void *ctx, void const *src1, void *dst);
#define pevm_MOVC(ctx, src1, dst) pevm_MOVC_i(ctx, (ub1)MOVC, src1, dst)
#define pevm_MOVCB(ctx, src1, dst) pevm_MOVC_i(ctx, (ub1)MOVCB, src1, dst)
void      pevm_MOVC_i(void *ctx, ub1 opc, void const *src1,
                      void *dst);
void      pevm_MOVCR(void *ctx, void const *src1, void const *src2, 
                     ub1 tmpub1, void *dst, ub1 dregs, sb4 doffs);
void      pevm_MOVD(void *ctx, void const *src1, void *dst);
void      pevm_MOVDTM(void *ctx, void const *src1, void *dst);
#define pevm_MOVFCU(ctx, src1, dst) pevm_MOVC_i(ctx, (ub1)MOVFCU, src1, dst)
void      pevm_MOVI(void *ctx, void const *src1, void *dst);
void      pevm_MOVITV(void *ctx, void const *src1, void *dst);
void      pevm_MOVLOB(void *ctx, void const *src1, void *dst);
void      pevm_MOVN(void *ctx, void const *src1, const ub1 prec,
                    const ub1 scale, void *dst);
void      pevm_MOVNU(void *ctx, void const *src1, void *dst);
void      pevm_MOVOPQ(void *ctx, void const *src1, void *dst);
void      pevm_MOVRAW(void *ctx, void const *src1, void *dst);
void      pevm_MOVREF(void *ctx, void const *src1, void *dst);
void      pevm_MOVSELFA(void *ctx, void const *src1, void *dst);
void      pevm_MOVUR(void *ctx, void const *src1, void *dst);
void      pevm_MULI(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_MSET_ADT(void *ctx, const ub2 dty, void *callback, 
                        void *bhndl, void *ret);
void      pevm_MSET(void *ctx, const ub1 subcode, void const *src1,
                    void const *src2, void *dst);
/*
  General instruction for multiset operations.
  ctx - the perc
  subcode - the mset subopcode
  src1 - src1 of the multiset operation
  src2 - src2 of the multiset operation, if applicable, otherwise, null.
  dst  - dst of the multiset operation
  */
void      pevm_MULN(void *ctx, void const *src1, void const *src2, void *dst);
pevm_excs pevm_NCAL(void *ctx, ub2 did, ub2 ept, void **arg_block, void *ump);
pevm_excs pevm_SNCAL(void *ctx, ub2 did, ub2 ept, void **arg_block);
pevm_excs pevm_DCAL(void *ctx, ub2 ept, ub2 vti, ub1 **pc, void  ** arg_block);
void      pevm_NEGI(void *ctx, void const *src1, void *dst);
void      pevm_NEGN(void *ctx, void const *src1, void *dst);
void      pevm_PATXS(void *ctx);
pevm_excs pevm_PIPE(void *ctx, void const *var);
void      pevm_PRFTC(void *ctx, void const *src1, void const *src2);
void      pevm_RASIX(void *ctx, ub4 excp);
void      pevm_RASUX(void *ctx, ub2 did, ub2 idn);
pevm_excs pevm_RCAL(void *ctx, void const *src, void **arg_block);

void      pevm_SETN(void *ctx, void *dst, ub1 tcat);
void      pevm_SUBI(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_SUBN(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_SUBSTR(void *ctx, ub4 mode, void const *src1, void const *src2, 
                      void const *src3, void *dst);
pevm_excs pevm_SUSPEND(void *ctx);
pevm_excs pevm_TSTREF(void *ctx, void const *src1);
void      pevm_XORI(void *ctx, void const *src1, void const *src2, void *dst);

/* Frame Initialization */
#define PEVM_INIT_FRAME_HDL(hdl, mptr, dptr) \
      PETmut(hdl) = mptr;\
      PMUlen(((plsmut*)mptr)) = 0;\
      PMUpd(((plsmut*)mptr)) = (ub1 *)dptr;\
      if (dptr != (void *)0)\
       PMUflg(((plsmut*)mptr)) = PLSFPA | PLSFNULL;\
      else\
       PMUflg(((plsmut*)mptr)) = PLSFNULL;

/*
 * Scalars are quite common in generated code.
 * Rather than use the generic PEVM_INIT_FRAME_HDL
 * macro (which results in code bloat and possibly
 * poor optimization of generated code), let's use 
 * special case versions which are optimized for the
 * inlined/out-lined flavors of scalars.
 */
/* initialize Inlined Simple SCALAR */
#define pevm_INSI_ISSCALAR(hdl, mptr, dptr) \
      PETmut(hdl) = mptr;\
      PMUlen((mptr)) = 0;\
      PMUpd((mptr)) = (ub1 *)dptr;\
      PMUflg((mptr)) = PLSFNULL | PLSFPA;

/* initialize Outlined Simple SCALAR */
#define pevm_INSI_OSSCALAR(hdl, mptr) \
      PETmut(hdl) = mptr;\
      PMUlen((mptr)) = 0;\
      PMUpd((mptr)) = (ub1 *)0;\
      PMUflg((mptr)) = PLSFNULL;

/* Any scalar */
#define pevm_INSI_SCALAR(perc, hdl, mptr, dptr, flags)            \
    PETmut(hdl)  = mptr;                                          \
    PMUlen(mptr) = 0;                                             \
    PMUpd(mptr)  = dptr;                                          \
    PMUflg(mptr) = flags;                                         \

#define pevm_INSI_CURSREF(ctx, hdl, mptr, dptr) \
  pevm_INSI_OSSCALAR(hdl, mptr)

void      pevm_INSI_SCALAR_(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                            ub2 flags);

void      pevm_INSI_CURSREF_(void *ctx, void *hdl, plsmut *mptr, void *dptr);

void      pevm_INSI_UROWID(void *ctx, void *hdl, plsmut *mptr,  void *dptr,
                           ub4 maxlen, ub1 csform, ub1 lensem, 
                           pemttcat tcat, ub1 regs);

void      pevm_INSI_CHAR(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                         ub4 maxlen, ub1 csform, ub1 lensem,
                         pemttcat tcat, ub1 regs);

void      pevm_INSI_LOB(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub1 lobtype, ub1 csform,
                        ub1 regs);

void      pevm_INSI_DATETIME(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                             ub1 dtmtyp, ub1 prec, ub1 regs);

void      pevm_INSI_INTERVAL(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                             ub1 inttyp, ub1 ldp, ub1 tlp, ub1 regs);

void      pevm_INSI_ADT(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub4 ltdo_off, ub1 nact, ub1 regs);

void      pevm_INSI_OPQ(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub4 ltdo_off, ub1 regs);

void      pevm_INSI_OBJREF(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                           ub4 ltdo_off, ub1 regs);

void      pevm_INSI_INDEXED_SSCALAR(void *ctx, void *hdl, plsmut *mptr, 
                                    void *dptr, void *ehdl, ub4 ltdo_off, 
                                    ub1 eltcat, ub1 regs);

void      pevm_INSI_INDEXED_CHAR(void *ctx, void *hdl, plsmut *mptr, 
                                 void *dptr, void *ehdl, ub4 ltdo_off, 
                                 ub1 eltcat, ub1 regs,
                                 ub1 csf, ub4 mxl, ub1 lensem);

void      pevm_INSI_INDEXED_LOB(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                void *ehdl, ub4 ltdo_off, ub1 eltcat, ub1 regs,
                                ub1 csf, ub1 lobtype);

void      pevm_INSI_INDEXED_DATETIME(void *ctx, void *hdl, plsmut *mptr, 
                                     void *dptr, void *ehdl, ub4 ltdo_off, 
                                     ub1 eltcat, ub1 regs,
                                     ub1 dty, ub1 fsprec);

void      pevm_INSI_INDEXED_INTERVAL(void *ctx, void *hdl, plsmut *mptr, 
                                     void *dptr,
                                     void *ehdl, ub4 ltdo_off, ub1 eltcat, 
                                     ub1 regs,
                                     ub1 dty, ub1 ldp, ub1 fsprec);

void      pevm_INSI_INDEXED_ADT(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                void *ehdl, ub4 ltdo_off, ub1 eltcat, ub1 regs,
                                ub4 eltdo, ub1 nact);

void      pevm_INSI_INDEXED_OPQ(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                void *ehdl, ub4 ltdo_off, ub1 eltcat, ub1 regs,
                                ub4 eltdo);

void      pevm_INSI_INDEXED_OBJREF(void *ctx, void *hdl, plsmut *mptr, 
                                   void *dptr, void *ehdl, ub4 ltdo_off, 
                                   ub1 eltcat, ub1 regs, ub4 eltdo);

void      pevm_INSI_INDEXED_INDEXED(void *ctx, void *hdl, plsmut *mptr, 
                                    void *dptr, void *ehdl, ub4 ltdo_off, 
                                    ub1 eltcat, ub1 regs, ub4 eltdo_off);


#define pevm_INBI_ISSCALAR(hdl, mptr, dptr) \
        pevm_INSI_ISSCALAR(hdl, mptr, dptr)

#define pevm_INBI_OSSCALAR(hdl, mptr) \
        pevm_INSI_OSSCALAR(hdl, mptr)

void      pevm_INBI_CURSREF(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                            ub1 tcatval);

void      pevm_INBI_UROWID(void *ctx, void *hdl, plsmut *mptr,  void *dptr,
                           ub2 bind_num, ub1 csform, ub1 lensem, 
                           pemttcat tcat);

void      pevm_INBI_CHAR(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                         ub4 bind_num, ub1 csform, ub1 lensem,
                         pemttcat tcat, ub1 regs);

void      pevm_INBI_LOB(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub2 bind_num, ub1 lobtype, ub1 csform,
                        ub1 regs);

void      pevm_INBI_DATETIME(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                             ub2 bind_num, ub1 dtmtyp, ub1 prec, ub1 regs);

void      pevm_INBI_INTERVAL(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                             ub2 bind_num, ub1 inttyp, ub1 ldp, ub1 tlp, 
                             ub1 regs);

void      pevm_INBI_ADT(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub4 ltdo_off, ub2 bind_num, ub1 nact, ub1 regs);

void      pevm_INBI_OPQ(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub4 ltdo_off,  ub2 bind_num, ub1 regs);

void      pevm_INBI_OBJREF(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                           ub4 ltdo_off, ub2 bind_num, ub1 regs);

void      pevm_INBI_INDEXED_SSCALAR(void *ctx, void *hdl, plsmut *mptr, 
                                    void *dptr,
                                    void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                    ub1 eltcat, ub1 regs);

void      pevm_INBI_INDEXED_UROWID(void *ctx, void *hdl, plsmut *mptr, 
                                   void *dptr,
                                   void *ehdl, ub2 bind_num, 
                                   ub4 ltdo_off, ub1 eltcat,
                                   ub1 regs, ub1 csf,
                                   ub4 mxl, 
                                   ub1 lensem);

void      pevm_INBI_INDEXED_CHAR(void *ctx, void *hdl, plsmut *mptr, 
                                 void *dptr,
                                 void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                 ub1 eltcat, ub1 regs,
                                 ub1 csf, ub4 mxl, ub1 lensem);

void      pevm_INBI_INDEXED_DATETIME(void *ctx, void *hdl, plsmut *mptr, 
                                     void *dptr,
                                     void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                     ub1 eltcat, ub1 regs,
                                     ub1 dty, ub1 prec);

void      pevm_INBI_INDEXED_INTERVAL(void *ctx, void *hdl, plsmut *mptr, 
                                     void *dptr,
                                     void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                     ub1 eltcat, ub1 regs,
                                     ub1 dty, ub1 ldp, ub1 prec);

void      pevm_INBI_INDEXED_LOB(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                ub1 eltcat, ub1 regs,
                                ub1 csf, ub1 lobtyp);

void      pevm_INBI_INDEXED_ADT(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                 void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                 ub1 eltcat, ub1 regs,
                                 ub4 eltdo, ub1 nact);

void      pevm_INBI_INDEXED_OPQ(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                                void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                ub1 eltcat, ub1 regs,
                                ub4 eltdo);

void      pevm_INBI_INDEXED_OBJREF(void *ctx, void *hdl, plsmut *mptr, 
                                   void *dptr,
                                   void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                   ub1 eltcat, ub1 regs,
                                   ub4 eltdo);

void      pevm_INBI_INDEXED_INDEXED(void *ctx, void *hdl, plsmut *mptr, 
                                    void *dptr,
                                    void *ehdl, ub2 bind_num, ub4 ltdo_off, 
                                    ub1 eltcat, ub1 regs,  ub4 eltdo_off
                                    );

void      pevm_CCNST(void *ctx, void const *src1, void *dst);
void      pevm_INSTC2(void *ctx, void const *src1, void const *src2, 
                      void *dst, ub1 regs, sb4 offs, boolean instc2);
void      pevm_CCSINF(void *ctx, void const *src1, void *dst, ub1 srctc, 
                      ub1 dsttc);
void      pevm_EXCOD(void *ctx, void *dst);
void      pevm_EXMSG(void *ctx, void const *src1, void *dst);
void      pevm_CLOSC(void *ctx, void const *src1, ub1 suppress_error);
void      pevm_BIND(void *ctx, void const *src1, ub2 position, ub2 bind_type,
                    void const *src2, ub2 flags, void const *src3, 
                    ub2 attr_no, ub1 opc);
void      pevm_DEFINE(void *ctx, void const *src1, ub2 position, ub2 sqlt_type,
                      ub2 flgs, void *src2);
void      pevm_FCAL(void *ctx, void const *src1);

/* Sometime, fix to use pevm_ADEFINE_i ... */
void      pevm_ADEFINE(void *ctx, void const *src1, ub2 position,
                       ub2 sqlt_type, ub2 flgs, void const *src2,
                       ub2 bind_num, void const *src3, void const *src4, 
                       ub2 attr_no, ub1 opc);
#define pevm_ARDEFINE pevm_ADEFINE

void      pevm_BDCINI_i(void *ctx, void const *src1, ub1 bdflags,
                      void const *arrhdl );


void      pevm_ARGEASCA(void       *ctx,
                        void const *src1,
                        void const *src2,
                        void       *dst);
void      pevm_ARGECOLL(void       *ctx,
                        void const *src1,
                        void const *src2,
                        void       *dst);
void      pevm_ARGEIBBI(void       *ctx,
                        void const *src1,
                        void const *src2,
                        void       *dst);
void      pevm_ARPEASCA(void       *ctx,
                        void const *src1,
                        void const *src2, 
                        void       *dst);
void      pevm_ARPECOLL(void       *ctx,
                        void const *src1,
                        void const *src2, 
                        void       *dst);
void      pevm_ARPEIBBI(void       *ctx,
                        void const *src1,
                        void const *src2, 
                        void       *dst);

void      pevm_BCNSTR(void *ctx, void const *src1, sb4 prec, sb4 scale, 
                      ub2 position, ub4 tmpub4);
pevm_excs pevm_RET(void *ctx, ub1 **pc);
#define pevm_RNDD(ctx, src1, dst) pevm_RNDDC_i(ctx, src1, (void *)0, dst, TRUE)
#define pevm_RNDDC(ctx, src1, src2, dst) \
  pevm_RNDDC_i(ctx, src1, src2, dst, TRUE)
#define pevm_TRND(ctx, src1, dst) \
  pevm_RNDDC_i(ctx, src1, (void *)0, dst, FALSE)
#define pevm_TRNDC(ctx, src1, src2, dst) \
  pevm_RNDDC_i(ctx, src1, src2, dst, FALSE)

void      pevm_RNDDC_i(void *ctx, void const *src1, void const *src2, 
                       void *dst, boolean rnddp);
void      pevm_LSTD(void *ctx, void const *src1, void *dst);

#define pevm_ADDDN(ctx, src1, src2, dst) \
  pevm_ADDDN_i(ctx, src1, src2, dst, FALSE)
#define pevm_SUBDN(ctx, src1, src2, dst) \
  pevm_ADDDN_i(ctx, src1, src2, dst, TRUE)
void      pevm_ADDDN_i(void *ctx, void const *src1, void const *src2, 
                       void *dst, boolean subdnp);
void      pevm_SUBDD(void *ctx, void const *src1, void const *src2, 
                     void *dst);
void      pevm_ADDMDN(void *ctx, void const *src1, void const *src2, 
                      void *dst);
void      pevm_MBTD(void *ctx, void const *src1, void const *src2, 
                    void *dst);
void      pevm_NXTD(void *ctx, void const *src1, void const *src2, 
                    void *dst);

struct pevmea_enter_args
{
  /* NCOMP mode related args */
  union {
    ub1      *state_buf;            /* IN: (used only if use_cstack is TRUE) */
    size_t    frame_sz;            /* IN: (used only if use_cstack is FALSE) */
  } pevmea_stack;
  void     *frame;         /* IN (use_cstack=TRUE); OUT (use_cstack = FALSE) */
  ub1     **preg_pevmea;                                  /* ncomp only, OUT */
  union {
    ub4      *lnr_pevmea;                                 /* ncomp only, OUT */
    ub1     **ppc;                           /* interpreted mode only IN/OUT */
  } pevmea_lnrppc;
};
typedef struct pevmea_enter_args pevmea_enter_args;

void      pevm_ENTER(void              *ctx,
                     ub2                entdesc_page_num,
                     ub2                entdesc_page_off,
                     pevmea_enter_args *args);

pevm_excs pevm_ENTERX(void              *ctx,
                      ub2                entdesc_page_num,
                      ub2                entdesc_page_off,
                      pevmea_enter_args *args);

pevm_excs pevm_ENTER_TRG(void              *ctx,
                         ub2                entdesc_page_num,
                         ub2                entdesc_page_off,
                         pevmea_enter_args *args);

void      pevm_BNDS(void *ctx, void *bnds_curs, void const *src1, 
                    void const *src2);
void      pevm_COPN(void *ctx, void const *src1, void *dst);
pevm_excs pevm_icd_call_common(void *ctx, ub2 did, boolean not_PSDIOVER,
                               ub2 loc, ub2 argc,
                               boolean is_std, void **arg_block);
void      pevm_GBCR(void *ctx, ub2 tmpub2, void const *src1, void *dst);
void      pevm_CFND(void *ctx, void const *src1, ub1 Flag, void *dst);
void      pevm_CSFND(void *ctx, ub1 Flag, void *dst);
void      pevm_CRWC(void *ctx, void const *src1, void *dst);
void      pevm_CSRWC(void *ctx, void *dst);
void      pevm_BCRWC(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_BCSRWC(void *ctx, void const *src1, void *dst);
pevm_excs pevm_GBVAR(void *ctx, ub2 tmpub2, ub2 bind_num, void *dst);
pevm_excs pevm_SBVAR(void *ctx, ub2 tmpub2, ub2 bind_num, const void *src1, ub4 flags);
void      pevm_GBEX(void *ctx, ub2 tmpub2, ub2 bind_num, 
                    void const *src1, void *dst);
void      pevm_SBEX(void *ctx, ub2 tmpub2, ub2 bind_num, 
                    void const *src1, void const *src2);
void      pevm_GETFX(void *ctx, ub2 tmpub2, void *dst, ub2 eltty);
void      pevm_SETFX(void *ctx, ub2 tmpub2, void const *src1, ub2 eltty);
void      pevm_MOVX(void *ctx, void const *src1, void *dst);
void      pevm_MOVXN(void *ctx, void const *src1, const ub1 prec ,
                     const ub1 scale, void *dst);
void      pevm_EXTX(void *ctx, void const *src1, ub4 tmpub4);

void      pevm_INMDH_CHAR(void *ctx, void *src1, ub1 csform, ub4 ctmxlen, 
                          ub1 lensem, ub1 tcat);

void      pevm_INMDH_LOB(void *ctx, void *src1, ub1 csform, ub1 lobtyp);

void      pevm_INMDH_DATETIME(void *ctx, void *src1, ub1 typ, ub1 tlp);

void      pevm_INMDH_INTERVAL(void *ctx, void *src1, ub1 typ, ub1 ldp, 
                              ub1 tlp);

void      pevm_INMDH_ADT(void *ctx, void  *src1, ub4 chtdo);
void      pevm_INMDH_INDEXED_SSCALAR(void *ctx, void  *src1, ub4 chtdo, 
                                     ub1 etcat, void *ehdl);
void      pevm_INMDH_INDEXED_OBJREF(void *ctx, void  *src1, ub4 chtdo, 
                                    ub1 etcat, void *ehdl, ub4 eltdo);
void      pevm_INMDH_INDEXED_OPQ(void *ctx, void  *src1, ub4 chtdo, 
                                 ub1 etcat, void *ehdl, ub4 eltdo);
void      pevm_INMDH_INDEXED_INDEXED(void *ctx, void  *src1, ub4 chtdo, 
                                     ub1 etcat, void *ehdl, ub4 eltdo);
void      pevm_INMDH_INDEXED_ADT(void *ctx, void  *src1, ub4 chtdo, 
                                 ub1 etcat, void *ehdl, ub4 eltdo);
void      pevm_INMDH_INDEXED_CHAR(void *ctx, void  *src1, ub4 chtdo, 
                                  ub1 etcat, void *ehdl, ub1 csf, 
                                  ub4 maxlen, ub1 lensem);
void      pevm_INMDH_INDEXED_UROWID(void *ctx, void  *src1, ub4 chtdo, 
                                    ub1 etcat, void *ehdl,  ub1 csf,
                                    ub4 maxlen, ub1 lensem);
void      pevm_INMDH_INDEXED_LOB(void *ctx, void  *src1, ub4 chtdo, 
                                 ub1 etcat, void *ehdl, ub1 csf, 
                                 ub1 maxlen);
void      pevm_INMDH_INDEXED_DATETIME(void *ctx, void  *src1, ub4 chtdo, 
                                      ub1 etcat, void *ehdl,
                                      ub1 sqlt, ub1 fsprec);
void      pevm_INMDH_INDEXED_INTERVAL(void *ctx, void  *src1, ub4 chtdo, 
                                      ub1 etcat, void *ehdl,
                                      ub1 sqlt, ub1 ldp, ub1 fsprec);
void      pevm_INMDH_OPQ(void *ctx, void  *src1, ub4 ophtdo);
void      pevm_INMDH_OBJREF(void *ctx, void  *src1, ub4 orhtdo);

void      pevm_INHFA_COMMON(void *ctx, void const *src1, void *dst, 
                             ub4 index_path_len, ...);

void pevm_INHFA1_COMMON(void *ctx, void const *src1, void *dst, ub4 idx);

void      pevm_INHFA_CHAR(void *ctx, void const *src1, void *dst, ub1 csform,
                         ub4 ctmxlen, ub1 lensem, ub1 tcat);

void      pevm_INHFA_FCHAR(void *ctx, void const *src1, void *dst, ub1 csform, 
                         ub4 ctmxlen, ub1 lensem, ub1 tcat);

void      pevm_INHFA_LOB(void *ctx, void const *src1, void *dst, ub1 lobtyp, 
                         ub1 csform);

void      pevm_INHFA_OBJREF(void *ctx, void const *src1, void *dst, 
                         ub4 ltdo_off);

void      pevm_INHFA_DATETIME(void *ctx, void const *src1, void *dst, ub1 typ,
                         ub1 tlp);

void      pevm_INHFA_INTERVAL(void *ctx, void const *src1, void *dst, ub1 typ,
                         ub1 tlp, ub1 ldp);

void      pevm_INHFA_ADT(void *ctx, void const *src1, void *dst, ub4 chtdo);

void      pevm_INHFA_OPQ(void *ctx, void const *src1, void *dst, ub4 ophtdo);

void      pevm_INHFA_INDEXED_SSCALAR(void *ctx, void const *src1, void *dst, 
                                     ub4 tdo_off, void *ehdl, ub1 eltcat);

void      pevm_INHFA_INDEXED_CHAR(void *ctx, void const *src1, void *dst, 
                                  ub4 tdo_off, void *ehdl, ub1 eltcat,
                                  ub1 csf, ub4 mxln, ub1 lensem);

void      pevm_INHFA_INDEXED_LOB(void *ctx, void const *src1, void *dst, 
                                 ub4 tdo_off, void *ehdl, ub1 eltcat,
                                 ub1 lobtyp, ub1 csf, ub1 lensem);

void      pevm_INHFA_INDEXED_DATETIME(void *ctx, void const *src1, void *dst, 
                                      ub4 tdo_off, void *ehdl, ub1 eltcat,
                                      ub1 typ, ub1 tlp);

void      pevm_INHFA_INDEXED_INTERVAL(void *ctx, void const *src1, void *dst, 
                                      ub4 tdo_off, void *ehdl, ub1 eltcat,
                                      ub1 typ, ub1 ldp, ub1 tlp);

void      pevm_INHFA_INDEXED_ADT(void *ctx, void const *src1, void *dst, 
                                 ub4 tdo_off, void *ehdl, ub1 eltcat,
                                 ub4 eltdo_off);

void      pevm_INHFA_INDEXED_INDEXED(void *ctx, void const *src1, void *dst, 
                                     ub4 tdo_off, void *ehdl, ub1 eltcat,
                                     ub4 eltdo_off);


void      pevm_INHFA_INDEXED_OPQ(void *ctx, void const *src1, void *dst, 
                                 ub4 tdo_off, void *ehdl, ub1 eltcat,
                                 ub4 eltdo_off);

void      pevm_INHFA_INDEXED_OBJREF(void *ctx, void const *src1, void *dst, 
                                    ub4 tdo_off, void *ehdl, ub1 eltcat,
                                    ub4 eltdo_off);


void      pevm_TREAT(void *ctx, 
                     void const *src1, ub4 src2, ub1 isref, void *dst);
void      pevm_CMPIO(void *ctx, 
                     void const *src1, ub4 src2, ub1 flag, void *dst);

void      pevm_ABSN(void *ctx, void const *src1, void *dst);
void      pevm_ISNULL(void *ctx, const ub1 isn_code,
                      void const *src1, void *dst);

void      pevm_NULCHK(void *ctx, const ub1 nul_code, void const* src1);
void      pevm_RNGCHKI(void *ctx, const ub1 range_code,
                       void const* src1, void const* bndl, void const* bndh);
void      pevm_RNGCHKF(void *ctx, const ub1 range_code,
                       void const* src1, void const* bndl, void const* bndh);
void      pevm_ANDB(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_ORB(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_NOTB(void *ctx, void const *src1, void *dst);
void      pevm_CHSNULL(void *ctx, const ub2 chs_code, 
                       void const *src1, void const *src2, void const *src3, 
                       void *dst);
#define pevm_NVL(ctx, nvl_code, src1, src2, dst) \
        pevm_CHSNULL((ctx), (nvl_code), (src1), (src2), (src1), (dst))
void      pevm_REL2BOOL(void *ctx, const ub1 rel_code, 
                        void const *src1, void const *src2, void *dst);
void      pevm_MINMAX(void *ctx, const ub1 ext_code, 
                      void const *src1, void const *src2, void *dst);

void      pevm_ADDD(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_ADDF(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_SUBD(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_SUBF(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_MULD(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_MULF(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_DIVD(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_DIVF(void *ctx, void const *src1, void const *src2, void *dst);
void      pevm_NEGD(void *ctx, void const *src1, void *dst);
void      pevm_NEGF(void *ctx, void const *src1, void *dst);
void      pevm_ABSD(void* ctx, void const* src1, void* dst);
void      pevm_ABSF(void* ctx, void const* src1, void* dst);
void      pevm_MOVDBL(void *ctx, void const *src1, void *dst);
void      pevm_MOVFLT(void *ctx, void const *src1, void *dst);
pevm_excs pevm_CMP3DBL(void *ctx, void const *src1, void const *src2);
pevm_excs pevm_CMP3FLT(void *ctx, void const *src1, void const *src2);
void      pevm_VATTR(void *ctx, const ub1 subcode,
                     void const *src1, void *dst);
void      pevm_FTCHC_PSEUDO(void *ctx, void const *src1);
void      pevm_VALIST(void *ctx, const ub2 src1, void *src2, void *dst);
void      pevm_VALISTINI(void *ctx, const ub4 src1, void *dst);
void      pevm_VCAL(void *ctx, const ub1 sub_op, const ub1 argc, 
                    void **argblock);
void      pevm_OVER(void *ctx, ub2 src1, void const *src2,
                    void const *src3, void const *src4,
                    void const *src5, void *dst);

/*
 * function REGEXP_COUNT(srcstr      VARCHAR2 CHARACTER SET ANY_CS,
 *                       pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                       position    PLS_INTEGER := 1,
 *                       modifier    VARCHAR2 DEFAULT NULL)
 *      return PLS_INTEGER;
 */
void      pevm_REGEXP_COUNT_TXT(void *ctx, void *srcloc, void *patloc,
                                void *posloc, void *dst);

/*
 * function REGEXP_LIKE (srcstr   VARCHAR2 CHARACTER SET ANY_CS,
 *                       pattern  VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                       modifier VARCHAR2 DEFAULT NULL)
 */
void      pevm_REGEXP_LIKE_TXT(void *ctx, void *srcloc, void *patloc,
                               void *dst);


/*
 * function REGEXP_INSTR(srcstr      VARCHAR2 CHARACTER SET ANY_CS,
 *                       pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                       position    PLS_INTEGER := 1,
 *                       occurrence  PLS_INTEGER := 1,
 *                       subexp      PLS_INTEGER := 0,
 *                       returnparam PLS_INTEGER := 0,
 *                       modifier    VARCHAR2 DEFAULT NULL)
 *      return PLS_INTEGER;
 */
void      pevm_REGEXP_INSTR_TXT(void *ctx, void *srcloc, void *patloc,
                                void *posloc, void *occurloc,
                                void *retfloc, void *dst);

void      pevm_REGEXP_INSTR_TXT2(void *ctx, void *srcloc, void *patloc,
                                 void *posloc, void *occurloc, 
                                 void *retfloc, void *subexploc, void *dst);

/*
 * function REGEXP_SUBSTR(srcstr      VARCHAR2 CHARACTER SET ANY_CS,
 *                        pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                        position    PLS_INTEGER := 1,
 *                        occurrence  PLS_INTEGER := 1,
 *                        modifier    VARCHAR2 DEFAULT NULL,
 *                        subexpression PLS_INTEGER := 0)
 *       return VARCHAR2 CHARACTER SET srcstr%CHARSET;
 */
void      pevm_REGEXP_SUBSTR_TXT(void *ctx, void *srcloc, void *patloc,
                                 void *posloc, void *occurloc, void *dst);

void      pevm_REGEXP_SUBSTR_TXT2(void *ctx, void *srcloc, void *patloc,
                                  void *posloc, void *occurloc, void *subexp,
                                  void *dst);

/*
 * function REGEXP_REPLACE(srcstr      VARCHAR2 CHARACTER SET ANY_CS,
 *                         pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         replacestr  VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         position    PLS_INTEGER := 1,
 *                         occurrence  PLS_INTEGER := 0,
 *                         modifier    VARCHAR2 DEFAULT NULL)
 *      return VARCHAR2 CHARACTER SET srcstr%CHARSET;
 */
void      pevm_REGEXP_REPLACE_TXT(void *ctx, void *srcloc, void *patloc,
                                  void *reploc, void *posloc, void *occurloc,
                                  void *dst);

/*
 *   function REGEXP_COUNT(srcstr      CLOB CHARACTER SET ANY_CS,
 *                         pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         position    INTEGER := 1,
 *                         modifier    VARCHAR2 DEFAULT NULL)
 *     return INTEGER;
 */
void      pevm_REGEXP_COUNT_CLB(void *ctx, void *srcloc, void *patloc,
                                void *posloc, void *dst);


/* LOB REGEXP functions */
/*
 * function REGEXP_LIKE (srcstr   CLOB CHARACTER SET ANY_CS,
 *                       pattern  VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                       modifier VARCHAR2 DEFAULT NULL)
 */
void      pevm_REGEXP_LIKE_CLB(void *ctx, void *srcloc, void *patloc,
                               void *dst);

/*
 * function REGEXP_INSTR(srcstr      CLOB CHARACTER SET ANY_CS,
 *                       pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                       position    PLS_INTEGER := 1,
 *                       occurrence  PLS_INTEGER := 1,
 *                       returnparam PLS_INTEGER := 0,
 *                       modifier    VARCHAR2 DEFAULT NULL)
 *      return PLS_INTEGER;
 */
void      pevm_REGEXP_INSTR_CLB(void *ctx, void *srcloc, void *patloc,
                                void *posloc, void *occurloc,
                                void *retfloc, void *dst);

void      pevm_REGEXP_INSTR_CLB2(void *ctx, void *srcloc, void *patloc,
                                 void *posloc, void *occurloc,
                                 void *retfloc, void *subexploc, void *dst);

/*
 * function REGEXP_SUBSTR(srcstr      CLOB CHARACTER SET ANY_CS,
 *                        pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                        position    PLS_INTEGER := 1,
 *                        occurrence  PLS_INTEGER := 1,
 *                        modifier    VARCHAR2 DEFAULT NULL)
 *      return CLOB CHARACTER SET srcstr%CHARSET;
 */
void      pevm_REGEXP_SUBSTR_CLB(void *ctx, void *srcloc, void *patloc,
                                 void *posloc, void *occurloc, void *dst);

void      pevm_REGEXP_SUBSTR_CLB2(void *ctx, void *srcloc, void *patloc,
                                  void *posloc, void *occurloc, void *subexploc,
                                  void *dst);

/*
 * function REGEXP_REPLACE(srcstr      CLOB CHARACTER SET ANY_CS,
 *                         pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         replacestr  CLOB CHARACTER SET srcstr%CHARSET,
 *                         position    PLS_INTEGER := 1,
 *                         occurrence  PLS_INTEGER := 0,
 *                         modifier    VARCHAR2 DEFAULT NULL)
 *       return CLOB CHARACTER SET srcstr%CHARSET;
 */
void      pevm_REGEXP_REPLACE_CLB(void *ctx, void *srcloc, void *patloc,
                                  void *reploc, void *posloc, void *occurloc,
                                  void *dst);

/*
 * function REGEXP_REPLACE(srcstr      CLOB CHARACTER SET ANY_CS,
 *                         pattern     VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         replacestr  VARCHAR2 CHARACTER SET srcstr%CHARSET,
 *                         position    PLS_INTEGER := 1,
 *                         occurrence  PLS_INTEGER := 0,
 *                         modifier    VARCHAR2 DEFAULT NULL)
 *       return CLOB CHARACTER SET srcstr%CHARSET;
 */
void      pevm_REGEXP_REPLACE_CLB2(void *ctx, void *srcloc, void *patloc,
                                   void *reploc, void *posloc, void *occurloc,
                                   void *dst);

/* Compile REGEXP pattern */
void      pevm_RCPAT(void *ctx, void *patloc, void *cflagloc, ub1 lobflag,
                     void *dst);

void      pevm_INSI_RCPAT(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                        ub1 regs);

/* Move REGEXP pattern */
void      pevm_MOVRPAT (void *ctx, void *src, void *dst);

void      pevm_INSERT(void *ctx, void *src1, void *src2, ub2 col_cnt);
void      pevm_INSBEG(void *ctx, void *src1, void *src2, 
                      void *src3, ub2 col_cnt);
void      pevm_INSROW(void *ctx, void *src1, void *src2, ub2 col_cnt);
void      pevm_INSEND(void *ctx, void *src1, void *src2);
void      pevm_DSELBEG(void *ctx, void *src1, void *src2, ub2 col_cnt); 
void      pevm_DSELEND(void *ctx, void *src1, void *src2); 
pevm_excs   pevm_DSELBYRID(void *ctx, void *src1, void *src2, void *src3);
pevm_excs   pevm_DSELNEXT(void *ctx, void *src1, void *src2);
pevm_excs   pevm_DSELRONEXT(void *ctx, void *src1, void *src2,
                            void *xsrc1, void *xsrc2);

void      pevm_XSELBEG(void *ctx, void *src1, void *src2, ub2 col_cnt); 
void      pevm_XSELEND(void *ctx, void *src1, void *src2); 
pevm_excs   pevm_XSELNEXT(void *ctx, void *src1, void *src2);
void      pevm_STMBEG(void *ctx, void *src1, void *src2);
void      pevm_STMEND(void *ctx, void *src1);
void      pevm_UPDATE(void *ctx, void *src1, void *src2, ub2 col_cnt); 

void      pevm_INSI_STM(void *ctx, void *hdl, plsmut *mptr, void *dptr,
                            ub2 flags);

/* Raise an exception */

void pevm_RAISE_JUMP(void *ctx);

void pevm_IS_JSON(void *ctx, void *jexpr, ub4 flags, void *dst);
void pevm_JSON_ARRAY(void *ctx, ub2 argc, void **argv, void *retformat,
                     ub4 flags, void *dst);
void pevm_JSON_CVTBC(void *ctx, void const *src1, void *dst);
void pevm_JSON_EXISTS(void *ctx, void *jexpr, void *pathexpr, ub4 flags,
                      void *dst);
void pevm_JSON_OBJECT(void *ctx, ub2 argc, void **argv, void *retformat,
                      ub4 flags, void *dst);
void pevm_JSON_QUERY(void *ctx, void *jexpr, void *pathexpr, ub4 flags,
                     void *dst);
void pevm_JSON_VALUE(void *ctx, void *jexpr, void *pathexpr, void *retformat,
                     void *defexpr, ub4 flags, void *dst);

/*---------------------------------------------------------------------------
                          PRIVATE FUNCTIONS
 ---------------------------------------------------------------------------*/


/* DON'T ADD ANY PRIVATE FUNCTIONS TO THIS FILE. THIS FILE IS SHIPPED
 * FOR PL/SQL NCOMP. ADD PRIVATE FUNCTIONS TO pvm0.h.
 */


#endif                                              /* PEVM_ORACLE */

OHA YOOOO