--
-- THE FUNCTIONS, PACKAGES AND TYPES SUPPLIED BY THIS PACKAGE AND ITS EXTERNAL
-- INTERFACE ARE RESERVED BY ORACLE AND ARE SUBJECT TO CHANGE IN FUTURE
-- RELEASES.  THIS PACKAGE MUST NOT BE MODIFIED BY THE CUSTOMER.  DOING SO
-- COULD CAUSE INTERNAL ERRORS AND SECURITY VIOLATIONS IN THE DBMS.
--
-- Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved. 
--
-- NAME
-- ordaspec.sql - ORDAudio specification
--
-- DESCRIPTION
-- MODIFIED (MM/DD/YY)
-- fechen    04/08/08 - add constructors
-- rabbott   08/27/07 - Merge alter into create clause
-- rabbott   08/28/07 - compile specification only
-- fechen    12/11/06 - remove pragma for getcontentlength 
-- rchopra   08/11/04 - add NULL_SOURCE exception 
-- fechen    06/17/04 - remove deprecated methods 
-- smavris   05/12/04 - Move exceptions here 
-- smavris   01/30/03 - Change to create type
-- virao     08/06/01 - Remove SpeechMining methods
-- virao     06/25/01 - Changing audiomining to speechmining
-- virao     03/20/01 - Adding analyze method for AudioMining
-- smavris   03/02/01 - Remove / after alter
-- alandeck  01/31/01 - Removing openSource/closeSource due to overloading prob
-- alandeck  01/09/01 - Re-adding the openSource closeSource functions
-- alandeck  06/27/00 - Adding static methods for relational interface
-- smavris   04/28/00 - Fix upgrade bug
-- dmullen   11/02/99 - Add static funtions to act as constructors
-- smavris   09/30/99 - Make it work with sqlplus
-- rchatter  08/07/99 - adding getBFILE interface
-- dmullen   07/23/99 - Fix temp lob leaks
-- wklee     06/28/99 - fix alter types priviliges
-- wklee     06/24/99 - annotator implementation
-- rchatter  11/16/98 - making ctx changes
-- alsrivas  10/14/98 - dropping getSourceObject interface
-- alsrivas  09/01/98 - addin NOCOPY
-- alsrivas  08/26/98 - fixing code and comments
-- rchatter  08/11/98 - making changes for new attributes
-- alsrivas  07/29/98 - adding new attributes
-- rchatter  07/09/98 - fixing importFrom interface
-- alsrivas  06/11/98 - removing date attribute from audio
-- alsrivas  06/08/98 - updating
-- alsrivas  05/25/98 - adding review comments
-- alsrivas  05/11/98 - updating
-- alsrivas  05/11/98 - updating object interfaces
-- alsrivas  04/17/98 - updating
-- alsrivas  01/14/98 - removing left out code
-- alsrivas  01/05/98 - adding ORDAudio types
-- alsrivas  12/10/97 - Creation

CREATE TYPE ORDSYS.ORDAudio
TIMESTAMP '1998-05-18:10:00:00'
OID '2E8F6D4B0D790990E03400400B4066F3'
authid current_user
AS OBJECT
(
---------------------------
-- ATTRIBUTES
---------------------------
  description VARCHAR2(4000),
  source      ORDSource,
  format      VARCHAR2(31),
  mimeType    VARCHAR2(4000),
  comments    CLOB,
--
---------------------------
-- Audio Related Attributes
---------------------------
--
  encoding         VARCHAR2(256),
  numberOfChannels INTEGER,
  samplingRate     INTEGER,
  sampleSize       INTEGER,
  compressionType  VARCHAR2(4000),
  audioDuration    INTEGER, 
---------------------------
-- METHODS
---------------------------
  -- USER-DEFINED CONSTRUCTORS
--
-- Description:  Construct an ORDAudio object from a BLOB
-- Parameters:
--   data:      BLOB
--   setProperties: integer of value 0 or 1, determines if setProperties
--                  method is called in the constructor.  
--
  CONSTRUCTOR FUNCTION ORDAudio(SELF IN OUT NOCOPY ORDSYS.ORDAudio, 
    data             IN BLOB, 
    setProperties IN INTEGER DEFAULT 0
  ) RETURN SELF AS RESULT,
--
--
-- Description: Construct an ORDAudio object from a specified source.
-- By default, an empty local ORDAudio object is created. 
-- Parameters:
--   source_type: the type of the source. 
--                Allowed value: LOCAL(default), FILE, HTTP
--   source_location: the location of the source.
--   source_name: the name of the source.
--   setProperties: integer of value 0 or 1, determines if setProperties
--                  method is called in the constructor.  
--
  CONSTRUCTOR FUNCTION ORDAudio(SELF IN OUT NOCOPY ORDSYS.ORDAudio, 
    source_type       IN VARCHAR2 DEFAULT 'LOCAL',
    source_location   IN VARCHAR2 DEFAULT NULL,
    source_name       IN VARCHAR2 DEFAULT NULL,
    setProperties  IN INTEGER DEFAULT 0
  ) RETURN SELF AS RESULT,
  --
  -- CONSTRUCTORS
  STATIC FUNCTION init RETURN ORDAudio,
  STATIC FUNCTION init( srcType IN VARCHAR2,
            srcLocation IN VARCHAR2,
            srcName IN VARCHAR2 ) RETURN ORDAudio,
--
  -- DATE RELATED METHODS
  MEMBER FUNCTION  getUpdateTime RETURN DATE,
  PRAGMA RESTRICT_REFERENCES(getUpdateTime, WNDS, WNPS, RNDS, RNPS),
  MEMBER PROCEDURE setUpdateTime(SELF IN OUT NOCOPY ORDAudio,
                                 current_time DATE),
  --
  -- DESCRIPTION RELATED METHODS
  MEMBER PROCEDURE setDescription(SELF IN OUT NOCOPY ORDAudio,
                                  user_description IN VARCHAR2), 
  MEMBER FUNCTION  getDescription RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getDescription, WNDS, WNPS, RNDS, RNPS),
  --
  -- MIMETYPE RELATED METHODS
  MEMBER FUNCTION  getMimeType RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getMimeType, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setMimeType(SELF IN OUT NOCOPY ORDAudio,
                               mime IN VARCHAR2),
  --
  --
  -- SOURCE RELATED METHODS
  MEMBER FUNCTION  processSourceCommand(
                            SELF      IN OUT NOCOPY ORDAudio,
                            ctx       IN OUT RAW,
                            cmd       IN VARCHAR2,
                            arguments IN VARCHAR2,
                            result    OUT RAW)
                   RETURN RAW,
  --
  MEMBER FUNCTION  isLocal RETURN BOOLEAN,
  PRAGMA RESTRICT_REFERENCES(isLocal, WNDS, WNPS, RNDS, RNPS),
  MEMBER PROCEDURE setLocal(SELF IN OUT NOCOPY ORDAudio),
  MEMBER PROCEDURE clearLocal(SELF IN OUT NOCOPY ORDAudio),
  MEMBER PROCEDURE setSource(SELF IN OUT NOCOPY ORDAudio,
                             source_type     IN VARCHAR2, 
                             source_location IN VARCHAR2, 
                             source_name     IN VARCHAR2),
  MEMBER FUNCTION  getSource RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getSource, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION  getSourceType RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getSourceType, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION  getSourceLocation RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getSourceLocation, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION  getSourceName RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getSourceName, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE import(SELF IN OUT NOCOPY ORDAudio,
                          ctx IN OUT RAW),
  MEMBER PROCEDURE importFrom(SELF IN OUT NOCOPY ORDAudio,
                          ctx IN OUT RAW,
                          source_type IN VARCHAR2,
                          source_location IN VARCHAR2,
              source_name IN VARCHAR2),
  MEMBER PROCEDURE export(SELF IN OUT NOCOPY ORDAudio,
                          ctx      IN OUT RAW,
                          source_type     IN VARCHAR2,
                          source_location IN VARCHAR2,
                          source_name     IN VARCHAR2),
  MEMBER FUNCTION  getContentLength RETURN INTEGER,
  MEMBER FUNCTION  getContentLength(ctx IN OUT RAW) RETURN INTEGER,
  --
  -- This method will copy data in the LOB provided, if the data is not 
  -- stored in internal LOB it will be imported and returned in the LOB 
  -- provided
  MEMBER PROCEDURE getContentInLob(SELF IN OUT NOCOPY ORDAudio,
                                   ctx IN OUT RAW,
                                   dest_lob IN OUT NOCOPY BLOB,
                                   mimeType OUT VARCHAR2,
                                   format OUT VARCHAR2),
  --
  MEMBER FUNCTION  getContent RETURN BLOB,
  PRAGMA RESTRICT_REFERENCES(getContent, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE deleteContent(SELF IN OUT NOCOPY ORDAudio),
  --
  -- FILE OPERATIONS on the source
  MEMBER FUNCTION openSource(SELF IN OUT NOCOPY ORDAudio, 
                             userArg IN RAW,
                             ctx  OUT RAW) RETURN INTEGER,
  --
  MEMBER FUNCTION closeSource(SELF IN OUT NOCOPY ORDAudio, ctx IN OUT RAW) 
  RETURN INTEGER,
  --
  MEMBER FUNCTION trimSource(SELF IN OUT NOCOPY ORDAudio, ctx IN OUT RAW, 
                             newlen IN INTEGER) RETURN INTEGER,
  --
  MEMBER PROCEDURE readFromSource(SELF IN OUT NOCOPY ORDAudio,
                                  ctx IN OUT RAW,
                                  startPos IN INTEGER,
                                  numBytes IN OUT INTEGER,
                                  buffer OUT RAW),
  --
  MEMBER PROCEDURE writeToSource(SELF IN OUT NOCOPY ORDAudio,
                                 ctx IN OUT RAW,
                                 startPos IN INTEGER,
                                 numBytes IN OUT INTEGER,
                                 buffer IN RAW),
  --
  -- AUDIO ATTRIBUTES RELATED METHOD
  MEMBER PROCEDURE setFormat(SELF IN OUT NOCOPY ORDAudio,
                             knownFormat IN VARCHAR2),
  MEMBER FUNCTION  getFormat RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setEncoding(SELF IN OUT NOCOPY ORDAudio,
                               knownEncoding IN VARCHAR2),
  MEMBER FUNCTION  getEncoding RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getEncoding, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setNumberOfChannels(SELF IN OUT NOCOPY ORDAudio,
                                       knownNumberOfChannels IN INTEGER),
  MEMBER FUNCTION  getNumberOfChannels RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(getNumberOfChannels, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setSamplingRate(SELF IN OUT NOCOPY ORDAudio,
                                   knownSamplingRate IN INTEGER),
  MEMBER FUNCTION  getSamplingRate RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(getSamplingRate, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setSampleSize(SELF IN OUT NOCOPY ORDAudio,
                                 knownSampleSize IN INTEGER),
  MEMBER FUNCTION  getSampleSize RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(getSampleSize, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setCompressionType(SELF IN OUT NOCOPY ORDAudio,
                                      knownCompressionType IN VARCHAR2),
  MEMBER FUNCTION  getCompressionType RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(getCompressionType, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setAudioDuration(SELF IN OUT NOCOPY ORDAudio,
                                    knownAudioDuration IN INTEGER),
  MEMBER FUNCTION  getAudioDuration RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(getAudioDuration, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION getBFILE RETURN BFILE,
  PRAGMA RESTRICT_REFERENCES(getBFILE, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER PROCEDURE setKnownAttributes( SELF IN OUT NOCOPY ORDAudio,
                                       knownFormat IN VARCHAR2,
                                       knownEncoding IN VARCHAR2,
                                       knownNumberOfChannels IN INTEGER,
                                       knownSamplingRate IN INTEGER,
                                       knownSampleSize IN INTEGER,
                                       knownCompressionType IN VARCHAR2,
                                       knownAudioDuration IN INTEGER), 
  --
  -- Format processor must set all the properties
  MEMBER PROCEDURE setProperties(SELF IN OUT NOCOPY ORDAudio, 
                                 ctx IN OUT RAW,
                                 setComments IN BOOLEAN),
  --
  -- Format processor will get a copy of the SELF, they should
  -- check the validity of the properties and return TRUE if the
  -- properties are Ok, FALSE otherwise
  MEMBER FUNCTION checkProperties(SELF IN OUT NOCOPY ORDAudio, ctx IN OUT RAW) 
  RETURN BOOLEAN,
  --
  MEMBER FUNCTION  getAttribute(ctx IN OUT RAW,
                                name IN VARCHAR2) RETURN VARCHAR2,
  --
  MEMBER PROCEDURE getAllAttributes(SELF IN OUT NOCOPY ORDAudio,
                                    ctx IN OUT RAW, 
                                    attributes IN OUT NOCOPY CLOB),
  --
  --
  -- AUDIO PROCESSING METHODS
  MEMBER FUNCTION  processAudioCommand(
                                 SELF      IN OUT NOCOPY ORDAudio,
                                 ctx       IN OUT RAW,
                                 cmd       IN VARCHAR2,
                                 arguments IN VARCHAR2,
                                 result    OUT RAW)
                   RETURN RAW,
  --
  --
  -- Static Methods for the relational functional interface
  STATIC PROCEDURE export(ctx             IN OUT RAW,
                          local_data      IN BLOB,
                          source_type     IN VARCHAR2,
                          source_location IN VARCHAR2,
                          source_name     IN VARCHAR2),
  --
  STATIC PROCEDURE importFrom(ctx             IN OUT RAW,
                              local_data      IN OUT NOCOPY BLOB,
                              source_type     IN VARCHAR2,
                              source_location IN VARCHAR2,
                              source_name     IN VARCHAR2),
  --
  STATIC PROCEDURE importFrom(ctx             IN OUT RAW,
                              local_data      IN OUT NOCOPY BLOB,
                              source_type     IN VARCHAR2,
                              source_location IN VARCHAR2,
                              source_name     IN VARCHAR2,
                              format          OUT VARCHAR2,
                              mime_type       OUT VARCHAR2),
  --
  STATIC PROCEDURE getProperties(ctx            IN OUT RAW,
                                 audioBlob      IN BLOB,
                                 attributes     IN OUT NOCOPY CLOB,
                                 format            IN VARCHAR2),
  --
  STATIC PROCEDURE getProperties(ctx              IN OUT RAW,
                                 audioBlob        IN BLOB,
                                 attributes       IN OUT NOCOPY CLOB,
                                 mimeType         OUT VARCHAR2,
                                  format           IN OUT VARCHAR2,
                                 encoding         OUT VARCHAR2,
                                 numberOfChannels OUT INTEGER,
                                 samplingRate     OUT INTEGER,
                                 sampleSize       OUT INTEGER,
                                 compressionType  OUT VARCHAR2,
                                 audioDuration    OUT INTEGER),
 --
  STATIC PROCEDURE getProperties(ctx            IN OUT RAW,
                                 audioBfile     IN OUT NOCOPY BFILE,
                                 attributes     IN OUT NOCOPY CLOB,
                                 format            IN VARCHAR2),
  --
  STATIC PROCEDURE getProperties(ctx                IN OUT RAW,
                                 audioBfile         IN OUT NOCOPY BFILE,
                                 attributes         IN OUT NOCOPY CLOB,
                                 mimeType         OUT VARCHAR2,
                                 format           IN OUT VARCHAR2,
                                 encoding         OUT VARCHAR2,
                                 numberOfChannels OUT INTEGER,
                                 samplingRate     OUT INTEGER,
                                 sampleSize       OUT INTEGER,
                                 compressionType  OUT VARCHAR2,
                                 audioDuration    OUT INTEGER),
  --
  -- BEGIN DEPRECATION 
  --

  --
  -- These methods are deprecated in Oracle Database 9i Release 1 (9.0.1)
  --
  MEMBER PROCEDURE setProperties(SELF IN OUT NOCOPY ORDAudio, ctx IN OUT RAW),
  --
  MEMBER PROCEDURE appendToComments(SELF IN OUT NOCOPY ORDAudio,
                                    amount IN BINARY_INTEGER, 
                                    buffer IN VARCHAR2),
  --
  MEMBER PROCEDURE writeToComments(SELF IN OUT NOCOPY ORDAudio,
                                   offset IN INTEGER, 
                                   amount IN BINARY_INTEGER, 
                                   buffer IN VARCHAR2),
  --
  MEMBER FUNCTION readFromComments(offset IN INTEGER,
                                   amount IN BINARY_INTEGER := 32767)
         RETURN VARCHAR2,
  PRAGMA RESTRICT_REFERENCES(readFromComments, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION locateInComments(pattern IN VARCHAR2,
                                   offset IN INTEGER := 1,
                                   occurrence IN INTEGER := 1)
         RETURN INTEGER,
  --
  MEMBER PROCEDURE trimComments(SELF IN OUT NOCOPY ORDAudio,
                                newlen IN INTEGER),
  --
  MEMBER PROCEDURE eraseFromComments(SELF IN OUT NOCOPY ORDAudio,
                                     amount IN OUT NOCOPY INTEGER,
                                     offset IN            INTEGER := 1),
  --
  MEMBER PROCEDURE deleteComments(SELF IN OUT NOCOPY ORDAudio),
  --
  MEMBER PROCEDURE loadCommentsFromFile(SELF IN OUT NOCOPY ORDAudio,
                                        fileobj IN BFILE,
                                        amount IN INTEGER,
                                        from_loc IN INTEGER := 1,
                                        to_loc IN INTEGER := 1),
  --
  MEMBER PROCEDURE copyCommentsOut( SELF IN OUT NOCOPY ORDAudio,
                                    dest IN OUT NOCOPY CLOB,
                                    amount IN INTEGER,
                                    from_loc IN INTEGER := 1,
                                    to_loc IN INTEGER := 1),
  --
  MEMBER FUNCTION compareComments(compare_with_lob IN CLOB,
                                  amount IN INTEGER:= 4294967295,
                                  starting_pos_in_comment IN INTEGER := 1,
                                  starting_pos_in_compare IN INTEGER := 1) 
         RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(compareComments, WNDS, WNPS, RNDS, RNPS),
  --
  MEMBER FUNCTION getCommentLength RETURN INTEGER,
  PRAGMA RESTRICT_REFERENCES(getCommentLength, WNDS, WNPS, RNDS, RNPS)

  --
  -- END DEPRECATION 
  --
);
/
show errors;



CREATE OR REPLACE PACKAGE ORDAudioExceptions
AS
  AUDIO_PLUGIN_EXCEPTION      EXCEPTION;
  INVALID_DESCRIPTION         EXCEPTION;
  DESCRIPTION_IS_NOT_SET      EXCEPTION;
  INVALID_MIME_TYPE           EXCEPTION;
  METHOD_NOT_SUPPORTED        EXCEPTION;
  NULL_INPUT_VALUE            EXCEPTION;
  AUDIO_FORMAT_IS_NULL        EXCEPTION;
  AUDIO_ENCODING_IS_NULL      EXCEPTION;
  AUDIO_NUM_CHANNELS_IS_NULL  EXCEPTION;
  AUDIO_SAMPLING_RATE_IS_NULL EXCEPTION;
  AUDIO_SAMPLE_SIZE_IS_NULL   EXCEPTION;
  AUDIO_DURATION_IS_NULL      EXCEPTION;
  LOCAL_DATA_SOURCE_REQUIRED  EXCEPTION;
  NULL_LOCAL_DATA             EXCEPTION;
  NULL_SOURCE                 EXCEPTION;
END;
/
show errors;