xref: /trunk/main/mysqlc/source/mysqlc_general.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3 *
4 * Copyright 2008 by Sun Microsystems, Inc.
5 *
6 * OpenOffice.org - a multi-platform office productivity suite
7 *
8 * $RCSfile: mysqlc_general.cxx,v $
9 *
10 * $Revision: 1.1.2.3 $
11 *
12 * This file is part of OpenOffice.org.
13 *
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
17 *
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
23 *
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org.  If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
28 ************************************************************************/
29 #include "mysqlc_general.hxx"
30 #include "mysqlc_resultsetmetadata.hxx"
31 
32 #include <cppconn/exception.h>
33 #include <cppconn/datatype.h>
34 
35 using com::sun::star::sdbc::SQLException;
36 
37 using com::sun::star::uno::UNO_QUERY;
38 using com::sun::star::uno::Reference;
39 using com::sun::star::uno::XInterface;
40 using com::sun::star::uno::Any;
41 using ::rtl::OUString;
42 
43 namespace mysqlc_sdbc_driver
44 {
45 // -----------------------------------------------------------------------------
46 void throwFeatureNotImplementedException( const sal_Char* _pAsciiFeatureName, const Reference< XInterface >& _rxContext, const Any* _pNextException )
47     throw (SQLException)
48 {
49     const ::rtl::OUString sMessage = ::rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ": feature not implemented." ) );
50     throw SQLException(
51         sMessage,
52         _rxContext,
53         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYC00")),
54         0,
55         _pNextException ? *_pNextException : Any()
56     );
57 }
58 
59 
60 void throwInvalidArgumentException( const sal_Char* _pAsciiFeatureName, const Reference< XInterface >& _rxContext, const Any* _pNextException )
61     throw (SQLException)
62 {
63     const ::rtl::OUString sMessage = ::rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ": invalid arguments." ) );
64     throw SQLException(
65         sMessage,
66         _rxContext,
67         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYC00")),
68         0,
69         _pNextException ? *_pNextException : Any()
70     );
71 }
72 
73 void translateAndThrow(const ::sql::SQLException& _error, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _context, const rtl_TextEncoding encoding)
74 {
75     throw SQLException(
76             convert(_error.what(), encoding),
77             _context,
78             convert(_error.getSQLState(), encoding),
79             _error.getErrorCode(),
80             Any()
81         );
82 }
83 
84 
85 OUString getStringFromAny(const Any& _rAny)
86 {
87     OUString nReturn;
88     OSL_VERIFY( _rAny >>= nReturn );
89     return nReturn;
90 }
91 
92 
93 int mysqlToOOOType(int cppConnType)
94     throw ()
95 {
96     switch (cppConnType) {
97         case sql::DataType::BIT:
98             return com::sun::star::sdbc::DataType::VARCHAR;
99 
100         case sql::DataType::TINYINT:
101             return com::sun::star::sdbc::DataType::TINYINT;
102 
103         case sql::DataType::SMALLINT:
104             return com::sun::star::sdbc::DataType::SMALLINT;
105 
106         case sql::DataType::INTEGER:
107             return com::sun::star::sdbc::DataType::INTEGER;
108 
109         case sql::DataType::BIGINT:
110             return com::sun::star::sdbc::DataType::BIGINT;
111 
112         case sql::DataType::REAL:
113             return com::sun::star::sdbc::DataType::REAL;
114 
115         case sql::DataType::DOUBLE:
116             return com::sun::star::sdbc::DataType::DOUBLE;
117 
118         case sql::DataType::DECIMAL:
119             return com::sun::star::sdbc::DataType::DECIMAL;
120 
121         case sql::DataType::CHAR:
122             return com::sun::star::sdbc::DataType::CHAR;
123 
124         case sql::DataType::BINARY:
125             return com::sun::star::sdbc::DataType::BINARY;
126 
127         case sql::DataType::ENUM:
128         case sql::DataType::SET:
129         case sql::DataType::VARCHAR:
130             return com::sun::star::sdbc::DataType::VARCHAR;
131 
132         case sql::DataType::VARBINARY:
133             return com::sun::star::sdbc::DataType::VARBINARY;
134 
135         case sql::DataType::LONGVARCHAR:
136             return com::sun::star::sdbc::DataType::LONGVARCHAR;
137 
138         case sql::DataType::LONGVARBINARY:
139             return com::sun::star::sdbc::DataType::LONGVARBINARY;
140 
141         case sql::DataType::TIMESTAMP:
142             return com::sun::star::sdbc::DataType::TIMESTAMP;
143 
144         case sql::DataType::DATE:
145             return com::sun::star::sdbc::DataType::DATE;
146 
147         case sql::DataType::TIME:
148             return com::sun::star::sdbc::DataType::TIME;
149 
150         case sql::DataType::GEOMETRY:
151             return com::sun::star::sdbc::DataType::VARCHAR;
152 
153         case sql::DataType::SQLNULL:
154             return com::sun::star::sdbc::DataType::SQLNULL;
155 
156         case sql::DataType::UNKNOWN:
157             return com::sun::star::sdbc::DataType::VARCHAR;
158     }
159 
160     OSL_ENSURE( false, "mysqlToOOOType: unhandled case, falling back to VARCHAR" );
161     return com::sun::star::sdbc::DataType::VARCHAR;
162 }
163 
164 
165 ::rtl::OUString convert(const ::ext_std::string& _string, const rtl_TextEncoding encoding)
166 {
167     return ::rtl::OUString( _string.c_str(), _string.size(), encoding );
168 }
169 
170 ::ext_std::string convert(const ::rtl::OUString& _string, const rtl_TextEncoding encoding)
171 {
172     return ::ext_std::string( ::rtl::OUStringToOString( _string, encoding ).getStr() );
173 }
174 
175 
176 } /* namespace */
177