1use crate::api::Descriptor;
2use crate::attr::{Attr, AttrGet, AttrLen, AttrSet};
3use crate::c_types::CScalar;
4use crate::env::{OdbcVersion, SQL_OV_ODBC3, SQL_OV_ODBC3_80, SQL_OV_ODBC4};
5use crate::handle::{RefSQLHDESC, RefUnsafeSQLHDESC, UnsafeSQLHDESC, SQLHDESC};
6use crate::str::{OdbcChar, OdbcStr};
7use crate::{
8 Ident, OdbcBool, OdbcDefined, Scalar, SQLCHAR, SQLINTEGER, SQLSMALLINT, SQLUINTEGER, SQLULEN,
9 SQLWCHAR,
10};
11use core::{cell::UnsafeCell, marker::PhantomData, mem::MaybeUninit};
12use rs_odbc_derive::{odbc_type, Ident};
13
14pub trait DescType<'buf> {}
17
18pub trait DescField<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, V: OdbcVersion>:
20 Attr<A> + AttrLen<Self::DefinedBy, SQLINTEGER>
21where
22 D: ?Sized,
23{
24 fn update_handle(&self, _: &D)
26 where
27 Self: AttrSet<A>,
28 {
29 }
38}
39
40#[derive(Debug)]
41pub struct AppDesc<'buf> {
42 pub(crate) rows_processed: PhantomData<&'buf ()>,
43 pub(crate) data_ptrs: PhantomData<&'buf ()>,
44}
45
46#[derive(Debug)]
47pub enum IRD {}
48#[derive(Debug)]
49pub enum IPD {}
50
51impl<'buf> DescType<'buf> for AppDesc<'buf> {}
52impl DescType<'_> for IPD {}
53impl DescType<'_> for IRD {}
54
55impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
57 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for T
58where
59 T: DescField<
60 'buf,
61 SQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
62 DT,
63 A,
64 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
65 >,
66{
67}
68impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
69 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for T
70where
71 T: DescField<
72 'buf,
73 SQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
74 DT,
75 A,
76 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
77 >,
78{
79}
80impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
81 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for [T]
82where
83 [T]: DescField<
84 'buf,
85 SQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
86 DT,
87 A,
88 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
89 >,
90{
91}
92impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
93 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for [T]
94where
95 [T]: DescField<
96 'buf,
97 SQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
98 DT,
99 A,
100 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
101 >,
102{
103}
104impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
105 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for OdbcStr<CH>
106where
107 OdbcStr<CH>: DescField<
108 'buf,
109 SQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
110 DT,
111 A,
112 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
113 >,
114{
115}
116impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
117 DescField<'buf, SQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for OdbcStr<CH>
118where
119 OdbcStr<CH>: DescField<
120 'buf,
121 SQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
122 DT,
123 A,
124 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
125 >,
126{
127}
128
129impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
131 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for T
132where
133 T: DescField<
134 'buf,
135 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
136 DT,
137 A,
138 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
139 >,
140{
141}
142impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
143 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for T
144where
145 T: DescField<
146 'buf,
147 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
148 DT,
149 A,
150 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
151 >,
152{
153}
154impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
155 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for [T]
156where
157 [T]: DescField<
158 'buf,
159 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
160 DT,
161 A,
162 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
163 >,
164{
165}
166impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
167 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for [T]
168where
169 [T]: DescField<
170 'buf,
171 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
172 DT,
173 A,
174 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
175 >,
176{
177}
178impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
179 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80>
180 for OdbcStr<CH>
181where
182 OdbcStr<CH>: DescField<
183 'buf,
184 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
185 DT,
186 A,
187 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
188 >,
189{
190}
191impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
192 DescField<'buf, UnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for OdbcStr<CH>
193where
194 OdbcStr<CH>: DescField<
195 'buf,
196 UnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
197 DT,
198 A,
199 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
200 >,
201{
202}
203
204impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
206 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for T
207where
208 T: DescField<
209 'buf,
210 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
211 DT,
212 A,
213 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
214 >,
215{
216}
217impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
218 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for T
219where
220 T: DescField<
221 'buf,
222 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
223 DT,
224 A,
225 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
226 >,
227{
228}
229impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
230 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for [T]
231where
232 [T]: DescField<
233 'buf,
234 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
235 DT,
236 A,
237 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
238 >,
239{
240}
241impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
242 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for [T]
243where
244 [T]: DescField<
245 'buf,
246 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
247 DT,
248 A,
249 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
250 >,
251{
252}
253impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
254 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for OdbcStr<CH>
255where
256 OdbcStr<CH>: DescField<
257 'buf,
258 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
259 DT,
260 A,
261 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
262 >,
263{
264}
265impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
266 DescField<'buf, RefSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for OdbcStr<CH>
267where
268 OdbcStr<CH>: DescField<
269 'buf,
270 RefSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
271 DT,
272 A,
273 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
274 >,
275{
276}
277
278impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
280 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for T
281where
282 T: DescField<
283 'buf,
284 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
285 DT,
286 A,
287 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
288 >,
289{
290}
291impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
292 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for T
293where
294 T: DescField<
295 'buf,
296 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
297 DT,
298 A,
299 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
300 >,
301{
302}
303impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
304 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80> for [T]
305where
306 [T]: DescField<
307 'buf,
308 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
309 DT,
310 A,
311 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
312 >,
313{
314}
315impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, T: Scalar>
316 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for [T]
317where
318 [T]: DescField<
319 'buf,
320 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
321 DT,
322 A,
323 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
324 >,
325{
326}
327impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
328 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC3_80>, DT, A, SQL_OV_ODBC3_80>
329 for OdbcStr<CH>
330where
331 OdbcStr<CH>: DescField<
332 'buf,
333 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion>,
334 DT,
335 A,
336 <SQL_OV_ODBC3_80 as OdbcVersion>::PrevVersion,
337 >,
338{
339}
340impl<'conn, 'buf, DT: DescType<'buf>, A: Ident, CH: OdbcChar>
341 DescField<'buf, RefUnsafeSQLHDESC<'conn, DT, SQL_OV_ODBC4>, DT, A, SQL_OV_ODBC4> for OdbcStr<CH>
342where
343 OdbcStr<CH>: DescField<
344 'buf,
345 RefUnsafeSQLHDESC<'conn, DT, <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion>,
346 DT,
347 A,
348 <SQL_OV_ODBC4 as OdbcVersion>::PrevVersion,
349 >,
350{
351}
352
353impl<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, T: Scalar, V: OdbcVersion>
355 DescField<'buf, D, DT, A, V> for MaybeUninit<T>
356where
357 T: DescField<'buf, D, DT, A, V> + AttrGet<A>,
358 Self: AttrLen<Self::DefinedBy, SQLINTEGER>,
359{
360}
361impl<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, T: Scalar, V: OdbcVersion>
362 DescField<'buf, D, DT, A, V> for [MaybeUninit<T>]
363where
364 [T]: DescField<'buf, D, DT, A, V> + AttrGet<A>,
365 Self: AttrLen<Self::DefinedBy, SQLINTEGER>,
366{
367}
368impl<'buf, D: Descriptor<'buf, DT, V>, A: Ident, DT, V: OdbcVersion> DescField<'buf, D, DT, A, V>
369 for OdbcStr<MaybeUninit<SQLCHAR>>
370where
371 OdbcStr<SQLCHAR>: DescField<'buf, D, DT, A, V> + AttrGet<A>,
372{
373}
374impl<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, V: OdbcVersion> DescField<'buf, D, DT, A, V>
375 for OdbcStr<MaybeUninit<SQLWCHAR>>
376where
377 OdbcStr<SQLWCHAR>: DescField<'buf, D, DT, A, V> + AttrGet<A>,
378{
379}
380
381impl<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, T: Scalar, V: OdbcVersion>
383 DescField<'buf, D, DT, A, V> for &[T]
384where
385 [T]: DescField<'buf, D, DT, A, V>,
386 Self: AttrSet<A>,
387{
388}
389impl<'buf, D: Descriptor<'buf, DT, V>, DT, A: Ident, CH: OdbcChar, V: OdbcVersion>
390 DescField<'buf, D, DT, A, V> for &OdbcStr<CH>
391where
392 OdbcStr<CH>: DescField<'buf, D, DT, A, V>,
393 Self: AttrSet<A>,
394{
395}
396
397#[derive(Ident)]
405#[identifier(SQLSMALLINT, 1099)]
406#[allow(non_camel_case_types)]
407pub struct SQL_DESC_ALLOC_TYPE;
408unsafe impl Attr<SQL_DESC_ALLOC_TYPE> for AllocType {
410 type DefinedBy = OdbcDefined;
411}
412impl<'buf, D: Descriptor<'buf, DT, SQL_OV_ODBC3>, DT>
413 DescField<'buf, D, DT, SQL_DESC_ALLOC_TYPE, SQL_OV_ODBC3> for AllocType
414{
415}
416unsafe impl AttrGet<SQL_DESC_ALLOC_TYPE> for AllocType {}
417
418#[derive(Ident)]
419#[identifier(SQLSMALLINT, 20)]
420#[allow(non_camel_case_types)]
421pub struct SQL_DESC_ARRAY_SIZE;
422unsafe impl Attr<SQL_DESC_ARRAY_SIZE> for SQLULEN {
423 type DefinedBy = OdbcDefined;
424}
425impl<'buf, D: Descriptor<'buf, AppDesc<'buf>, SQL_OV_ODBC3>>
426 DescField<'buf, D, AppDesc<'buf>, SQL_DESC_ARRAY_SIZE, SQL_OV_ODBC3> for SQLULEN
427{
428}
429unsafe impl AttrGet<SQL_DESC_ARRAY_SIZE> for SQLULEN {}
430unsafe impl AttrSet<SQL_DESC_ARRAY_SIZE> for SQLULEN {}
431
432#[derive(Ident)]
464#[identifier(SQLSMALLINT, 25)]
465#[allow(non_camel_case_types)]
466pub struct SQL_DESC_BIND_TYPE;
467unsafe impl Attr<SQL_DESC_BIND_TYPE> for BindType {
468 type DefinedBy = OdbcDefined;
469}
470impl<'buf, D: Descriptor<'buf, AppDesc<'buf>, SQL_OV_ODBC3>>
471 DescField<'buf, D, AppDesc<'buf>, SQL_DESC_BIND_TYPE, SQL_OV_ODBC3> for BindType
472{
473}
474unsafe impl AttrGet<SQL_DESC_BIND_TYPE> for BindType {}
475unsafe impl AttrSet<SQL_DESC_BIND_TYPE> for BindType {}
476
477#[derive(Ident)]
478#[identifier(SQLSMALLINT, 1001)]
479#[allow(non_camel_case_types)]
480pub struct SQL_DESC_COUNT;
481unsafe impl Attr<SQL_DESC_COUNT> for SQLSMALLINT {
482 type DefinedBy = OdbcDefined;
483}
484impl<'buf, D: Descriptor<'buf, DT, SQL_OV_ODBC3>, DT>
485 DescField<'buf, D, DT, SQL_DESC_COUNT, SQL_OV_ODBC3> for SQLSMALLINT
486{
487}
488unsafe impl AttrGet<SQL_DESC_COUNT> for SQLSMALLINT {}
489unsafe impl AttrSet<SQL_DESC_COUNT> for SQLSMALLINT {}
490
491#[derive(Ident)]
492#[identifier(SQLSMALLINT, 34)]
493#[allow(non_camel_case_types)]
494pub struct SQL_DESC_ROWS_PROCESSED_PTR;
495unsafe impl Attr<SQL_DESC_ROWS_PROCESSED_PTR> for [UnsafeCell<SQLUINTEGER>] {
496 type DefinedBy = OdbcDefined;
497}
498unsafe impl Attr<SQL_DESC_ROWS_PROCESSED_PTR> for [UnsafeCell<SQLULEN>] {
499 type DefinedBy = OdbcDefined;
500}
501impl<'conn, 'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>>
502 DescField<'buf, D, IRD, SQL_DESC_ROWS_PROCESSED_PTR, SQL_OV_ODBC3> for [UnsafeCell<SQLULEN>]
503{
504 #[cfg(feature = "odbc_debug")]
505 fn update_handle<V: OdbcVersion>(&self, DescriptorHandle: &UnsafeSQLHDESC<'conn, IRD, V>) {
506 unimplemented!()
507 }
508}
509impl<'buf, D: Descriptor<'buf, IPD, SQL_OV_ODBC3>>
510 DescField<'buf, D, IPD, SQL_DESC_ROWS_PROCESSED_PTR, SQL_OV_ODBC3>
511 for [UnsafeCell<SQLUINTEGER>]
512{
513 #[cfg(feature = "odbc_debug")]
514 fn update_handle<V: OdbcVersion>(&self, DescriptorHandle: &UnsafeSQLHDESC<'conn, IPD, V>) {
515 unimplemented!()
516 }
517}
518unsafe impl AttrGet<SQL_DESC_ROWS_PROCESSED_PTR> for [UnsafeCell<SQLUINTEGER>] {}
519unsafe impl AttrGet<SQL_DESC_ROWS_PROCESSED_PTR> for [UnsafeCell<SQLULEN>] {}
520unsafe impl AttrSet<SQL_DESC_ROWS_PROCESSED_PTR> for &[UnsafeCell<SQLUINTEGER>] {}
521unsafe impl AttrSet<SQL_DESC_ROWS_PROCESSED_PTR> for &[UnsafeCell<SQLULEN>] {}
522
523#[derive(Ident)]
528#[identifier(SQLSMALLINT, 11)]
529#[allow(non_camel_case_types)]
530pub struct SQL_DESC_AUTO_UNIQUE_VALUE;
532unsafe impl Attr<SQL_DESC_AUTO_UNIQUE_VALUE> for OdbcBool {
533 type DefinedBy = OdbcDefined;
534}
535impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>>
536 DescField<'buf, D, IRD, SQL_DESC_AUTO_UNIQUE_VALUE, SQL_OV_ODBC3> for OdbcBool
537{
538}
539unsafe impl AttrGet<SQL_DESC_AUTO_UNIQUE_VALUE> for OdbcBool {}
540
541#[derive(Ident)]
542#[identifier(SQLSMALLINT, 22)]
543#[allow(non_camel_case_types)]
544pub struct SQL_DESC_BASE_COLUMN_NAME;
546unsafe impl<CH: OdbcChar> Attr<SQL_DESC_BASE_COLUMN_NAME> for OdbcStr<CH> {
547 type DefinedBy = OdbcDefined;
548}
549impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>, CH: OdbcChar>
550 DescField<'buf, D, IRD, SQL_DESC_BASE_COLUMN_NAME, SQL_OV_ODBC3> for OdbcStr<CH>
551{
552}
553unsafe impl<CH: OdbcChar> AttrGet<SQL_DESC_BASE_COLUMN_NAME> for OdbcStr<CH> {}
554
555#[derive(Ident)]
556#[identifier(SQLSMALLINT, 23)]
557#[allow(non_camel_case_types)]
558pub struct SQL_DESC_BASE_TABLE_NAME;
560unsafe impl<CH: OdbcChar> Attr<SQL_DESC_BASE_TABLE_NAME> for OdbcStr<CH> {
561 type DefinedBy = OdbcDefined;
562}
563impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>, CH: OdbcChar>
564 DescField<'buf, D, IRD, SQL_DESC_BASE_TABLE_NAME, SQL_OV_ODBC3> for OdbcStr<CH>
565{
566}
567unsafe impl<CH: OdbcChar> AttrGet<SQL_DESC_BASE_TABLE_NAME> for OdbcStr<CH> {}
568
569#[derive(Ident)]
570#[identifier(SQLSMALLINT, 12)]
571#[allow(non_camel_case_types)]
572pub struct SQL_DESC_CASE_SENSITIVE;
574unsafe impl Attr<SQL_DESC_CASE_SENSITIVE> for OdbcBool {
575 type DefinedBy = OdbcDefined;
576}
577impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>>
578 DescField<'buf, D, IRD, SQL_DESC_CASE_SENSITIVE, SQL_OV_ODBC3> for OdbcBool
579{
580}
581unsafe impl AttrGet<SQL_DESC_CASE_SENSITIVE> for OdbcBool {}
582
583#[derive(Ident)]
584#[identifier(SQLSMALLINT, 17)]
585#[allow(non_camel_case_types)]
586pub struct SQL_DESC_CATALOG_NAME;
588unsafe impl<CH: OdbcChar> Attr<SQL_DESC_CATALOG_NAME> for OdbcStr<CH> {
589 type DefinedBy = OdbcDefined;
590}
591impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>, CH: OdbcChar>
592 DescField<'buf, D, IRD, SQL_DESC_CATALOG_NAME, SQL_OV_ODBC3> for OdbcStr<CH>
593{
594}
595unsafe impl<CH: OdbcChar> AttrGet<SQL_DESC_CATALOG_NAME> for OdbcStr<CH> {}
596
597#[derive(Ident)]
626#[identifier(SQLSMALLINT, 1010)]
627#[allow(non_camel_case_types)]
628pub struct SQL_DESC_DATA_PTR;
629unsafe impl<T> Attr<SQL_DESC_DATA_PTR> for UnsafeCell<T> {
630 type DefinedBy = OdbcDefined;
631}
632impl<'buf, D: Descriptor<'buf, IPD, SQL_OV_ODBC3>, T: CScalar>
633 DescField<'buf, D, IPD, SQL_DESC_DATA_PTR, SQL_OV_ODBC3> for UnsafeCell<T>
634{
635}
636impl<'buf, D: Descriptor<'buf, AppDesc<'buf>, SQL_OV_ODBC3>, T: CScalar>
637 DescField<'buf, D, AppDesc<'buf>, SQL_DESC_DATA_PTR, SQL_OV_ODBC3> for UnsafeCell<T>
638{
639}
640unsafe impl<T: CScalar> AttrGet<SQL_DESC_DATA_PTR> for UnsafeCell<T> {}
641unsafe impl<T: CScalar> AttrSet<SQL_DESC_DATA_PTR> for &UnsafeCell<T> {}
642
643unsafe impl<T> Attr<SQL_DESC_DATA_PTR> for [UnsafeCell<T>] {
644 type DefinedBy = OdbcDefined;
645}
646impl<'buf, D: Descriptor<'buf, DT, SQL_OV_ODBC3>, DT, T>
647 DescField<'buf, D, DT, SQL_DESC_DATA_PTR, SQL_OV_ODBC3> for [UnsafeCell<T>]
648{
649}
650unsafe impl<T> AttrGet<SQL_DESC_DATA_PTR> for [UnsafeCell<T>] {}
651unsafe impl<T> AttrSet<SQL_DESC_DATA_PTR> for &[UnsafeCell<T>] {}
652
653#[derive(Ident)]
654#[identifier(SQLSMALLINT, 6)]
655#[allow(non_camel_case_types)]
656pub struct SQL_DESC_DISPLAY_SIZE;
658unsafe impl Attr<SQL_DESC_DISPLAY_SIZE> for SQLINTEGER {
659 type DefinedBy = OdbcDefined;
660}
661impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>>
662 DescField<'buf, D, IRD, SQL_DESC_DISPLAY_SIZE, SQL_OV_ODBC3> for SQLINTEGER
663{
664}
665unsafe impl AttrGet<SQL_DESC_DISPLAY_SIZE> for SQLINTEGER {}
666
667#[derive(Ident)]
678#[identifier(SQLSMALLINT, 9)]
679#[allow(non_camel_case_types)]
680pub struct SQL_DESC_FIXED_PREC_SCALE;
682unsafe impl Attr<SQL_DESC_FIXED_PREC_SCALE> for OdbcBool {
683 type DefinedBy = OdbcDefined;
684}
685impl<'buf, D: Descriptor<'buf, IRD, SQL_OV_ODBC3>>
686 DescField<'buf, D, IRD, SQL_DESC_FIXED_PREC_SCALE, SQL_OV_ODBC3> for OdbcBool
687{
688}
689impl<'buf, D: Descriptor<'buf, IPD, SQL_OV_ODBC3>>
690 DescField<'buf, D, IPD, SQL_DESC_FIXED_PREC_SCALE, SQL_OV_ODBC3> for OdbcBool
691{
692}
693
694unsafe impl AttrGet<SQL_DESC_FIXED_PREC_SCALE> for OdbcBool {}
695
696#[derive(Ident)]
697#[identifier(SQLSMALLINT, 1004)]
698#[allow(non_camel_case_types)]
699pub struct SQL_DESC_OCTET_LENGTH_PTR;
700
701#[derive(Ident)]
702#[identifier(SQLSMALLINT, 33)]
703#[allow(non_camel_case_types)]
704pub struct SQL_DESC_PARAMETER_TYPE;
705
706#[cfg(feature = "v3_5")]
707#[derive(Ident)]
708#[identifier(SQLSMALLINT, 35)]
709#[allow(non_camel_case_types)]
710pub struct SQL_DESC_ROWVER;
711
712#[derive(Ident)]
713#[identifier(SQLSMALLINT, 1012)]
714#[allow(non_camel_case_types)]
715pub struct SQL_DESC_UNNAMED;
716
717#[derive(Ident)]
718#[identifier(SQLSMALLINT, 1002)]
719#[allow(non_camel_case_types)]
720pub struct SQL_DESC_TYPE;
721
722#[derive(Ident)]
723#[identifier(SQLSMALLINT, 1003)]
724#[allow(non_camel_case_types)]
725pub struct SQL_DESC_LENGTH;
726
727#[derive(Ident)]
728#[identifier(SQLSMALLINT, 1005)]
729#[allow(non_camel_case_types)]
730pub struct SQL_DESC_PRECISION;
731
732#[derive(Ident)]
733#[identifier(SQLSMALLINT, 1006)]
734#[allow(non_camel_case_types)]
735pub struct SQL_DESC_SCALE;
736
737#[derive(Ident)]
738#[identifier(SQLSMALLINT, 1008)]
739#[allow(non_camel_case_types)]
740pub struct SQL_DESC_NULLABLE;
741
742#[derive(Ident)]
743#[identifier(SQLSMALLINT, 1011)]
744#[allow(non_camel_case_types)]
745pub struct SQL_DESC_NAME;
746
747#[derive(Ident)]
748#[identifier(SQLSMALLINT, 1013)]
749#[allow(non_camel_case_types)]
750pub struct SQL_DESC_OCTET_LENGTH;
751unsafe impl Attr<SQL_DESC_OCTET_LENGTH> for OdbcBool {
752 type DefinedBy = OdbcDefined;
753}
754impl<'buf, D: Descriptor<'buf, DT, SQL_OV_ODBC3>, DT>
755 DescField<'buf, D, DT, SQL_DESC_OCTET_LENGTH, SQL_OV_ODBC3> for OdbcBool
756{
757}
758unsafe impl AttrGet<SQL_DESC_OCTET_LENGTH> for OdbcBool {}
759
760#[odbc_type(SQLSMALLINT)]
830pub struct AllocType;
831pub const SQL_DESC_ALLOC_AUTO: AllocType = AllocType(1);
832pub const SQL_DESC_ALLOC_USER: AllocType = AllocType(2);
833
834#[odbc_type(SQLUINTEGER)]
836pub struct BindType;
837pub const SQL_BIND_BY_COLUMN: BindType = BindType(1);