ogr_oci.h

来自「支持各种栅格图像和矢量图像读取的库」· C头文件 代码 · 共 540 行 · 第 1/2 页

H
540
字号
/****************************************************************************** * $Id: ogr_oci.h 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  Oracle Spatial Driver * Purpose:  Oracle Spatial OGR Driver Declarations.  * Author:   Frank Warmerdam <warmerdam@pobox.com> * ****************************************************************************** * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************/#ifndef _OGR_OCI_H_INCLUDED#define _OGR_OCI_H_INCLUDED#include "ogrsf_frmts.h"#include "oci.h"#include "cpl_error.h"/* -------------------------------------------------------------------- *//*      Low level Oracle spatial declarations.                          *//* -------------------------------------------------------------------- */#define TYPE_OWNER                 "MDSYS"#define SDO_GEOMETRY               "MDSYS.SDO_GEOMETRY"typedef struct {   OCINumber x;   OCINumber y;   OCINumber z;} sdo_point_type;typedef OCIArray sdo_elem_info_array;typedef OCIArray sdo_ordinate_array;typedef struct{   OCINumber      sdo_gtype;   OCINumber      sdo_srid;   sdo_point_type sdo_point;   OCIArray       *sdo_elem_info;   OCIArray       *sdo_ordinates;} SDO_GEOMETRY_TYPE;typedef struct{   OCIInd _atomic;   OCIInd x;   OCIInd y;   OCIInd z;} sdo_point_type_ind;typedef struct{   OCIInd                    _atomic;   OCIInd                    sdo_gtype;   OCIInd                    sdo_srid;   sdo_point_type_ind        sdo_point;   OCIInd                    sdo_elem_info;   OCIInd                    sdo_ordinates;} SDO_GEOMETRY_ind;#define ORA_GTYPE_MATCH(a,b)      ( ((a) % 1000) == ((b) % 1000))#define ORA_GTYPE_UNKNOWN         0#define ORA_GTYPE_POINT           1#define ORA_GTYPE_LINESTRING      2#define ORA_GTYPE_POLYGON         3#define ORA_GTYPE_COLLECTION      4#define ORA_GTYPE_MULTIPOINT      5#define ORA_GTYPE_MULTILINESTRING 6#define ORA_GTYPE_MULTIPOLYGON    7/************************************************************************//*                            OGROCISession                             *//************************************************************************/class CPL_DLL OGROCISession {  public:    OCIEnv     *hEnv;    OCIError   *hError;    OCISvcCtx  *hSvcCtx;    OCIDescribe*hDescribe;    OCIType    *hGeometryTDO;    OCIType    *hOrdinatesTDO;    OCIType    *hElemInfoTDO;    char       *pszUserid;    char       *pszPassword;    char       *pszDatabase;      public:             OGROCISession();    virtual ~OGROCISession();    int      EstablishSession( const char *pszUserid,                               const char *pszPassword,                               const char *pszDatabase );    int      Failed( sword nStatus, const char *pszFunction = NULL );            CPLErr   GetParmInfo( OCIParam *hParmDesc, OGRFieldDefn *poOGRDefn,                          ub2 *pnOCIType, ub4 *pnOCILen );    void     CleanName( char * );    OCIType *PinTDO( const char * );  private:    };OGROCISession CPL_DLL*OGRGetOCISession( const char *pszUserid,                  const char *pszPassword,                  const char *pszDatabase );/************************************************************************//*                           OGROCIStatement                            *//************************************************************************/class CPL_DLL OGROCIStatement {  public:                 OGROCIStatement( OGROCISession * );    virtual     ~OGROCIStatement();    OCIStmt     *GetStatement() { return hStatement; }    CPLErr       BindScalar( const char *pszPlaceName,                              void *pData, int nDataLen, int nSQLType,                             sb2 *paeInd = NULL );    CPLErr       BindObject( const char *pszPlaceName, void *pahObject,                             OCIType *hTDO, void **papIndicators );    char        *pszCommandText;    CPLErr       Prepare( const char * pszStatement );    CPLErr       Execute( const char * pszStatement,                          int nMode = -1 );    void         Clean();        OGRFeatureDefn *GetResultDefn() { return poDefn; }    char       **SimpleFetchRow();  private:        OGROCISession *poSession;    OCIStmt       *hStatement;    OGRFeatureDefn*poDefn;    char         **papszCurColumn;    char         **papszCurImage;    sb2          *panCurColumnInd;    int           nRawColumnCount;    int           *panFieldMap;};/************************************************************************//*                           OGROCIStringBuf                            *//************************************************************************/class OGROCIStringBuf {  char *pszString;  int  nLen;  int  nBufSize;  void UpdateEnd();public:    OGROCIStringBuf();    ~OGROCIStringBuf();    void MakeRoomFor( int );    void Append( const char * );    void Appendf( int nMax, const char *pszFormat, ... );    char *StealString();    char GetLast();    char *GetEnd() { UpdateEnd(); return pszString + nLen; }    char *GetString() { return pszString; }    void Clear();};/************************************************************************//*                             OGROCILayer                              *//************************************************************************/class OGROCIDataSource;    class OGROCILayer : public OGRLayer{  protected:    OGRFeatureDefn     *poFeatureDefn;    int                 iNextShapeId;    OGROCIDataSource    *poDS;    char               *pszQueryStatement;    int                 nResultOffset;    OGROCIStatement    *poStatement;    int                 ExecuteQuery( const char * );    SDO_GEOMETRY_TYPE  *hLastGeom;    SDO_GEOMETRY_ind   *hLastGeomInd;    char               *pszGeomName;    int                iGeomColumn;    char               *pszFIDName;    int                iFIDColumn;    OGRGeometry        *TranslateGeometry();    OGRGeometry        *TranslateGeometryElement( int nGType, int nDimension,                                                  int nEType,                                                  int nInterpretation,                                                  int nStartOrdinal,                                                  int nOrdCount);    int                 GetOrdinalPoint( int iOrdinal, int nDimension,                                         double *pdfX, double *pdfY,                                         double *pdfZ );  public:                        OGROCILayer();    virtual             ~OGROCILayer();    virtual void        ResetReading();    virtual OGRFeature *GetNextRawFeature();    virtual OGRFeature *GetNextFeature();    OGRFeatureDefn *    GetLayerDefn() { return poFeatureDefn; }    virtual int         TestCapability( const char * );    virtual const char *GetFIDColumn();    virtual const char *GetGeometryColumn();    int                 LookupTableSRID();};/************************************************************************//*                         OGROCIWritableLayer                          *//************************************************************************/class OGROCIWritableLayer : public OGROCILayer{protected:    int                 nDimension;    int                 nSRID;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?