File indexing completed on 2024-05-05 16:47:14
0001 /* This file is part of the KDE project 0002 Copyright (C) 2003 Adam Pigg <adam@piggz.co.uk> 0003 Copyright (C) 2010 Jarosław Staniek <staniek@kde.org> 0004 0005 This program is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU Library General Public 0007 License as published by the Free Software Foundation; either 0008 version 2 of the License, or (at your option) any later version. 0009 0010 This program is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0013 Library General Public License for more details. 0014 0015 You should have received a copy of the GNU Library General Public License 0016 along with this program; see the file COPYING. If not, write to 0017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0018 * Boston, MA 02110-1301, USA. 0019 */ 0020 0021 #include "PostgresqlDriver.h" 0022 0023 #ifdef _MSC_VER 0024 #pragma warning(push) 0025 #pragma warning(disable: 4200) // "nonstandard extension used : zero-sized array in struct/union" 0026 #endif 0027 0028 #ifdef __GNUC__ 0029 # pragma GCC diagnostic push 0030 // remove c.h: warning: ISO C++ does not support ‘__int128’ for ‘int128’ [-Wpedantic] 0031 # pragma GCC diagnostic ignored "-Wpedantic" 0032 # include <postgres.h> 0033 # pragma GCC diagnostic pop 0034 #else 0035 # include <postgres.h> 0036 #endif 0037 #include <libpq-fe.h> 0038 #include <catalog/pg_type.h> // needed for BOOLOID, etc. 0039 #include <pg_config.h> // needed for PG_VERSION_NUM 0040 0041 #ifdef _MSC_VER 0042 #pragma warning( pop ) 0043 #endif 0044 0045 void PostgresqlDriver::initPgsqlToKDbMap() 0046 { 0047 m_pgsqlToKDbTypes.insert(BOOLOID, KDbField::Boolean); 0048 m_pgsqlToKDbTypes.insert(BYTEAOID, KDbField::BLOB); 0049 m_pgsqlToKDbTypes.insert(CHAROID, KDbField::Integer); 0050 m_pgsqlToKDbTypes.insert(NAMEOID, KDbField::BLOB); 0051 m_pgsqlToKDbTypes.insert(INT8OID, KDbField::BigInteger); 0052 m_pgsqlToKDbTypes.insert(INT2OID, KDbField::Integer); 0053 //! @todo INT2VECTOROID? (array of int2, used in system tables) 0054 m_pgsqlToKDbTypes.insert(INT4OID, KDbField::Integer); 0055 m_pgsqlToKDbTypes.insert(REGPROCOID, KDbField::Integer); 0056 m_pgsqlToKDbTypes.insert(TEXTOID, KDbField::LongText); 0057 m_pgsqlToKDbTypes.insert(OIDOID, KDbField::Integer); 0058 //! @todo TIDOID? (block, offset), physical location of tuple 0059 m_pgsqlToKDbTypes.insert(XIDOID, KDbField::Integer); 0060 m_pgsqlToKDbTypes.insert(CIDOID, KDbField::Integer); 0061 //! @todo OIDVECTOROID? (array of oids, used in system tables) 0062 // PG_TYPE_RELTYPE_OID 0063 // PG_ATTRIBUTE_RELTYPE_OID 0064 // PG_PROC_RELTYPE_OID 0065 // PG_CLASS_RELTYPE_OID 0066 m_pgsqlToKDbTypes.insert(XMLOID, KDbField::LongText); 0067 //! @todo POINTOID geometric point '(x, y) 0068 //! @todo LSEGOID geometric line segment '(pt1,pt2) 0069 //! @todo PATHOID geometric path '(pt1,...)' 0070 //! @todo BOXOID geometric box '(lower left,upper right) 0071 //! @todo POLYGONOID geometric polygon '(pt1,...)' 0072 m_pgsqlToKDbTypes.insert(FLOAT4OID, KDbField::Double); 0073 m_pgsqlToKDbTypes.insert(FLOAT8OID, KDbField::Double); 0074 #if PG_VERSION_NUM < 120000 0075 m_pgsqlToKDbTypes.insert(ABSTIMEOID, KDbField::Date); 0076 m_pgsqlToKDbTypes.insert(RELTIMEOID, KDbField::Date); 0077 #endif 0078 //! @todo TINTERVALOID (abstime,abstime), time interval 0079 //! @todo CIRCLEOID geometric circle '(center,radius)' 0080 //! @todo CASHOID monetary amounts, $d,ddd.cc 0081 //! @todo MACADDROID XX:XX:XX:XX:XX:XX, MAC address 0082 //! @todo INETOID IP address/netmask, host address, netmask optional 0083 //! @todo CIDROID network IP address/netmask, network address 0084 //! @todo INT4ARRAYOID 0085 //! @todo FLOAT4ARRAYOID 0086 //! @todo ACLITEMOID access control list 0087 m_pgsqlToKDbTypes.insert(CSTRINGARRAYOID, KDbField::BLOB); 0088 m_pgsqlToKDbTypes.insert(BPCHAROID, KDbField::LongText); // char(length), blank-padded string, 0089 // fixed storage length 0090 m_pgsqlToKDbTypes.insert(VARCHAROID, KDbField::LongText); // varchar(length), non-blank-padded string, 0091 // variable storage length 0092 m_pgsqlToKDbTypes.insert(DATEOID, KDbField::Date); 0093 m_pgsqlToKDbTypes.insert(TIMEOID, KDbField::Time); 0094 m_pgsqlToKDbTypes.insert(TIMESTAMPOID, KDbField::DateTime); 0095 m_pgsqlToKDbTypes.insert(TIMESTAMPTZOID, KDbField::DateTime); 0096 //! @todo INTERVALOID @ <number> <units>, time interval 0097 m_pgsqlToKDbTypes.insert(TIMETZOID, KDbField::Time); 0098 //! @todo BITOID ok? 0099 m_pgsqlToKDbTypes.insert(BITOID, KDbField::BLOB); 0100 //! @todo VARBITOID ok? 0101 m_pgsqlToKDbTypes.insert(VARBITOID, KDbField::BLOB); 0102 m_pgsqlToKDbTypes.insert(NUMERICOID, KDbField::Double); 0103 //! @todo REFCURSOROID reference cursor (portal name) 0104 //! @todo REGPROCEDUREOID registered procedure (with args) 0105 //! @todo REGOPEROID registered operator 0106 //! @todo REGOPERATOROID registered operator (with args) 0107 //! @todo REGCLASSOID registered class 0108 //! @todo REGTYPEOID registered type 0109 //! @todo REGTYPEARRAYOID 0110 //! @todo TSVECTOROID text representation for text search 0111 //! @todo GTSVECTOROID GiST index internal text representation for text search 0112 //! @todo TSQUERYOID query representation for text search 0113 //! @todo REGCONFIGOID registered text search configuration 0114 //! @todo REGDICTIONARYOID registered text search dictionary 0115 //! @todo RECORDOID 0116 //! @todo CSTRINGOID 0117 //! @todo ANYOID 0118 //! @todo ANYARRAYOID 0119 //! @todo VOIDOID 0120 //! @todo TRIGGEROID 0121 //! @todo LANGUAGE_HANDLEROID 0122 //! @todo INTERNALOID 0123 //! @todo OPAQUEOID 0124 //! @todo ANYELEMENTOID 0125 //! @todo ANYNONARRAYOID 0126 //! @todo ANYENUMOID 0127 }