Changeset cb42322 in tol
- Timestamp:
- May 2, 2012, 10:11:37 AM (14 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- df6c30c
- Parents:
- 2ea9c89
- File:
-
- 1 edited
-
tol/dbdrivers/libtolodbc.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/dbdrivers/libtolodbc.c
r2ea9c89 rcb42322 61 61 #define TRACE_DEEP 1 62 62 63 #ifdef _MSC_VER 64 65 #define snprintf c99_snprintf 66 67 int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap) 68 { 69 int count = -1; 70 71 if (size != 0) 72 count = _vsnprintf_s(str, size, _TRUNCATE, format, ap); 73 if (count == -1) 74 count = _vscprintf(format, ap); 75 76 return count; 77 } 78 79 int c99_snprintf(char* str, size_t size, const char* format, ...) 80 { 81 int count; 82 va_list ap; 83 84 va_start(ap, format); 85 count = c99_vsnprintf(str, size, format, ap); 86 va_end(ap); 87 88 return count; 89 } 90 91 #endif // _MSC_VER 92 93 63 94 typedef struct odbcdx { 64 95 // char *alias; … … 85 116 SQLSMALLINT type) 86 117 { 87 SQL INTEGERi = 0;118 SQLSMALLINT i = 0; 88 119 SQLINTEGER native; 89 120 SQLCHAR state[ 7 ]; … … 523 554 TOLSQL_BIGINT _bigint; // for SQL_BIGINT 524 555 SQLINTEGER _integer; // for SQL_INTEGER 525 SQLCHAR *_decimal; // for SQL_DECIMAL SQL_NUMERIC 556 //SQLCHAR *_decimal; // for SQL_DECIMAL SQL_NUMERIC 557 SQLCHAR szNumeric[256]; // for SQL_DECIMAL SQL_NUMERIC SQL_BIGINT 526 558 SQLDOUBLE _double; // for SQL_DOUBLE, SQL_FLOAT 527 559 SQLREAL _real; // for SQL_REAL … … 531 563 SQLINTEGER pcbValue; 532 564 int size; 533 char *errmsg;565 char szErrMsg[256]; 534 566 SQLSMALLINT targetType = SQL_C_DEFAULT; 535 567 SQLSMALLINT type = dbd->typeList[nfield]; … … 547 579 size=sizeof(SQLSMALLINT); pointer=&_smallint; 548 580 break; 581 /* 549 582 case SQL_BIGINT: 583 printf( "case SQL_BIGINT:\n" ); 584 550 585 size=sizeof(TOLSQL_BIGINT); pointer=&_bigint; 551 586 targetType = SQL_C_SBIGINT; 552 587 break; 588 */ 553 589 case SQL_INTEGER: 554 590 size=sizeof(SQLINTEGER); pointer=&_integer; 555 591 break; 556 case SQL_DECIMAL: case SQL_NUMERIC: 557 size=64;592 case SQL_DECIMAL: case SQL_NUMERIC: case SQL_BIGINT: 593 /*size=64; 558 594 _decimal=(SQLCHAR *)calloc(size, sizeof(SQLCHAR)); 559 595 if(_decimal==NULL) { … … 561 597 return 0; 562 598 } 563 pointer=_decimal; 599 pointer=_decimal;*/ 600 pointer = (SQLPOINTER)szNumeric; 601 size = sizeof( szNumeric ); 602 targetType = SQL_C_CHAR; 564 603 break; 565 604 case SQL_DOUBLE: case SQL_FLOAT: … … 570 609 break; 571 610 default: 572 errmsg = (char *)calloc(45, sizeof(char)); 573 if(errmsg==NULL) { 574 stdOutWriter("Out of memory\n"); 575 } else { 576 sprintf(errmsg, "Wrong numeric data type at SQL field:%i\n", nfield+1); 577 stdOutWriter(errmsg); 578 } 611 snprintf( szErrMsg, sizeof( szErrMsg ) - 1, 612 "Wrong numeric data type at SQL field: %i\n", nfield + 1 ); 613 stdOutWriter( szErrMsg ); 579 614 return 0; 580 615 } 581 616 582 617 // retrieve data from DDBB 583 status = SQLGetData(dbd->hstmt, nfield+1, targetType, pointer, size, &pcbValue); 618 status = SQLGetData( dbd->hstmt, nfield+1, targetType, pointer, size, 619 &pcbValue ); 584 620 if(!checkSQLRet(status, dbd, __LINE__, GET_DIAG_STMT)) { return 0; } 585 621 … … 598 634 case SQL_SMALLINT: 599 635 *realval = (long double)(_smallint); break; 636 /* 600 637 case SQL_BIGINT: 601 *realval = (long double)_bigint; break; 638 *realval = (long double)_bigint; break; */ 602 639 case SQL_INTEGER: 603 640 *realval = (long double)(_integer); break; 604 case SQL_DECIMAL: case SQL_NUMERIC: 605 sscanf((char *)_decimal, "%Lf", realval); break; 641 case SQL_DECIMAL: case SQL_NUMERIC: case SQL_BIGINT: 642 //sscanf((char *)_decimal, "%Lf", realval); break; 643 sscanf( szNumeric, "%Lf", realval); break; 606 644 case SQL_DOUBLE: case SQL_FLOAT: 607 645 *realval = (long double)(_double); break;
Note: See TracChangeset
for help on using the changeset viewer.
