Skip to content

Commit 942c5e5

Browse files
author
Hugo Mercier
committed
Fix virtual layer file name handling (in Windows)
1 parent 30910df commit 942c5e5

File tree

4 files changed

+6
-5
lines changed

4 files changed

+6
-5
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def _get_cursor_columns(self, c):
126126
tf.close()
127127

128128
q = QUrl.toPercentEncoding(c.sql)
129-
p = QgsVectorLayer("%s?query=%s" % (tmp, q), "vv", "virtual")
129+
p = QgsVectorLayer("%s?query=%s" % (QUrl.fromLocalFile(tmp).toString(), q), "vv", "virtual")
130130
if not p.isValid():
131131
return []
132132
f = [f.name() for f in p.fields()]

python/plugins/db_manager/db_plugins/vlayers/data_model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def __init__(self, db, sql, parent=None):
7373
tmp = tf.fileName()
7474
tf.close()
7575

76-
p = QgsVectorLayer("%s?query=%s" % (tmp, q), "vv", "virtual")
76+
p = QgsVectorLayer("%s?query=%s" % (QUrl.fromLocalFile(tmp).toString(), q), "vv", "virtual")
7777
self._secs = t.elapsed() / 1000.0
7878

7979
if not p.isValid():

src/core/qgsvirtuallayerdefinition.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ QgsVirtualLayerDefinition QgsVirtualLayerDefinition::fromUrl( const QUrl& url )
168168
QUrl QgsVirtualLayerDefinition::toUrl() const
169169
{
170170
QUrl url;
171-
url.setPath( filePath() );
171+
if ( !filePath().isEmpty() )
172+
url = QUrl::fromLocalFile( filePath() );
172173

173174
Q_FOREACH ( const QgsVirtualLayerDefinition::SourceLayer& l, sourceLayers() )
174175
{

tests/src/python/test_qgsvirtuallayerdefinition.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ def test1(self):
3232
d = QgsVirtualLayerDefinition()
3333
self.assertEqual(d.toString(), "")
3434
d.setFilePath("/file")
35-
self.assertEqual(d.toString(), "/file")
35+
self.assertEqual(d.toString(), "file:///file")
3636
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).filePath(), "/file")
3737
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).filePath(), "/file")
3838
d.setFilePath("C:\\file")
39-
self.assertEqual(d.toString(), "C:%5Cfile")
39+
self.assertEqual(d.toString(), "file:///C:%5Cfile")
4040
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).filePath(), "C:\\file")
4141
d.setQuery("SELECT * FROM mytable")
4242
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).query(), "SELECT * FROM mytable")

0 commit comments

Comments
 (0)