Skip to content

Commit 5adb34d

Browse files
committed
Revert "Merge pull request #9164 from elpaso/bugfix-21227-layer-rename-styles"
This reverts commit 0d95ec8.
1 parent ab60a3e commit 5adb34d

12 files changed

+26
-163
lines changed

python/plugins/db_manager/db_manager.py

-2
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ def itemChanged(self, item):
8888
with OverrideCursor(Qt.WaitCursor):
8989
try:
9090
self.reloadButtons()
91-
# Force-reload information on the layer
92-
self.info.setDirty()
9391
# clear preview, this will delete the layer in preview tab
9492
self.preview.loadPreview(None)
9593
self.refreshTabs()

python/plugins/db_manager/db_plugins/gpkg/connector.py

+19-19
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
from ..plugin import ConnectionError, DbError, Table
3131

3232
from qgis.utils import spatialite_connect
33-
from qgis.core import QgsApplication
34-
3533
import sqlite3
3634

3735
from osgeo import gdal, ogr, osr
@@ -592,26 +590,28 @@ def emptyTable(self, table):
592590
self._execute_and_commit(sql)
593591

594592
def renameTable(self, table, new_table):
595-
"""Renames the table
596-
597-
:param table: tuple with schema and table names
598-
:type table: tuple (str, str)
599-
:param new_table: new table name
600-
:type new_table: str
601-
:return: true on success
602-
:rtype: bool
603-
"""
593+
""" rename a table """
594+
595+
if self.isRasterTable(table):
596+
return False
604597

605-
table_name = table[1]
606-
provider = [p for p in QgsApplication.dataItemProviderRegistry().providers() if p.name() == 'OGR'][0]
607-
collection_item = provider.createDataItem(self.dbname, None)
608-
data_item = [c for c in collection_item.createChildren() if c.name() == table_name][0]
609-
result = data_item.rename(new_table)
598+
_, tablename = self.getSchemaTableName(table)
599+
if new_table == tablename:
600+
return True
601+
602+
if tablename.find('"') >= 0:
603+
tablename = self.quoteId(tablename)
604+
if new_table.find('"') >= 0:
605+
new_table = self.quoteId(new_table)
606+
607+
gdal.ErrorReset()
608+
self.gdal_ds.ExecuteSQL('ALTER TABLE %s RENAME TO %s' % (tablename, new_table))
609+
if gdal.GetLastErrorMsg() != '':
610+
return False
610611
# we need to reopen after renaming since OGR doesn't update its
611612
# internal state
612-
if result:
613-
self._opendb()
614-
return result
613+
self._opendb()
614+
return True
615615

616616
def moveTable(self, table, new_table, new_schema=None):
617617
return self.renameTable(table, new_table)

python/plugins/db_manager/db_plugins/plugin.py

-4
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,6 @@ def rename(self, new_name):
594594
ret = self.database().connector.renameSchema(self.name, new_name)
595595
if ret is not False:
596596
self.name = new_name
597-
# FIXME: refresh triggers
598597
self.refresh()
599598
return ret
600599

@@ -653,9 +652,6 @@ def rename(self, new_name):
653652
ret = self.database().connector.renameTable((self.schemaName(), self.name), new_name)
654653
if ret is not False:
655654
self.name = new_name
656-
self._triggers = None
657-
self._rules = None
658-
self._constraints = None
659655
self.refresh()
660656
return ret
661657

python/plugins/db_manager/layer_preview.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def __init__(self, parent=None):
4040

4141
self.item = None
4242
self.dirty = False
43-
self.currentLayerId = None
43+
self.currentLayer = None
4444

4545
# reuse settings from QGIS
4646
settings = QgsSettings()
@@ -118,9 +118,9 @@ def _loadTablePreview(self, table, limit=False):
118118
vl = None
119119

120120
# remove old layer (if any) and set new
121-
if self.currentLayerId:
122-
if not QgsProject.instance().layerTreeRoot().findLayer(self.currentLayerId):
123-
QgsProject.instance().removeMapLayers([self.currentLayerId])
121+
if self.currentLayer:
122+
if not QgsProject.instance().layerTreeRoot().findLayer(self.currentLayer.id()):
123+
QgsProject.instance().removeMapLayers([self.currentLayer.id()])
124124

125125
if vl and vl.isValid():
126126
self.setLayers([vl])
@@ -129,7 +129,7 @@ def _loadTablePreview(self, table, limit=False):
129129
else:
130130
self.setLayers([])
131131

132-
self.currentLayerId = vl.id()
132+
self.currentLayer = vl
133133

134134
self.freeze(False)
135135
super().refresh()

src/providers/ogr/CMakeLists.txt

-8
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,18 @@ INCLUDE_DIRECTORIES(SYSTEM
6363

6464

6565
ADD_LIBRARY(ogrprovider MODULE ${OGR_SRCS} ${OGR_MOC_SRCS})
66-
ADD_LIBRARY(ogrprovider_a STATIC ${OGR_SRCS} ${OGR_MOC_SRCS})
6766

6867
TARGET_LINK_LIBRARIES(ogrprovider
6968
qgis_core
7069
)
7170

72-
TARGET_LINK_LIBRARIES(ogrprovider_a
73-
qgis_core
74-
)
7571

7672
IF (WITH_GUI)
7773
TARGET_LINK_LIBRARIES (ogrprovider
7874
qgis_gui
7975
)
80-
TARGET_LINK_LIBRARIES (ogrprovider_a
81-
qgis_gui
82-
)
8376
ENDIF ()
8477

85-
8678
IF (MSVC)
8779
#needed for linking to gdal which needs odbc
8880
SET(TARGET_LINK_LIBRARIES ${TARGET_LINK_LIBRARIE} odbc32 odbccp32)

src/providers/ogr/qgsgeopackagedataitems.cpp

-84
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
#include "qgstaskmanager.h"
4040
#include "qgsproviderregistry.h"
4141
#include "qgsproxyprogresstask.h"
42-
#include "qgssqliteutils.h"
4342

4443
QGISEXTERN bool deleteLayer( const QString &uri, const QString &errCause );
4544

@@ -744,86 +743,3 @@ bool QgsGeoPackageVectorLayerItem::executeDeleteLayer( QString &errCause )
744743
return ::deleteLayer( mUri, errCause );
745744
}
746745

747-
bool QgsGeoPackageVectorLayerItem::rename( const QString &name )
748-
{
749-
// Checks that name does not exist yet
750-
if ( tableNames().contains( name ) )
751-
{
752-
return false;
753-
}
754-
// Check if the layer(s) are in the registry
755-
const QList<QgsMapLayer *> layersList( layersInProject() );
756-
if ( ! layersList.isEmpty( ) )
757-
{
758-
if ( QMessageBox::question( nullptr, QObject::tr( "Rename Layer" ), QObject::tr( "The layer <b>%1</b> is loaded in the current project with name <b>%2</b>,"
759-
" do you want to remove it from the project and rename it?" ).arg( mName, layersList.at( 0 )->name() ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
760-
{
761-
return false;
762-
}
763-
}
764-
if ( ! layersList.isEmpty() )
765-
{
766-
QgsProject::instance()->removeMapLayers( layersList );
767-
}
768-
769-
const QVariantMap parts = QgsProviderRegistry::instance()->decodeUri( mProviderKey, mUri );
770-
QString errCause;
771-
if ( parts.empty() || parts.value( QStringLiteral( "path" ) ).isNull() || parts.value( QStringLiteral( "layerName" ) ).isNull() )
772-
{
773-
errCause = QObject::tr( "Layer URI %1 is not valid!" ).arg( mUri );
774-
}
775-
else
776-
{
777-
QString filePath = parts.value( QStringLiteral( "path" ) ).toString();
778-
const QList<QgsMapLayer *> layersList( layersInProject() );
779-
if ( ! layersList.isEmpty( ) )
780-
{
781-
if ( QMessageBox::question( nullptr, QObject::tr( "Rename Layer" ), QObject::tr( "The layer <b>%1</b> exists in the current project <b>%2</b>,"
782-
" do you want to remove it from the project and rename it?" ).arg( mName, layersList.at( 0 )->name() ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
783-
{
784-
return false;
785-
}
786-
}
787-
if ( ! layersList.isEmpty() )
788-
{
789-
QgsProject::instance()->removeMapLayers( layersList );
790-
}
791-
792-
// TODO: maybe an index?
793-
QString oldName = parts.value( QStringLiteral( "layerName" ) ).toString();
794-
795-
GDALDatasetH hDS = GDALOpenEx( filePath.toUtf8().constData(), GDAL_OF_VECTOR | GDAL_OF_UPDATE, nullptr, nullptr, nullptr );
796-
if ( hDS )
797-
{
798-
QString sql( QStringLiteral( "ALTER TABLE %1 RENAME TO %2" )
799-
.arg( QgsSqliteUtils::quotedIdentifier( oldName ),
800-
QgsSqliteUtils::quotedIdentifier( name ) ) );
801-
OGRLayerH ogrLayer( GDALDatasetExecuteSQL( hDS, sql.toUtf8().constData(), nullptr, nullptr ) );
802-
if ( ogrLayer )
803-
GDALDatasetReleaseResultSet( hDS, ogrLayer );
804-
errCause = CPLGetLastErrorMsg( );
805-
if ( errCause.isEmpty() )
806-
{
807-
sql = QStringLiteral( "UPDATE layer_styles SET f_table_name = %2 WHERE f_table_name = %1" )
808-
.arg( QgsSqliteUtils::quotedString( oldName ),
809-
QgsSqliteUtils::quotedString( name ) );
810-
ogrLayer = GDALDatasetExecuteSQL( hDS, sql.toUtf8().constData(), nullptr, nullptr );
811-
if ( ogrLayer )
812-
GDALDatasetReleaseResultSet( hDS, ogrLayer );
813-
}
814-
GDALClose( hDS );
815-
}
816-
else
817-
{
818-
errCause = QObject::tr( "There was an error opening %1!" ).arg( filePath );
819-
}
820-
}
821-
822-
if ( ! errCause.isEmpty() )
823-
QMessageBox::critical( nullptr, QObject::tr( "Error renaming layer" ), errCause );
824-
else if ( mParent )
825-
mParent->refreshConnections();
826-
827-
return errCause.isEmpty();
828-
}
829-

src/providers/ogr/qgsogrprovider.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -6455,4 +6455,3 @@ QGISEXTERN QgsTransaction *createTransaction( const QString &connString )
64556455

64566456
return new QgsOgrTransaction( connString, ds );
64576457
}
6458-

tests/src/providers/CMakeLists.txt

-3
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
1616
${CMAKE_SOURCE_DIR}/src/providers/wms
1717
${CMAKE_SOURCE_DIR}/src/providers/postgres
1818
${CMAKE_SOURCE_DIR}/src/providers/arcgisrest
19-
${CMAKE_SOURCE_DIR}/src/providers/mdal
20-
${CMAKE_SOURCE_DIR}/src/providers/ogr
2119
${CMAKE_SOURCE_DIR}/src/test
2220
${CMAKE_BINARY_DIR}/src/core
2321
)
@@ -74,7 +72,6 @@ ADD_QGIS_TEST(gdalprovidertest testqgsgdalprovider.cpp)
7472

7573
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
7674
ADD_QGIS_TEST(ogrprovidertest testqgsogrprovider.cpp)
77-
TARGET_LINK_LIBRARIES(qgis_ogrprovidertest ogrprovider_a)
7875

7976
ADD_QGIS_TEST(wmscapabilitiestest
8077
testqgswmscapabilities.cpp)

tests/src/providers/testqgsogrprovider.cpp

-35
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
#include <qgsproviderregistry.h>
2525
#include <qgsvectorlayer.h>
2626
#include <qgsnetworkaccessmanager.h>
27-
#include <qgsgeopackagedataitems.h>
28-
#include <qgsdataitem.h>
2927

3028
#include <QObject>
3129

@@ -48,8 +46,6 @@ class TestQgsOgrProvider : public QObject
4846

4947
void setupProxy();
5048
void testThread();
51-
//! Test GPKG data items rename
52-
void testGpkgDataItemRename();
5349

5450
private:
5551
QString mTestDataDir;
@@ -205,37 +201,6 @@ void TestQgsOgrProvider::testThread()
205201

206202
}
207203

208-
void TestQgsOgrProvider::testGpkgDataItemRename()
209-
{
210-
QTemporaryFile f( QStringLiteral( "qgis-XXXXXX.gpkg" ) );
211-
f.open();
212-
f.close();
213-
QString fileName { f.fileName( ) };
214-
f.remove();
215-
QVERIFY( QFile::copy( QStringLiteral( "%1/provider/bug_21227-rename-styles.gpkg" ).arg( mTestDataDir ), fileName ) );
216-
QgsGeoPackageVectorLayerItem item( nullptr,
217-
QStringLiteral( "Layer 1" ),
218-
QStringLiteral( "gpkg:/%1|layername=layer 1" )
219-
.arg( fileName ),
220-
QStringLiteral( "%1|layername=layer 1" ).arg( fileName ),
221-
QgsLayerItem::LayerType::TableLayer );
222-
item.rename( "layer 3" );
223-
// Check that the style is still available
224-
QgsVectorLayer metadataLayer( QStringLiteral( "/%1|layername=layer_styles" ).arg( fileName ) );
225-
QVERIFY( metadataLayer.isValid() );
226-
QgsFeature feature;
227-
QgsFeatureIterator it = metadataLayer.getFeatures( QgsFeatureRequest( QgsExpression( QStringLiteral( "\"f_table_name\" = 'layer 3'" ) ) ) );
228-
QVERIFY( it.nextFeature( feature ) );
229-
QVERIFY( feature.isValid() );
230-
QCOMPARE( feature.attribute( QStringLiteral( "styleName" ) ).toString(), QString( "style for layer 1" ) );
231-
it = metadataLayer.getFeatures( QgsFeatureRequest( QgsExpression( QStringLiteral( "\"f_table_name\" = 'layer 1' " ) ) ) );
232-
QVERIFY( !it.nextFeature( feature ) );
233-
it = metadataLayer.getFeatures( QgsFeatureRequest( QgsExpression( QStringLiteral( "\"f_table_name\" = 'layer 2' " ) ) ) );
234-
QVERIFY( it.nextFeature( feature ) );
235-
QVERIFY( feature.isValid() );
236-
QCOMPARE( feature.attribute( QStringLiteral( "styleName" ) ).toString(), QString( "style for layer 2" ) );
237-
}
238-
239204

240205
QGSTEST_MAIN( TestQgsOgrProvider )
241206
#include "testqgsogrprovider.moc"

tests/src/python/test_provider_ogr_gpkg.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1296,8 +1296,8 @@ def testJson(self):
12961296
def test_quote_identifier(self):
12971297
"""Regression #21100"""
12981298

1299-
tmpfile = os.path.join(self.basetestpath, 'bug_21100-wierd_field_names.gpkg') # spellok
1300-
shutil.copy(os.path.join(unitTestDataPath(''), 'bug_21100-wierd_field_names.gpkg'), tmpfile) # spellok
1299+
tmpfile = os.path.join(self.basetestpath, 'bug21100-wierd_field_names.gpkg') # spellok
1300+
shutil.copy(os.path.join(unitTestDataPath(''), 'bug21100-wierd_field_names.gpkg'), tmpfile) # spellok
13011301
vl = QgsVectorLayer('{}|layerid=0'.format(tmpfile), 'foo', 'ogr')
13021302
self.assertTrue(vl.isValid())
13031303
for i in range(1, len(vl.fields())):
Binary file not shown.

0 commit comments

Comments
 (0)