mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-06-14 23:30:25 +02:00
With MySQL v5.7+ you have to specifically set either a valid date or NULL otherwise you get SQL errors. In previous versions setting a date to "" implied NULL, this is no longer the case which causes nice SQL errors all over the place. This new RDCheckDateTime is an overloaded function that calls the respective isValid method of QDate/Time/DateTime and either returns the requested formatted string or returns NULL as a string. This can then be used as part of an INSERT/UPDATE without breaking the stricter NULL interpretation of MySQL v5.7+.
227 lines
4.0 KiB
C++
227 lines
4.0 KiB
C++
// rdescape_string.cpp
|
||
//
|
||
// Escape non-valid characters in a string.
|
||
//
|
||
// (C) Copyright 2002-2005,2016 Fred Gleason <fredg@paravelsystems.com>
|
||
//
|
||
// This program is free software; you can redistribute it and/or modify
|
||
// it under the terms of the GNU General Public License version 2 as
|
||
// published by the Free Software Foundation.
|
||
//
|
||
// This program is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
//
|
||
// You should have received a copy of the GNU General Public
|
||
// License along with this program; if not, write to the Free Software
|
||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
//
|
||
|
||
#include <vector>
|
||
|
||
#include <rdescape_string.h>
|
||
#include <qdatetime.h>
|
||
|
||
/**
|
||
* RDCheckDateTime - Checks for QTime.isValid
|
||
* @param time - QTime object
|
||
* @param format - QString representing time format e.g. HH:MM
|
||
* @return QString, "NULL" if not Valid else formatted Time String
|
||
*/
|
||
QString RDCheckDateTime(QTime const &time, QString const &format)
|
||
{
|
||
QString checkedValue = "NULL";
|
||
|
||
if(time.isValid())
|
||
checkedValue = time.toString(format);
|
||
|
||
return checkedValue;
|
||
|
||
}
|
||
|
||
/**
|
||
* RDCheckDateTime - Checks for QDateTime.isValid
|
||
* @param datetime - QDateTime object
|
||
* @param format - QString representing date time format e.g. yyyy-mm-dd HH:MM
|
||
* @return QString, "NULL" if not Valid else formatted DateTime String
|
||
*/
|
||
QString RDCheckDateTime(QDateTime const &datetime, QString const &format)
|
||
{
|
||
QString checkedValue = "NULL";
|
||
|
||
if(datetime.isValid())
|
||
checkedValue = datetime.toString(format);
|
||
|
||
return checkedValue;
|
||
|
||
}
|
||
|
||
/**
|
||
* RDCheckDateTime - Checks for QDate.isValid
|
||
* @param date - QDate object
|
||
* @param format - QString representing date format e.g. yyyy-mm-dd
|
||
* @return QString, "NULL" if not Valid else formatted Date String
|
||
*/
|
||
QString RDCheckDateTime(QDate const &date, QString const &format)
|
||
{
|
||
QString checkedValue = "NULL";
|
||
|
||
if(date.isValid())
|
||
checkedValue = date.toString(format);
|
||
|
||
return checkedValue;
|
||
|
||
}
|
||
|
||
QString RDEscapeString(QString const &str)
|
||
{
|
||
QString res;
|
||
|
||
for(unsigned i=0;i<str.length();i++) {
|
||
switch(((const char *)str)[i]) {
|
||
case '(':
|
||
res+=QString("\\\(");
|
||
break;
|
||
|
||
case ')':
|
||
res+=QString("\\)");
|
||
break;
|
||
|
||
case '{':
|
||
res+=QString("\\\{");
|
||
break;
|
||
|
||
case '"':
|
||
res+=QString("\\\"");
|
||
break;
|
||
|
||
case '`':
|
||
res+=QString("\\`");
|
||
break;
|
||
|
||
case '[':
|
||
res+=QString("\\\[");
|
||
break;
|
||
|
||
case '\'':
|
||
res+=QString("\\\'");
|
||
break;
|
||
|
||
case '\\':
|
||
res+=QString("\\");
|
||
res+=QString("\\");
|
||
break;
|
||
|
||
case '?':
|
||
res+=QString("\\\?");
|
||
break;
|
||
|
||
case ' ':
|
||
res+=QString("\\ ");
|
||
break;
|
||
|
||
case '&':
|
||
res+=QString("\\&");
|
||
break;
|
||
|
||
case ';':
|
||
res+=QString("\\;");
|
||
break;
|
||
|
||
case '<':
|
||
res+=QString("\\<");
|
||
break;
|
||
|
||
case '>':
|
||
res+=QString("\\>");
|
||
break;
|
||
|
||
case '|':
|
||
res+=QString("\\|");
|
||
break;
|
||
|
||
default:
|
||
res+=((const char *)str)[i];
|
||
break;
|
||
}
|
||
}
|
||
|
||
/*
|
||
for(unsigned i=0;i<str.length();i++) {
|
||
switch(((const char *)str)[i]) {
|
||
case '(':
|
||
res+=QString("\\\(");
|
||
break;
|
||
|
||
case ')':
|
||
res+=QString("\\)");
|
||
break;
|
||
|
||
case '{':
|
||
res+=QString("\\\{");
|
||
break;
|
||
|
||
case '"':
|
||
res+=QString("\\\"");
|
||
break;
|
||
|
||
case '´':
|
||
res+=QString("\\´");
|
||
break;
|
||
|
||
case '`':
|
||
res+=QString("\\`");
|
||
break;
|
||
|
||
case '[':
|
||
res+=QString("\\\[");
|
||
break;
|
||
|
||
case '\'':
|
||
res+=QString("\\\'");
|
||
break;
|
||
|
||
case '\\':
|
||
res+=QString("\\");
|
||
res+=QString("\\");
|
||
break;
|
||
|
||
case '?':
|
||
res+=QString("\\\?");
|
||
break;
|
||
|
||
case ' ':
|
||
res+=QString("\\ ");
|
||
break;
|
||
|
||
case '&':
|
||
res+=QString("\\&");
|
||
break;
|
||
|
||
case ';':
|
||
res+=QString("\\;");
|
||
break;
|
||
|
||
case '<':
|
||
res+=QString("\\<");
|
||
break;
|
||
|
||
case '>':
|
||
res+=QString("\\>");
|
||
break;
|
||
|
||
case '|':
|
||
res+=QString("\\|");
|
||
break;
|
||
|
||
default:
|
||
res+=((const char *)str)[i];
|
||
break;
|
||
}
|
||
}
|
||
*/
|
||
|
||
return res;
|
||
}
|