/
ResultSetMetaDataUnicode.cpp
79 lines (79 loc) · 3.15 KB
/
ResultSetMetaDataUnicode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <vector>
#include <odbc/Exception.h>
#include <odbc/ResultSetMetaDataUnicode.h>
#include <odbc/Statement.h>
#include <odbc/internal/Macros.h>
#include <odbc/internal/Odbc.h>
//------------------------------------------------------------------------------
using namespace std;
//------------------------------------------------------------------------------
namespace odbc {
//------------------------------------------------------------------------------
ResultSetMetaDataUnicode::ResultSetMetaDataUnicode(StatementBase* stmt)
: ResultSetMetaDataBase(stmt)
{
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getCatalogName(unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_CATALOG_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getSchemaName(unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_SCHEMA_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getTableName(unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_TABLE_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getBaseTableName(
unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_BASE_TABLE_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getBaseColumnName(
unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_BASE_COLUMN_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getColumnLabel(unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_LABEL);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getColumnName(unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getColumnTypeName(
unsigned short columnIndex)
{
return getStringColAttribute(columnIndex, SQL_DESC_TYPE_NAME);
}
//------------------------------------------------------------------------------
u16string ResultSetMetaDataUnicode::getStringColAttribute(
unsigned short columnIndex, unsigned short field)
{
vector<char16_t> buffer;
buffer.resize(256);
while (true)
{
SQLPOINTER ptr = &buffer[0];
SQLSMALLINT bufLen = (SQLSMALLINT)(buffer.size() * sizeof(char16_t));
SQLSMALLINT dataLen;
EXEC_STMT(SQLColAttributeW, stmt_->hstmt_, columnIndex, field, ptr,
bufLen, &dataLen, NULL);
if (dataLen < bufLen)
break;
buffer.resize(dataLen / sizeof(char16_t) + 1);
}
return u16string(&buffer[0]);
}
//------------------------------------------------------------------------------
} // namespace odbc