//////////////////////////////////////////////////////////////////////////// _ _ ____ ____// Project | | | | / ___) / ___)// | | | || | __ | |// | |_| || |_\ || \___// \____/ \____| \ ___) 6.0////! \file UGDatasetVectorMySQL.h//! \brief Class 的接口定义。//! \details 文件详细信息。//! \author cuiwenzhu//! \attention//! Copyright (c) 1996-2008 SuperMap Software Limited Company. <br>//! All Rights Reserved.//! \version 6.0//////////////////////////////////////////////////////////////////////////#if !defined(UGDatasetVectorMySQL_H)#define UGDatasetVectorMySQL_H#include "Engine/UGDatasetVector.h"#include "Stream/UGFileStream.h"#include "Toolkit/UGThread.h"#include "Toolkit/UGProgress.h"#include "MySQLCI/UGMyConnection.h"namespace UGC{class ENGINEMYSQL_API UGDatasetVectorMySQL : public UGDatasetVector{friend class UGEditRecordsetMySQL;friend class UGRecordsetMySQL;friend class UGSpatialIndexMySQL;public:enum ORCP_DT_OPTION{MYSQLP_DT_OPENED = 0x00000001,MYSQLP_DT_TRANSMODIFIED = 0x00000002,MYSQLP_DT_CHECKED_OUT = 0x00000004,MYSQLP_DT_LONGTRANS_REGISTED = 0x00000008};public://! \brief 默认构造函数UGDatasetVectorMySQL();//! \brief 默认数据源的构造函数UGDatasetVectorMySQL(UGDataSource *pDataSource);//! \brief 默认析构函数virtual ~UGDatasetVectorMySQL();public://! \brief 基类中定义的纯虚函数////! 追加记录,属性字段有对应关系,空间字段不处理////##ModelId=48203053017F//virtual UGbool Append(UGRecordset* pSrcRecordset,// UGArray<UGString> &strSrcFieldNames,// UGArray<UGString> &strDesFieldNames,// UGbool bShowProgress = TRUE,// UGString strTileName = "");//! \brief 向数据集追加记录。//! \param pSrcRecordset 源记录集指针[in]。//! \return 追加成功返回TRUE,失败返回FALSE。//##ModelId=48203053017Avirtual UGbool Append(UGRecordset* pSrcRecordset,UGbool bShowProgress = TRUE,UGString strTileName = _U(""));//! \brief 向数据集追加记录。//! \param pSrcRecordset 源记录集指针[in]。//! \return 追加成功返回TRUE,失败返回FALSE。//##ModelId=48203053017Avirtual UGbool Append(UGRecordset* pSrcRecordset,UGbool bShowProgress = TRUE,UGString strTileName = _U(""),UGArray<UGString> arrSrcFieldNames = UGArray<UGString>(),UGArray<UGString> arrDesFieldNames = UGArray<UGString>());//! \brief 通过记录集序号释放记录集内存空间。//! \param nIndex 记录集序号[in]。//! \return 是否释放成功,成功返回TRUE,失败返回FALSE。//##ModelId=4820305301A8virtual UGbool ReleaseRecordset(UGint nIndex);//! \brief 通过记录集指针释放记录集内存空间。//! \param *pRecordset 记录集指针[in]。//! \return 是否释放成功,成功返回TRUE,失败返回FALSE。//##ModelId=4820305301ABvirtual UGbool ReleaseRecordset(UGRecordset *pRecordset);//! \brief 通过ID数组删除数据集中的记录virtual UGbool DeleteRecords(const UGint* pIDs,UGint nCount);//! \brief 判断字段名是否有效。//! \param strFieldName 字段名[in]。//! \return 有效返回TRUE,无效返回FALSE。//##ModelId=4820305301BAvirtual UGbool IsAvailableFieldName(const UGString& strFieldName);//! \brief 设置字段的类别。//! \param strFieldName 字段名[in]。//! \param nSign 系统字段标识[in]。//! \return 设置成功返回TRUE,失败返回FALSE。//##ModelId=4820305301D4virtual UGbool SetFieldSign(const UGString& strFieldName,UGFieldInfo::FieldSign nSign);//! \brief 通过类别获取字段名//! \param nSign 系统字段标识[in]。//! \return 字段名。//##ModelId=4820305301CBvirtual UGString GetFieldNameBySign(UGFieldInfo::FieldSign nSign);//! \brief 取出数据集中某行特征要素。//! \param nID 数据集记录ID号[in]。//! \param pFeature 特征要素指针[in|out]在函数内分配内存,外面负责删除,否则会有内存泄漏。//! \return 成功返回Ture,失败返回 False。//##ModelId=48203053012Avirtual UGbool GetFeature(UGint nID, UGFeature*& pFeature);//! \brief 将特征要素更新到数据集中。//! \param pFeature 特征要素指针[in]。//! \return 是否保存成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203053012Dvirtual UGbool UpdateFeature(const UGFeature* pFeature);//! \brief 将特征要素追加到数据集未尾。//! \param pFeature 特征要素指针[in]。//! \return 是否追加成功,成功返回TRUE,失败返回FALSE。//! \remarks 追加时特征要素关联的数据集记录ID将不起作用。//##ModelId=482030530139virtual UGbool AddFeature(const UGFeature* pFeature);//! \brief 将特征要素从数据集中删除。//! \param nID 数据集记录ID号[in]。//! \return 是否删除成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203053013Cvirtual UGbool DeleteFeature(UGint nID);//! \breif 获取一组的SMID资源//! \breif nCount 需要开辟的ID的个数//! \breif return 返回开辟成功的首位置IDvirtual UGint GetSomeIDs(UGint nCount);public://////////////////////////// UGTable的方法 ////////////////////////////////////////////////! \brief 通过值更新字段值。//! \param strFieldName 更新的字段名[in]。//! \param varValue 字段值[in]。//! \param strFilter 更新字段时对数据行的过滤条件,//! 默认过滤条件置空,更新所有记录[in]。//! \return 是否更新字段值成功,成功返回TRUE,失败返回FALSE。//##ModelId=4820305000EEvirtual UGbool UpdateField(const UGString& strFieldName,const UGVariant& varValue,const UGString& strFilter = _U(""));//! \brief 通过表达式更新字段值。//! \param strFieldName 更新的字段名[in]。//! \param strExpress 算术运算表达式字符串,//! 字段值是某个算术运算表达式的值,如strFieldName = Col1 + col2 * 2[in]。//! \param strFilter 更新字段时对数据行的过滤条件,//! 默认过滤条件置空,更新所有记录[in]。//! \return 是否更新字段值成功,成功返回TRUE,失败返回FALSE。//##ModelId=4820305000F3virtual UGbool UpdateFieldEx(const UGString& strFieldName,const UGString& strExpress,const UGString& strFilter = _U(""));//! \brief 复制字段值,strSrcField和。//! \param strSrcFieldName 源字段名称[in]。//! \param strDestFieldName 目的字段名称[in]。//! \return 是否复制字段成功,成功返回TRUE,失败返回FALSE。//! \attention 目的字段名必须都存在且目的字段要与源字段类型匹配。//! strDestField必须都存在且字段类型匹配//##ModelId=4820305000FBvirtual UGbool CopyField(const UGString& strSrcField,const UGString& strDestField);//! \brief 创建普通索引。//! \param strFieldNameList 创建索引的字段列表,多个字段中间用","隔开[in]。//! \param strIndexName 索引名[in]。//! \return 创建普通索引是否成功,成功返回TRUE,失败返回FALSE。//##ModelId=4820305000FFvirtual UGbool CreateIndex(const UGString& strFieldNameList,const UGString& strIndexName);//! \brief 删除索引。//! \param strIndexName 索引名[in]。//! \return 删除索引是否成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500103virtual UGbool DropIndex(const UGString& strIndexName);//! \brief 获取索引virtual std::map<UGString,UGString> GetIndexToMap();//! \brief 创建多个字段。//! \param fieldInfos 字段描述信息数组引用[in]。//! \return 创建多个字段是否成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500106virtual UGbool CreateFields(const UGFieldInfos& fieldInfos);//! \brief 通过FieldInfo创建一个字段。//! \param fieldInfo 字段描述信息对象引用[in]。//! \return 创建一个字段是否成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203050010Avirtual UGbool CreateField(const UGFieldInfo& fieldInfo);//! \brief 通过设置字段的各项参数,创建一个字段。//! \param strFieldName 字段名[in]。//! \param nType 字段类型枚举值[in]。//! \param nSize 字段长度,以字节为单位[in]。//! \param nAttributes 字段属性默认为0[in]。//! \return 创建一个字段是否成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203050010Dvirtual UGbool CreateField(const UGString& strName,UGFieldInfo::FieldType nType,UGint nSize,UGint nAttributes = 0);//! \brief 通过字段名称删除字段。//! \param strFieldName 字段名[in]。//! \param bSystemFieldExcluded nIndex是否包含系统字段,默认不包含[in]。//! \return 是否删除成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500113virtual UGbool DeleteField(const UGString& strName);//! \brief 通过序号删除字段。//! \param nIndex 字段序号,以0开始[in]。//! \param bSystemFieldExcluded nIndex是否包含系统字段,默认不包含[in]。//! \return 是否删除成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500116virtual UGbool DeleteField(UGint nIndex, UGbool bSystemFieldExcluded = FALSE);//! \brief 获取数据表中所有字段的描述信息。//! \param fieldInfos 数据表中所有字段的描述信息数组[out]。//! \param bSystemFieldExcluded 是否获取系统字段,默认不取[in]。//! \return 是否获取成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203050011Bvirtual UGbool GetFieldInfos(UGFieldInfos& fieldInfos,UGbool bSystemFieldExcluded = FALSE);//! \brief 通过字段名获取字段描述信息。//! \param strFieldName 字段名[in]。//! \param fieldInfo 字段描述信息[out]。//! \return 是否获取成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203050011Fvirtual UGbool GetFieldInfo(const UGString& strName,UGFieldInfo& fieldInfo);//! \brief 通过字段序号获取字段信息。//! \param nIndex 字段序号,以0开始[in]。//! \param fieldInfo 字段描述信息[in]。//! \param bSystemFieldExcluded nIndex是否包含系统字段,默认不包含[in]。//! \return 是否获取成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500123virtual UGbool GetFieldInfo(UGint nIndex,UGFieldInfo& fieldInfo, UGbool bSystemFieldExcluded = FALSE);//! \brief 通过字段名设置字段信息。//! \param strFieldName 字段名[in]。//! \param fieldInfo 字段描述信息对象引用[in]。//! \return 是否设置成功,成功返回TRUE,失败返回FALSE。//##ModelId=482030500127virtual UGbool SetFieldInfo(const UGString& strName,const UGFieldInfo& fieldInfo);//! \brief 通过序号设置字段信息。//! \param nIndex 字段序号,以0开始[in]。//! \param fieldInfo 字段描述信息对象引用[in]。//! \param bSystemFieldExcluded nIndex是否包含系统字段,默认不包含[in]。//! \return 是否设置成功,成功返回TRUE,失败返回FALSE。//##ModelId=48203050012Bvirtual UGbool SetFieldInfo(UGint nIndex,const UGFieldInfo& fieldInfo, UGbool bSystemFieldExcluded = FALSE);//! \brief 获取数据表中字段个数。//! \param bSystemFieldExcluded nIndex是否包含系统字段,默认不包含[in]。//! \return 字段个数。//##ModelId=48203050012Fvirtual UGint GetFieldCount(UGbool bSystemFieldExcluded = FALSE);//! \brief 删除表中所有数据。//! \return 是否删除成功,成功返回TRUE,失败返回FALSE。//! \remarks 清空表后表中的字段仍然保留。//##ModelId=482030500131virtual UGbool Truncate();//! \brief 统计字段值。//! \param strFieldName 字段名[in]。//! \param nMode 统计模式[in]。//! \return 统计值。//##ModelId=482030500133virtual UGVariant Statistic(const UGString& strField,UGStatisticMode nMode);//! \brief 计算字段单值个数。//! \param &strFieldName 字段名[in]。//! \param varKeys 单值数组[in]。//! \return 单值个数。//##ModelId=482030500138virtual UGint CalculateUniqueValues(const UGString &strFieldName,UGArray<UGVariant>& varKeys);//! \brief 设置数据集字符编码方式//##ModelId=4820305301DAvirtual UGbool SetCharset(UGString::Charset c);public:///////////////////////////// UGDataset的方法 ///////////////////////////////////////////////! \brief 打开数据集virtual UGbool Open();//! \brief 关闭数据集virtual void Close();//! \brief 返回最后更新时间//##ModelId=482030550267virtual UGTime GetDateLastUpdated();//! \brief 返回创建时间//##ModelId=482030550269virtual UGTime GetDateCreated();//! \brief 数据集重命名,只改变数据集名,表名不变//##ModelId=482030550274virtual UGbool Rename(const UGString& strNewName);//! \brief 保存数据集信息virtual UGbool SaveInfo();//! \brief 刷新数据集信息virtual UGbool RefreshInfo();//! \brief 计算数据集范围,一般在数据集中元素被删除或修改后使用,//! 可能耗费较多时间virtual UGbool ComputeBounds();//! \brief 返回数据集中对象个数,速度慢,但值比较正确,//! 通过Register表获取//##ModelId=48203053011Avirtual UGint GetObjectCount();//! \brief 检查记录数与Register表中的是否一致,如果不一致会自动修复。virtual UGbool CheckObjectCount();//! \brief 注册选项信息//##ModelId=4820305502C7virtual UGbool RegisterOption(UGint /*nOption*/);//! \brief 反注册选项信息//##ModelId=4820305502CAvirtual UGbool UnRegisterOption(UGint /*nOption*/);//! \brief 如果参与了topo 可以获得topo数据集指针virtual UGDataset * GetTopoAdscriptionDT();//! \brief For Tin 数据集virtual UGbool CreateSubDataset(UGDatasetVectorInfo & vInfo);//! \brief deletesubdatasetvirtual UGbool DeleteSubDataset(UGString &strName);public://! \brief 查询通用入口virtual UGRecordset* Query(const UGQueryDef& querydef);//! \brief 获取最大空间对象的字节大小virtual UGint GetMaxGeoSize();//! \brief 设置最大空间对象的字节大小virtual UGbool SetMaxGeoSize(UGint nMaxGeoSize);//! \brief 得到图库索引图的名字virtual UGString GetMiniatureDtName();//! \brief 数据集是否有某种模式的操作的能力virtual UGbool HasAbility(UGEngAbility dwEngAbility);//! \brief 判断数据集是否支持某种操作virtual UGbool IsSupport(UGEngAction nAction);protected://! \brief 查询大表图库中一个图幅的数据virtual UGRecordset* QueryWithLibTileID(UGint nLibTileID,UGArray<UGString> & arFields,UGdouble dGranule);//! \brief 通过矩形范围查询图幅序号virtual UGbool GetLibTileIDs(const UGRect2D& rc2Bounds,UGArray<UGint>& arLibTileIDs);//! \brief 得到一个图幅的信息virtual UGbool GetLibTileInfo(UGint nTileID,UGRect2D& rc2TileBounds,UGint& nRecCount,UGint& nVersion);//! \brief 通过Bounds查询virtual UGRecordset* QueryWithBounds(const UGRect2D &rc2Bounds,UGQueryDef::QueryOption nOptions = UGQueryDef::Geometry,UGQueryDef::QueryMode nMode = UGQueryDef::FuzzyQuery);//! \brief 通过IDs查询virtual UGRecordset* QueryWithIDs(UGint *pIDs,UGint nCount,UGQueryDef::QueryOption nOptions = UGQueryDef::Both ,UGQueryDef::QueryMode nMode = UGQueryDef::GeneralQuery);//! \brief 是否每个对象有自己的风格virtual UGbool HasStyle();//! \brief 真正的SQL查询记录个数,更新Register表virtual UGbool ComputeRecCount();//! \brief 设置数据集的范围virtual void SetBounds(const UGRect2D& r);//! \brief 获取最大的smidvirtual UGint GetMaxID();//////////////////// SpatialIndex需要用到的方法,与存储相关,各引擎必须单独实现 //////////////////////////////////////////////public://! \brief 从数据库中读取当前数据集的Bounds信息//! \remarks 此函数与CDatasetVector::GetBounds有所区别,此函数是从数据库中读取,得到的是最新的Bounds,而后者是直接从内存中读取m_DatasetInfo中存储的Bounds信息,速度要快得多//! \sa CDatasetVector::GetBoundsvirtual UGRect2D GetBoundsDirectly();protected://! \brief 初始化空间索引virtual UGbool InitSpatialIndex();//! \briefUGbool GetLibTileSQL(const UGRect2D& rc2SearchBounds,UGString& strLibTile);public://! \brief 创建空间索引UGbool Create(const UGString & strName, UGDataset *pDatasetParent,const UGDatasetVectorInfo & vInfo);//! \brief 获取一次最大的获取个数//! \remarks mySQL内部没有批量获取获取到指定数组.UGuint GetOnceFetchCount();//! \brief 获取连接信息UGMyConnection * GetConnection() const;//! \brief 能否提交UGbool CanTransact();//! \brief 获取缓存文件UGbool GetCacheFile(UGString &strFileName,UGint nLibTileID);//! \brief 查询字段信息UGbool QueryFieldInfos();//! \briefUGbool IsSupportMyOption(UGint nMyOption){ return (m_nMyOption & nMyOption) == nMyOption;}//! \briefvoid SetMyOption(UGint nMyOption){m_nMyOption |= nMyOption;}//! \briefvoid UnsetMyOption(UGint nMyOption){m_nMyOption &= (~nMyOption);}//! \briefUGString CheckFieldName(UGString strFieldName);//! \brief mySQL的数据类型转化到本地数据类型。//! \param oraType 原始的mysql类型[in]。//! \param nLength 长度[in]。//! \param nScale 范围[in]。//! \param &nFieldType 本地数据类型[in]。//! \return 。//! \remarks 。//! \attention 。static UGbool GetMySQLType2FieldType(const UGString& oraType, UGint nLength,UGint nScale,UGFieldInfo::FieldType &nFieldType);//! \brief 通过mySQL类型的字符串获取mySQL的数据类型static enum_field_types GetMySQLType2FieldString(const UGString& strMysqlType);//! \brief mySQL的类型转化到field的类型static UGbool GetMySQLType2FieldType(const enum_field_types oraType,UGFieldInfo::FieldType &nFieldType);//! \brief 设置field信息UGbool SetFieldInfo(const UGString& strName,const UGString& strForeignName,UGFieldInfo::FieldType nType,const UGString & strFormat,const UGString & strDomain,UGbool bUpdatable);//! \brief 创建表UGbool U_CreateTable(UGString strName,UGFieldInfos &fieldInfos);UGbool IsSpatialIndexDirty();//! \brief 设置二进制字段的长度UGbool SetMaxBinaryFieldSize(UGint nNewSize, UGString strFieldName);protected:void U_CreateLinkDatasource(UGDsConnection &conn);private://! \brief 刷新当前数据集的选项信息//! \sa RegisterOption, UnRegisterOption, CSmDataset::GetOptionsUGbool RefreshOption();//! \brief 数据源信息到指针UGbool Var2Ptr(UGbyte * pDestData,const UGFieldInfo & fieldInfo,UGVariant var);//! \brief 获取自增序列的名字UGString GetSequenceName();//! \brief 获取string 通过filed的类型UGString GetStringbyFieldtype(const UGFieldInfo &fieldInfo);//在Append中调用UGbool AppendBinaryFields(UGRecordset* pSrcRecordset,UGint nSmIDBegin, UGbool bShowProgress = TRUE);UGbool SetFieldType(const UGString& strName, const UGFieldInfo& fieldInfo);UGbool SetFieldRequired(const UGString& strName, const UGFieldInfo& fieldInfo);UGbool SetFieldDefaultValue(const UGString& strName, const UGFieldInfo& fieldInfo);UGbool SetFieldName(const UGString& oldName, const UGFieldInfo& fieldInfo);private://CHENZhao 得到可以直接放到SQL语句中的defaultvalue。UGString GetFieldDefaultValue(UGFieldInfo fieldInfo);UGbool GetStringCreate(UGDataset::DatasetType nType,UGString& strSQL);//! \brief 计算给定范围经过的所有网格中最左下及右上网格的坐标//! \param rcBounds 矩形范围[in]//! \param aryGrids 左下及右上网格的坐标[out]UGbool FindQueryGrids(UGRect2D &rcBounds,UGArray<UGPoint> &aryGrids);private://! \brief 本地选项。UGint m_nMyOption;//! \brief 当前矢量数据集的状态UGint m_nState;//! \brief 当前数据集的最大索引锁UGint m_nMaxIndexSize;};}#endif // !defined(UGDatasetVectorMySQL_H)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型