The attached are two output logs with debug on. You can see that the output 
from GDAL 3.7 has two extra queries at the beginning. These queries only happen 
when the eAccess is GA_ReadOnly. The logs are generated with the same command 
parameters to gdal_translate.

From: Even Rouault <even.roua...@spatialys.com>
Date: Tuesday, November 28, 2023 at 6:36 PM
To: Fengting Chen <fengting.c...@oracle.com>, gdal-dev@lists.osgeo.org 
<gdal-dev@lists.osgeo.org>
Subject: [External] : Re: [gdal-dev] GDAL driver Open() calls

Hi,

Please share the stack trace (on a debug build) of both instances where 
GDALOpen() is called

Even
Le 28/11/2023 à 23:40, Fengting Chen via gdal-dev a écrit :
Hi,

I noticed from the GeoRaster driver that in GDAL 3.6 and 3.7 (maybe 3.8 too),  
there are two GDALOpen() calls on the driver with GDALOpenInfo eAccess as 
GA_ReadOnly, even when the GeoRaster is the output format in gdal_translate 
command. There are no such calls in GDAL 3.4. I am wondering if these 
invocations of Open() with eAccess as GA_ReadOnly are necessary when the driver 
is the output driver. This has caused performance issue for the GeoRaster 
driver when a user is trying to load the data into Oracle database because it 
has two unnecessary reads from the database.  If these Open() calls are 
unavoidable, how to differentiate the calls whether it is as input or as output 
in the gdal_translate command?

Thanks.



_______________________________________________

gdal-dev mailing list

gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org>

https://lists.osgeo.org/mailman/listinfo/gdal-dev<https://urldefense.com/v3/__https:/lists.osgeo.org/mailman/listinfo/gdal-dev__;!!ACWV5N9M2RV99hQ!IqVgHqcg5DBb3fu5ZpXizGqYnezdKvCzFALf06Gt-Vs7RiPPCXFACcefd_slweWtNCqHy-G-OsmoPt9XZqR4DOWs5UiD$>

--

http://www.spatialys.com<https://urldefense.com/v3/__http:/www.spatialys.com__;!!ACWV5N9M2RV99hQ!IqVgHqcg5DBb3fu5ZpXizGqYnezdKvCzFALf06Gt-Vs7RiPPCXFACcefd_slweWtNCqHy-G-OsmoPt9XZqR4DFVEpZ99$>

My software is free, but my time generally not.
GDAL: Auto register /scratch/oracle/md/gdal/lib/gdalplugins/gdal_GEOR.so using 
GDALRegister_GEOR.
 GDAL: Auto register 
/scratch/oracle/md/gdal/lib/gdalplugins/gdal_JP2OpenJPEG.so using 
GDALRegister_JP2OpenJPEG.
 GDAL: Auto register /scratch/oracle/md/gdal/lib/gdalplugins/ogr_OCI.so using 
RegisterOGROCI.
 Warning 1: tgrcb1.tif: TIFFReadDirectory:Sum of Photometric type-related color 
 channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color    
 channels as ExtraSamples.
 
 GDAL: GDALOpen(tgrcb1.tif, this=0x1740bb0) succeeds as GTiff.
 
 GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete()
 GTiff: ScanDirectories()
 Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels    
 and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as 
 ExtraSamples.
 GDAL: GDALDefaultOverviews::OverviewScan()
   
 GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete()
 GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x1af58d0)      
 succeeds as GeoRaster.
 PL/SQL:  
 DECLARE
   TAB VARCHAR2(68)  := UPPER('grtab');
   COL VARCHAR2(68)  := UPPER('grobj');
   OWN VARCHAR2(68)  := UPPER('herman');
   CNT NUMBER        := 0;
 BEGIN
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES
     WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
       INTO CNT USING TAB, OWN;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'CREATE TABLE grtab (grobj MDSYS.SDO_GEORASTER)';
     SDO_GEOR_UTL.createDMLTrigger( TAB,  COL );
   END IF;
 END;
 
 PL/SQL:
 DECLARE
   TAB  VARCHAR2(68)    := UPPER('grtab');
   COL  VARCHAR2(68)    := UPPER('grobj');
   OWN  VARCHAR2(68)    := UPPER('herman');
   CNT  NUMBER          := 0;
   GR1  SDO_GEORASTER   := NULL;
 BEGIN
 
   INSERT INTO grtab VALUES(6, sdo_geor.init('rdt_1', 6)) RETURNING grobj INTO  
 GR1;
 
   GR1.spatialExtent := NULL;
 
   SELECT GR1.RASTERDATATABLE INTO :rdt FROM DUAL;
   SELECT GR1.RASTERID        INTO :rid FROM DUAL;
 
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_OBJECT_TABLES
     WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
       INTO CNT USING :rdt, OWN;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES
       WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
         INTO CNT USING :rdt, OWN;
   END IF;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'CREATE TABLE '||:rdt||' (
       RASTERID           NUMBER,
       PYRAMIDLEVEL       NUMBER,
       BANDBLOCKNUMBER    NUMBER,
       ROWBLOCKNUMBER     NUMBER,
       COLUMNBLOCKNUMBER  NUMBER,
       BLOCKMBR           SDO_GEOMETRY,
       RASTERBLOCK        BLOB,
       CONSTRAINT '||:rdt||'_RDT_PK PRIMARY KEY (RASTERID, PYRAMIDLEVEL,
       BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER))
       LOB(RASTERBLOCK) STORE AS SECUREFILE(CACHE)';
   END IF;
 
   SDO_GEOR.createTemplate(GR1, 21001, 'dimSize=(448,503,7) blockSize=(512,     
 512, 1) cellDepth=8BIT_U interleaving=BSQ compression=NONE', null, 'TRUE');
 
   UPDATE grtab T SET grobj = GR1 WHERE
     T.grobj.RasterDataTable = :rdt AND
     T.grobj.RasterId = :rid;
 
   EXECUTE IMMEDIATE
     'SELECT T.grobj.METADATA.getClobVal()
      FROM   grtab T
      WHERE  T.grobj.RASTERDATATABLE = UPPER(:1)
        AND  T.grobj.RASTERID = :2'
       INTO  :metadata
      USING  :rdt, :rid;
 
 END;
 
 
 GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x1af58d0)
 PL/SQL:
 BEGIN
 
     IF :datatable IS NOT NULL AND :rasterid IS NOT NULL THEN
 
       EXECUTE IMMEDIATE
         'SELECT OWNER, TABLE_NAME, COLUMN_NAME
          FROM   ALL_SDO_GEOR_SYSDATA
          WHERE  RDT_TABLE_NAME = UPPER(:1)
            AND  RASTER_ID = :2'
         INTO  :owner, :table, :column
         USING :datatable, :rasterid;
 
       EXECUTE IMMEDIATE
         'SELECT T.'||:column||'.METADATA.getClobVal()
          FROM   '||:owner||'.'||:table||' T
          WHERE  T.'||:column||'.RASTERDATATABLE = UPPER(:1)
            AND  T.'||:column||'.RASTERID = :2'
         INTO  :metadata
         USING :datatable, :rasterid;
       :counter := 1;
 
     ELSE
 
       EXECUTE IMMEDIATE
         'SELECT T.'||:column||'.RASTERDATATABLE,
                 T.'||:column||'.RASTERID,
                 T.'||:column||'.METADATA.getClobVal()
          FROM  '||:owner||'.'||:table||' T
          WHERE '||:where
         INTO  :datatable, :rasterid, :metadata;
       :counter := 1;
 
     END IF;
 
   EXCEPTION
     WHEN no_data_found THEN :counter := 0;
     WHEN too_many_rows THEN :counter := 2;
 END;
 
 GDAL: GDALOpen(georaster:herman,vampire,cdb1_pdb1,RDT_1,6, this=0x1af58d0)     
 succeeds as GeoRaster.

GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/            
gdal_JP2OpenJPEG.so using GDALRegister_JP2OpenJPEG.
 GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/gdal_GEOR. 
 so using GDALRegister_GEOR.
 GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/ogr_OCI.so 
 using RegisterOGROCI.
 Warning 1: tgrcb1.tif: TIFFReadDirectory:Sum of Photometric type-related color 
 channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color    
 channels as ExtraSamples.
 
 GDAL: GDALOpen(tgrcb1.tif, this=0x2412370) succeeds as GTiff.
 
 PL/SQL: 
 SELECT T.grobj.RASTERDATATABLE, T.grobj.RASTERID,
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="ROW"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="COLUMN"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="BAND"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/cellDepth',    
 'xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, '/georasterMetadata/spatialReferenceInfo/     
 SRID','xmlns="http://xmlns.oracle.com/spatial/georaster";')
   FROM   grtab T   
   WHERE  grobj IS NOT NULL
   ORDER  BY T.grobj.RASTERDATATABLE ASC,
             T.grobj.RASTERID ASC
 
 GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)      
 succeeds as GeoRaster.
 GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)
 
 
 GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete()
 GTiff: ScanDirectories()
Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels     
and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as  
ExtraSamples.
 GDAL: GDALDefaultOverviews::OverviewScan()
 
 PL/SQL:
 SELECT T.grobj.RASTERDATATABLE, T.grobj.RASTERID,
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="ROW"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="COLUMN"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, 
'/georasterMetadata/rasterInfo/dimensionSize[@ 
type="BAND"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/cellDepth',    
 'xmlns="http://xmlns.oracle.com/spatial/georaster";'),
   extractValue(t.grobj.metadata, '/georasterMetadata/spatialReferenceInfo/     
 SRID','xmlns="http://xmlns.oracle.com/spatial/georaster";')
   FROM   grtab T
   WHERE  grobj IS NOT NULL
   ORDER  BY T.grobj.RASTERDATATABLE ASC,
             T.grobj.RASTERID ASC
 
 GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)      
 succeeds as GeoRaster.
 GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)


 GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete()
 GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)      
 succeeds as GeoRaster.
 PL/SQL: 
 DECLARE
   TAB VARCHAR2(68)  := UPPER('grtab');
   COL VARCHAR2(68)  := UPPER('grobj');
   OWN VARCHAR2(68)  := UPPER('herman');
   CNT NUMBER        := 0;
 BEGIN
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES
     WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
       INTO CNT USING TAB, OWN;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'CREATE TABLE grtab (grobj MDSYS.SDO_GEORASTER)';
     SDO_GEOR_UTL.createDMLTrigger( TAB,  COL );
   END IF;
 END;
 
 PL/SQL: 
 DECLARE
   TAB  VARCHAR2(68)    := UPPER('grtab');
   COL  VARCHAR2(68)    := UPPER('grobj');
   OWN  VARCHAR2(68)    := UPPER('herman');
   CNT  NUMBER          := 0;
   GR1  SDO_GEORASTER   := NULL;
 BEGIN
   INSERT INTO grtab VALUES(5, sdo_geor.init('rdt_1', 5)) RETURNING grobj INTO  
 GR1;
 
   GR1.spatialExtent := NULL;
 
   SELECT GR1.RASTERDATATABLE INTO :rdt FROM DUAL;
   SELECT GR1.RASTERID        INTO :rid FROM DUAL;
 
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_OBJECT_TABLES
     WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
       INTO CNT USING :rdt, OWN;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES
       WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)'
         INTO CNT USING :rdt, OWN;
   END IF;
 
   IF CNT = 0 THEN
     EXECUTE IMMEDIATE 'CREATE TABLE '||:rdt||' (
       RASTERID           NUMBER,
       PYRAMIDLEVEL       NUMBER,
       BANDBLOCKNUMBER    NUMBER,
       ROWBLOCKNUMBER     NUMBER,
       COLUMNBLOCKNUMBER  NUMBER,
       BLOCKMBR           SDO_GEOMETRY,
       RASTERBLOCK        BLOB,
       CONSTRAINT '||:rdt||'_RDT_PK PRIMARY KEY (RASTERID, PYRAMIDLEVEL,
       BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER))
       LOB(RASTERBLOCK) STORE AS SECUREFILE(CACHE)';
   END IF;
 
   SDO_GEOR.createTemplate(GR1, 21001, 'dimSize=(448,503,7) blockSize=(512,     
 512, 1) cellDepth=8BIT_U interleaving=BIP compression=NONE', null, 'TRUE');
 
   UPDATE grtab T SET grobj = GR1 WHERE
     T.grobj.RasterDataTable = :rdt AND
     T.grobj.RasterId = :rid;
 
   EXECUTE IMMEDIATE
     'SELECT T.grobj.METADATA.getClobVal()
      FROM   grtab T
      WHERE  T.grobj.RASTERDATATABLE = UPPER(:1)
        AND  T.grobj.RASTERID = :2'
       INTO  :metadata
      USING  :rdt, :rid;
 
 END;
 
 
 GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000)
 PL/SQL:
 BEGIN
 
     IF :datatable IS NOT NULL AND :rasterid IS NOT NULL THEN
 
       EXECUTE IMMEDIATE
         'SELECT OWNER, TABLE_NAME, COLUMN_NAME
          FROM   ALL_SDO_GEOR_SYSDATA
          WHERE  RDT_TABLE_NAME = UPPER(:1)
            AND  RASTER_ID = :2'
         INTO  :owner, :table, :column
         USING :datatable, :rasterid;
 
       EXECUTE IMMEDIATE
         'SELECT T.'||:column||'.METADATA.getClobVal()
          FROM   '||:owner||'.'||:table||' T
          WHERE  T.'||:column||'.RASTERDATATABLE = UPPER(:1)
            AND  T.'||:column||'.RASTERID = :2'
         INTO  :metadata
         USING :datatable, :rasterid;
       :counter := 1;
 
     ELSE
 
       EXECUTE IMMEDIATE
         'SELECT T.'||:column||'.RASTERDATATABLE,
                 T.'||:column||'.RASTERID,
                 T.'||:column||'.METADATA.getClobVal()
          FROM  '||:owner||'.'||:table||' T
          WHERE '||:where
         INTO  :datatable, :rasterid, :metadata;
       :counter := 1;
 
     END IF;
 
   EXCEPTION
     WHEN no_data_found THEN :counter := 0;
     WHEN too_many_rows THEN :counter := 2;
 END;
 
 GDAL: GDALOpen(georaster:herman,vampire,cdb1_pdb1,RDT_1,5, this=0x270c000)     
 succeeds as GeoRaster.
 
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to