4 changes: 2 additions & 2 deletions python/plugins/db_manager/db_plugins/postgis/data_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ def _createCursor(self):

def _sanitizeTableField(self, field):
# get fields, ignore geometry columns
if field.dataType.lower() == "geometry":
if QString(field.dataType).toLower() == "geometry":
return u"CASE WHEN %(fld)s IS NULL THEN NULL ELSE GeometryType(%(fld)s) END AS %(fld)s" % {'fld': self.db.quoteId(field.name)}
elif field.dataType.lower() == "raster":
elif QString(field.dataType).toLower() == "raster":
return u"CASE WHEN %(fld)s IS NULL THEN NULL ELSE 'RASTER' END AS %(fld)s" % {'fld': self.db.quoteId(field.name)}
return u"%s::text" % self.db.quoteId(field.name)

Expand Down
24 changes: 12 additions & 12 deletions python/plugins/db_manager/db_plugins/spatialite/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ def getVectorTables(self, schema=None):

# get geometry info from geometry_columns if exists
sql = u"""SELECT m.name, m.type = 'view', g.f_table_name, g.f_geometry_column, g.type, g.coord_dimension, g.srid
FROM sqlite_master AS m JOIN geometry_columns AS g ON lower(m.name) = lower(g.f_table_name)
FROM sqlite_master AS m JOIN geometry_columns AS g ON upper(m.name) = upper(g.f_table_name)
WHERE m.type in ('table', 'view')
ORDER BY m.name, g.f_geometry_column"""

Expand Down Expand Up @@ -243,9 +243,9 @@ def getRasterTables(self, schema=None):

# get geometry info from geometry_columns if exists
sql = u"""SELECT r.table_name||'_rasters', m.type = 'view', r.table_name, r.geometry_column, g.srid
FROM sqlite_master AS m JOIN geometry_columns AS g ON lower(m.name) = lower(g.f_table_name)
JOIN layer_params AS r ON REPLACE(m.name, '_metadata', '') = r.table_name
WHERE m.type in ('table', 'view') AND m.name = r.table_name||'_metadata'
FROM sqlite_master AS m JOIN geometry_columns AS g ON upper(m.name) = upper(g.f_table_name)
JOIN layer_params AS r ON upper(REPLACE(m.name, '_metadata', '')) = upper(r.table_name)
WHERE m.type in ('table', 'view') AND upper(m.name) = upper(r.table_name||'_metadata')
ORDER BY r.table_name"""

self._execute(c, sql)
Expand Down Expand Up @@ -298,7 +298,7 @@ def getTableConstraints(self, table):
def getTableTriggers(self, table):
c = self._get_cursor()
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT name, sql FROM sqlite_master WHERE lower(tbl_name) = lower(%s) AND type = 'trigger'" % (self.quoteString(tablename))
sql = u"SELECT name, sql FROM sqlite_master WHERE tbl_name = %s AND type = 'trigger'" % (self.quoteString(tablename))
self._execute(c, sql)
return c.fetchall()

Expand Down Expand Up @@ -339,7 +339,7 @@ def getSpatialRefInfo(self, srid):
def isVectorTable(self, table):
if self.has_geometry_columns:
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT count(*) FROM geometry_columns WHERE f_table_name = %s" % self.quoteString(tablename)
sql = u"SELECT count(*) FROM geometry_columns WHERE upper(f_table_name) = upper(%s)" % self.quoteString(tablename)
c = self._execute(None, sql)
ret = c.fetchone()
return res != None and ret[0] > 0
Expand All @@ -353,8 +353,8 @@ def isRasterTable(self, table):

sql = u"""SELECT count(*)
FROM layer_params AS r JOIN geometry_columns AS g
ON r.table_name||'_metadata' = g.f_table_name
WHERE r.table_name = REPLACE(%s, '_rasters', '')""" % self.quoteString(tablename)
ON upper(r.table_name||'_metadata') = upper(g.f_table_name)
WHERE upper(r.table_name) = upper(REPLACE(%s, '_rasters', ''))""" % self.quoteString(tablename)
c = self._execute(None, sql)
ret = c.fetchone()
return res != None and ret[0] > 0
Expand Down Expand Up @@ -388,7 +388,7 @@ def deleteTable(self, table):
sql = u"DROP TABLE %s" % self.quoteId(table)
self._execute(c, sql)
schema, tablename = self.getSchemaTableName(table)
sql = u"DELETE FROM geometry_columns WHERE lower(f_table_name) = lower(%s)" % self.quoteString(tablename)
sql = u"DELETE FROM geometry_columns WHERE upper(f_table_name) = upper(%s)" % self.quoteString(tablename)
self._execute(c, sql)
self._commit()

Expand Down Expand Up @@ -417,7 +417,7 @@ def renameTable(self, table, new_table):

# update geometry_columns
if self.has_geometry_columns:
sql = u"UPDATE geometry_columns SET f_table_name=%s WHERE f_table_name=%s" % (self.quoteString(new_table), self.quoteString(tablename))
sql = u"UPDATE geometry_columns SET f_table_name = %s WHERE upper(f_table_name) = upper(%s)" % (self.quoteString(new_table), self.quoteString(tablename))
self._execute(c, sql)

self._commit()
Expand Down Expand Up @@ -480,7 +480,7 @@ def setColumnNull(self, table, column, is_null):
def isGeometryColumn(self, table, column):
c = self._get_cursor()
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT count(*) > 0 FROM geometry_columns WHERE lower(f_table_name)=lower(%s) AND lower(f_geometry_column)=lower(%s)" % (self.quoteString(tablename), self.quoteString(column))
sql = u"SELECT count(*) > 0 FROM geometry_columns WHERE upper(f_table_name) = upper(%s) AND upper(f_geometry_column) = upper(%s)" % (self.quoteString(tablename), self.quoteString(column))
self._execute(c, sql)
return c.fetchone()[0] == 't'

Expand Down Expand Up @@ -547,7 +547,7 @@ def hasSpatialIndex(self, table, geom_column='geometry'):
return False
c = self._get_cursor()
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT spatial_index_enabled FROM geometry_columns WHERE f_table_name = %s AND f_geometry_column = %s" % (self.quoteString(tablename), self.quoteString(geom_column))
sql = u"SELECT spatial_index_enabled FROM geometry_columns WHERE upper(f_table_name) = upper(%s) AND upper(f_geometry_column) = upper(%s)" % (self.quoteString(tablename), self.quoteString(geom_column))
self._execute(c, sql)
row = c.fetchone()
return row != None and row[0] == 1
Expand Down
3 changes: 3 additions & 0 deletions python/plugins/db_manager/db_plugins/spatialite/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ class SLVectorTable(SLTable, VectorTable):
def __init__(self, row, db, schema=None):
SLTable.__init__(self, row[:-5], db, schema)
VectorTable.__init__(self, db, schema)
# SpatiaLite does case-insensitive checks for table names, but the
# SL provider didn't do the same in QGis < 1.9, so self.geomTableName
# stores the table name like stored in the geometry_columns table
self.geomTableName, self.geomColumn, self.geomType, self.geomDim, self.srid = row[-5:]

def uri(self):
Expand Down
2 changes: 1 addition & 1 deletion src/gui/raster/qgsrasterrendererwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ bool QgsRasterRendererWidget::bandMinMax( LoadMinMaxAlgo loadAlgo, int band, dou
{
return false;
}
if ( band < 0 )
if ( band <= 0 )
{
return false;
}
Expand Down
15 changes: 4 additions & 11 deletions src/plugins/delimited_text/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,9 @@
########################################################
# Files

SET (DLTEXT_SRCS
qgsdelimitedtextplugin.cpp
qgsdelimitedtextplugingui.cpp
)

SET (DLTEXT_UIS qgsdelimitedtextpluginguibase.ui)
SET (DLTEXT_SRCS qgsdelimitedtextplugin.cpp)

SET (DLTEXT_MOC_HDRS
qgsdelimitedtextplugin.h
qgsdelimitedtextplugingui.h
)
SET (DLTEXT_MOC_HDRS qgsdelimitedtextplugin.h)

SET (DLTEXT_RCCS delimited_text.qrc)

Expand All @@ -25,13 +17,14 @@ QT4_WRAP_CPP (DLTEXT_MOC_SRCS ${DLTEXT_MOC_HDRS})

QT4_ADD_RESOURCES(DLTEXT_RCC_SRCS ${DLTEXT_RCCS})

ADD_LIBRARY (delimitedtextplugin MODULE ${DLTEXT_SRCS} ${DLTEXT_MOC_SRCS} ${DLTEXT_RCC_SRCS} ${DLTEXT_UIS_H})
ADD_LIBRARY (delimitedtextplugin MODULE ${DLTEXT_SRCS} ${DLTEXT_MOC_SRCS} ${DLTEXT_RCC_SRCS})

INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
../../core ../../core/raster ../../core/renderer ../../core/symbology
../../gui
..
../../providers/delimitedtext/delimitedtext
)

TARGET_LINK_LIBRARIES(delimitedtextplugin
Expand Down
33 changes: 17 additions & 16 deletions src/plugins/delimited_text/qgsdelimitedtextplugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@
#include "qgisgui.h"
#include "qgsapplication.h"
#include "qgsmaplayer.h"
#include "qgsproviderregistry.h"
#include "qgsdelimitedtextplugin.h"

#include <QMenu>
#include <QAction>
#include <QFile>
#include <QToolBar>

//the gui subclass
#include "qgsdelimitedtextplugingui.h"
#include <QMessageBox>

static const QString pluginVersion = QObject::tr( "Version 0.2" );
static const QString description_ = QObject::tr( "Loads and displays delimited text files containing x,y coordinates" );
Expand Down Expand Up @@ -118,22 +117,24 @@ void QgsDelimitedTextPlugin::initGui()
// Slot called when the buffer menu item is activated
void QgsDelimitedTextPlugin::run()
{
QgsDelimitedTextPluginGui *myQgsDelimitedTextPluginGui =
new QgsDelimitedTextPluginGui( qGisInterface,
qGisInterface->mainWindow(), QgisGui::ModalDialogFlags );
myQgsDelimitedTextPluginGui->setAttribute( Qt::WA_DeleteOnClose );
// show the DelimitedText dialog
QDialog *dlg = dynamic_cast<QDialog*>( QgsProviderRegistry::instance()->selectWidget( QString( "delimitedtext" ), qGisInterface->mainWindow() ) );
if ( !dlg )
{
QMessageBox::warning( qGisInterface->mainWindow(), tr( "Delimited Text" ), tr( "Cannot get Delimited Text select dialog from provider." ) );
return;
}
//listen for when the layer has been made so we can draw it
connect( myQgsDelimitedTextPluginGui,
SIGNAL( drawVectorLayer( QString, QString, QString ) ),
this, SLOT( drawVectorLayer( QString, QString, QString ) ) );
myQgsDelimitedTextPluginGui->exec();
connect( dlg, SIGNAL( addVectorLayer( QString, QString, QString ) ),
this, SLOT( addVectorLayer( QString, QString, QString ) ) );

dlg->exec();
delete dlg;
}

//!draw a vector layer in the qui - intended to respond to signal
//sent by diolog when it as finished creating a layer
////needs to be given vectorLayerPath, baseName,
//providerKey ("ogr" or "postgres");
void QgsDelimitedTextPlugin::drawVectorLayer( QString thePathNameQString,
//!add a vector layer - intended to respond to signal
//sent by dialog when it as finished
void QgsDelimitedTextPlugin::addVectorLayer( QString thePathNameQString,
QString theBaseNameQString, QString theProviderQString )
{
qGisInterface->addVectorLayer( thePathNameQString,
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/delimited_text/qgsdelimitedtextplugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ class QgsDelimitedTextPlugin: public QObject, public QgisPlugin, private Ui::Qgs
virtual void initGui();
//! Show the dialog box
void run();
//! Add a vector layer given vectorLayerPath, baseName, providerKey ("ogr" or "postgres");
void drawVectorLayer( QString, QString, QString );
//! Add a vector layer given vectorLayerPath, baseName, providerKey (i.e. delimitedtext)
void addVectorLayer( QString, QString, QString );
//! unload the plugin
void unload();
//! show the help document
Expand Down
14 changes: 10 additions & 4 deletions src/providers/delimitedtext/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@
########################################################
# Files

SET (DTEXT_SRCS qgsdelimitedtextprovider.cpp)
SET (DTEXT_SRCS
qgsdelimitedtextprovider.cpp
qgsdelimitedtextsourceselect.cpp
)

SET (DTEXT_MOC_HDRS qgsdelimitedtextprovider.h)
SET (DTEXT_MOC_HDRS
qgsdelimitedtextprovider.h
qgsdelimitedtextsourceselect.h
)

########################################################
# Build

INCLUDE_DIRECTORIES(
.
../../core
${GDAL_INCLUDE_DIR}
../../gui
${GEOS_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/../../ui
)

QT4_WRAP_CPP(DTEXT_MOC_SRCS ${DTEXT_MOC_HDRS})
Expand Down
26 changes: 15 additions & 11 deletions src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
#include "qgsrectangle.h"
#include "qgis.h"

#include "qgsdelimitedtextsourceselect.h"

static const QString TEXT_PROVIDER_KEY = "delimitedtext";
static const QString TEXT_PROVIDER_DESCRIPTION = "Delimited text data provider";

Expand Down Expand Up @@ -66,19 +68,19 @@ QString QgsDelimitedTextProvider::readLine( QTextStream *stream )
return buffer;
}

QStringList QgsDelimitedTextProvider::splitLine( QString line )
QStringList QgsDelimitedTextProvider::splitLine( QString line, QString delimiterType, QString delimiter )
{
QgsDebugMsgLevel( "Attempting to split the input line: " + line + " using delimiter " + mDelimiter, 3 );
QgsDebugMsgLevel( "Attempting to split the input line: " + line + " using delimiter " + delimiter, 3 );

QStringList parts;
if ( mDelimiterType == "regexp" )
parts = line.split( mDelimiterRegexp );
if ( delimiterType == "regexp" )
parts = line.split( QRegExp( delimiter ) );
else
parts = line.split( mDelimiter );
parts = line.split( delimiter );

QgsDebugMsgLevel( "Split line into " + QString::number( parts.size() ) + " parts", 3 );

if ( mDelimiterType == "plain" )
if ( delimiterType == "plain" )
{
QChar delim;
int i = 0, first = parts.size();
Expand Down Expand Up @@ -106,7 +108,7 @@ QStringList QgsDelimitedTextProvider::splitLine( QString line )
i--;
}

parts.insert( first, values.join( mDelimiter ) );
parts.insert( first, values.join( delimiter ) );
}

first = -1;
Expand All @@ -130,7 +132,6 @@ QStringList QgsDelimitedTextProvider::splitLine( QString line )
QgsDelimitedTextProvider::QgsDelimitedTextProvider( QString uri )
: QgsVectorDataProvider( uri )
, mDelimiter( "," )
, mDelimiterRegexp()
, mDelimiterType( "plain" )
, mFieldCount( 0 )
, mXFieldIndex( -1 )
Expand Down Expand Up @@ -183,9 +184,7 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider( QString uri )
QgsDebugMsg( "skipLines is: " + QString::number( mSkipLines ) );

// if delimiter contains some special characters, convert them
if ( mDelimiterType == "regexp" )
mDelimiterRegexp = QRegExp( mDelimiter );
else
if ( mDelimiterType != "regexp" )
mDelimiter.replace( "\\t", "\t" ); // replace "\t" with a real tabulator

// Set the selection rectangle to null
Expand Down Expand Up @@ -771,3 +770,8 @@ QGISEXTERN bool isProvider()
{
return true;
}

QGISEXTERN QgsDelimitedTextSourceSelect *selectWidget( QWidget *parent, Qt::WFlags fl )
{
return new QgsDelimitedTextSourceSelect( parent, fl );
}
7 changes: 5 additions & 2 deletions src/providers/delimitedtext/qgsdelimitedtextprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,10 @@ class QgsDelimitedTextProvider : public QgsVectorDataProvider
*/
bool boundsCheck( QgsGeometry *geom );


static QString readLine( QTextStream *stream );
static QStringList splitLine( QString line, QString delimiterType, QString delimiter );

private:

//! Fields
Expand Down Expand Up @@ -246,6 +250,5 @@ class QgsDelimitedTextProvider : public QgsVectorDataProvider

QGis::WkbType mWkbType;

QString readLine( QTextStream *stream );
QStringList splitLine( QString line );
QStringList splitLine( QString line ) { return splitLine( line, mDelimiterType, mDelimiter ); }
};
Loading