1use crate::attr::{Attr, AttrGet, AttrLen, AttrSet};
2use crate::env::{OdbcVersion, SQL_OV_ODBC3, SQL_OV_ODBC3_80, SQL_OV_ODBC4};
3use crate::str::{OdbcChar, OdbcStr};
4use crate::{Ident, OdbcDefined, Scalar, SQLCHAR, SQLLEN, SQLSMALLINT, SQLWCHAR};
5use core::mem::MaybeUninit;
6use rs_odbc_derive::Ident;
7
8pub trait ColAttr<A: Ident, V: OdbcVersion>:
9 Attr<A> + AttrLen<Self::DefinedBy, SQLSMALLINT>
10{
11}
12
13impl<A: Ident, T: Scalar> ColAttr<A, SQL_OV_ODBC3_80> for T where
15 T: ColAttr<A, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>
16{
17}
18impl<A: Ident, T: Scalar> ColAttr<A, SQL_OV_ODBC4> for T where
19 T: ColAttr<A, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>
20{
21}
22impl<A: Ident, T: Scalar> ColAttr<A, SQL_OV_ODBC3_80> for [T] where
23 [T]: ColAttr<A, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>
24{
25}
26impl<A: Ident, T: Scalar> ColAttr<A, SQL_OV_ODBC4> for [T] where
27 [T]: ColAttr<A, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>
28{
29}
30impl<A: Ident, CH: OdbcChar> ColAttr<A, SQL_OV_ODBC3_80> for OdbcStr<CH> where
31 OdbcStr<CH>: ColAttr<A, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>
32{
33}
34impl<A: Ident, CH: OdbcChar> ColAttr<A, SQL_OV_ODBC4> for OdbcStr<CH> where
35 OdbcStr<CH>: ColAttr<A, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>
36{
37}
38
39impl<A: Ident, T: Scalar, V: OdbcVersion> ColAttr<A, V> for MaybeUninit<T>
41where
42 T: ColAttr<A, V> + AttrGet<A>,
43 Self: AttrLen<Self::DefinedBy, SQLSMALLINT>,
44{
45}
46impl<A: Ident, T: Scalar, V: OdbcVersion> ColAttr<A, V> for [MaybeUninit<T>]
47where
48 [T]: ColAttr<A, V> + AttrGet<A>,
49 Self: AttrLen<Self::DefinedBy, SQLSMALLINT>,
50{
51}
52impl<A: Ident, V: OdbcVersion> ColAttr<A, V> for OdbcStr<MaybeUninit<SQLCHAR>> where
53 OdbcStr<SQLCHAR>: ColAttr<A, V> + AttrGet<A>
54{
55}
56impl<A: Ident, V: OdbcVersion> ColAttr<A, V> for OdbcStr<MaybeUninit<SQLWCHAR>> where
57 OdbcStr<SQLWCHAR>: ColAttr<A, V> + AttrGet<A>
58{
59}
60
61impl<A: Ident, T: Scalar, V: OdbcVersion> ColAttr<A, V> for &[T]
63where
64 [T]: ColAttr<A, V>,
65 Self: AttrSet<A>,
66{
67}
68impl<A: Ident, CH: OdbcChar, V: OdbcVersion> ColAttr<A, V> for &OdbcStr<CH>
69where
70 OdbcStr<CH>: ColAttr<A, V>,
71 Self: AttrSet<A>,
72{
73}
74
75#[derive(Ident)]
96#[identifier(SQLUSMALLINT, 1001)]
97#[allow(non_camel_case_types)]
98pub struct SQL_DESC_COUNT;
99unsafe impl Attr<SQL_DESC_COUNT> for SQLLEN {
100 type DefinedBy = OdbcDefined;
101}
102
103#[derive(Ident)]
104#[identifier(SQLUSMALLINT, 2)]
105#[allow(non_camel_case_types)]
106pub struct SQL_DESC_CONCISE_TYPE;
107
108#[derive(Ident)]
109#[identifier(SQLUSMALLINT, 6)]
110#[allow(non_camel_case_types)]
111pub struct SQL_DESC_DISPLAY_SIZE;
112
113#[derive(Ident)]
114#[identifier(SQLUSMALLINT, 8)]
115#[allow(non_camel_case_types)]
116pub struct SQL_DESC_UNSIGNED;
117
118#[derive(Ident)]
119#[identifier(SQLUSMALLINT, 9)]
120#[allow(non_camel_case_types)]
121pub struct SQL_DESC_FIXED_PREC_SCALE;
122
123#[derive(Ident)]
124#[identifier(SQLUSMALLINT, 10)]
125#[allow(non_camel_case_types)]
126pub struct SQL_DESC_UPDATABLE;
127
128#[derive(Ident)]
138#[identifier(SQLUSMALLINT, 11)]
139#[allow(non_camel_case_types)]
140pub struct SQL_DESC_AUTO_UNIQUE_VALUE;
141
142#[derive(Ident)]
143#[identifier(SQLUSMALLINT, 12)]
144#[allow(non_camel_case_types)]
145pub struct SQL_DESC_CASE_SENSITIVE;
146
147#[derive(Ident)]
148#[identifier(SQLUSMALLINT, 13)]
149#[allow(non_camel_case_types)]
150pub struct SQL_DESC_SEARCHABLE;
151#[derive(Ident)]
161#[identifier(SQLUSMALLINT, 14)]
162#[allow(non_camel_case_types)]
163pub struct SQL_DESC_TYPE_NAME;
164
165#[derive(Ident)]
166#[identifier(SQLUSMALLINT, 15)]
167#[allow(non_camel_case_types)]
168pub struct SQL_DESC_TABLE_NAME;
169
170#[derive(Ident)]
171#[identifier(SQLUSMALLINT, 16)]
172#[allow(non_camel_case_types)]
173pub struct SQL_DESC_SCHEMA_NAME;
174
175#[derive(Ident)]
176#[identifier(SQLUSMALLINT, 17)]
177#[allow(non_camel_case_types)]
178pub struct SQL_DESC_CATALOG_NAME;
179
180#[derive(Ident)]
181#[identifier(SQLUSMALLINT, 18)]
182#[allow(non_camel_case_types)]
183pub struct SQL_DESC_LABEL;
184
185#[derive(Ident)]
186#[identifier(SQLUSMALLINT, 22)]
187#[allow(non_camel_case_types)]
188pub struct SQL_DESC_BASE_COLUMN_NAME;
189
190#[derive(Ident)]
191#[identifier(SQLUSMALLINT, 23)]
192#[allow(non_camel_case_types)]
193pub struct SQL_DESC_BASE_TABLE_NAME;
194
195#[derive(Ident)]
196#[identifier(SQLUSMALLINT, 27)]
197#[allow(non_camel_case_types)]
198pub struct SQL_DESC_LITERAL_PREFIX;
199
200#[derive(Ident)]
201#[identifier(SQLUSMALLINT, 28)]
202#[allow(non_camel_case_types)]
203pub struct SQL_DESC_LITERAL_SUFFIX;
204
205#[derive(Ident)]
206#[identifier(SQLUSMALLINT, 29)]
207#[allow(non_camel_case_types)]
208pub struct SQL_DESC_LOCAL_TYPE_NAME;
209
210#[derive(Ident)]
211#[identifier(SQLUSMALLINT, 32)]
212#[allow(non_camel_case_types)]
213pub struct SQL_DESC_NUM_PREC_RADIX;
214
215#[derive(Ident)]
216#[identifier(SQLUSMALLINT, 1002)]
217#[allow(non_camel_case_types)]
218pub struct SQL_DESC_TYPE;
219
220#[derive(Ident)]
221#[identifier(SQLUSMALLINT, 1003)]
222#[allow(non_camel_case_types)]
223pub struct SQL_DESC_LENGTH;
224
225#[derive(Ident)]
226#[identifier(SQLUSMALLINT, 1005)]
227#[allow(non_camel_case_types)]
228pub struct SQL_DESC_PRECISION;
229
230#[derive(Ident)]
231#[identifier(SQLUSMALLINT, 1006)]
232#[allow(non_camel_case_types)]
233pub struct SQL_DESC_SCALE;
234
235#[derive(Ident)]
236#[identifier(SQLUSMALLINT, 1008)]
237#[allow(non_camel_case_types)]
238pub struct SQL_DESC_NULLABLE;
239
240#[derive(Ident)]
241#[identifier(SQLUSMALLINT, 1011)]
242#[allow(non_camel_case_types)]
243pub struct SQL_DESC_NAME;
244
245#[derive(Ident)]
246#[identifier(SQLUSMALLINT, 1012)]
247#[allow(non_camel_case_types)]
248pub struct SQL_DESC_UNNAMED;
249
250#[derive(Ident)]
259#[identifier(SQLUSMALLINT, 1013)]
260#[allow(non_camel_case_types)]
261pub struct SQL_DESC_OCTET_LENGTH;
262
263