mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-06-19 14:15:21 -06:00
1216 lines
39 KiB
C++
1216 lines
39 KiB
C++
/******************************************************************************
|
|
* $Id: ogrfielddefn.cpp 28806 2015-03-28 14:37:47Z rouault $
|
|
*
|
|
* Project: OpenGIS Simple Features Reference Implementation
|
|
* Purpose: The OGRFieldDefn class implementation.
|
|
* Author: Frank Warmerdam, warmerda@home.com
|
|
*
|
|
******************************************************************************
|
|
* Copyright (c) 1999, Les Technologies SoftMap Inc.
|
|
* Copyright (c) 2009-2013, Even Rouault <even dot rouault at mines-paris dot org>
|
|
*
|
|
* 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.
|
|
****************************************************************************/
|
|
|
|
#include "ogr_feature.h"
|
|
#include "ogr_api.h"
|
|
#include "ogr_p.h"
|
|
#include "ograpispy.h"
|
|
|
|
CPL_CVSID("$Id: ogrfielddefn.cpp 28806 2015-03-28 14:37:47Z rouault $");
|
|
|
|
/************************************************************************/
|
|
/* OGRFieldDefn() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Constructor.
|
|
*
|
|
* By default, fields have no width, precision, are nullable and not ignored.
|
|
*
|
|
* @param pszNameIn the name of the new field.
|
|
* @param eTypeIn the type of the new field.
|
|
*/
|
|
|
|
OGRFieldDefn::OGRFieldDefn( const char * pszNameIn, OGRFieldType eTypeIn )
|
|
|
|
{
|
|
Initialize( pszNameIn, eTypeIn );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGRFieldDefn() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Constructor.
|
|
*
|
|
* Create by cloning an existing field definition.
|
|
*
|
|
* @param poPrototype the field definition to clone.
|
|
*/
|
|
|
|
OGRFieldDefn::OGRFieldDefn( OGRFieldDefn *poPrototype )
|
|
|
|
{
|
|
Initialize( poPrototype->GetNameRef(), poPrototype->GetType() );
|
|
|
|
SetJustify( poPrototype->GetJustify() );
|
|
SetWidth( poPrototype->GetWidth() );
|
|
SetPrecision( poPrototype->GetPrecision() );
|
|
SetSubType( poPrototype->GetSubType() );
|
|
SetNullable( poPrototype->IsNullable() );
|
|
SetDefault( poPrototype->GetDefault() );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_Create() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Create a new field definition.
|
|
*
|
|
* By default, fields have no width, precision, are nullable and not ignored.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::OGRFieldDefn().
|
|
*
|
|
* @param pszName the name of the new field definition.
|
|
* @param eType the type of the new field definition.
|
|
* @return handle to the new field definition.
|
|
*/
|
|
|
|
OGRFieldDefnH OGR_Fld_Create( const char *pszName, OGRFieldType eType )
|
|
|
|
{
|
|
return (OGRFieldDefnH) (new OGRFieldDefn(pszName,eType));
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* Initialize() */
|
|
/************************************************************************/
|
|
|
|
void OGRFieldDefn::Initialize( const char * pszNameIn, OGRFieldType eTypeIn )
|
|
|
|
{
|
|
pszName = CPLStrdup( pszNameIn );
|
|
eType = eTypeIn;
|
|
eJustify = OJUndefined;
|
|
|
|
nWidth = 0; // should these be defined in some particular way
|
|
nPrecision = 0; // for numbers?
|
|
|
|
pszDefault = NULL;
|
|
bIgnore = FALSE;
|
|
eSubType = OFSTNone;
|
|
bNullable = TRUE;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* ~OGRFieldDefn() */
|
|
/************************************************************************/
|
|
|
|
OGRFieldDefn::~OGRFieldDefn()
|
|
|
|
{
|
|
CPLFree( pszName );
|
|
CPLFree( pszDefault );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_Destroy() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Destroy a field definition.
|
|
*
|
|
* @param hDefn handle to the field definition to destroy.
|
|
*/
|
|
|
|
void OGR_Fld_Destroy( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
delete (OGRFieldDefn *) hDefn;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetName() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Reset the name of this field.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetName().
|
|
*
|
|
* @param pszNameIn the new name to apply.
|
|
*/
|
|
|
|
void OGRFieldDefn::SetName( const char * pszNameIn )
|
|
|
|
{
|
|
CPLFree( pszName );
|
|
pszName = CPLStrdup( pszNameIn );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetName() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Reset the name of this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetName().
|
|
*
|
|
* @param hDefn handle to the field definition to apply the new name to.
|
|
* @param pszName the new name to apply.
|
|
*/
|
|
|
|
void OGR_Fld_SetName( OGRFieldDefnH hDefn, const char *pszName )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetName( pszName );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetNameRef() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn const char *OGRFieldDefn::GetNameRef();
|
|
*
|
|
* \brief Fetch name of this field.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetNameRef().
|
|
*
|
|
* @return pointer to an internal name string that should not be freed or
|
|
* modified.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetNameRef() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Fetch name of this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetNameRef().
|
|
*
|
|
* @param hDefn handle to the field definition.
|
|
* @return the name of the field definition.
|
|
*
|
|
*/
|
|
|
|
const char *OGR_Fld_GetNameRef( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
|
|
#ifdef OGRAPISPY_ENABLED
|
|
if( bOGRAPISpyEnabled )
|
|
OGRAPISpy_Fld_GetXXXX(hDefn, "GetNameRef");
|
|
#endif
|
|
|
|
return ((OGRFieldDefn *) hDefn)->GetNameRef();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetType() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn OGRFieldType OGRFieldDefn::GetType();
|
|
*
|
|
* \brief Fetch type of this field.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetType().
|
|
*
|
|
* @return field type.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetType() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Fetch type of this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetType().
|
|
*
|
|
* @param hDefn handle to the field definition to get type from.
|
|
* @return field type.
|
|
*/
|
|
|
|
OGRFieldType OGR_Fld_GetType( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
|
|
#ifdef OGRAPISPY_ENABLED
|
|
if( bOGRAPISpyEnabled )
|
|
OGRAPISpy_Fld_GetXXXX(hDefn, "GetType");
|
|
#endif
|
|
|
|
return ((OGRFieldDefn *) hDefn)->GetType();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetType() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set the type of this field.
|
|
* This should never be done to an OGRFieldDefn
|
|
* that is already part of an OGRFeatureDefn.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetType().
|
|
*
|
|
* @param eType the new field type.
|
|
*/
|
|
|
|
void OGRFieldDefn::SetType( OGRFieldType eTypeIn )
|
|
{
|
|
if( !OGR_AreTypeSubTypeCompatible(eTypeIn, eSubType) )
|
|
{
|
|
CPLError(CE_Warning, CPLE_AppDefined,
|
|
"Type and subtype of field definition are not compatible. Reseting to OFSTNone");
|
|
eSubType = OFSTNone;
|
|
}
|
|
eType = eTypeIn;
|
|
}
|
|
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetType() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set the type of this field.
|
|
* This should never be done to an OGRFieldDefn
|
|
* that is already part of an OGRFeatureDefn.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetType().
|
|
*
|
|
* @param hDefn handle to the field definition to set type to.
|
|
* @param eType the new field type.
|
|
*/
|
|
|
|
void OGR_Fld_SetType( OGRFieldDefnH hDefn, OGRFieldType eType )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetType( eType );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetSubType() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn OGRFieldSubType OGRFieldDefn::GetSubType();
|
|
*
|
|
* \brief Fetch subtype of this field.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetSubType().
|
|
*
|
|
* @return field subtype.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetSubType() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Fetch subtype of this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetSubType().
|
|
*
|
|
* @param hDefn handle to the field definition to get subtype from.
|
|
* @return field subtype.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
OGRFieldSubType OGR_Fld_GetSubType( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
|
|
#ifdef OGRAPISPY_ENABLED
|
|
if( bOGRAPISpyEnabled )
|
|
OGRAPISpy_Fld_GetXXXX(hDefn, "GetSubType");
|
|
#endif
|
|
|
|
return ((OGRFieldDefn *) hDefn)->GetSubType();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetSubType() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set the subtype of this field.
|
|
* This should never be done to an OGRFieldDefn
|
|
* that is already part of an OGRFeatureDefn.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetSubType().
|
|
*
|
|
* @param eSubType the new field subtype.
|
|
* @since GDAL 2.0
|
|
*/
|
|
void OGRFieldDefn::SetSubType( OGRFieldSubType eSubTypeIn )
|
|
{
|
|
if( !OGR_AreTypeSubTypeCompatible(eType, eSubTypeIn) )
|
|
{
|
|
CPLError(CE_Warning, CPLE_AppDefined,
|
|
"Type and subtype of field definition are not compatible. Reseting to OFSTNone");
|
|
eSubType = OFSTNone;
|
|
}
|
|
else
|
|
{
|
|
eSubType = eSubTypeIn;
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetSubType() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set the subtype of this field.
|
|
* This should never be done to an OGRFieldDefn
|
|
* that is already part of an OGRFeatureDefn.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetSubType().
|
|
*
|
|
* @param hDefn handle to the field definition to set type to.
|
|
* @param eSubType the new field subtype.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
void OGR_Fld_SetSubType( OGRFieldDefnH hDefn, OGRFieldSubType eSubType )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetSubType( eSubType );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetDefault() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set default field value.
|
|
*
|
|
* The default field value is taken into account by drivers (generally those with
|
|
* a SQL interface) that support it at field creation time. OGR will generally not
|
|
* automatically set the default field value to null fields by itself when calling
|
|
* OGRFeature::CreateFeature() / OGRFeature::SetFeature(), but will let the
|
|
* low-level layers to do the job. So retrieving the feature from the layer is
|
|
* recommended.
|
|
*
|
|
* The accepted values are NULL, a numeric value, a litteral value enclosed
|
|
* between single quote characters (and inner single quote characters escaped by
|
|
* repetition of the single quote character),
|
|
* CURRENT_TIMESTAMP, CURRENT_TIME, CURRENT_DATE or
|
|
* a driver specific expression (that might be ignored by other drivers).
|
|
* For a datetime literal value, format should be 'YYYY/MM/DD HH:MM:SS[.sss]'
|
|
* (considered as UTC time).
|
|
*
|
|
* Drivers that support writing DEFAULT clauses will advertize the
|
|
* GDAL_DCAP_DEFAULT_FIELDS driver metadata item.
|
|
*
|
|
* This function is the same as the C function OGR_Fld_SetDefault().
|
|
*
|
|
* @param pszDefault new default field value or NULL pointer.
|
|
*
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
void OGRFieldDefn::SetDefault( const char* pszDefaultIn )
|
|
|
|
{
|
|
CPLFree(pszDefault);
|
|
pszDefault = NULL;
|
|
|
|
if( pszDefaultIn && pszDefaultIn[0] == '\'' )
|
|
{
|
|
if( pszDefaultIn[strlen(pszDefaultIn)-1] != '\'' )
|
|
{
|
|
CPLError(CE_Failure, CPLE_AppDefined, "Incorrectly quoted string literal");
|
|
return;
|
|
}
|
|
const char* pszPtr = pszDefaultIn + 1;
|
|
for(; *pszPtr != '\0'; pszPtr ++ )
|
|
{
|
|
if( *pszPtr == '\'' )
|
|
{
|
|
if( pszPtr[1] == '\0' )
|
|
break;
|
|
if( pszPtr[1] != '\'' )
|
|
{
|
|
CPLError(CE_Failure, CPLE_AppDefined, "Incorrectly quoted string literal");
|
|
return;
|
|
}
|
|
pszPtr ++;
|
|
}
|
|
}
|
|
if( *pszPtr == '\0' )
|
|
{
|
|
CPLError(CE_Failure, CPLE_AppDefined, "Incorrectly quoted string literal");
|
|
return;
|
|
}
|
|
}
|
|
|
|
pszDefault = pszDefaultIn ? CPLStrdup(pszDefaultIn) : NULL;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetDefault() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set default field value.
|
|
*
|
|
* The default field value is taken into account by drivers (generally those with
|
|
* a SQL interface) that support it at field creation time. OGR will generally not
|
|
* automatically set the default field value to null fields by itself when calling
|
|
* OGRFeature::CreateFeature() / OGRFeature::SetFeature(), but will let the
|
|
* low-level layers to do the job. So retrieving the feature from the layer is
|
|
* recommended.
|
|
*
|
|
* The accepted values are NULL, a numeric value, a litteral value enclosed
|
|
* between single quote characters (and inner single quote characters escaped by
|
|
* repetition of the single quote character),
|
|
* CURRENT_TIMESTAMP, CURRENT_TIME, CURRENT_DATE or
|
|
* a driver specific expression (that might be ignored by other drivers).
|
|
* For a datetime literal value, format should be 'YYYY/MM/DD HH:MM:SS[.sss]'
|
|
* (considered as UTC time).
|
|
*
|
|
* Drivers that support writing DEFAULT clauses will advertize the
|
|
* GDAL_DCAP_DEFAULT_FIELDS driver metadata item.
|
|
*
|
|
* This function is the same as the C++ method OGRFieldDefn::SetDefault().
|
|
*
|
|
* @param hDefn handle to the field definition.
|
|
* @param pszDefault new default field value or NULL pointer.
|
|
*
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
void CPL_DLL OGR_Fld_SetDefault( OGRFieldDefnH hDefn, const char* pszDefault )
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetDefault( pszDefault );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetDefault() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Get default field value.
|
|
*
|
|
* This function is the same as the C function OGR_Fld_GetDefault().
|
|
*
|
|
* @return default field value or NULL.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
const char* OGRFieldDefn::GetDefault() const
|
|
|
|
{
|
|
return pszDefault;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetDefault() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Get default field value.
|
|
*
|
|
* This function is the same as the C++ method OGRFieldDefn::GetDefault().
|
|
*
|
|
* @param hDefn handle to the field definition.
|
|
* @return default field value or NULL.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
const char *OGR_Fld_GetDefault( OGRFieldDefnH hDefn )
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->GetDefault();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* IsDefaultDriverSpecific() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Returns whether the default value is driver specific.
|
|
*
|
|
* Driver specific default values are those that are *not* NULL, a numeric value,
|
|
* a litteral value enclosed between single quote characters, CURRENT_TIMESTAMP,
|
|
* CURRENT_TIME, CURRENT_DATE or datetime literal value.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_IsDefaultDriverSpecific().
|
|
*
|
|
* @return TRUE if the default value is driver specific.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
int OGRFieldDefn::IsDefaultDriverSpecific() const
|
|
{
|
|
if( pszDefault == NULL )
|
|
return FALSE;
|
|
|
|
if( EQUAL(pszDefault, "NULL") ||
|
|
EQUAL(pszDefault, "CURRENT_TIMESTAMP") ||
|
|
EQUAL(pszDefault, "CURRENT_TIME") ||
|
|
EQUAL(pszDefault, "CURRENT_DATE") )
|
|
return FALSE;
|
|
|
|
if( pszDefault[0] == '\'' && pszDefault[strlen(pszDefault)-1] == '\'' )
|
|
return FALSE;
|
|
|
|
char* pszEnd = NULL;
|
|
CPLStrtod(pszDefault, &pszEnd);
|
|
if( *pszEnd == '\0' )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_IsDefaultDriverSpecific() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Returns whether the default value is driver specific.
|
|
*
|
|
* Driver specific default values are those that are *not* NULL, a numeric value,
|
|
* a litteral value enclosed between single quote characters, CURRENT_TIMESTAMP,
|
|
* CURRENT_TIME, CURRENT_DATE or datetime literal value.
|
|
*
|
|
* This function is the same as the C++ method OGRFieldDefn::IsDefaultDriverSpecific().
|
|
*
|
|
* @param hDefn handle to the field definition
|
|
* @return TRUE if the default value is driver specific.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
int OGR_Fld_IsDefaultDriverSpecific( OGRFieldDefnH hDefn )
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->IsDefaultDriverSpecific();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetFieldTypeName() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Fetch human readable name for a field type.
|
|
*
|
|
* This static method is the same as the C function OGR_GetFieldTypeName().
|
|
*
|
|
* @param eType the field type to get name for.
|
|
*
|
|
* @return pointer to an internal static name string. It should not be
|
|
* modified or freed.
|
|
*/
|
|
|
|
const char * OGRFieldDefn::GetFieldTypeName( OGRFieldType eType )
|
|
|
|
{
|
|
switch( eType )
|
|
{
|
|
case OFTInteger:
|
|
return "Integer";
|
|
|
|
case OFTInteger64:
|
|
return "Integer64";
|
|
|
|
case OFTReal:
|
|
return "Real";
|
|
|
|
case OFTString:
|
|
return "String";
|
|
|
|
case OFTIntegerList:
|
|
return "IntegerList";
|
|
|
|
case OFTInteger64List:
|
|
return "Integer64List";
|
|
|
|
case OFTRealList:
|
|
return "RealList";
|
|
|
|
case OFTStringList:
|
|
return "StringList";
|
|
|
|
case OFTBinary:
|
|
return "Binary";
|
|
|
|
case OFTDate:
|
|
return "Date";
|
|
|
|
case OFTTime:
|
|
return "Time";
|
|
|
|
case OFTDateTime:
|
|
return "DateTime";
|
|
|
|
default:
|
|
return "(unknown)";
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_GetFieldTypeName() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Fetch human readable name for a field type.
|
|
*
|
|
* This function is the same as the CPP method
|
|
* OGRFieldDefn::GetFieldTypeName().
|
|
*
|
|
* @param eType the field type to get name for.
|
|
* @return the name.
|
|
*/
|
|
|
|
const char *OGR_GetFieldTypeName( OGRFieldType eType )
|
|
|
|
{
|
|
return OGRFieldDefn::GetFieldTypeName( eType );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetFieldSubTypeName() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Fetch human readable name for a field subtype.
|
|
*
|
|
* This static method is the same as the C function OGR_GetFieldSubTypeName().
|
|
*
|
|
* @param eSubType the field subtype to get name for.
|
|
*
|
|
* @return pointer to an internal static name string. It should not be
|
|
* modified or freed.
|
|
*
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
const char * OGRFieldDefn::GetFieldSubTypeName( OGRFieldSubType eSubType )
|
|
|
|
{
|
|
switch( eSubType )
|
|
{
|
|
case OFSTNone:
|
|
return "None";
|
|
|
|
case OFSTBoolean:
|
|
return "Boolean";
|
|
|
|
case OFSTInt16:
|
|
return "Int16";
|
|
|
|
case OFSTFloat32:
|
|
return "Float32";
|
|
|
|
default:
|
|
return "(unknown)";
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_GetFieldSubTypeName() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Fetch human readable name for a field subtype.
|
|
*
|
|
* This function is the same as the CPP method
|
|
* OGRFieldDefn::GetFieldSubTypeName().
|
|
*
|
|
* @param eSubType the field subtype to get name for.
|
|
* @return the name.
|
|
*
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
const char *OGR_GetFieldSubTypeName( OGRFieldSubType eSubType )
|
|
|
|
{
|
|
return OGRFieldDefn::GetFieldSubTypeName( eSubType );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_IsValidTypeAndSubType() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Return if type and subtype are compatible
|
|
*
|
|
* @param eType the field type.
|
|
* @param eSubType the field subtype.
|
|
* @return TRUE if type and subtype are compatible
|
|
*
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
int OGR_AreTypeSubTypeCompatible( OGRFieldType eType, OGRFieldSubType eSubType )
|
|
{
|
|
if( eSubType == OFSTNone )
|
|
return TRUE;
|
|
if( eSubType == OFSTBoolean || eSubType == OFSTInt16 )
|
|
return eType == OFTInteger || eType == OFTIntegerList;
|
|
if( eSubType == OFSTFloat32 )
|
|
return eType == OFTReal || eType == OFTRealList;
|
|
return FALSE;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetJustify() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn OGRJustification OGRFieldDefn::GetJustify();
|
|
*
|
|
* \brief Get the justification for this field.
|
|
*
|
|
* Note: no driver is know to use the concept of field justification.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetJustify().
|
|
*
|
|
* @return the justification.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetJustify() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Get the justification for this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetJustify().
|
|
*
|
|
* Note: no driver is know to use the concept of field justification.
|
|
*
|
|
* @param hDefn handle to the field definition to get justification from.
|
|
* @return the justification.
|
|
*/
|
|
|
|
OGRJustification OGR_Fld_GetJustify( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->GetJustify();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetJustify() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn void OGRFieldDefn::SetJustify( OGRJustification eJustify );
|
|
*
|
|
* \brief Set the justification for this field.
|
|
*
|
|
* Note: no driver is know to use the concept of field justification.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetJustify().
|
|
*
|
|
* @param eJustify the new justification.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetJustify() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set the justification for this field.
|
|
*
|
|
* Note: no driver is know to use the concept of field justification.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetJustify().
|
|
*
|
|
* @param hDefn handle to the field definition to set justification to.
|
|
* @param eJustify the new justification.
|
|
*/
|
|
|
|
void OGR_Fld_SetJustify( OGRFieldDefnH hDefn, OGRJustification eJustify )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetJustify( eJustify );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetWidth() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn int OGRFieldDefn::GetWidth();
|
|
*
|
|
* \brief Get the formatting width for this field.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetWidth().
|
|
*
|
|
* @return the width, zero means no specified width.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetWidth() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Get the formatting width for this field.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetWidth().
|
|
*
|
|
* @param hDefn handle to the field definition to get width from.
|
|
* @return the width, zero means no specified width.
|
|
*/
|
|
|
|
int OGR_Fld_GetWidth( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->GetWidth();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetWidth() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn void OGRFieldDefn::SetWidth( int nWidth );
|
|
*
|
|
* \brief Set the formatting width for this field in characters.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetWidth().
|
|
*
|
|
* @param nWidth the new width.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetWidth() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set the formatting width for this field in characters.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetWidth().
|
|
*
|
|
* @param hDefn handle to the field definition to set width to.
|
|
* @param nNewWidth the new width.
|
|
*/
|
|
|
|
void OGR_Fld_SetWidth( OGRFieldDefnH hDefn, int nNewWidth )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetWidth( nNewWidth );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* GetPrecision() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn int OGRFieldDefn::GetPrecision();
|
|
*
|
|
* \brief Get the formatting precision for this field.
|
|
* This should normally be
|
|
* zero for fields of types other than OFTReal.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_GetPrecision().
|
|
*
|
|
* @return the precision.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_GetPrecision() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Get the formatting precision for this field.
|
|
* This should normally be
|
|
* zero for fields of types other than OFTReal.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::GetPrecision().
|
|
*
|
|
* @param hDefn handle to the field definition to get precision from.
|
|
* @return the precision.
|
|
*/
|
|
|
|
int OGR_Fld_GetPrecision( OGRFieldDefnH hDefn )
|
|
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->GetPrecision();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetPrecision() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn void OGRFieldDefn::SetPrecision( int nPrecision );
|
|
*
|
|
* \brief Set the formatting precision for this field in characters.
|
|
*
|
|
* This should normally be zero for fields of types other than OFTReal.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetPrecision().
|
|
*
|
|
* @param nPrecision the new precision.
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetPrecision() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set the formatting precision for this field in characters.
|
|
*
|
|
* This should normally be zero for fields of types other than OFTReal.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::SetPrecision().
|
|
*
|
|
* @param hDefn handle to the field definition to set precision to.
|
|
* @param nPrecision the new precision.
|
|
*/
|
|
|
|
void OGR_Fld_SetPrecision( OGRFieldDefnH hDefn, int nPrecision )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetPrecision( nPrecision );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* Set() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set defining parameters for a field in one call.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_Set().
|
|
*
|
|
* @param pszNameIn the new name to assign.
|
|
* @param eTypeIn the new type (one of the OFT values like OFTInteger).
|
|
* @param nWidthIn the preferred formatting width. Defaults to zero indicating
|
|
* undefined.
|
|
* @param nPrecisionIn number of decimals places for formatting, defaults to
|
|
* zero indicating undefined.
|
|
* @param eJustifyIn the formatting justification (OJLeft or OJRight), defaults
|
|
* to OJUndefined.
|
|
*/
|
|
|
|
void OGRFieldDefn::Set( const char *pszNameIn,
|
|
OGRFieldType eTypeIn,
|
|
int nWidthIn, int nPrecisionIn,
|
|
OGRJustification eJustifyIn )
|
|
{
|
|
SetName( pszNameIn );
|
|
SetType( eTypeIn );
|
|
SetWidth( nWidthIn );
|
|
SetPrecision( nPrecisionIn );
|
|
SetJustify( eJustifyIn );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_Set() */
|
|
/************************************************************************/
|
|
/**
|
|
* \brief Set defining parameters for a field in one call.
|
|
*
|
|
* This function is the same as the CPP method OGRFieldDefn::Set().
|
|
*
|
|
* @param hDefn handle to the field definition to set to.
|
|
* @param pszNameIn the new name to assign.
|
|
* @param eTypeIn the new type (one of the OFT values like OFTInteger).
|
|
* @param nWidthIn the preferred formatting width. Defaults to zero indicating
|
|
* undefined.
|
|
* @param nPrecisionIn number of decimals places for formatting, defaults to
|
|
* zero indicating undefined.
|
|
* @param eJustifyIn the formatting justification (OJLeft or OJRight), defaults
|
|
* to OJUndefined.
|
|
*/
|
|
|
|
void OGR_Fld_Set( OGRFieldDefnH hDefn, const char *pszNameIn,
|
|
OGRFieldType eTypeIn,
|
|
int nWidthIn, int nPrecisionIn,
|
|
OGRJustification eJustifyIn )
|
|
|
|
{
|
|
((OGRFieldDefn *) hDefn)->Set( pszNameIn, eTypeIn, nWidthIn,
|
|
nPrecisionIn, eJustifyIn );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* IsIgnored() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn int OGRFieldDefn::IsIgnored();
|
|
*
|
|
* \brief Return whether this field should be omitted when fetching features
|
|
*
|
|
* This method is the same as the C function OGR_Fld_IsIgnored().
|
|
*
|
|
* @return ignore state
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_IsIgnored() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Return whether this field should be omitted when fetching features
|
|
*
|
|
* This method is the same as the C++ method OGRFieldDefn::IsIgnored().
|
|
*
|
|
* @param hDefn handle to the field definition
|
|
* @return ignore state
|
|
*/
|
|
|
|
int OGR_Fld_IsIgnored( OGRFieldDefnH hDefn )
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->IsIgnored();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetIgnored() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn void OGRFieldDefn::SetIgnored( int ignore );
|
|
*
|
|
* \brief Set whether this field should be omitted when fetching features
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetIgnored().
|
|
*
|
|
* @param ignore ignore state
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetIgnored() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set whether this field should be omitted when fetching features
|
|
*
|
|
* This method is the same as the C++ method OGRFieldDefn::SetIgnored().
|
|
*
|
|
* @param hDefn handle to the field definition
|
|
* @param ignore ignore state
|
|
*/
|
|
|
|
void OGR_Fld_SetIgnored( OGRFieldDefnH hDefn, int ignore )
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetIgnored( ignore );
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* IsSame() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Test if the field definition is identical to the other one.
|
|
*
|
|
* @param poOtherFieldDefn the other field definition to compare to.
|
|
* @return TRUE if the field definition is identical to the other one.
|
|
*/
|
|
|
|
int OGRFieldDefn::IsSame( const OGRFieldDefn * poOtherFieldDefn ) const
|
|
{
|
|
return (strcmp(pszName, poOtherFieldDefn->pszName) == 0 &&
|
|
eType == poOtherFieldDefn->eType &&
|
|
eSubType == poOtherFieldDefn->eSubType &&
|
|
nWidth == poOtherFieldDefn->nWidth &&
|
|
nPrecision == poOtherFieldDefn->nPrecision &&
|
|
bNullable == poOtherFieldDefn->bNullable);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* IsNullable() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn int OGRFieldDefn::IsNullable() const
|
|
*
|
|
* \brief Return whether this field can receive null values.
|
|
*
|
|
* By default, fields are nullable.
|
|
*
|
|
* Even if this method returns FALSE (i.e not-nullable field), it doesn't mean
|
|
* that OGRFeature::IsFieldSet() will necessary return TRUE, as fields can be
|
|
* temporary unset and null/not-null validation is usually done when
|
|
* OGRLayer::CreateFeature()/SetFeature() is called.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_IsNullable().
|
|
*
|
|
* @return TRUE if the field is authorized to be null.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_IsNullable() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Return whether this field can receive null values.
|
|
*
|
|
* By default, fields are nullable.
|
|
*
|
|
* Even if this method returns FALSE (i.e not-nullable field), it doesn't mean
|
|
* that OGRFeature::IsFieldSet() will necessary return TRUE, as fields can be
|
|
* temporary unset and null/not-null validation is usually done when
|
|
* OGRLayer::CreateFeature()/SetFeature() is called.
|
|
*
|
|
* This method is the same as the C++ method OGRFieldDefn::IsNullable().
|
|
*
|
|
* @param hDefn handle to the field definition
|
|
* @return TRUE if the field is authorized to be null.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
int OGR_Fld_IsNullable( OGRFieldDefnH hDefn )
|
|
{
|
|
return ((OGRFieldDefn *) hDefn)->IsNullable();
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* SetNullable() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \fn void OGRFieldDefn::SetNullable( int bNullableIn );
|
|
*
|
|
* \brief Set whether this field can receive null values.
|
|
*
|
|
* By default, fields are nullable, so this method is generally called with FALSE
|
|
* to set a not-null constraint.
|
|
*
|
|
* Drivers that support writing not-null constraint will advertize the
|
|
* GDAL_DCAP_NOTNULL_FIELDS driver metadata item.
|
|
*
|
|
* This method is the same as the C function OGR_Fld_SetNullable().
|
|
*
|
|
* @param bNullableIn FALSE if the field must have a not-null constraint.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* OGR_Fld_SetNullable() */
|
|
/************************************************************************/
|
|
|
|
/**
|
|
* \brief Set whether this field can receive null values.
|
|
*
|
|
* By default, fields are nullable, so this method is generally called with FALSE
|
|
* to set a not-null constraint.
|
|
*
|
|
* Drivers that support writing not-null constraint will advertize the
|
|
* GDAL_DCAP_NOTNULL_FIELDS driver metadata item.
|
|
*
|
|
* This method is the same as the C++ method OGRFieldDefn::SetNullable().
|
|
*
|
|
* @param hDefn handle to the field definition
|
|
* @param bNullableIn FALSE if the field must have a not-null constraint.
|
|
* @since GDAL 2.0
|
|
*/
|
|
|
|
void OGR_Fld_SetNullable( OGRFieldDefnH hDefn, int bNullableIn )
|
|
{
|
|
((OGRFieldDefn *) hDefn)->SetNullable( bNullableIn );
|
|
}
|