Skip to content

Commit

Permalink
Merge pull request #362 from KNMI/writer-int64
Browse files Browse the repository at this point in the history
Support INT64 in CDFDataWriter
  • Loading branch information
maartenplieger authored Apr 12, 2024
2 parents 4a45135 + 2baf53f commit c374624
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ USER root
LABEL maintainer="[email protected]"

# Version should be same as in Definitions.h
LABEL version="2.21.0"
LABEL version="2.21.1"

# Try to update image packages
RUN apt-get -q -y update \
Expand Down
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
**Version 2.21.1 2024-04-10**
- Support INT64 in CDFDataWriter

**Version 2.21.0 2024-03-14**

- Added support for Redis caching. Redis caching can be enabled by providing a Redis service via the ADAGUC_REDIS environment and configuring caching settings for a dataset in the [Settings](doc/configuration/Settings.md) element.
Expand Down
45 changes: 40 additions & 5 deletions adagucserverEC/CNetCDFDataWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,13 +381,20 @@ int CNetCDFDataWriter::init(CServerParams *srvParam, CDataSource *dataSource, in
case CDF_UINT:
((unsigned int *)var->data)[j] = dimValue.toInt();
break;
case CDF_INT64:
((long *)var->data)[j] = dimValue.toLong();
break;
case CDF_UINT64: // TODO: All unsigned versions don't work if the full unsigned range is needed
((unsigned long *)var->data)[j] = dimValue.toLong();
break;
case CDF_FLOAT:
((float *)var->data)[j] = dimValue.toFloat();
break;
case CDF_DOUBLE:
((double *)var->data)[j] = dimValue.toDouble();
break;
default:
CDBError("Unknown var type [%d] for dimension [%s]", var->getType(), dimName.c_str());
return 1;
}
}
Expand Down Expand Up @@ -721,17 +728,22 @@ int CNetCDFDataWriter::addData(std::vector<CDataSource *> &dataSources) {
case CDF_UINT:
value = ((unsigned int *)var->data)[j];
break;
case CDF_INT64: // TODO: This is a narrowing conversion, as not all long's can be exactly represented in a double
value = ((long *)var->data)[j];
break;
case CDF_UINT64: // TODO: This is a narrowing conversion, as not all long's can be exactly represented in a double
value = ((unsigned long *)var->data)[j];
break;
case CDF_FLOAT:
value = ((float *)var->data)[j];
break;
case CDF_DOUBLE:
value = ((double *)var->data)[j];
break;
default: {
CDBError("Unknown var type [%d]", var->getType());
default:
CDBError("Unknown var type [%d] for dimension [%s]", var->getType(), dimName.c_str());
return 1;
}
}
if (value == valueToFind) {
indexTofind = j;
break;
Expand Down Expand Up @@ -839,17 +851,22 @@ int CNetCDFDataWriter::addData(std::vector<CDataSource *> &dataSources) {
case CDF_UINT:
warpedData = ((unsigned int *)variable->data) + elementOffset;
break;
case CDF_INT64:
warpedData = ((long *)variable->data) + elementOffset;
break;
case CDF_UINT64:
warpedData = ((unsigned long *)variable->data) + elementOffset;
break;
case CDF_FLOAT:
warpedData = ((float *)variable->data) + elementOffset;
break;
case CDF_DOUBLE:
warpedData = ((double *)variable->data) + elementOffset;
break;
default: {
default:
CDBError("Unknown var type [%d]", variable->getType());
return 1;
}
}

settings.data = warpedData;

Expand Down Expand Up @@ -881,12 +898,21 @@ int CNetCDFDataWriter::addData(std::vector<CDataSource *> &dataSources) {
case CDF_UINT:
genericDataWarper.render<uint>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_nearest);
break;
case CDF_INT64:
genericDataWarper.render<long>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_nearest);
break;
case CDF_UINT64:
genericDataWarper.render<unsigned long>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_nearest);
break;
case CDF_FLOAT:
genericDataWarper.render<float>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_nearest);
break;
case CDF_DOUBLE:
genericDataWarper.render<double>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_nearest);
break;
default:
CDBError("Unknown var type [%d]", variable->getType());
return 1;
}
}

Expand Down Expand Up @@ -914,12 +940,21 @@ int CNetCDFDataWriter::addData(std::vector<CDataSource *> &dataSources) {
case CDF_UINT:
genericDataWarper.render<uint>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_avg_rbg);
break;
case CDF_INT64:
genericDataWarper.render<long>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_avg_rbg);
break;
case CDF_UINT64:
genericDataWarper.render<unsigned long>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_avg_rbg);
break;
case CDF_FLOAT:
genericDataWarper.render<float>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_avg_rbg);
break;
case CDF_DOUBLE:
genericDataWarper.render<double>(&warper, sourceData, &sourceGeo, srvParam->Geo, &settings, &drawFunction_avg_rbg);
break;
default:
CDBError("Unknown var type [%d]", variable->getType());
return 1;
}
}

Expand Down
2 changes: 1 addition & 1 deletion adagucserverEC/Definitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#ifndef Definitions_H
#define Definitions_H

#define ADAGUCSERVER_VERSION "2.21.0" // Please also update in the Dockerfile to the same version
#define ADAGUCSERVER_VERSION "2.21.1" // Please also update in the Dockerfile to the same version

// CConfigReaderLayerType
#define CConfigReaderLayerTypeUnknown 0
Expand Down
7 changes: 5 additions & 2 deletions hclasses/CTString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -680,8 +680,11 @@ namespace CT {
}

int string::toInt() {
int dValue = (int)atoi(c_str());
return dValue;
return atoi(c_str());
}

long string::toLong() {
return atol(c_str());
}

CT::string string::basename() {
Expand Down
5 changes: 5 additions & 0 deletions hclasses/CTString.h
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,11 @@ namespace CT {
*/
int toInt();

/**
* Converts the string to a long number
*/
long toLong();

/**
* Test whether string is empty or not
*/
Expand Down

0 comments on commit c374624

Please sign in to comment.