Skip to content

Commit ae42a90

Browse files
committedMar 11, 2013
oracle provider: switch to OCICollGetElemArray
1 parent aba568b commit ae42a90

File tree

3 files changed

+57
-71
lines changed

3 files changed

+57
-71
lines changed
 

‎src/core/symbology-ng/qgsrendererv2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
343343
break;
344344

345345
default:
346-
QgsDebugMsg( QString( "unsupported wkb type 0x%1 for rendering" ).arg( geom->wkbType(), 0, 16 ) );
346+
QgsDebugMsg( QString( "feature %1: unsupported wkb type 0x%2 for rendering" ).arg( feature.id() ).arg( geom->wkbType(), 0, 16 ) );
347347
}
348348
}
349349

‎src/providers/oracle/ocispatial/qsql_ocispatial.cpp

Lines changed: 55 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ class enter
190190
}
191191
};
192192

193+
#ifdef _MSC_VER
194+
#define ENTER enter here(__FUNCTION__,__FILE__,__LINE__);
195+
#else
193196
#define ENTER enter here(__PRETTY_FUNCTION__,__FILE__,__LINE__);
197+
#endif
194198

195199
int enter::level = 0;
196200
#else
@@ -1152,8 +1156,7 @@ class QOCISpatialCols
11521156
bool getValue( OCINumber *num, int &value );
11531157
bool getValue( OCINumber *num, double &value );
11541158
bool getArraySize( OCIColl *coll, int &nSize );
1155-
bool getArrayItem( OCIArray *coll, int elem, int &item );
1156-
bool getElemInfoElem( int elem, int nElems, int nOrds, int &startOffset, int &endOffset, int &etype, int &interpretation );
1159+
bool getElemInfoElem( int elem, const QVector<int> &vElem, int nOrds, int &startOffset, int &endOffset, int &etype, int &interpretation );
11571160
static int byteorder() { static char littleEndian = htonl( 1 ) != 1; return littleEndian; }
11581161

11591162
#ifdef QOCISPATIAL_DEBUG
@@ -2289,46 +2292,21 @@ bool QOCISpatialCols::getArraySize( OCIColl *coll, int &nSize )
22892292
return false;
22902293
}
22912294

2292-
bool QOCISpatialCols::getArrayItem( OCIArray *coll, int elem, int &item )
2293-
{
2294-
OCINumber *num;
2295-
boolean exists;
2296-
2297-
try
2298-
{
2299-
OCI_VERIFY_E( d->err, OCICollGetElem( d->env, d->err, coll, elem, &exists, ( dvoid ** ) &num, 0 ) );
2300-
2301-
if ( !exists )
2302-
{
2303-
qWarning( "item %d does not exists.", elem );
2304-
throw OCI_ERROR;
2305-
}
2306-
2307-
return getValue( num, item );
2308-
}
2309-
catch ( int )
2310-
{
2311-
return false;
2312-
}
2313-
}
2314-
2315-
bool QOCISpatialCols::getElemInfoElem( int iElem, int nElems, int nOrds,
2295+
bool QOCISpatialCols::getElemInfoElem( int iElem, const QVector<int> &vElems, int nOrds,
23162296
int &startOffset, int &endOffset,
23172297
int &etype, int &interpretation )
23182298
{
2319-
if ( !getArrayItem( d->sdoobj->elem_info, iElem + 0, startOffset ) ||
2320-
!getArrayItem( d->sdoobj->elem_info, iElem + 1, etype ) ||
2321-
!getArrayItem( d->sdoobj->elem_info, iElem + 2, interpretation ) )
2322-
return false;
2299+
startOffset = vElems[ iElem + 0 ];
2300+
etype = vElems[ iElem + 1 ];
2301+
interpretation = vElems[ iElem + 2 ];
23232302

2324-
if ( iElem + 3 == nElems )
2303+
if ( iElem + 3 >= vElems.size() )
23252304
{
23262305
endOffset = nOrds + 1;
23272306
}
2328-
else if ( !getArrayItem( d->sdoobj->elem_info, iElem + 3, endOffset ) )
2307+
else
23292308
{
2330-
qWarning() << "end offset not found";
2331-
return false;
2309+
endOffset = vElems[ iElem + 3 ];
23322310
}
23332311

23342312
--startOffset;
@@ -2470,41 +2448,49 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
24702448
return false;
24712449
}
24722450

2473-
QVector<double> ordinates( nOrds );
2474-
boolean exists;
2451+
QVector<int> elems( nElems );
24752452

24762453
try
24772454
{
2478-
#if 0
2479-
// TODO figure this out - quicker, but occasionally crashes
2480-
QVector<OCINumber*> numbers( nOrds, 0 );
2481-
uword nords = nOrds;
2482-
OCI_VERIFY_E( d->err, OCICollGetElemArray( d->env, d->err, d->sdoobj->ordinates, 0, &exists, ( void** ) numbers.data(), 0, &nords ) );
2483-
if ( !exists )
2455+
QVector<boolean> exists( nElems );
2456+
QVector<OCINumber*> numbers( nElems );
2457+
uword nelems = nElems;
2458+
OCI_VERIFY_E( d->err, OCICollGetElemArray( d->env, d->err, d->sdoobj->elem_info, 0, exists.data(), ( void** ) numbers.data(), 0, &nelems ) );
2459+
if ( !exists[0] )
24842460
{
2485-
qWarning() << "ordinate array does not exists";
2461+
qWarning() << "element info array does not exists";
24862462
throw OCI_ERROR;
24872463
}
2488-
OCI_VERIFY_E( d->err, OCINumberToRealArray( d->err, ( const OCINumber ** ) numbers.data(), nOrds, sizeof( double ), ordinates.data() ) );
2489-
#else
2490-
for ( int i = 0; i < nOrds; i++ )
2491-
{
2492-
OCINumber *num;
2493-
2494-
OCI_VERIFY_E( d->err, OCICollGetElem( d->env, d->err, d->sdoobj->ordinates, i, &exists, ( dvoid ** ) &num, 0 ) );
24952464

2496-
if ( !exists )
2465+
for ( unsigned int i = 0; i < nelems; i++ )
2466+
{
2467+
if ( !getValue( numbers[i], elems[i] ) )
24972468
{
2498-
qWarning( "item %d does not exists.", i );
2469+
qWarning() << "get value of element info item" << i << "failed";
24992470
throw OCI_ERROR;
25002471
}
2472+
}
2473+
}
2474+
catch ( int )
2475+
{
2476+
return false;
2477+
}
25012478

2502-
if ( !getValue( num, ordinates[i] ) )
2503-
{
2504-
throw OCI_ERROR;
2505-
}
2479+
2480+
QVector<double> ordinates( nOrds );
2481+
2482+
try
2483+
{
2484+
QVector<boolean> exists( nOrds );
2485+
QVector<OCINumber*> numbers( nOrds );
2486+
uword nords = nOrds;
2487+
OCI_VERIFY_E( d->err, OCICollGetElemArray( d->env, d->err, d->sdoobj->ordinates, 0, exists.data(), ( void** ) numbers.data(), 0, &nords ) );
2488+
if ( !exists[0] )
2489+
{
2490+
qWarning() << "ordinate array does not exists";
2491+
throw OCI_ERROR;
25062492
}
2507-
#endif
2493+
OCI_VERIFY_E( d->err, OCINumberToRealArray( d->err, ( const OCINumber ** ) numbers.data(), nords, sizeof( double ), ordinates.data() ) );
25082494
}
25092495
catch ( int )
25102496
{
@@ -2518,7 +2504,7 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
25182504
for ( int i = 0; i < nElems; i += 3 )
25192505
{
25202506
int startOffset, endOffset, etype, n;
2521-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2507+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
25222508
{
25232509
qDebug() << "could not fetch element info" << i;
25242510
return false;
@@ -2552,7 +2538,7 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
25522538
for ( int i = 0; i < nElems; i += 3 )
25532539
{
25542540
int startOffset, endOffset, etype, n;
2555-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2541+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
25562542
{
25572543
qDebug() << "could not fetch element info" << i;
25582544
return false;
@@ -2595,9 +2581,9 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
25952581
for ( int i = 0; i < nElems; i += 3 )
25962582
{
25972583
int startOffset, endOffset, etype, n;
2598-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2584+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
25992585
{
2600-
qDebug() << "could not fetch element info" << i;
2586+
qWarning() << "could not fetch element info" << i;
26012587
return false;
26022588
}
26032589

@@ -2608,7 +2594,7 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
26082594
}
26092595
else
26102596
{
2611-
qDebug() << "unsupported line element - etype:" << etype << "n:" << n << "skipped";
2597+
qWarning( "skipped unsupported line element: etype=%08x n=%d", etype, n );
26122598
}
26132599
}
26142600

@@ -2634,9 +2620,9 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
26342620
for ( int i = 0; i < nElems; i += 3 )
26352621
{
26362622
int startOffset, endOffset, etype, n;
2637-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2623+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
26382624
{
2639-
qDebug() << "could not fetch element info" << i;
2625+
qWarning() << "could not fetch element info" << i;
26402626
return false;
26412627
}
26422628

@@ -2667,9 +2653,9 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
26672653
for ( int i = 0; i < nElems; i += 3 )
26682654
{
26692655
int startOffset, endOffset, etype, n;
2670-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2656+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
26712657
{
2672-
qDebug() << "could not fetch element info" << i;
2658+
qWarning() << "could not fetch element info" << i;
26732659
return false;
26742660
}
26752661

@@ -2695,7 +2681,7 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
26952681
}
26962682
else
26972683
{
2698-
qDebug() << "unsupported polygon element - etype:" << etype << "n:" << n << "skipped";
2684+
qWarning( "skipped unsupported polygon element: etype=%08x n=%d", etype, n );
26992685
}
27002686
}
27012687

@@ -2727,9 +2713,9 @@ bool QOCISpatialCols::convertToWkb( QVariant &v )
27272713
for ( int i = 0; i < nElems; i += 3 )
27282714
{
27292715
int startOffset, endOffset, etype, n;
2730-
if ( !getElemInfoElem( i, nElems, nOrds, startOffset, endOffset, etype, n ) )
2716+
if ( !getElemInfoElem( i, elems, nOrds, startOffset, endOffset, etype, n ) )
27312717
{
2732-
qDebug() << "could not fetch element info" << i;
2718+
qWarning() << "could not fetch element info" << i;
27332719
return false;
27342720
}
27352721

‎src/providers/postgres/qgspostgresdataitems.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ QVector<QgsDataItem*> QgsPGConnectionItem::createChildren()
116116
{
117117
if ( !dontResolveType )
118118
{
119-
QgsDebugMsg( QString( "Skip column %1.%2 without type constraint" ).arg( layerProperty.schemaName ).arg( layerProperty.tableName ).arg( layerProperty.geometryColName ) );
119+
QgsDebugMsg( QString( "Skip column %1.%2.%3 without type constraint" ).arg( layerProperty.schemaName ).arg( layerProperty.tableName ).arg( layerProperty.geometryColName ) );
120120
continue;
121121
}
122122

0 commit comments

Comments
 (0)
Please sign in to comment.