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 }