File: _NativeToSQLColumnHeader.c

package info (click to toggle)
unixodbc 2.2.11-16
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 17,332 kB
  • ctags: 12,399
  • sloc: ansic: 116,624; cpp: 29,333; sh: 25,024; makefile: 3,002; lex: 241; yacc: 182; perl: 142; sed: 16; sql: 1
file content (114 lines) | stat: -rw-r--r-- 3,736 bytes parent folder | download | duplicates (6)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**************************************************
 * _NativeToSQLColumnHeader
 *
 * We want to make the driver code as general as possible. This isolates
 * the translation from the native client to the SQL format for column
 * header information.
 **************************************************
 * This code was created by Peter Harvey @ CodeByDesign.
 * Released under LGPL 31.JAN.99
 *
 * Contributions from...
 * -----------------------------------------------
 * Peter Harvey		- pharvey@codebydesign.com
 **************************************************/

#include "driver.h"

SQLRETURN _NativeToSQLColumnHeader( COLUMNHDR *pColumnHeader, void *pNativeColumnHeader )
{
	m_field		*pField	= (m_field*)pNativeColumnHeader;
	char		szBuffer[501];

	if ( !pNativeColumnHeader )
		return SQL_ERROR;
	if ( !pColumnHeader )
		return SQL_ERROR;

    /* IS AUTO INCREMENT COL?					*/
	pColumnHeader->bSQL_DESC_AUTO_UNIQUE_VALUE = 0;

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_BASE_COLUMN_NAME = (char*)strdup( pField->name );	

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_BASE_TABLE_NAME = pField->table  ? (char*)strdup( pField->table ) : (char*)strdup( "" );

    /* IS CASE SENSITIVE COLUMN?				*/
	pColumnHeader->bSQL_DESC_CASE_SENSITIVE = 0;

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_CATALOG_NAME = (char*)strdup( "" );

    /* ie SQL_CHAR, SQL_TYPE_TIME...			*/
	pColumnHeader->nSQL_DESC_CONCISE_TYPE = _NativeToSQLType( pField );

    /* max digits required to display			*/
	pColumnHeader->nSQL_DESC_DISPLAY_SIZE = pField->length;

    /* has data source specific precision?		*/
	pColumnHeader->bSQL_DESC_FIXED_PREC_SCALE = 0;

    /* display label, col name or empty string	*/
	pColumnHeader->pszSQL_DESC_LABEL = (char*)strdup( pField->name );	

    /* strlen or bin size						*/
	pColumnHeader->nSQL_DESC_LENGTH = _NativeTypeLength( pField );

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_LITERAL_PREFIX = (char*)strdup( "" );

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_LITERAL_SUFFIX = (char*)strdup( "" );			

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_LOCAL_TYPE_NAME = (char*)strdup( "" );

    /* col alias, col name or empty string		*/
	pColumnHeader->pszSQL_DESC_NAME = (char*)strdup( pField->name );	

    /* SQL_NULLABLE, _NO_NULLS or _UNKNOWN		*/
	pColumnHeader->nSQL_DESC_NULLABLE = IS_NOT_NULL( pField->flags ) ? SQL_NO_NULLS : SQL_NULLABLE;

    /* 2, 10, or if N/A... 0 					*/
	pColumnHeader->nSQL_DESC_NUM_PREC_RADIX = 0;

    /* max size									*/
	pColumnHeader->nSQL_DESC_OCTET_LENGTH = pField->length;

    /*											*/
	pColumnHeader->nSQL_DESC_PRECISION = _NativeTypePrecision( pField );

    /*											*/
	pColumnHeader->nSQL_DESC_SCALE = 4;

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_SCHEMA_NAME = (char*)strdup( "" );

    /* can be in a filter ie SQL_PRED_NONE...	*/
	pColumnHeader->nSQL_DESC_SEARCHABLE = SQL_PRED_SEARCHABLE;

    /* empty string if N/A						*/
	pColumnHeader->pszSQL_DESC_TABLE_NAME = pField->table ? (char*)strdup( pField->table ) : (char*)strdup( "" );

    /* SQL data type ie SQL_CHAR, SQL_INTEGER..	*/
	pColumnHeader->nSQL_DESC_TYPE = _NativeToSQLType( pField );

    /* DBMS data type ie VARCHAR, MONEY...		*/
	pColumnHeader->pszSQL_DESC_TYPE_NAME = (char*)strdup( _NativeTypeDesc( szBuffer, pField->type ) );

    /* qualifier for SQL_DESC_NAME ie SQL_NAMED	*/
	pColumnHeader->nSQL_DESC_UNNAMED = SQL_NAMED;

    /* if signed FALSE else TRUE				*/
	pColumnHeader->bSQL_DESC_UNSIGNED = 0;

    /* ie SQL_ATTR_READONLY, SQL_ATTR_WRITE...	*/
	pColumnHeader->nSQL_DESC_UPDATABLE = SQL_ATTR_READONLY;

	return SQL_SUCCESS;
}