@@ -101,30 +101,35 @@ QVariant QgsHanaResultSet::getValue( unsigned short columnIndex )
101
101
return QgsHanaUtils::toVariant ( mResultSet ->getBoolean ( columnIndex ), QVariant::Bool );
102
102
case SQLDataTypes::Char:
103
103
{
104
+ String str = mResultSet ->getString ( columnIndex );
104
105
if ( mMetadata ->getColumnLength ( columnIndex ) == 1 )
105
106
{
106
- Byte value = mResultSet ->getByte ( columnIndex );
107
- if ( value.isNull () )
107
+ if ( str.isNull () || str->empty () )
108
108
return QVariant ( QVariant::Char );
109
109
else
110
- return QVariant ( QChar ( *value ) );
110
+ return QVariant ( QChar ( str-> at ( 0 ) ) );
111
111
}
112
112
else
113
- return QgsHanaUtils::toVariant ( mResultSet -> getString ( columnIndex ) );
113
+ return QgsHanaUtils::toVariant ( str );
114
114
}
115
115
case SQLDataTypes::WChar:
116
+ {
117
+ NString str = mResultSet ->getNString ( columnIndex );
116
118
if ( mMetadata ->getColumnLength ( columnIndex ) == 1 )
117
119
{
118
- UByte value = mResultSet ->getUByte ( columnIndex );
119
- if ( value.isNull () )
120
+ if ( str.isNull () || str->empty () )
120
121
return QVariant ( QVariant::Char );
121
122
else
122
- return QVariant ( QChar ( *value ) );
123
+ return QVariant ( QChar ( str-> at ( 0 ) ) );
123
124
}
124
125
else
125
- return QgsHanaUtils::toVariant ( mResultSet ->getNString ( columnIndex ) );
126
+ return QgsHanaUtils::toVariant ( str );
127
+ }
126
128
case SQLDataTypes::TinyInt:
127
- return QgsHanaUtils::toVariant ( mResultSet ->getUByte ( columnIndex ) );
129
+ if ( mMetadata ->isSigned ( columnIndex ) )
130
+ return QgsHanaUtils::toVariant ( mResultSet ->getByte ( columnIndex ) );
131
+ else
132
+ return QgsHanaUtils::toVariant ( mResultSet ->getUByte ( columnIndex ) );
128
133
case SQLDataTypes::SmallInt:
129
134
if ( mMetadata ->isSigned ( columnIndex ) )
130
135
return QgsHanaUtils::toVariant ( mResultSet ->getShort ( columnIndex ) );
@@ -174,34 +179,32 @@ QVariant QgsHanaResultSet::getValue( unsigned short columnIndex )
174
179
175
180
QgsGeometry QgsHanaResultSet::getGeometry ( unsigned short columnIndex )
176
181
{
177
- auto createGeometry = []( const char *data, size_t size )
182
+ auto toWkbSize = []( size_t size )
178
183
{
179
- if ( size == 0 || data == nullptr )
180
- return QgsGeometry ();
181
-
182
184
if ( size > static_cast <size_t >( std::numeric_limits<int >::max () ) )
183
185
throw QgsHanaException ( " Geometry size is larger than maximum integer value" );
184
-
185
- QByteArray wkbBytes ( data, static_cast <int >( size ) );
186
- QgsGeometry geom;
187
- geom.fromWkb ( wkbBytes );
188
- return geom;
186
+ return static_cast <int >( size );
189
187
};
190
188
191
189
size_t bufLength = mResultSet ->getBinaryLength ( columnIndex );
192
190
if ( bufLength == ResultSet::UNKNOWN_LENGTH )
193
191
{
194
192
Binary wkb = mResultSet ->getBinary ( columnIndex );
195
- if ( wkb.isNull () || wkb->size () == 0 )
196
- return QgsGeometry ();
197
- else
198
- return createGeometry ( wkb->data (), wkb->size () );
193
+ if ( !wkb.isNull () && wkb->size () > 0 )
194
+ {
195
+ QByteArray wkbBytes ( wkb->data (), toWkbSize ( wkb->size () ) );
196
+ QgsGeometry geom;
197
+ geom.fromWkb ( wkbBytes );
198
+ return geom;
199
+ }
199
200
}
200
201
else if ( bufLength != 0 && bufLength != odbc::ResultSet::NULL_DATA )
201
202
{
202
- mBuffer .resize ( bufLength );
203
- mResultSet ->getBinaryData ( columnIndex, mBuffer .data (), bufLength );
204
- return createGeometry ( mBuffer .data (), bufLength );
203
+ QByteArray wkbBytes ( toWkbSize ( bufLength ), ' 0' );
204
+ mResultSet ->getBinaryData ( columnIndex, wkbBytes.data (), bufLength );
205
+ QgsGeometry geom;
206
+ geom.fromWkb ( wkbBytes );
207
+ return geom;
205
208
}
206
209
207
210
return QgsGeometry ();
0 commit comments