kexi

pqxxdriver.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2003 Adam Pigg <adam@piggz.co.uk>
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this program; see the file COPYING. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include <kexidb/connection.h>
21#include <kexidb/drivermanager.h>
22#include <kexidb/driver_p.h>
23#include <kexidb/utils.h>
24#include "pqxxdriver.h"
25#include "pqxxconnection.h"
26#include <string>
27
28#include <kdebug.h>
29
30using namespace KexiDB;
31
32KEXIDB_DRIVER_INFO( pqxxSqlDriver, pqxxsql )
33
34//==================================================================================
35//
36pqxxSqlDriver::pqxxSqlDriver( TQObject *parent, const char *name, const TQStringList &args )
37 : Driver( parent, name, args )
38{
39 d->isFileDriver = false;
42
43 beh->UNSIGNED_TYPE_KEYWORD = "";
44 beh->ROW_ID_FIELD_NAME = "xmin";
45 beh->SPECIAL_AUTO_INCREMENT_DEF = false;
46 beh->AUTO_INCREMENT_TYPE = "SERIAL";
47 beh->AUTO_INCREMENT_FIELD_OPTION = "";
48 beh->AUTO_INCREMENT_PK_FIELD_OPTION = "PRIMARY KEY";
49 beh->ALWAYS_AVAILABLE_DATABASE_NAME = "template1";
50 beh->QUOTATION_MARKS_FOR_IDENTIFIER = '"';
51 beh->SQL_KEYWORDS = keywords;
52 initSQLKeywords(233);
53
54 //predefined properties
55 d->properties["client_library_version"] = "";//TODO
56 d->properties["default_server_encoding"] = ""; //TODO
57
58 d->typeNames[Field::Byte]="SMALLINT";
59 d->typeNames[Field::ShortInteger]="SMALLINT";
60 d->typeNames[Field::Integer]="INTEGER";
61 d->typeNames[Field::BigInteger]="BIGINT";
62 d->typeNames[Field::Boolean]="BOOLEAN";
63 d->typeNames[Field::Date]="DATE";
64 d->typeNames[Field::DateTime]="TIMESTAMP";
65 d->typeNames[Field::Time]="TIME";
66 d->typeNames[Field::Float]="REAL";
67 d->typeNames[Field::Double]="DOUBLE PRECISION";
68 d->typeNames[Field::Text]="CHARACTER VARYING";
69 d->typeNames[Field::LongText]="TEXT";
70 d->typeNames[Field::BLOB]="BYTEA";
71}
72
73//==================================================================================
74//Override the default implementation to allow for NUMERIC type natively
75TQString pqxxSqlDriver::sqlTypeName(int id_t, int p) const
76{
77 if (id_t==Field::Null)
78 return "NULL";
79 if (id_t==Field::Float || id_t==Field::Double)
80 {
81 if (p>0)
82 {
83 return "NUMERIC";
84 }
85 else
86 {
87 return d->typeNames[id_t];
88 }
89 }
90 else
91 {
92 return d->typeNames[id_t];
93 }
94}
95
96//==================================================================================
97//
98pqxxSqlDriver::~pqxxSqlDriver()
99{
100// delete d;
101}
102
103//==================================================================================
104//
107{
108 return new pqxxSqlConnection( this, conn_data );
109}
110
111//==================================================================================
112//
113bool pqxxSqlDriver::isSystemObjectName( const TQString& n ) const
114{
116}
117
118//==================================================================================
119//
120bool pqxxSqlDriver::drv_isSystemFieldName( const TQString& ) const
121{
122 return false;
123}
124
125//==================================================================================
126//
127bool pqxxSqlDriver::isSystemDatabaseName( const TQString& n ) const
128{
129 return n.lower()=="template1" || n.lower()=="template0";
130}
131
132//==================================================================================
133//
134TQString pqxxSqlDriver::escapeString( const TQString& str) const
135{
136 TQString escaped = str;
137 escaped.replace("'", "''");
138 return TQString::fromLatin1("'")
139 + escaped
140 + TQString::fromLatin1("'");
141}
142
143//==================================================================================
144//
145TQCString pqxxSqlDriver::escapeString( const TQCString& str) const
146{
147 TQString escaped = str;
148 escaped.replace("'", "''");
149 return TQCString("'")
150 + TQCString( escaped.ascii() )
151 + TQCString("'");
152}
153
154//==================================================================================
155//
156TQString pqxxSqlDriver::drv_escapeIdentifier( const TQString& str) const {
157 return TQString(str).replace( '"', "\"\"" );
158}
159
160//==================================================================================
161//
162TQCString pqxxSqlDriver::drv_escapeIdentifier( const TQCString& str) const {
163 return TQCString(str).replace( '"', "\"\"" );
164}
165
166//==================================================================================
167//
168TQString pqxxSqlDriver::escapeBLOB(const TQByteArray& array) const
169{
171}
172
173TQString pqxxSqlDriver::valueToSQL( uint ftype, const TQVariant& v ) const
174{
175 if (ftype==Field::Boolean) {
176 // use SQL compliant TRUE or FALSE as described here
177 // http://www.postgresql.org/docs/8.0/interactive/datatype-boolean.html
178 // 1 or 0 does not work
179 return v.toInt()==0 ? TQString::fromLatin1("FALSE") : TQString::fromLatin1("TRUE");
180 }
181 return Driver::valueToSQL(ftype, v);
182}
183
184
185#include "pqxxdriver.moc"
Database specific connection data, e.g. host, port.
Provides database connection, allowing queries and data modification.
Definition connection.h:62
virtual TQString valueToSQL(uint ftype, const TQVariant &v) const
Definition driver.cpp:250
@ SingleTransactions
single trasactions are only supported
Definition driver.h:90
virtual bool isSystemObjectName(const TQString &n) const
Definition driver.cpp:230
void initSQLKeywords(int hashSize=17)
Definition driver.cpp:360
Driver(TQObject *parent, const char *name, const TQStringList &args=TQStringList())
@ ShortInteger
Definition field.h:86
PostgreSQL database driver.
Definition pqxxdriver.h:35
virtual TQString escapeBLOB(const TQByteArray &array) const
Escape BLOB value array.
virtual TQString valueToSQL(uint ftype, const TQVariant &v) const
virtual bool drv_isSystemFieldName(const TQString &n) const
virtual bool isSystemObjectName(const TQString &n) const
virtual TQString sqlTypeName(int id_t, int p=0) const
virtual TQString escapeString(const TQString &str) const
Escape a string for use as a value.
pqxxSqlDriver(TQObject *parent, const char *name, const TQStringList &args=TQStringList())
virtual Connection * drv_createConnection(ConnectionData &conn_data)
virtual bool isSystemDatabaseName(const TQString &n) const
virtual TQString drv_escapeIdentifier(const TQString &str) const
High-level database connectivity library with database backend drivers.
KEXI_DB_EXPORT TQString escapeBLOB(const TQByteArray &array, BLOBEscapingType type)
@ BLOBEscapeOctal