4343 #define LOG4CXX 1
4444#endif
4545#include < log4cxx/private/log4cxx_private.h>
46- #if LOG4CXX_HAVE_ODBC
46+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
4747 #if defined(WIN32) || defined(_WIN32)
4848 #include < windows.h>
4949 #endif
@@ -88,7 +88,7 @@ const char* SQLException::formatMessage(short fHandleType,
8888{
8989 std::string strReturn (prolog);
9090 strReturn.append (" - " );
91- #if LOG4CXX_HAVE_ODBC
91+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
9292 SQLCHAR SqlState[6 ];
9393 SQLCHAR Msg[SQL_MAX_MESSAGE_LENGTH ];
9494 SQLINTEGER NativeError;
@@ -220,7 +220,7 @@ bool ODBCAppender::requiresLayout() const
220220
221221void ODBCAppender::activateOptions ( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
222222{
223- #if !LOG4CXX_HAVE_ODBC
223+ #if !LOG4CXX_HAVE_ODBC || LOG4CXX_LOGCHAR_IS_UNICHAR
224224 LogLog::error (LOG4CXX_STR (" Can not activate ODBCAppender unless compiled with ODBC support." ));
225225#else
226226 if (_priv->mappedName .empty ())
@@ -262,7 +262,7 @@ void ODBCAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
262262
263263void ODBCAppender::append ( LOG4CXX_APPEND_FORMAL_PARAMETERS )
264264{
265- #if LOG4CXX_HAVE_ODBC
265+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
266266 _priv->buffer .push_back (event);
267267
268268 if (_priv->buffer .size () >= _priv->bufferSize )
@@ -292,7 +292,7 @@ void ODBCAppender::closeConnection(ODBCAppender::SQLHDBC /* con */)
292292
293293ODBCAppender::SQLHDBC ODBCAppender::getConnection (LOG4CXX_NS ::helpers::Pool& p)
294294{
295- #if LOG4CXX_HAVE_ODBC
295+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
296296 SQLRETURN ret;
297297
298298 if (_priv->env == SQL_NULL_HENV )
@@ -351,18 +351,7 @@ ODBCAppender::SQLHDBC ODBCAppender::getConnection(LOG4CXX_NS::helpers::Pool& p)
351351 , wPwd, SQL_NTS
352352 );
353353#else
354- SQLWCHAR * wURL, *wUser = nullptr , *wPwd = nullptr ;
355- encode (&wURL, _priv->databaseURL , p);
356- if (!_priv->databaseUser .empty ())
357- encode (&wUser, _priv->databaseUser , p);
358- if (!_priv->databasePassword .empty ())
359- encode (&wPwd, _priv->databasePassword , p);
360-
361- ret = SQLConnectW ( _priv->connection
362- , wURL, SQL_NTS
363- , wUser, SQL_NTS
364- , wPwd, SQL_NTS
365- );
354+ #error ODBCAppender is not supported when logchar is unichar
366355#endif
367356
368357 if (ret < 0 )
@@ -384,7 +373,7 @@ void ODBCAppender::close()
384373{
385374 if (_priv->setClosed ())
386375 {
387- #if LOG4CXX_HAVE_ODBC
376+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
388377 if (!_priv->buffer .empty () && 0 == _priv->preparedStatement )
389378 {
390379 Pool p;
@@ -408,7 +397,7 @@ void ODBCAppender::ODBCAppenderPriv::close()
408397 e, ErrorCode::GENERIC_FAILURE );
409398 }
410399
411- #if LOG4CXX_HAVE_ODBC
400+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
412401
413402 if (this ->connection != SQL_NULL_HDBC )
414403 {
@@ -424,7 +413,7 @@ void ODBCAppender::ODBCAppenderPriv::close()
424413#endif
425414}
426415
427- #if LOG4CXX_HAVE_ODBC
416+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
428417void ODBCAppender::ODBCAppenderPriv::setPreparedStatement (SQLHDBC con, Pool& p)
429418{
430419 auto ret = SQLAllocHandle ( SQL_HANDLE_STMT , con, &this ->preparedStatement );
@@ -438,9 +427,7 @@ void ODBCAppender::ODBCAppenderPriv::setPreparedStatement(SQLHDBC con, Pool& p)
438427#elif LOG4CXX_LOGCHAR_IS_UTF8
439428 ret = SQLPrepareA (this ->preparedStatement , (SQLCHAR *)this ->sqlStatement .c_str (), SQL_NTS );
440429#else
441- SQLWCHAR * wsql;
442- encode (&wsql, this ->sqlStatement , p);
443- ret = SQLPrepareW (this ->preparedStatement , wsql, SQL_NTS );
430+ #error ODBCAppender is not supported when logchar is unichar
444431#endif
445432 if (ret < 0 )
446433 {
@@ -627,7 +614,7 @@ void ODBCAppender::ODBCAppenderPriv::setParameterValues(const spi::LoggingEventP
627614
628615void ODBCAppender::flushBuffer (Pool& p)
629616{
630- #if LOG4CXX_HAVE_ODBC
617+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
631618 if (0 == _priv->preparedStatement )
632619 _priv->setPreparedStatement (getConnection (p), p);
633620 _priv->flushBuffer (p);
@@ -642,7 +629,7 @@ void ODBCAppender::ODBCAppenderPriv::flushBuffer(Pool& p)
642629 {
643630 if (this ->parameterValue .empty ())
644631 this ->errorHandler ->error (LOG4CXX_STR (" ODBCAppender column mappings not defined" ));
645- #if LOG4CXX_HAVE_ODBC
632+ #if LOG4CXX_HAVE_ODBC && !LOG4CXX_LOGCHAR_IS_UNICHAR
646633 else try
647634 {
648635 this ->setParameterValues (logEvent, p);
@@ -691,44 +678,6 @@ void ODBCAppender::setSql(const LogString& s)
691678 _priv->sqlStatement = s;
692679}
693680
694- #if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR || defined(WIN32) || defined(_WIN32)
695- void ODBCAppender::encode (wchar_t ** dest, const LogString& src, Pool& p)
696- {
697- *dest = Transcoder::wencode (src, p);
698- }
699- #endif
700-
701- void ODBCAppender::encode (unsigned short ** dest,
702- const LogString& src, Pool& p)
703- {
704- // worst case double number of characters from UTF-8 or wchar_t
705- *dest = (unsigned short *)
706- p.palloc ((src.size () + 1 ) * 2 * sizeof (unsigned short ));
707- unsigned short * current = *dest;
708-
709- for (LogString::const_iterator i = src.begin ();
710- i != src.end ();)
711- {
712- unsigned int sv = Transcoder::decode (src, i);
713-
714- if (sv < 0x10000 )
715- {
716- *current++ = (unsigned short ) sv;
717- }
718- else
719- {
720- unsigned char u = (unsigned char ) (sv >> 16 );
721- unsigned char w = (unsigned char ) (u - 1 );
722- unsigned short hs = (0xD800 + ((w & 0xF ) << 6 ) + ((sv & 0xFFFF ) >> 10 ));
723- unsigned short ls = (0xDC00 + (sv & 0x3FF ));
724- *current++ = (unsigned short ) hs;
725- *current++ = (unsigned short ) ls;
726- }
727- }
728-
729- *current = 0 ;
730- }
731-
732681const LogString& ODBCAppender::getSql () const
733682{
734683 return _priv->sqlStatement ;
0 commit comments