Diff for /sql/odbc/parser3odbc.C between versions 1.6 and 1.7

version 1.6, 2002/03/05 15:04:59 version 1.7, 2002/04/25 17:51:38
Line 21  static const char *RCSId="$Id$"; Line 21  static const char *RCSId="$Id$";
 #include <AFXDB.H>  #include <AFXDB.H>
   
 #define MAX_STRING 0x400  #define MAX_STRING 0x400
   #define MAX_NUMBER 40
   
   // MSSQL2000
   #ifndef SQL_NVARCHAR
   #define SQL_NVARCHAR (-9)
   #endif
   #ifndef SQL_NTEXT 
   #define SQL_NTEXT (-10)
   #endif
   #ifndef SQL_SMALLDATETIME
   #define SQL_SMALLDATETIME 11
   #endif
   // create table test (id int, a smalldatetime, b ntext, c nvarchar(100))
   
 #define snprintf _snprintf  #define snprintf _snprintf
 #ifndef strncasecmp  #ifndef strncasecmp
Line 167  public: Line 180  public:
                                         if(row>=offset) {                                          if(row>=offset) {
                                                 handlers.add_row();                                                  handlers.add_row();
                                                 for(int i=0; i<column_count; i++)                                               {                                                  for(int i=0; i<column_count; i++)                                               {
                                                         CString string;                                                          CODBCFieldInfo fieldinfo;
                                                         rs.GetFieldValue(i, string);                                                          rs.GetODBCFieldInfo(i, fieldinfo);
                                                         size_t size;                                                          size_t size;
                                                         void *ptr;                                                          void *ptr;
                                                         if(string.IsEmpty()) {                                                          switch(fieldinfo.m_nSQLType) {
                                                                 ptr=0;                                                          //case xBOOL:
                                                                 size=0;  //                                                      case SQL_INTEGER: // serg@design.ru did that in parser2. test first!
                                                         } else {                                                          //case SQL_DATETIME:
                                                                 const char *string_cstr=LPCTSTR(string);                                                          case SQL_SMALLDATETIME:
                                                                 size=strlen(string_cstr); //string.GetLength() works wrong with non-string types:                                                                   {
                                                                 ptr=services.malloc(size);                                                                          CDBVariant v;
                                                                 memcpy(ptr, string_cstr, size);                                                                          rs.GetFieldValue(i, v);
                                                                           getFromDBVariant(services, v, ptr, size);
                                                                           break;
                                                                   }
                                                           default:
                                                                   {
                                                                           CString s;
                                                                           rs.GetFieldValue(i, s);
                                                                           getFromString(services, s, ptr, size);
                                                                           break;
                                                                   }
                                                         }                                                          }
                                                         handlers.add_row_cell(ptr, size);                                                          handlers.add_row_cell(ptr, size);
                                                 }                                                  }
Line 197  public: Line 220  public:
                 END_CATCH_ALL                  END_CATCH_ALL
         }          }
   
           void getFromDBVariant(SQL_Driver_services& services, CDBVariant& v, void *& ptr, size_t& size) {
                   switch(v.m_dwType) {
                   case DBVT_NULL: // No union member is valid for access. 
                           ptr=0;
                           size=0;
                           break;
   /*              case DBVT_BOOL:
                           ptr=v.m_boolVal?"1":"0";
                           size=1;
                           break;*/
   /*                                                      case DBVT_UCHAR:
                           size=strlen(ptr=v.m_chVal);
                           break;
                   case DBVT_SHORT:
                           char buf[MAX_NUMBER];
                           size=snprintf(HEAPIZE buf, "%d", v.m_iVal);
                           break;*/
   /*              case DBVT_LONG: 
                           {
                                   char local_buf[MAX_NUMBER];
                                   size=snprintf(local_buf, MAX_NUMBER, "%ld", v.m_lVal);
                                   ptr=services.malloc(size);
                                   memcpy(ptr, local_buf, size);
                                   break;
                           }*/
                   /*case DBVT_SINGLE:
                           m_fltVal 
                           break;
           case DBVT_DOUBLE m_dblVal 
           case DBVT_STRING m_pstring 
           case DBVT_BINARY m_pbinary */
                   case DBVT_DATE:
                           {
                                   char local_buf[MAX_STRING];
                                   size=snprintf(local_buf, MAX_STRING, 
                                           "%04d-%02d-%02d %02d:%02d:%02d.%03d",
                                           v.m_pdate->year, 
                                           v.m_pdate->month,
                                           v.m_pdate->day,
                                           v.m_pdate->hour,
                                           v.m_pdate->minute,
                                           v.m_pdate->second,
                                           v.m_pdate->fraction);
                                   ptr=services.malloc(size);
                                   memcpy(ptr, local_buf, size);
                                   break;
                           }
                   default:
                           char msg[MAX_STRING];
                           snprintf(msg, MAX_STRING, "unknown column return variant type (%d)",
                                   v.m_dwType);
                           services._throw(msg);
                   }
           }
   
           void getFromString(SQL_Driver_services& services, CString& s, void *& ptr, size_t& size) {
                   if(s.IsEmpty()) {
                           ptr=0;
                           size=0;
                   } else {
                           const char *cstr=LPCTSTR(s);
                           size=strlen(cstr); //string.GetLength() works wrong with non-string types: 
                           ptr=services.malloc(size);
                           memcpy(ptr, cstr, size);
                   }
           }
   
         void _throw(SQL_Driver_services& services, CException *e) {          void _throw(SQL_Driver_services& services, CException *e) {
                 char szCause[MAX_STRING]; szCause[0]=0;                  char szCause[MAX_STRING]; szCause[0]=0;
                 e->GetErrorMessage(szCause, MAX_STRING);                  e->GetErrorMessage(szCause, MAX_STRING);

Removed from v.1.6  
changed lines
  Added in v.1.7


E-mail: