| TerraLib 4.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Examples

- File List
- File Members

E:/Projetos_Primeiro_Semestre_2012/TerraView/terralib/src/terralib/kernel/TeDatabase.h
Go to the documentation of this file.

    00001 /************************************************************************************
    00002 TerraLib - a library for developing GIS applications.
    00003 Copyright � 2001-2007 INPE and Tecgraf/PUC-Rio.
    00004
    00005 This code is part of the TerraLib library.
    00006 This library is free software; you can redistribute it and/or
    00007 modify it under the terms of the GNU Lesser General Public
    00008 License as published by the Free Software Foundation; either
    00009 version 2.1 of the License, or (at your option) any later version.
    00010
    00011 You should have received a copy of the GNU Lesser General Public
    00012 License along with this library.
    00013
    00014 The authors reassure the license terms regarding the warranties.
    00015 They specifically disclaim any warranties, including, but not limited to,
    00016 the implied warranties of merchantability and fitness for a particular purpose.
    00017 The library provided hereunder is on an "as is" basis, and the authors have no
    00018 obligation to provide maintenance, support, updates, enhancements, or modifications.
    00019 In no event shall INPE and Tecgraf / PUC-Rio be held liable to any party for direct,
    00020 indirect, special, incidental, or consequential damages arising out of the use
    00021 of this library and its documentation.
    00022 *************************************************************************************/
    00026 #ifndef  __TERRALIB_INTERNAL_DATABASE_H
    00027 #define  __TERRALIB_INTERNAL_DATABASE_H
    00028
    00029 #if defined(_MSC_VER) /* MSVC Compiler */
    00030 #pragma warning(disable: 4786)
    00031 #endif
    00032
    00033
    00034 #include "TeDefines.h"
    00035 #include "TeDataTypes.h"
    00036 #include "TeTable.h"
    00037 #include "TeGeometry.h"
    00038 #include "TeStatistics.h"
    00039 #include "TeProject.h"
    00040 #include "TeRaster.h"
    00041 #include "TeView.h"
    00042 #include "TeVisual.h"
    00043 #include "TeMetaModelCache.h"
    00044 #include "TeSharedPtr.h"
    00045 #include "TeDatabaseIndex.h"
    00046 #include "TeConnection.h"
    00047
    00048 class TeLayer;
    00049 class TeDatabaseFactoryParams;
    00050 class TeRasterParams;
    00051 class TeTheme;
    00052 class TeTime;
    00053 class TeTimeInterval;
    00054
    00055 #include <set>
    00056 #include <string>
    00057 //using namespace std;
    00058
    00059
    00063 enum TeCursorLocation { TeCLIENTESIDE, TeSERVERSIDE };
    00064
    00068 enum TeCursorType { TeUNIDIRECTIONAL, TeBIDIRECTIONAL, TeRANDOMACCESS };
    00069
    00073 enum TeCursorEditType { TeREADONLY, TeREADWRITE };
    00074
    00078 enum TeCursorDataType { TeBINARYCURSOR, TeTEXTCURSOR };
    00079
    00080
    00084 enum TeSpatialIndexType {TeRTREE, TeQUADTREE};
    00085
    00087 typedef vector<string>                                            TeKeys;
    00088
    00090 typedef map<string, double>                            TeKeysToDist;
    00091
    00093 typedef vector<TeGeometry*> TeGeometryVect;
    00094
    00096 typedef map<string, TeStatisticsDimensionVect>  TeObjectStatistics;
    00097
    00098
    00099 class TeDatabasePortal;
    00100
    00101
    00103
    00118 class TL_DLL TeDatabase
    00119 {
    00120 public:
    00122            TeDatabase();
    00123
    00125            virtual ~TeDatabase();
    00126
    00128            virtual TeDatabase& operator=(const TeDatabase& other);
    00129
    00131            virtual bool operator== (const TeDatabase& other) const
    00132            {
    00133                       if (dbmsName_ != other.dbmsName_ ||
    00134                                  database_ != other.database_ ||
    00135                                  host_  != other.host_ ||
    00136                                  user_ != other.user_ )
    00137                                  return false;
    00138                       return true;
    00139            }
    00140
    00141
    00146
    00148     virtual void setConnection(TeConnection* c);
    00149
    00153     virtual TeConnection* getConnection();
    00154
    00156
    00161
    00162            virtual string errorMessage ()
    00163            { return errorMessage_; }
    00164
    00166            virtual int           errorNum ()
    00167            {          return errorNumber_; }
    00168
    00170            string     user ()
    00171            { return user_; }
    00172
    00174            void user(string value) { user_=value;}
    00175
    00177            string     host ()
    00178            { return host_; }
    00179
    00181            string     password ()
    00182            { return password_; }
    00183
    00185            string     databaseName ()
    00186            { return database_; }
    00187
    00189            string     dbmsName ()
    00190            { return dbmsName_; }
    00191
    00193            int        portNumber ()
    00194            { return portNumber_; }
    00195
    00197            TeLayerMap&           layerMap ()
    00198            { return metaModel_->layerMap(); }
    00199
    00201            TeViewMap& viewMap ()
    00202            { return metaModel_->viewMap(); }
    00203
    00205            TeThemeMap&           themeMap ()
    00206            { return metaModel_->themeMap(); }
    00207
    00209            TeThemeMap&           invalidThemeMap()
    00210            { return metaModel_->invalidThemeMap(); }
    00211
    00213            TeProjectMap&  projectMap ()
    00214    { return metaModel_->projectMap(); }
    00215
    00217            TeLegendEntryMap& legendMap ()
    00218            { return metaModel_->legendMap(); }
    00219
    00221            multiset<int>& relationMSet ()
    00222            { return metaModel_->relationMSet(); }
    00223
    00225            virtual void clear();
    00226
    00228
    00235
    00236            virtual bool newDatabase(const string& database, const string& user, const string& password, const string& host, const int &port=-1, bool terralibModel=true, const std::string& characterSet = "") = 0;
    00237
    00239            virtual bool connect (const string& host, const string& user, const string& password, const string& database, int port = -1) = 0;
    00240
    00242            virtual bool showDatabases (const string& /* host */, const string& /* user */, const string& /* password */, vector<string>& /* dbNames */ , int /* port */ = -1)
    00243            { return true; }
    00244
    00246            virtual bool connect (const string&  = "") { return false; };
    00247
    00249            bool isConnected ()
    00250            { return isConnected_; }
    00251
    00253            virtual void close() = 0;
    00254
    00256            /*
    00257                       The expected return value is similar to: dbms_server;hostname;portnumber;databasename;user;password
    00258            */
    00259            virtual string getDatabaseDescription();
    00260
    00261
    00266   static TeDatabase* DefaultObject( const TeDatabaseFactoryParams& )
    00267   {
    00268     std::cout << std::endl << "TeDatabase::DefaultObject - " <<
    00269       " - Trying to create an invalid TeDatabase default object." <<
    00270       std::endl;
    00271     throw;
    00272
    00273     return 0;
    00274   };
    00275
    00277
    00284
    00286            virtual bool listTables(vector<string>& /* tableList */) { return false; }
    00287
    00289            virtual bool listDatabases(std::vector<std::string> & /*databaseList*/) { return false; }
    00290
    00292            virtual bool dropDatabase(const std::string & /*databaseName*/) { return false;}
    00293
    00295            virtual bool tableExist(const string& table) = 0;
    00296
    00298            virtual bool columnExist(const string& table, const string& column, TeAttribute& attr) = 0;
    00299
    00301            virtual bool allowEmptyString(const string& /* tableName */, const string& /* column */) { return false; }
    00302
    00304            virtual bool validTable (TeTable& table);
    00305
    00307            string getTableName(int tableId);
    00308
    00310            string getNewTableName(const string& n);
    00311
    00313
    00316            virtual string getConcatFieldsExpression(const vector<string>& fNamesVec);
    00317
    00319
    00323            virtual bool createTable(const string& table, TeAttributeList &attr) = 0;
    00324
    00326             virtual bool deleteTable (const string& table);
    00327
    00329
    00333            virtual bool addColumn (const string& table, TeAttributeRep &rep) = 0;
    00334
    00336
    00340            virtual bool deleteColumn (const string& table, const string& colName);
    00341
    00343
    00351            virtual bool createRelation (const string& relName, const string& table, const string& fieldName,
    00352                                                                   const string& relatedTable, const string& relatedField, bool cascadeDeletion) = 0;
    00353
    00355
    00359            virtual TeDBRelationType existRelation(const string& tableName, const string& relName) = 0;
    00360
    00362
    00367            virtual bool deleteRelation(const string& name, const string& table);
    00368
    00370
    00375
    00376            virtual bool execute ( const string &sql) = 0;
    00377
    00379
    00383            virtual TeDatabasePortal* getPortal () = 0;
    00384
    00386            virtual bool inClauseValues(const string& query , const string& attribute, vector<string>& inClauseVector);
    00387
    00389
    00395
    00396            /*
    00397       \param withIntegrity flag that indicates that the referencial integrity should be implemented.
    00398              \param createIndex flag that indicate that the indexes should be created
    00399            */
    00400            virtual bool createConceptualModel(bool withIntegrity = true, bool newDatabase = true, bool createIndex = true);
    00401
    00403            virtual bool defineIntegrity(void);
    00404
    00406            virtual bool createIndex(const string& tableName, const string& indexName, const string& columnsName);
    00407
    00409            virtual bool deleteIndex(const string& tableName, const string& indexName);
    00410
    00412            virtual bool getIndexesFromTable(const string& tableName, std::vector<TeDatabaseIndex>& vecIndexes);
    00413
    00415            virtual bool createDatabaseTable();
    00416
    00418            virtual bool createDatumTable();
    00419
    00421            virtual bool createProjectionTable();
    00422
    00424            virtual bool createSRSTable();
    00425
    00427            virtual bool createLayerTable ();
    00428
    00430            virtual bool createRepresentationTable ();
    00431
    00433            virtual bool createViewTable ();
    00434
    00436            virtual bool createThemeTable ();
    00437
    00439            virtual bool createGroupingTable();
    00440
    00442            virtual bool createThemeTablesTable();
    00443
    00445            virtual bool createLegendTable ();
    00446
    00448            virtual bool createVisualTable();
    00449
    00451            virtual bool createVisualRasterTable();
    00452
    00454            virtual bool createLayerTableTable();
    00455
    00457            virtual bool createTablesRelationTable();
    00458
    00460            virtual bool createProjectTable();
    00461
    00463            virtual bool createProjectViewTable();
    00465
    00470
    00471            virtual bool loadProjectSet();
    00472
    00474            virtual bool loadProject(TeProject* project);
    00475
    00477            virtual bool insertProject(TeProject *project) = 0;
    00478
    00480            virtual bool updateProject(TeProject *project);
    00481
    00483            virtual bool deleteProject(int projectId);
    00484
    00486            virtual bool insertProjectViewRel(int projectId, int viewId);
    00487
    00489            virtual bool deleteProjectViewRel(int projectId, int viewId);
    00490
    00492            virtual bool projectExist(const string& projectName);
    00494
    00499
    00501            virtual bool createPolygonGeometry (const string& tableName, const int& epsgCode = -1);
    00502
    00504            virtual bool createLineGeometry (const string& tableName, const int& epsgCode = -1);
    00505
    00507            virtual bool createPointGeometry (const string& tableName, const int& epsgCode = -1);
    00508
    00510            virtual bool createCellGeometry (const string& tableName, const int& epsgCode = -1);
    00511
    00513            virtual bool createTextGeometry (const string& tableName, const int& epsgCode = -1);
    00514
    00516            virtual bool createArcGeometry (const string& tableName, const int& epsgCode = -1);
    00517
    00519            virtual bool createNodeGeometry (const string& tableName, const int& epsgCode = -1);
    00520
    00522            virtual bool createRasterGeometry(const string& tableName);
    00523
    00525            virtual bool createRasterMetadataTable(const string& tableName);
    00526
    00528            virtual bool createRasterTable (const string& tableName);
    00529
    00531            virtual bool createCollectionTable(const string& tableName);
    00533
    00538
    00539            /*
    00540                       \param atts returning vector of tables information
    00541                       \param attType type of the tables that are being looked for (optional)
    00542                       \return TRUE if any table was found and FALSE otherwise
    00543            */
    00544            virtual bool getAttrTables(TeAttrTableVector& atts, TeAttrTableType attType = TeAllAttrTypes);
    00545
    00547            /*
    00548                       \param tableId table identification (from te_layer_table)
    00549                       \param tField link column name of the static table
    00550                       \param eTable name of the external table
    00551                       \param eField name of the link column of the related table
    00552                       \param relId returns the identification of the relation
    00553            */
    00554            virtual bool insertRelationInfo(const int tableId, const string& tField,
    00555                                                                                                    const string& rTable, const string& rField, int& relId) = 0;
    00556
    00558            virtual bool insertTableInfo (int layerId, TeTable &table, const string& user="") = 0;
    00559
    00561            virtual bool updateTableInfo (int layerId, TeTable &table, const string user="");
    00562
    00564            virtual bool loadTableInfo(TeTable& table);
    00565
    00567            virtual bool insertTable(TeTable &table);
    00568
    00570            virtual bool alterTable(const string& tableName, TeAttributeRep& rep, const string& oldColName="");
    00571
    00573            virtual bool alterTable(const string& oldTableName, const string& newTablename);
    00574
    00576            virtual bool insertBlob (const string& tableName, const string& columnBlob, TeAttributeRep& columnId, const string& valueId, unsigned char* data, int size);
    00577
    00579            virtual bool insertBlob (const string& tableName, const string& columnBlob, TeAttributeRep& columnId, const string& valueId, const string& fileName);
    00580
    00582            virtual bool insertBlob (const string& tableName, const string& columnBlob, const string& whereClause, unsigned char* data, int size) = 0;
    00583
    00585            virtual bool insertBlob (const string& tableName, const string& columnBlob, const string& whereClause, const string& fileName);
    00586
    00588            virtual bool updateTable         (TeTable &table);
    00589
    00591            virtual bool loadTable                      (const string& tableName, TeTable &table);
    00592
    00594            virtual bool selectTable         (const string& tableName, const string& criteria, TeTable &table);
    00595
    00597            virtual bool deleteLayerTable    (int layerId, TeAttrTableType ttype = TeAttrStatic);
    00599
    00604
    00606            virtual bool insertDatum(const TeDatum& datum);
    00607
    00609            virtual bool updateDatum(const TeDatum& datum);
    00610
    00612            virtual bool loadDatum(TeDatum& datum);
    00613
    00615            virtual void populateDatumTable();
    00616
    00618            virtual bool loadDatumSet();
    00619
    00621
    00626
    00628            virtual bool insertProjection(TeProjection* proj) = 0;
    00629
    00631            virtual bool insertSRSId(TeProjection* proj, int srsId);
    00632
    00634            virtual bool updateProjection(TeProjection *proj);
    00635
    00637            virtual bool updateSRSId(TeProjection* proj, int srsId);
    00638
    00640            virtual TeProjection* loadProjection(int id);
    00641
    00643            virtual TeProjection* loadProjectionFromSRSId(int srsid);
    00644
    00646            virtual bool deleteProjection(const unsigned int& projId);
    00647
    00649
    00654
    00655            virtual bool insertLayer         (TeLayer *layer) = 0;
    00656
    00658            virtual bool updateLayer         (TeLayer *layer);
    00659
    00661            /*
    00662                       \param loadAttrList  indicates if the attribute list of each attribute table should be loaded
    00663            */
    00664            virtual bool loadLayerSet        (const bool& loadAttrList = true);
    00665
    00667            /*
    00668                       \param layer                     a pointer to a layer that will be loaded from database
    00669                       \param loadAttrList indicates if the attribute list of each attribute table should be loaded
    00670            */
    00671            virtual bool loadLayer                      (TeLayer* layer, const bool& loadAttrList = true);
    00672
    00674            /*
    00675                       \param layer                     a pointer to a layer whose attribute table will be loaded from database
    00676                       \param loadAttrList indicates if the attribute list of each attribute table should be loaded
    00677            */
    00678            virtual bool loadLayerTable (TeLayer* layer, const bool& loadAttrList = true);
    00679
    00681            virtual bool deleteLayer         (int layerId);
    00682
    00684            virtual bool layerExist                     (int id);
    00685
    00687            virtual bool layerExist                     (string layerName);
    00688
    00690
    00694            virtual string getNewLayerName(const string& n);
    00696
    00701
    00702            virtual bool insertRepresentation (int layerId, TeRepresentation& rep) = 0;
    00703
    00705            virtual bool updateRepresentation (int layerId, TeRepresentation& rep);
    00706
    00708            virtual bool updateLayerBox(TeLayer* layer);
    00709
    00711
    00716
    00717
    00722            virtual bool insertRasterGeometry(const string& tableName, TeRasterParams& par, const string& objectId = "");
    00723
    00725
    00730            virtual bool updateRasterRepresentation(int layerId, TeRasterParams& par, const string& objectId="");
    00731
    00733
    00737            virtual string getRasterTable(int layerId, const string& objectId);
    00738
    00740
    00745            virtual bool insertRasterMetadata (const string& tableName, int geomId, TeRasterParams& par);
    00746
    00748
    00754            virtual bool updateRasterMetadata (const string& tableName, int geomId, TeRasterParams& par);
    00756
    00760
    00761            virtual bool insertView (TeView *view) = 0;
    00762
    00764            virtual bool updateView (TeView *view);
    00765
    00767            /*
    00768                       \param user                                  the user name
    00769                       \param loadAttrList  indicates if the attribute list of each attribute table should be loaded
    00770                       \param visualClass  identifies which concrete class od visual should be instantiated.
    00771                       The default is TerraLib basic visual.
    00772            */
    00773            virtual bool loadViewSet (const string& user, const bool& loadAttrList = true, const string& visualClass="tevisual");
    00774
    00776            /*
    00777                       \param view                                 a pointer to a view that will be loaded from database
    00778                       \param loadAttrList indicates if the attribute list of each attribute table should be loaded
    00779                       \param visualClass  identifies which concrete class od visual should be instantiated.
    00780                       The default is TerraLib basic visual.
    00781            */
    00782            virtual bool loadView (TeView* view, const bool& loadAttrList = true, const string& visualClass="tevisual");
    00783
    00785            virtual bool deleteView (int viewId);
    00786
    00788            virtual bool insertViewTree (TeViewTree *tree) = 0;
    00789
    00791            /*
    00792                       \param view                                 a pointer to a view that will be loaded from database
    00793                       \param id                        a specific theme or viewtree id of this view that will be loaded from database
    00794                       \param loadAttrList indicates if the attribute list of each attribute table should be loaded
    00795                       \param visualClass  identifies which concrete class od visual should be instantiated.
    00796                       The default is TerraLib basic visual.
    00797            */
    00798            virtual TeViewTree* loadViewTree(TeView* view, int id, const bool& loadAttrList = true, const string& visualClass = "tevisual");
    00799
    00801            virtual bool updateViewTree (TeViewTree *tree);
    00802
    00804            virtual bool viewExist(string viewName);
    00805
    00807
    00812
    00813            virtual bool insertThemeGroup    (TeViewTree* tree) = 0;
    00814
    00816            virtual bool insertTheme                    (TeAbstractTheme *theme) = 0;
    00817
    00819            virtual bool updateTheme                    (TeAbstractTheme *theme);
    00820
    00822            virtual bool loadTheme                                 (TeAbstractTheme *theme, const bool& loadAttrList = true, const string& visualClass = "tevisual");
    00823
    00825            virtual bool loadThemes                                (std::vector<TeAbstractTheme*>& vecThemes, const bool& loadAttrList, const std::string& userName, const bool& loadMetadata = true, const string& visualType = "tevisual");
    00826
    00828            virtual bool loadExternalThemes  (std::vector<TeAbstractTheme*>& vecExternalThemes);
    00829
    00831            virtual bool loadThemeTable                 (TeTheme* theme, const bool& loadAttrList = true);
    00832
    00834            virtual bool deleteThemeGroup    (int themeId);
    00835
    00837            virtual bool deleteTheme                    (int themeId);
    00838
    00840            virtual bool deleteLegend                   (int themeId);
    00841
    00843            bool insertThemeTable(TeTheme *theme, TeTable& inputTable);
    00844
    00846            virtual bool insertThemeTable    (int themeId, int tableId, int relationId, int tableOrder) = 0;
    00847
    00849            virtual bool updateThemeTable    (TeTheme *theme);
    00850
    00852            bool removeThemeTable(TeTheme *theme, int tableOrder);
    00853
    00855            virtual bool insertGrouping (int themeId, const TeGrouping& grouping);
    00856
    00858            virtual bool updateGrouping (int themeId, const TeGrouping& grouping);
    00859
    00861            virtual bool generateLabelPositions(TeTheme *theme, const std::string& objectId = "");
    00862
    00864            virtual bool themeExist(string themeName);
    00865
    00867            virtual bool themeExist(const std::string &viewName, const std::string &userName, const std::string &themeName);
    00868
    00870
    00874            virtual string getNewThemeName(const string& n);
    00875
    00877
    00882
    00883            virtual bool insertLegend        (TeLegendEntry *legend) = 0;
    00885            virtual bool updateLegend        (TeLegendEntry *legend);
    00886
    00887            virtual bool updateLegend   (vector<TeLegendEntry>& legVec);
    00888            virtual bool loadLegend                     (TeAbstractTheme *theme, const string& visualClass = "tevisual");
    00889            virtual bool updateVisual        (TeLegendEntry *legend);
    00890            virtual bool updateVisual   (vector<TeLegendEntry>& legVec);
    00892
    00897
    00898            virtual bool insertPolygonSet (const string& table, TePolygonSet &ps);
    00899
    00901            virtual bool updatePolygonSet (const string& table, TePolygonSet &ps);
    00902
    00904            virtual bool selectPolygonSet (const string& table, const string& criteria, TePolygonSet &ps);
    00905
    00907            virtual bool loadPolygonSet      (TeTheme* theme, TePolygonSet &ps);
    00908
    00910            virtual bool loadPolygonSet      (const string& table, const string& geoid, TePolygonSet &ps);
    00911
    00913            virtual bool loadPolygonSet      (const string& table, TeBox &box, TePolygonSet &ps);
    00914
    00916            /*
    00917                       \return A database portal pointer if there is any polygons inside the box
    00918                       \return A null pointer if there isn't polygons to iterate
    00919                       \note The database portal pointer should be deleted by the application
    00920            */
    00921            virtual TeDatabasePortal* loadPolygonSet(const string& table, TeBox &box);
    00922
    00924            virtual bool locatePolygon                  (const string& table, TeCoord2D &pt, TePolygon &polygon, const double& tol = 0.0);
    00925
    00927            virtual bool locatePolygonSet   (const string& table, TeCoord2D &pt, double tol, TePolygonSet &polygons);
    00928
    00930            virtual bool insertPolygon                  (const string& table, TePolygon &p) = 0;
    00931
    00933            virtual bool updatePolygon                  (const string& table, TePolygon &p) = 0;
    00935
    00940            // Accessing/Inserting line geometries into the database
    00941            virtual bool insertLineSet       (const string& table, TeLineSet &ls);
    00942            virtual bool updateLineSet       (const string& table,TeLineSet &ls);
    00943            virtual bool loadLineSet         (const string& table, const string& geoid, TeLineSet &ls);
    00944     virtual bool loadLineSet     (TeTheme* theme, TeLineSet &ls);
    00945            virtual bool loadLineSet         (const string& table, TeBox &box, TeLineSet &linSet);
    00946            virtual TeDatabasePortal*    loadLineSet (const string& table, TeBox &box);
    00947            virtual bool selectLineSet       (const string& table, const string& criteria, TeLineSet &ls);
    00948
    00949     virtual bool insertLine                 (const string& table, TeLine2D &l) = 0;
    00950            virtual bool updateLine                     (const string& table, TeLine2D &l) = 0;
    00951            virtual bool locateLine                     (const string& table, TeCoord2D &pt, TeLine2D &line, const double& tol = 0.0);
    00952            virtual bool locateLineSet       (const string& table, TeCoord2D &pt, TeLineSet & ls, const double& tol = 0.0);
    00953
    00955
    00960            // Accessing/Inserting point geometries into the database
    00961            virtual bool insertPointSet      (const string& table, TePointSet &ps);
    00962     virtual bool updatePointSet (const string& table, TePointSet &ps);
    00963            virtual bool loadPointSet        (const string& table, TeBox &box, TePointSet &ps);
    00964            virtual TeDatabasePortal* loadPointSet      (const string& table, TeBox &box);
    00965            virtual bool loadPointSet        (const string& table, const string& geoid, TePointSet &ps);
    00966            virtual bool loadPointSet        (TeTheme* theme, TePointSet &ps);
    00967            virtual bool selectPointSet (const string& table, const string& criteria, TePointSet &ps);
    00968
    00969     virtual bool insertPoint     (const string& table, TePoint &p) = 0;
    00970            virtual bool updatePoint         (const string& table, TePoint &p);
    00971            virtual bool locatePoint         (const string& table, TeCoord2D &pt, TePoint &point, const double& tol = 0.0);
    00972            virtual bool locatePointSet (const string& table, TeCoord2D &pt, TePointSet &pointSet, const double& tol=0.0);
    00974
    00979            // Accessing/Inserting text geometries into the database
    00980            virtual bool insertTextSet       (const string& table, TeTextSet &ts);
    00981            virtual bool updateTextSet       (const string& table, TeTextSet &ts);
    00982            virtual bool loadTextSet         (const string& table, const string& geoid, TeTextSet &ts);
    00983            virtual bool selectTextSet       (const string& table, const string& criteria, TeTextSet &ts);
    00984
    00985            virtual bool insertText                     (const string& table, TeText &t) = 0;
    00986            virtual bool updateText                     (const string& table, TeText &t);
    00987            virtual bool locateText                     (const string& table, TeCoord2D &pt, TeText &text, const double& tol = 0.0);
    00988            virtual bool locateTextSet       (const string& table, TeCoord2D &pt, TeTextSet &textSet, const double& tol = 0.0);
    00990
    00995
    00996            virtual bool insertArcSet        (const string& table, TeArcSet &as);
    00997
    00999            virtual bool updateArcSet        (const string& table, TeArcSet &as);
    01000
    01002            virtual bool loadArcSet                     (const string& table, const string& geoid, TeArcSet &as);
    01003
    01005            virtual bool insertArc                      (const string& table,TeArc &arc) = 0;
    01006
    01008            virtual bool updateArc                      (const string& table,TeArc &arc);
    01010
    01015            // Accessing/Inserting node geometries into the database
    01016            virtual bool insertNodeSet       (const string& table, TeNodeSet &ns);
    01017            virtual bool updateNodeSet       (const string& table, TeNodeSet &ns);
    01018            virtual bool loadNodeSet         (const string& table, const string& geoid, TeNodeSet &ps);
    01019
    01020            virtual bool insertNode                     (const string& table, TeNode &node) = 0;
    01021            virtual bool updateNode                     (const string& table, TeNode &node);
    01023
    01028            // Accessing/Inserting cell geometries into the database
    01029            virtual bool insertCellSet       (const string& table, TeCellSet &cs);
    01030            virtual bool updateCellSet       (const string& table, TeCellSet &cs);
    01031            virtual bool loadCellSet         (const int& layerId, const string& table, const string& geoid, TeCellSet &cs);
    01032            virtual bool selectCellSet       (const int& layerId, const string& table, const string& criteria, TeCellSet &cs);
    01033
    01034            virtual bool insertCell                     (const string& table, TeCell &c) = 0;
    01035            virtual bool updateCell                     (const string& table, TeCell &c);
    01036            virtual bool locateCell                     (const string& table, TeCoord2D &pt, TeCell &c, const double& tol = 0.0);
    01038
    01040            virtual bool removeGeometry(const string& tableName, const TeGeomRep& rep, const int& geomId);
    01041
    01043
    01054            virtual    bool insertRasterBlock(const string& table, const string& blockId, const TeCoord2D& ll, const TeCoord2D& ur, unsigned char *buf,unsigned long size, int band=0, unsigned int res=1, unsigned int subband=0) = 0;
    01055
    01057            virtual    bool insertVisual (TeLegendEntry *legend);
    01058
    01060            virtual bool insertRasterVisual (int themeId , TeRasterVisual* rasterVisual);
    01061
    01063            virtual TeRaster* loadLayerRaster(int layerId, const string& objectId="", const char& mode = 'r');
    01064
    01066            virtual bool createLUTTable(const string& name);
    01067
    01069            virtual bool loadRasterLUT(TeRasterParams* par);
    01070
    01072            virtual bool createSpatialIndex(const string& table, const string& columns, TeSpatialIndexType /*type*/ = TeRTREE,short /* level */ =0,short /* tile */ =0);
    01073
    01075            virtual bool insertMetadata(const string& /* table */, const string& /* column */, double /* tolx */, double /* toly */,TeBox &/* box */,short /* srid */ =0) { return true; };
    01076
    01078            virtual string getSpatialIdxColumn(TeGeomRep rep);
    01079
    01081            /*
    01082                       This method gives to the drivers the ability to update box columns, considering precision issues
    01083                       that are particular to the driver. The box should be stored in 4 columns (lower_x, lower_y, upper_x, upper_y)
    01084                       \param tableName table name
    01085                       \param keyColumnName name of the column that is primary key
    01086                       \param idValue key value of the row that should be updated
    01087                       \param box new box value
    01088            */
    01089    virtual bool updateBBox(const string& tableName, const string& keyColumnName, int keyValue, const TeBox& box);
    01090
    01091
    01096
    01110            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn,
    01111                       TeDatabasePortal *portal, int relate, const string& actCollTable="");
    01112
    01124            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn,
    01125                       const string& visGeomTable, TeGeomRep visRep, TeDatabasePortal *portal,
    01126                       int relate, const string& visCollTable="");
    01127
    01137            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeGeometry* geom,
    01138                       TeDatabasePortal *portal, int relate, const string& actCollTable="");
    01139
    01149            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn,
    01150                       TeKeys& actIdsOut, int relate, const string& actCollTable="");
    01151
    01163            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn,
    01164                       const string& visGeomTable, TeGeomRep visRep, TeKeys& visIdsOut, int relate,
    01165                       const string& visCollTable="", TeDatabase* = 0);
    01166
    01176            virtual bool spatialRelation(const string& actGeomTable, TeGeomRep actRep, TeGeometry* geom,
    01177                       TeKeys& actIdsOut, int relate, const string& actCollTable="");
    01179
    01191            virtual bool calculateArea(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn, double &area);
    01192
    01200            virtual bool calculateLength(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIdsIn, double &length);
    01201
    01209            virtual bool calculateDistance(const string& actGeomTable, TeGeomRep actRep, TeKeys& Ids, double& distance);
    01210
    01221            virtual bool calculateDistance(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01222                       const string& visGeomTable, TeGeomRep visRep, const string& objId2, double& distance);
    01223
    01233            virtual bool withinDistance(const string& actGeomTable, TeGeomRep actRep, const TeCoord2D& point,
    01234                       TeKeysToDist& IdsDistOut, const double& max_distance, const string& actCollTable="");
    01236
    01237
    01250            virtual bool buffer(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIds, TePolygonSet& bufferSet, double dist);
    01251
    01260            virtual bool centroid(const string& actGeomTable, TeGeomRep actRep, TePointSet& centroidSet, TeKeys actIds = vector<string>(), const string& actCollTable = "");
    01261
    01269            virtual bool convexHull(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIds, TePolygonSet& convexHullSet);
    01271
    01281            virtual bool nearestNeighbors(const string& actGeomTable, const string& actCollTable,
    01282                       TeGeomRep actRep, const string& objId1, TeKeys& actIdsOut, int numRes=1);
    01283
    01295            virtual bool nearestNeighbors(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01296                       const string& visGeomTable, const string& visCollTable,
    01297                       TeGeomRep visRep, TeKeys& visIdsOut, int numRes=1);
    01298
    01308            virtual bool nearestNeighbors(const string& actGeomTable, const string& actCollTable,
    01309                       TeGeomRep actRep, const string& objId1, TeDatabasePortal* portal, int numRes=1);
    01310
    01322            virtual bool nearestNeighbors(const string& actGeomTable, TeGeomRep actRep,
    01323                       const string& objId1, const string& visGeomTable, const string& visCollTable,
    01324                       TeGeomRep visRep, TeDatabasePortal* portal, int numRes=1);
    01325
    01330
    01338            virtual bool geomIntersection(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIds, TeGeometryVect& geomVect);
    01339
    01350            virtual bool geomIntersection(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01351                       const string& visGeomTable, TeGeomRep visRep, const string& objId2, TeGeometryVect& geomVect);
    01352
    01361            virtual bool geomDifference(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01362                       const string& objId2, TeGeometryVect& geomVect);
    01363
    01374            virtual bool geomDifference(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01375                       const string& visGeomTable, TeGeomRep visRep, const string& objId2, TeGeometryVect& geomVect);
    01376
    01384            virtual bool geomUnion(const string& actGeomTable, TeGeomRep actRep, TeKeys& actIds, TeGeometryVect& geomVect);
    01385
    01396            virtual bool geomUnion(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01397                       const string& visGeomTable, TeGeomRep visRep, const string& objId2, TeGeometryVect& geomVect);
    01398
    01407            virtual bool geomXOr(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01408                       const string& objId2, TeGeometryVect& geomVect);
    01409
    01420            virtual bool geomXOr(const string& actGeomTable, TeGeomRep actRep, const string& objId1,
    01421                       const string& visGeomTable, TeGeomRep visRep, const string& objId2, TeGeometryVect& geomVect);
    01423
    01435            virtual bool zonal(const string& rasterTable, const string& actGeomTable, TeKeys& Ids, TeObjectStatistics& result, const bool &useDummy=true);
    01436
    01444            virtual bool zonal(const string& rasterTable, const string& actGeomTable, const string& actCollTable, TeObjectStatistics& result, const bool &useDummy=true);
    01445
    01452            virtual bool zonal(const string& rasterTable, TePolygon& poly, TeStatisticsDimensionVect& result,const bool &useDummy=true);
    01453
    01462            virtual bool mask(const string& rasterTable, const string& actGeomTable, const string& objId, const string& nameLayerOut, TeStrategicIterator st);
    01463
    01471            virtual bool mask(const string& rasterTable, TePolygon& poly, const string& nameLayerOut, TeStrategicIterator st);
    01473
    01478
    01479            virtual string getSQLBoxWhere (const TeBox& box, const TeGeomRep rep, const std::string& tableName);
    01480
    01482            virtual string getSQLBoxWhere(const TeBox& box, const TeGeomRep rep, const std::string& tableName, const std::string& columnName);
    01483
    01486            virtual string getSQLBoxWhere (const string& table1, const string& table2, TeGeomRep rep2, TeGeomRep rep1 = TePOLYGONS);
    01487
    01489            virtual string getSQLBoxSelect (const string& tableName, TeGeomRep rep);
    01490
    01492            virtual std::string getSQLOrderBy(const TeGeomRep& rep) const;
    01493
    01495            virtual string getSQLStatistics (TeGroupingAttr& attrs);
    01496
    01498            virtual string getSQLAutoNumber(const string& table);
    01499
    01501            virtual string getSQLTemporalWhere (TeTimeInterval& /* timeInterval */, TeTemporalRelation /* timeOperator */, const string& /* initialTime */, const string& /* finalTime */ );
    01502
    01504            virtual string getSQLTemporalWhere (const string& temporalRest);
    01505
    01507            virtual string getSQLTemporalWhere(int /* time1 */, int /* time2 */, TeChronon /* chr */, TeTemporalRelation /* rel */, const string& /* initialTime */, const string& /* finalTime */);
    01508
    01510            virtual string getSQLTime(const TeTime& /* time */) const { return ""; };
    01511
    01513            virtual string getSQLTemporalFunction (TeChronon chr, const string& colName);
    01515
    01517            virtual bool getMBRGeom(string tableGeom, string object_id, TeBox& box, string colGeom);
    01518
    01520            virtual bool getMBRSelectedObjects(string geomTable,string colGeom, string fromClause,
    01521                       string whereClause, string afterWhereClause, TeGeomRep repType,TeBox &bout, const double& tol = 0.0);
    01522
    01524            virtual bool getAttributeList(const string& tableName,TeAttributeList& attList);
    01525
    01527            virtual string  escapeSequence(const string& from) = 0;
    01528
    01530            virtual TeBox getThemeBox(TeTheme* theme);
    01531
    01533            map<int, map<string, string> >& mapThemeAlias() {return metaModel_->mapThemeAlias();}
    01534
    01536            virtual string concatValues(vector<string>& values, const string& unionString) = 0;
    01537
    01539            virtual string toUpper(const string& value) = 0;
    01540
    01542            virtual string leftString(const string& /*name*/, const int& /*length*/){return "";}
    01543
    01545            virtual    bool updateVersionStamp(const string& version );
    01546
    01548            virtual    bool loadVersionStamp( string& version );
    01549
    01555
    01556    virtual bool beginTransaction();
    01557
    01559    virtual bool commitTransaction();
    01560
    01562    virtual bool rollbackTransaction();
    01564
    01566    virtual bool dropDBView(const string& dbViewName);
    01567
    01569    virtual std::string getClientEncoding()
    01570    { return ""; }
    01571
    01573    virtual bool setClientEncoding(const std::string& /*characterSet*/)
    01574    { return true; }
    01575
    01577    virtual bool getEncodingList(std::vector<std::string>& /*vecEncodingList*/)
    01578    { return true; }
    01579
    01581    virtual bool getEncodingList(const std::string& /*host*/, const std::string& /*user*/, const std::string& /*password*/, const int& /*port*/, std::vector<std::string>& /*vecEncodingList*/)
    01582    { return true; }
    01583
    01584
    01585 protected :
    01586
    01587            bool                                        isConnected_;
    01588 std::string                                            host_;
    01589         std::string                                    user_;
    01590         std::string                                    password_;
    01591         std::string                                    database_;
    01592            int                                                    portNumber_;
    01593            int                                                    errorNumber_;
    01594         std::string                                    errorMessage_;
    01595         std::string                                    dbmsName_;
    01596            TeSharedPtr<TeMetaModelCache> metaModel_;
    01597
    01599            void alterTableInfoInMemory(const string& updatedTableName, string oldTableName="");
    01600
    01601            int               transactionCounter_;
    01602
    01603 private:
    01604
    01605            TeDatabase(const TeDatabase& other);
    01606 };
    01607
    01609
    01614 class TL_DLL TeDatabasePortal {
    01615 protected:
    01616
    01617
    01618            TeDatabase*                      db_;
    01619            TeAttributeList       attList_;
    01620            int                                         numRows_;
    01621            int                                         numFields_;
    01622            string          errorMessage_;
    01623            int                                         errorNumber_;
    01624
    01625 public :
    01626
    01628            TeDatabasePortal ();
    01629
    01631            virtual ~TeDatabasePortal ();
    01632
    01634            TeDatabase* getDatabase()
    01635            { return db_; }
    01636
    01638            virtual bool query ( const string &qry, TeCursorLocation l = TeSERVERSIDE, TeCursorType t = TeUNIDIRECTIONAL, TeCursorEditType e = TeREADONLY, TeCursorDataType dt = TeTEXTCURSOR ) = 0;
    01639
    01641            virtual bool fetchRow () = 0;
    01642
    01644            virtual bool fetchRow (int i) = 0;
    01645
    01647            virtual void freeResult () = 0;
    01648
    01650            virtual string        errorMessage ()
    01651            { return errorMessage_; }
    01652
    01654            virtual int errorNum ()
    01655            { return errorNumber_; }
    01656
    01657 //         virtual bool loadNetwork (TeLayer *layer) = 0;
    01658
    01659 // specific SQL SELECT command methods
    01660
    01666            int numRows ()
    01667            { return numRows_;}
    01668
    01670            int numFields ()
    01671            { return numFields_; }
    01672
    01674            TeAttributeList& getAttributeList()
    01675            { return attList_; }
    01676
    01678            TeAttribute getAttribute (int i);
    01679
    01681            TeAttribute getAttribute (const string& s);
    01682
    01684            virtual char* getData (int i) = 0;
    01685
    01687            virtual char* getData (const string& s) = 0;
    01688
    01690            virtual double getDouble (int i);
    01691
    01693            virtual double getDouble (const string& s);
    01694
    01696            virtual int getInt (int i);
    01697
    01699            virtual int getInt (const string& s);
    01700
    01702            virtual bool getBool (const string& s) = 0;
    01703
    01705            virtual bool getBool (int i) = 0;
    01706
    01708            virtual TeTime getDate (int i) = 0;
    01709
    01711            virtual TeTime getDate (const string& s) = 0;
    01712
    01714            virtual string getDateAsString(int i) = 0;
    01715
    01717            virtual string getDateAsString(const string& s) = 0;
    01718
    01720            virtual bool getBlob(const string& s, unsigned char* &data, long& size) = 0;
    01721
    01723            int getColumnIndex (const string& s);
    01724
    01726            string getColumnName (int i);
    01727
    01733            virtual TeViewTree*              getViewTree ();
    01734            virtual TeLegendEntry getLegend();
    01735            virtual void                                getVisual(TeVisual*);
    01736            virtual bool                                getVisual(TeVisual* vis, TeGeomRep& rep, const unsigned int& initIndex);
    01737            virtual bool                                getRasterVisual(TeRasterVisual& vis, const unsigned int& initIndex=0);
    01738            virtual TeColor                             getColor();
    01739            virtual bool          getRasterBlock(unsigned long& size, unsigned char* ptData)=0;
    01740            virtual bool          getView(TeView& view, const unsigned int& initIndex=0);
    01741            virtual void          getDatum(TeDatum& datum, const unsigned int& initIndex=0);
    01742            virtual bool          getProjection(TeProjection** proj, const unsigned int& initIndex=0);
    01743            virtual void          getViewNodeParams (TeViewNodeParams& params, const unsigned int& initIndex=0);
    01744            virtual bool          getTheme(TeAbstractTheme& theme, const unsigned int& initIndex=0);
    01745            virtual bool          getGrouping(TeGrouping& group, const unsigned int& initIndex=0);
    01746            virtual bool          getLegend(TeLegendEntry& leg, const unsigned int& initIndex=0);
    01747            virtual bool          getAttrTable(TeTable& table, const unsigned int& initIndex=0);
    01748            virtual bool          getLayer(TeLayer& layer, const unsigned int& initIndex=0);
    01749            virtual bool          getRepresentation(TeRepresentation& rep, const unsigned int& initIndex=0);
    01750
    01752
    01762            virtual    bool fetchGeometry (TePolygon& geom) = 0;
    01763            virtual    bool fetchGeometry (TePolygon& geom, const unsigned int& initIndex);
    01764            virtual    bool fetchGeometry (TeLine2D& geom) = 0;
    01765            virtual    bool fetchGeometry (TeLine2D& geom, const unsigned int& initIndex);
    01766            virtual    bool fetchGeometry (TeNode& geom) = 0;
    01767            virtual    bool fetchGeometry (TeNode& geom, const unsigned int& initIndex);
    01768            virtual    bool fetchGeometry (TePoint& geom) = 0;
    01769            virtual    bool fetchGeometry (TePoint& geom, const unsigned int& initIndex);
    01770            virtual    bool fetchGeometry (TeCell& geom);
    01771            virtual    bool fetchGeometry (TeCell& geom, const unsigned int& initIndex);
    01772            virtual    bool fetchGeometry (TeArc& geom);
    01773            virtual    bool fetchGeometry (TeArc& geom, const unsigned int& initIndex);
    01774            virtual    bool fetchGeometry (TeText& geom);
    01775            virtual    bool fetchGeometry (TeText& geom, const unsigned int& initIndex);
    01777 };
    01778
    01779
    01781 /*
    01782            \params begin Iterator that p oints to the beginning of the collection
    01783            \params end Iterator that points to the end of the collection
    01784            \param db pointer to the database where the query expression will be applied
    01785            \param addPlicae flat to indicate that the character ' should enclose each string
    01786 */
    01787 template <typename Iterator>
    01788 vector<string>
    01789 generateInClauses(const Iterator& begin, const Iterator& end, TeDatabase* db, bool addPlicae=true)
    01790 {
    01791            int i, chunkSize = 200;
    01792            string inClause;
    01793            vector<string> inClauseVector;
    01794
    01795            Iterator temp = begin;
    01796            i = 0;
    01797            while (temp != end)
    01798            {
    01799                       if (i%chunkSize == 0)
    01800                       {
    01801                                  if (!inClause.empty())
    01802                                  {
    01803                                             inClause[inClause.size() - 1] = ')';
    01804                                             inClauseVector.push_back(inClause);
    01805                                             inClause.clear();
    01806                                  }
    01807                                  inClause = "(";
    01808                       }
    01809
    01810                       if (addPlicae)
    01811                                  inClause += "'" + db->escapeSequence(*temp) + "',";
    01812                       else
    01813                                  inClause += db->escapeSequence(*temp) + ",";
    01814                       i++;
    01815                       ++temp;
    01816            }
    01817            if (!inClause.empty())
    01818            {
    01819                       inClause[inClause.size() - 1] = ')';
    01820                       inClauseVector.push_back(inClause);
    01821            }
    01822            return inClauseVector;
    01823 }
    01824
    01825
    01848 #endif
    01849

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines