add tconv
This commit is contained in:
parent
ca120cfb09
commit
9648ae631d
|
@ -1,13 +1,16 @@
|
||||||
PROJECT(TDengine)
|
PROJECT(TDengine)
|
||||||
|
|
||||||
IF (TD_LINUX)
|
IF (TD_LINUX)
|
||||||
AUX_SOURCE_DIRECTORY(. SRC)
|
# AUX_SOURCE_DIRECTORY(. SRC)
|
||||||
ADD_EXECUTABLE(tcodbc main.c)
|
ADD_EXECUTABLE(tcodbc main.c)
|
||||||
TARGET_LINK_LIBRARIES(tcodbc odbc)
|
TARGET_LINK_LIBRARIES(tcodbc odbc)
|
||||||
|
ADD_EXECUTABLE(tconv tconv.c)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (TD_WINDOWS_64)
|
IF (TD_WINDOWS_64)
|
||||||
AUX_SOURCE_DIRECTORY(. SRC)
|
# AUX_SOURCE_DIRECTORY(. SRC)
|
||||||
ADD_EXECUTABLE(tcodbc main.c)
|
ADD_EXECUTABLE(tcodbc main.c)
|
||||||
TARGET_LINK_LIBRARIES(tcodbc odbc32 odbccp32 user32 legacy_stdio_definitions os)
|
TARGET_LINK_LIBRARIES(tcodbc odbc32 odbccp32 user32 legacy_stdio_definitions os)
|
||||||
|
ADD_EXECUTABLE(tconv tconv.c)
|
||||||
|
TARGET_LINK_LIBRARIES(tconv os)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
|
@ -22,6 +22,17 @@ do { \
|
||||||
} \
|
} \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
|
typedef struct db_column_s db_column_t;
|
||||||
|
struct db_column_s {
|
||||||
|
char name[4096]; // seems enough
|
||||||
|
SQLSMALLINT nameLength;
|
||||||
|
SQLSMALLINT dataType;
|
||||||
|
SQLULEN columnSize;
|
||||||
|
SQLSMALLINT decimalDigits;
|
||||||
|
SQLSMALLINT nullable;
|
||||||
|
};
|
||||||
|
|
||||||
|
static db_column_t *columns = NULL;
|
||||||
|
|
||||||
typedef struct data_s data_t;
|
typedef struct data_s data_t;
|
||||||
struct data_s {
|
struct data_s {
|
||||||
|
@ -129,6 +140,30 @@ static int open_driver_connect(const char *connstr, SQLHENV *pEnv, SQLHDBC *pCon
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SQLRETURN traverse_cols(SQLHSTMT stmt, SQLSMALLINT cols) {
|
||||||
|
SQLRETURN r = SQL_ERROR;
|
||||||
|
for (SQLSMALLINT i=0; i<cols; ++i) {
|
||||||
|
db_column_t column = {0};
|
||||||
|
r = SQLDescribeCol(stmt, (SQLUSMALLINT)(i+1), (SQLCHAR*)column.name,
|
||||||
|
(SQLSMALLINT)sizeof(column.name), &column.nameLength,
|
||||||
|
&column.dataType, &column.columnSize,
|
||||||
|
&column.decimalDigits, &column.nullable);
|
||||||
|
CHK_RESULT(r, SQL_HANDLE_STMT, stmt, "");
|
||||||
|
D("col%02d:[%s]%d,type:[%d],colSize:[%"PRId64"],decimalDigits:[%d],nullable:[%d]",
|
||||||
|
i+1, column.name, column.nameLength, column.dataType, column.columnSize,
|
||||||
|
column.decimalDigits, column.nullable);
|
||||||
|
db_column_t *col = (db_column_t*)realloc(columns, (size_t)(i+1)*sizeof(*col));
|
||||||
|
if (!col) {
|
||||||
|
D("out of memory");
|
||||||
|
return SQL_ERROR;
|
||||||
|
}
|
||||||
|
col[i] = column;
|
||||||
|
columns = col;
|
||||||
|
}
|
||||||
|
return SQL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int do_statement(SQLHSTMT stmt, const char *statement) {
|
static int do_statement(SQLHSTMT stmt, const char *statement) {
|
||||||
SQLRETURN r = 0;
|
SQLRETURN r = 0;
|
||||||
do {
|
do {
|
||||||
|
@ -140,6 +175,7 @@ static int do_statement(SQLHSTMT stmt, const char *statement) {
|
||||||
CHK_RESULT(r, SQL_HANDLE_STMT, stmt, "");
|
CHK_RESULT(r, SQL_HANDLE_STMT, stmt, "");
|
||||||
if (r) break;
|
if (r) break;
|
||||||
if (cols <= 0) break;
|
if (cols <= 0) break;
|
||||||
|
r = traverse_cols(stmt, cols);
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
while (1) {
|
while (1) {
|
||||||
SQLRETURN r = SQLFetch(stmt);
|
SQLRETURN r = SQLFetch(stmt);
|
||||||
|
|
Loading…
Reference in New Issue