odpic_sys/
bindings.rs

1/* automatically generated by rust-bindgen 0.70.1 */
2
3pub const DPI_MAJOR_VERSION: u32 = 5;
4pub const DPI_MINOR_VERSION: u32 = 5;
5pub const DPI_PATCH_LEVEL: u32 = 0;
6pub const DPI_DEFAULT_FETCH_ARRAY_SIZE: u32 = 100;
7pub const DPI_DEFAULT_PREFETCH_ROWS: u32 = 2;
8pub const DPI_DEFAULT_PING_INTERVAL: u32 = 60;
9pub const DPI_DEFAULT_PING_TIMEOUT: u32 = 5000;
10pub const DPI_DEFAULT_STMT_CACHE_SIZE: u32 = 20;
11pub const DPI_DEQ_WAIT_NO_WAIT: u32 = 0;
12pub const DPI_MAX_INT64_PRECISION: u32 = 18;
13pub const DPI_SUCCESS: i32 = 0;
14pub const DPI_FAILURE: i32 = -1;
15pub const DPI_DEBUG_LEVEL_UNREPORTED_ERRORS: u32 = 1;
16pub const DPI_DEBUG_LEVEL_REFS: u32 = 2;
17pub const DPI_DEBUG_LEVEL_FNS: u32 = 4;
18pub const DPI_DEBUG_LEVEL_ERRORS: u32 = 8;
19pub const DPI_DEBUG_LEVEL_SQL: u32 = 16;
20pub const DPI_DEBUG_LEVEL_MEM: u32 = 32;
21pub const DPI_DEBUG_LEVEL_LOAD_LIB: u32 = 64;
22
23/// See [`dpiAuthMode`]
24pub const DPI_MODE_AUTH_DEFAULT: u32 = 0;
25
26/// See [`dpiAuthMode`]
27pub const DPI_MODE_AUTH_SYSDBA: u32 = 2;
28
29/// See [`dpiAuthMode`]
30pub const DPI_MODE_AUTH_SYSOPER: u32 = 4;
31
32/// See [`dpiAuthMode`]
33pub const DPI_MODE_AUTH_PRELIM: u32 = 8;
34
35/// See [`dpiAuthMode`]
36pub const DPI_MODE_AUTH_SYSASM: u32 = 32768;
37
38/// See [`dpiAuthMode`]
39pub const DPI_MODE_AUTH_SYSBKP: u32 = 131072;
40
41/// See [`dpiAuthMode`]
42pub const DPI_MODE_AUTH_SYSDGD: u32 = 262144;
43
44/// See [`dpiAuthMode`]
45pub const DPI_MODE_AUTH_SYSKMT: u32 = 524288;
46
47/// See [`dpiAuthMode`]
48pub const DPI_MODE_AUTH_SYSRAC: u32 = 1048576;
49
50/// See [`dpiConnCloseMode`]
51pub const DPI_MODE_CONN_CLOSE_DEFAULT: u32 = 0;
52
53/// See [`dpiConnCloseMode`]
54pub const DPI_MODE_CONN_CLOSE_DROP: u32 = 1;
55
56/// See [`dpiConnCloseMode`]
57pub const DPI_MODE_CONN_CLOSE_RETAG: u32 = 2;
58
59/// See [`dpiCreateMode`]
60pub const DPI_MODE_CREATE_DEFAULT: u32 = 0;
61
62/// See [`dpiCreateMode`]
63pub const DPI_MODE_CREATE_THREADED: u32 = 1;
64
65/// See [`dpiCreateMode`]
66pub const DPI_MODE_CREATE_EVENTS: u32 = 4;
67
68/// See [`dpiDeqMode`]
69pub const DPI_MODE_DEQ_BROWSE: u32 = 1;
70
71/// See [`dpiDeqMode`]
72pub const DPI_MODE_DEQ_LOCKED: u32 = 2;
73
74/// See [`dpiDeqMode`]
75pub const DPI_MODE_DEQ_REMOVE: u32 = 3;
76
77/// See [`dpiDeqMode`]
78pub const DPI_MODE_DEQ_REMOVE_NO_DATA: u32 = 4;
79
80/// See [`dpiDeqNavigation`]
81pub const DPI_DEQ_NAV_FIRST_MSG: u32 = 1;
82
83/// See [`dpiDeqNavigation`]
84pub const DPI_DEQ_NAV_NEXT_TRANSACTION: u32 = 2;
85
86/// See [`dpiDeqNavigation`]
87pub const DPI_DEQ_NAV_NEXT_MSG: u32 = 3;
88
89/// See [`dpiEventType`]
90pub const DPI_EVENT_NONE: u32 = 0;
91
92/// See [`dpiEventType`]
93pub const DPI_EVENT_STARTUP: u32 = 1;
94
95/// See [`dpiEventType`]
96pub const DPI_EVENT_SHUTDOWN: u32 = 2;
97
98/// See [`dpiEventType`]
99pub const DPI_EVENT_SHUTDOWN_ANY: u32 = 3;
100
101/// See [`dpiEventType`]
102pub const DPI_EVENT_DEREG: u32 = 5;
103
104/// See [`dpiEventType`]
105pub const DPI_EVENT_OBJCHANGE: u32 = 6;
106
107/// See [`dpiEventType`]
108pub const DPI_EVENT_QUERYCHANGE: u32 = 7;
109
110/// See [`dpiEventType`]
111pub const DPI_EVENT_AQ: u32 = 100;
112
113/// See [`dpiJsonOptions`]
114pub const DPI_JSON_OPT_DEFAULT: u32 = 0;
115
116/// See [`dpiJsonOptions`]
117pub const DPI_JSON_OPT_NUMBER_AS_STRING: u32 = 1;
118
119/// See [`dpiJsonOptions`]
120pub const DPI_JSON_OPT_DATE_AS_DOUBLE: u32 = 2;
121
122/// See [`dpiExecMode`]
123pub const DPI_MODE_EXEC_DEFAULT: u32 = 0;
124
125/// See [`dpiExecMode`]
126pub const DPI_MODE_EXEC_DESCRIBE_ONLY: u32 = 16;
127
128/// See [`dpiExecMode`]
129pub const DPI_MODE_EXEC_COMMIT_ON_SUCCESS: u32 = 32;
130
131/// See [`dpiExecMode`]
132pub const DPI_MODE_EXEC_BATCH_ERRORS: u32 = 128;
133
134/// See [`dpiExecMode`]
135pub const DPI_MODE_EXEC_PARSE_ONLY: u32 = 256;
136
137/// See [`dpiExecMode`]
138pub const DPI_MODE_EXEC_ARRAY_DML_ROWCOUNTS: u32 = 1048576;
139
140/// See [`dpiFetchMode`]
141pub const DPI_MODE_FETCH_NEXT: u16 = 2;
142
143/// See [`dpiFetchMode`]
144pub const DPI_MODE_FETCH_FIRST: u16 = 4;
145
146/// See [`dpiFetchMode`]
147pub const DPI_MODE_FETCH_LAST: u16 = 8;
148
149/// See [`dpiFetchMode`]
150pub const DPI_MODE_FETCH_PRIOR: u16 = 16;
151
152/// See [`dpiFetchMode`]
153pub const DPI_MODE_FETCH_ABSOLUTE: u16 = 32;
154
155/// See [`dpiFetchMode`]
156pub const DPI_MODE_FETCH_RELATIVE: u16 = 64;
157
158/// See [`dpiMessageDeliveryMode`]
159pub const DPI_MODE_MSG_PERSISTENT: u16 = 1;
160
161/// See [`dpiMessageDeliveryMode`]
162pub const DPI_MODE_MSG_BUFFERED: u16 = 2;
163
164/// See [`dpiMessageDeliveryMode`]
165pub const DPI_MODE_MSG_PERSISTENT_OR_BUFFERED: u16 = 3;
166
167/// See [`dpiMessageState`]
168pub const DPI_MSG_STATE_READY: u32 = 0;
169
170/// See [`dpiMessageState`]
171pub const DPI_MSG_STATE_WAITING: u32 = 1;
172
173/// See [`dpiMessageState`]
174pub const DPI_MSG_STATE_PROCESSED: u32 = 2;
175
176/// See [`dpiMessageState`]
177pub const DPI_MSG_STATE_EXPIRED: u32 = 3;
178
179/// See [`dpiNativeTypeNum`]
180pub const DPI_NATIVE_TYPE_INT64: u32 = 3000;
181
182/// See [`dpiNativeTypeNum`]
183pub const DPI_NATIVE_TYPE_UINT64: u32 = 3001;
184
185/// See [`dpiNativeTypeNum`]
186pub const DPI_NATIVE_TYPE_FLOAT: u32 = 3002;
187
188/// See [`dpiNativeTypeNum`]
189pub const DPI_NATIVE_TYPE_DOUBLE: u32 = 3003;
190
191/// See [`dpiNativeTypeNum`]
192pub const DPI_NATIVE_TYPE_BYTES: u32 = 3004;
193
194/// See [`dpiNativeTypeNum`]
195pub const DPI_NATIVE_TYPE_TIMESTAMP: u32 = 3005;
196
197/// See [`dpiNativeTypeNum`]
198pub const DPI_NATIVE_TYPE_INTERVAL_DS: u32 = 3006;
199
200/// See [`dpiNativeTypeNum`]
201pub const DPI_NATIVE_TYPE_INTERVAL_YM: u32 = 3007;
202
203/// See [`dpiNativeTypeNum`]
204pub const DPI_NATIVE_TYPE_LOB: u32 = 3008;
205
206/// See [`dpiNativeTypeNum`]
207pub const DPI_NATIVE_TYPE_OBJECT: u32 = 3009;
208
209/// See [`dpiNativeTypeNum`]
210pub const DPI_NATIVE_TYPE_STMT: u32 = 3010;
211
212/// See [`dpiNativeTypeNum`]
213pub const DPI_NATIVE_TYPE_BOOLEAN: u32 = 3011;
214
215/// See [`dpiNativeTypeNum`]
216pub const DPI_NATIVE_TYPE_ROWID: u32 = 3012;
217
218/// See [`dpiNativeTypeNum`]
219pub const DPI_NATIVE_TYPE_JSON: u32 = 3013;
220
221/// See [`dpiNativeTypeNum`]
222pub const DPI_NATIVE_TYPE_JSON_OBJECT: u32 = 3014;
223
224/// See [`dpiNativeTypeNum`]
225pub const DPI_NATIVE_TYPE_JSON_ARRAY: u32 = 3015;
226
227/// See [`dpiNativeTypeNum`]
228pub const DPI_NATIVE_TYPE_NULL: u32 = 3016;
229
230/// See [`dpiNativeTypeNum`]
231pub const DPI_NATIVE_TYPE_VECTOR: u32 = 3017;
232
233/// See [`dpiOpCode`]
234pub const DPI_OPCODE_ALL_OPS: u32 = 0;
235
236/// See [`dpiOpCode`]
237pub const DPI_OPCODE_ALL_ROWS: u32 = 1;
238
239/// See [`dpiOpCode`]
240pub const DPI_OPCODE_INSERT: u32 = 2;
241
242/// See [`dpiOpCode`]
243pub const DPI_OPCODE_UPDATE: u32 = 4;
244
245/// See [`dpiOpCode`]
246pub const DPI_OPCODE_DELETE: u32 = 8;
247
248/// See [`dpiOpCode`]
249pub const DPI_OPCODE_ALTER: u32 = 16;
250
251/// See [`dpiOpCode`]
252pub const DPI_OPCODE_DROP: u32 = 32;
253
254/// See [`dpiOpCode`]
255pub const DPI_OPCODE_UNKNOWN: u32 = 64;
256pub const DPI_ORACLE_TYPE_NONE: u32 = 2000;
257
258/// See [`dpiOracleTypeNum`]
259pub const DPI_ORACLE_TYPE_VARCHAR: u32 = 2001;
260
261/// See [`dpiOracleTypeNum`]
262pub const DPI_ORACLE_TYPE_NVARCHAR: u32 = 2002;
263
264/// See [`dpiOracleTypeNum`]
265pub const DPI_ORACLE_TYPE_CHAR: u32 = 2003;
266
267/// See [`dpiOracleTypeNum`]
268pub const DPI_ORACLE_TYPE_NCHAR: u32 = 2004;
269
270/// See [`dpiOracleTypeNum`]
271pub const DPI_ORACLE_TYPE_ROWID: u32 = 2005;
272
273/// See [`dpiOracleTypeNum`]
274pub const DPI_ORACLE_TYPE_RAW: u32 = 2006;
275
276/// See [`dpiOracleTypeNum`]
277pub const DPI_ORACLE_TYPE_NATIVE_FLOAT: u32 = 2007;
278
279/// See [`dpiOracleTypeNum`]
280pub const DPI_ORACLE_TYPE_NATIVE_DOUBLE: u32 = 2008;
281
282/// See [`dpiOracleTypeNum`]
283pub const DPI_ORACLE_TYPE_NATIVE_INT: u32 = 2009;
284
285/// See [`dpiOracleTypeNum`]
286pub const DPI_ORACLE_TYPE_NUMBER: u32 = 2010;
287
288/// See [`dpiOracleTypeNum`]
289pub const DPI_ORACLE_TYPE_DATE: u32 = 2011;
290
291/// See [`dpiOracleTypeNum`]
292pub const DPI_ORACLE_TYPE_TIMESTAMP: u32 = 2012;
293
294/// See [`dpiOracleTypeNum`]
295pub const DPI_ORACLE_TYPE_TIMESTAMP_TZ: u32 = 2013;
296
297/// See [`dpiOracleTypeNum`]
298pub const DPI_ORACLE_TYPE_TIMESTAMP_LTZ: u32 = 2014;
299
300/// See [`dpiOracleTypeNum`]
301pub const DPI_ORACLE_TYPE_INTERVAL_DS: u32 = 2015;
302
303/// See [`dpiOracleTypeNum`]
304pub const DPI_ORACLE_TYPE_INTERVAL_YM: u32 = 2016;
305
306/// See [`dpiOracleTypeNum`]
307pub const DPI_ORACLE_TYPE_CLOB: u32 = 2017;
308
309/// See [`dpiOracleTypeNum`]
310pub const DPI_ORACLE_TYPE_NCLOB: u32 = 2018;
311
312/// See [`dpiOracleTypeNum`]
313pub const DPI_ORACLE_TYPE_BLOB: u32 = 2019;
314
315/// See [`dpiOracleTypeNum`]
316pub const DPI_ORACLE_TYPE_BFILE: u32 = 2020;
317
318/// See [`dpiOracleTypeNum`]
319pub const DPI_ORACLE_TYPE_STMT: u32 = 2021;
320
321/// See [`dpiOracleTypeNum`]
322pub const DPI_ORACLE_TYPE_BOOLEAN: u32 = 2022;
323
324/// See [`dpiOracleTypeNum`]
325pub const DPI_ORACLE_TYPE_OBJECT: u32 = 2023;
326
327/// See [`dpiOracleTypeNum`]
328pub const DPI_ORACLE_TYPE_LONG_VARCHAR: u32 = 2024;
329
330/// See [`dpiOracleTypeNum`]
331pub const DPI_ORACLE_TYPE_LONG_RAW: u32 = 2025;
332
333/// See [`dpiOracleTypeNum`]
334pub const DPI_ORACLE_TYPE_NATIVE_UINT: u32 = 2026;
335
336/// See [`dpiOracleTypeNum`]
337pub const DPI_ORACLE_TYPE_JSON: u32 = 2027;
338
339/// See [`dpiOracleTypeNum`]
340pub const DPI_ORACLE_TYPE_JSON_OBJECT: u32 = 2028;
341
342/// See [`dpiOracleTypeNum`]
343pub const DPI_ORACLE_TYPE_JSON_ARRAY: u32 = 2029;
344
345/// See [`dpiOracleTypeNum`]
346pub const DPI_ORACLE_TYPE_UROWID: u32 = 2030;
347
348/// See [`dpiOracleTypeNum`]
349pub const DPI_ORACLE_TYPE_LONG_NVARCHAR: u32 = 2031;
350
351/// See [`dpiOracleTypeNum`]
352pub const DPI_ORACLE_TYPE_XMLTYPE: u32 = 2032;
353
354/// See [`dpiOracleTypeNum`]
355pub const DPI_ORACLE_TYPE_VECTOR: u32 = 2033;
356
357/// See [`dpiOracleTypeNum`]
358pub const DPI_ORACLE_TYPE_JSON_ID: u32 = 2034;
359pub const DPI_ORACLE_TYPE_MAX: u32 = 2035;
360
361/// See [`dpiPoolCloseMode`]
362pub const DPI_MODE_POOL_CLOSE_DEFAULT: u32 = 0;
363
364/// See [`dpiPoolCloseMode`]
365pub const DPI_MODE_POOL_CLOSE_FORCE: u32 = 1;
366
367/// See [`dpiPoolGetMode`]
368pub const DPI_MODE_POOL_GET_WAIT: u8 = 0;
369
370/// See [`dpiPoolGetMode`]
371pub const DPI_MODE_POOL_GET_NOWAIT: u8 = 1;
372
373/// See [`dpiPoolGetMode`]
374pub const DPI_MODE_POOL_GET_FORCEGET: u8 = 2;
375
376/// See [`dpiPoolGetMode`]
377pub const DPI_MODE_POOL_GET_TIMEDWAIT: u8 = 3;
378
379/// See [`dpiPurity`]
380pub const DPI_PURITY_DEFAULT: u32 = 0;
381
382/// See [`dpiPurity`]
383pub const DPI_PURITY_NEW: u32 = 1;
384
385/// See [`dpiPurity`]
386pub const DPI_PURITY_SELF: u32 = 2;
387
388/// See [`dpiShutdownMode`]
389pub const DPI_MODE_SHUTDOWN_DEFAULT: u32 = 0;
390
391/// See [`dpiShutdownMode`]
392pub const DPI_MODE_SHUTDOWN_TRANSACTIONAL: u32 = 1;
393
394/// See [`dpiShutdownMode`]
395pub const DPI_MODE_SHUTDOWN_TRANSACTIONAL_LOCAL: u32 = 2;
396
397/// See [`dpiShutdownMode`]
398pub const DPI_MODE_SHUTDOWN_IMMEDIATE: u32 = 3;
399
400/// See [`dpiShutdownMode`]
401pub const DPI_MODE_SHUTDOWN_ABORT: u32 = 4;
402
403/// See [`dpiShutdownMode`]
404pub const DPI_MODE_SHUTDOWN_FINAL: u32 = 5;
405
406/// See [`dpiSodaFlags`]
407pub const DPI_SODA_FLAGS_DEFAULT: u32 = 0;
408
409/// See [`dpiSodaFlags`]
410pub const DPI_SODA_FLAGS_ATOMIC_COMMIT: u32 = 1;
411
412/// See [`dpiSodaFlags`]
413pub const DPI_SODA_FLAGS_CREATE_COLL_MAP: u32 = 2;
414
415/// See [`dpiSodaFlags`]
416pub const DPI_SODA_FLAGS_INDEX_DROP_FORCE: u32 = 4;
417
418/// See [`dpiStartupMode`]
419pub const DPI_MODE_STARTUP_DEFAULT: u32 = 0;
420
421/// See [`dpiStartupMode`]
422pub const DPI_MODE_STARTUP_FORCE: u32 = 1;
423
424/// See [`dpiStartupMode`]
425pub const DPI_MODE_STARTUP_RESTRICT: u32 = 2;
426
427/// See [`dpiServerType`]
428pub const DPI_SERVER_TYPE_UNKNOWN: u8 = 0;
429
430/// See [`dpiServerType`]
431pub const DPI_SERVER_TYPE_DEDICATED: u8 = 1;
432
433/// See [`dpiServerType`]
434pub const DPI_SERVER_TYPE_SHARED: u8 = 2;
435
436/// See [`dpiServerType`]
437pub const DPI_SERVER_TYPE_POOLED: u8 = 4;
438
439/// See [`dpiStatementType`]
440pub const DPI_STMT_TYPE_UNKNOWN: u16 = 0;
441
442/// See [`dpiStatementType`]
443pub const DPI_STMT_TYPE_SELECT: u16 = 1;
444
445/// See [`dpiStatementType`]
446pub const DPI_STMT_TYPE_UPDATE: u16 = 2;
447
448/// See [`dpiStatementType`]
449pub const DPI_STMT_TYPE_DELETE: u16 = 3;
450
451/// See [`dpiStatementType`]
452pub const DPI_STMT_TYPE_INSERT: u16 = 4;
453
454/// See [`dpiStatementType`]
455pub const DPI_STMT_TYPE_CREATE: u16 = 5;
456
457/// See [`dpiStatementType`]
458pub const DPI_STMT_TYPE_DROP: u16 = 6;
459
460/// See [`dpiStatementType`]
461pub const DPI_STMT_TYPE_ALTER: u16 = 7;
462
463/// See [`dpiStatementType`]
464pub const DPI_STMT_TYPE_BEGIN: u16 = 8;
465
466/// See [`dpiStatementType`]
467pub const DPI_STMT_TYPE_DECLARE: u16 = 9;
468
469/// See [`dpiStatementType`]
470pub const DPI_STMT_TYPE_CALL: u16 = 10;
471
472/// See [`dpiStatementType`]
473pub const DPI_STMT_TYPE_EXPLAIN_PLAN: u16 = 15;
474
475/// See [`dpiStatementType`]
476pub const DPI_STMT_TYPE_MERGE: u16 = 16;
477
478/// See [`dpiStatementType`]
479pub const DPI_STMT_TYPE_ROLLBACK: u16 = 17;
480
481/// See [`dpiStatementType`]
482pub const DPI_STMT_TYPE_COMMIT: u16 = 21;
483
484/// See [`dpiSubscrGroupingClass`]
485pub const DPI_SUBSCR_GROUPING_CLASS_TIME: u8 = 1;
486
487/// See [`dpiSubscrGroupingType`]
488pub const DPI_SUBSCR_GROUPING_TYPE_SUMMARY: u8 = 1;
489
490/// See [`dpiSubscrGroupingType`]
491pub const DPI_SUBSCR_GROUPING_TYPE_LAST: u8 = 2;
492
493/// See [`dpiSubscrNamespace`]
494pub const DPI_SUBSCR_NAMESPACE_AQ: u32 = 1;
495
496/// See [`dpiSubscrNamespace`]
497pub const DPI_SUBSCR_NAMESPACE_DBCHANGE: u32 = 2;
498
499/// See [`dpiSubscrProtocol`]
500pub const DPI_SUBSCR_PROTO_CALLBACK: u32 = 0;
501
502/// See [`dpiSubscrProtocol`]
503pub const DPI_SUBSCR_PROTO_MAIL: u32 = 1;
504
505/// See [`dpiSubscrProtocol`]
506pub const DPI_SUBSCR_PROTO_PLSQL: u32 = 2;
507
508/// See [`dpiSubscrProtocol`]
509pub const DPI_SUBSCR_PROTO_HTTP: u32 = 3;
510
511/// See [`dpiSubscrQOS`]
512pub const DPI_SUBSCR_QOS_RELIABLE: u32 = 1;
513
514/// See [`dpiSubscrQOS`]
515pub const DPI_SUBSCR_QOS_DEREG_NFY: u32 = 2;
516
517/// See [`dpiSubscrQOS`]
518pub const DPI_SUBSCR_QOS_ROWIDS: u32 = 4;
519
520/// See [`dpiSubscrQOS`]
521pub const DPI_SUBSCR_QOS_QUERY: u32 = 8;
522
523/// See [`dpiSubscrQOS`]
524pub const DPI_SUBSCR_QOS_BEST_EFFORT: u32 = 16;
525
526/// See [`dpiTpcBeginFlags`]
527pub const DPI_TPC_BEGIN_JOIN: u32 = 2;
528
529/// See [`dpiTpcBeginFlags`]
530pub const DPI_TPC_BEGIN_NEW: u32 = 1;
531
532/// See [`dpiTpcBeginFlags`]
533pub const DPI_TPC_BEGIN_PROMOTE: u32 = 8;
534
535/// See [`dpiTpcBeginFlags`]
536pub const DPI_TPC_BEGIN_RESUME: u32 = 4;
537
538/// See [`dpiTpcEndFlags`]
539pub const DPI_TPC_END_NORMAL: u32 = 0;
540
541/// See [`dpiTpcEndFlags`]
542pub const DPI_TPC_END_SUSPEND: u32 = 1048576;
543
544/// See [`dpiVectorFlags`]
545pub const DPI_VECTOR_FLAGS_FLEXIBLE_DIM: u8 = 1;
546
547/// See [`dpiVectorFlags`]
548pub const DPI_VECTOR_FLAGS_SPARSE: u8 = 2;
549
550/// See [`dpiVectorFormat`]
551pub const DPI_VECTOR_FORMAT_FLOAT32: u8 = 2;
552
553/// See [`dpiVectorFormat`]
554pub const DPI_VECTOR_FORMAT_FLOAT64: u8 = 3;
555
556/// See [`dpiVectorFormat`]
557pub const DPI_VECTOR_FORMAT_INT8: u8 = 4;
558
559/// See [`dpiVectorFormat`]
560pub const DPI_VECTOR_FORMAT_BINARY: u8 = 5;
561
562/// See [`dpiVisibility`]
563pub const DPI_VISIBILITY_IMMEDIATE: u32 = 1;
564
565/// See [`dpiVisibility`]
566pub const DPI_VISIBILITY_ON_COMMIT: u32 = 2;
567
568/// This enumeration identifies the options that can be used when calling
569/// [`dpiJson_getValue()`].
570/// 
571/// Value | Description
572/// ---|---
573/// `DPI_JSON_OPT_DATE_AS_DOUBLE` | Convert values that are stored as Oracle dates and timestamps in the JSON value into double values (number of milliseconds since January 1, 1970). 
574/// `DPI_JSON_OPT_DEFAULT` | Default value. 
575/// `DPI_JSON_OPT_NUMBER_AS_STRING` | Convert values that are stored as Oracle numbers in the JSON value into strings in order to retain precision. 
576pub type dpiJsonOptions = u32;
577
578/// This enumeration identifies the flags that can be used with SODA functions.
579/// 
580/// Value | Description
581/// ---|---
582/// `DPI_SODA_FLAGS_ATOMIC_COMMIT` | If the function completes successfully the current transaction is committed. If it does not complete successfully, no changes to the database are made and the existing transaction is left untouched. 
583/// `DPI_SODA_FLAGS_CREATE_COLL_MAP` | Create collection in MAP mode. This mode is only supported in [`dpiSodaDb_createCollection()`]. 
584/// `DPI_SODA_FLAGS_DEFAULT` | Default value. 
585/// `DPI_SODA_FLAGS_INDEX_DROP_FORCE` | Forcibly drop the index. This mode is only supported in [`dpiSodaColl_dropIndex()`]. 
586pub type dpiSodaFlags = u32;
587
588/// This enumeration identifies the mode to use when authorizing connections to the
589/// database.
590/// 
591/// Value | Description
592/// ---|---
593/// `DPI_MODE_AUTH_DEFAULT` | Default value used when creating connections. 
594/// `DPI_MODE_AUTH_PRELIM` | Used together with DPI_MODE_AUTH_SYSDBA or DPI_MODE_AUTH_SYSOPER to authenticate for certain administrative tasks (such as starting up or shutting down the database). 
595/// `DPI_MODE_AUTH_SYSASM` | Authenticates with SYSASM access. The use of this value requires Oracle Client 12.1 or higher. 
596/// `DPI_MODE_AUTH_SYSBKP` | Authenticates with SYSBACKUP access. The use of this value requires Oracle Client 12.1 or higher. 
597/// `DPI_MODE_AUTH_SYSDBA` | Authenticates with SYSDBA access. 
598/// `DPI_MODE_AUTH_SYSDGD` | Authenticates with SYSDG access. The use of this value requires Oracle Client 12.1 or higher. 
599/// `DPI_MODE_AUTH_SYSKMT` | Authenticates with SYSKM access. The use of this value requires Oracle Client 12.1 or higher. 
600/// `DPI_MODE_AUTH_SYSOPER` | Authenticates with SYSOPER access. 
601/// `DPI_MODE_AUTH_SYSRAC` | Authenticates with SYSRAC access. The use of this value requires Oracle Client 12.2 or higher. 
602pub type dpiAuthMode = u32;
603
604/// This enumeration identifies the mode to use when closing connections to the
605/// database.
606/// 
607/// Value | Description
608/// ---|---
609/// `DPI_MODE_CONN_CLOSE_DEFAULT` | Default value used when closing connections. 
610/// `DPI_MODE_CONN_CLOSE_DROP` | Causes the session to be dropped from the session pool instead of simply returned to the pool for future use. 
611/// `DPI_MODE_CONN_CLOSE_RETAG` | Causes the session to be tagged with the tag information given when the connection is closed. A value of NULL for the tag will cause the tag to be cleared. 
612pub type dpiConnCloseMode = u32;
613
614/// This enumeration identifies the mode to use when creating connections to the
615/// database. Note that the OCI objects mode is always enabled.
616/// 
617/// Value | Description
618/// ---|---
619/// `DPI_MODE_CREATE_DEFAULT` | Default value used when creating connections. 
620/// `DPI_MODE_CREATE_EVENTS` | Enables events mode which is required for the use of advanced queuing (AQ) and continuous query notification (CQN). 
621/// `DPI_MODE_CREATE_THREADED` | Enables threaded mode. Internal OCI structures not exposed to the user are protected from concurrent access by multiple threads. Error information is also managed in thread local storage. 
622pub type dpiCreateMode = u32;
623
624/// This enumeration identifies the modes that are possible when dequeuing messages
625/// from a queue.
626/// 
627/// Value | Description
628/// ---|---
629/// `DPI_MODE_DEQ_BROWSE` | Read the message without acquiring a lock on the message (equivalent to a SELECT statement). 
630/// `DPI_MODE_DEQ_LOCKED` | Read the message and obtain a write lock on the message (equivalent to a SELECT FOR UPDATE statement). 
631/// `DPI_MODE_DEQ_REMOVE` | Read the message and update or delete it. This is the default mode. Note that the message may be retained in the queue table based on retention properties. 
632/// `DPI_MODE_DEQ_REMOVE_NO_DATA` | Confirms receipt of the message but does not deliver the actual message content. 
633pub type dpiDeqMode = u32;
634
635/// This enumeration identifies the method used for determining which message is to
636/// be dequeued from a queue.
637/// 
638/// Value | Description
639/// ---|---
640/// `DPI_DEQ_NAV_FIRST_MSG` | Retrieves the first available message that matches the search criteria. This resets the position to the beginning of the queue. 
641/// `DPI_DEQ_NAV_NEXT_MSG` | Retrieves the next available message that matches the search criteria. This is the default method. 
642/// `DPI_DEQ_NAV_NEXT_TRANSACTION` | Skips the remainder of the current transaction group (if any) and retrieves the first message of the next transaction group. This option can only be used if message grouping is enabled for the queue. 
643pub type dpiDeqNavigation = u32;
644
645/// This enumeration identifies the types of events that can take place. The event
646/// type is part of the messages that are sent to subscriptions.
647/// 
648/// Value | Description
649/// ---|---
650/// `DPI_EVENT_AQ` | Indicates that a queue has messages available to dequeue. 
651/// `DPI_EVENT_DEREG` | Indicates that a subscription is no longer registered with the database and will no longer generate events. 
652/// `DPI_EVENT_NONE` | Indicates that no event has taken place. 
653/// `DPI_EVENT_OBJCHANGE` | Indicates that an object change has taken place. 
654/// `DPI_EVENT_QUERYCHANGE` | Indicates that a query change has taken place. 
655/// `DPI_EVENT_SHUTDOWN` | Indicates that a database is being shut down. 
656/// `DPI_EVENT_SHUTDOWN_ANY` | Indicates that an instance of Oracle Real Application Clusters (RAC) is being shut down. 
657/// `DPI_EVENT_STARTUP` | Indicates that a database is being started up. 
658pub type dpiEventType = u32;
659
660/// This enumeration identifies the available modes for executing statements
661/// using [`dpiStmt_execute()`] and [`dpiStmt_executeMany()`].
662/// 
663/// Value | Description
664/// ---|---
665/// `DPI_MODE_EXEC_ARRAY_DML_ROWCOUNTS` | Enable getting row counts for each DML operation when performing an array DML execution. The actual row counts can be retrieved using the function [`dpiStmt_getRowCounts()`]. 
666/// `DPI_MODE_EXEC_BATCH_ERRORS` | Enable batch error mode. This permits an an array DML operation to succeed even if some of the individual operations fail. The errors can be retrieved using the function [`dpiStmt_getBatchErrors()`]. 
667/// `DPI_MODE_EXEC_COMMIT_ON_SUCCESS` | If execution completes successfully, the current active transaction is committed. 
668/// `DPI_MODE_EXEC_DEFAULT` | Default mode for execution. Metadata is made available after queries are executed. 
669/// `DPI_MODE_EXEC_DESCRIBE_ONLY` | Do not execute the statement but simply acquire the metadata for the query. 
670/// `DPI_MODE_EXEC_PARSE_ONLY` | Do not execute the statement but only parse it and return any parse errors. Note that using this mode with a DDL statement will result in the statement being executed. 
671pub type dpiExecMode = u32;
672
673/// This enumeration identifies the mode to use when scrolling the cursor to a new
674/// location using the function [`dpiStmt_scroll()`].
675/// 
676/// Value | Description
677/// ---|---
678/// `DPI_MODE_FETCH_ABSOLUTE` | Scroll the cursor to the row identified by the offset parameter using absolute positioning. 
679/// `DPI_MODE_FETCH_FIRST` | Scroll the cursor to the first row in the result set. The offset is ignored when using this mode. 
680/// `DPI_MODE_FETCH_LAST` | Scroll the cursor to the last row in the result set. The offset is ignored when using this mode. 
681/// `DPI_MODE_FETCH_NEXT` | Scroll the cursor to the next row in the result set. The offset is ignored when using this mode. 
682/// `DPI_MODE_FETCH_PRIOR` | Scroll the cursor to the previous row in the result set. The offset is ignored when using this mode. 
683/// `DPI_MODE_FETCH_RELATIVE` | Scroll the cursor to the row identified by the offset parameter using relative positioning. A positive number will move forward in the result set while a negative number will move backwards in the result set. 
684pub type dpiFetchMode = u16;
685
686/// This enumeration identifies the delivery mode used for filtering messages
687/// when dequeuing messages from a queue.
688/// 
689/// Value | Description
690/// ---|---
691/// `DPI_MODE_MSG_BUFFERED` | Dequeue only buffered messages from the queue. 
692/// `DPI_MODE_MSG_PERSISTENT` | Dequeue only persistent messages from the queue. This is the default mode. 
693/// `DPI_MODE_MSG_PERSISTENT_OR_BUFFERED` | Dequeue both persistent and buffered messages from the queue. 
694pub type dpiMessageDeliveryMode = u16;
695
696/// This enumeration identifies the possible states for messages in a queue.
697/// 
698/// Value | Description
699/// ---|---
700/// `DPI_MSG_STATE_EXPIRED` | The message has been moved to the exception queue. 
701/// `DPI_MSG_STATE_PROCESSED` | The message has already been processed and is retained. 
702/// `DPI_MSG_STATE_READY` | The message is ready to be processed. 
703/// `DPI_MSG_STATE_WAITING` | The message is waiting for the delay time to expire. 
704pub type dpiMessageState = u32;
705
706/// This enumeration identifies the type of data that is being transferred to and
707/// from the database. It is used in the structures
708/// [`dpiDataTypeInfo`],
709/// [`dpiShardingKeyColumn`] and
710/// [`dpiJsonNode`].
711/// 
712/// Value | Description
713/// ---|---
714/// `DPI_NATIVE_TYPE_BOOLEAN` | Data is passed as a boolean value in [`dpiDataBuffer.asBoolean`]. 
715/// `DPI_NATIVE_TYPE_BYTES` | Data is passed as a byte string in [`dpiDataBuffer.asBytes`]. 
716/// `DPI_NATIVE_TYPE_DOUBLE` | Data is passed as a double precision floating point number in [`dpiDataBuffer.asDouble`]. 
717/// `DPI_NATIVE_TYPE_FLOAT` | Data is passed as a single precision floating point number in [`dpiDataBuffer.asFloat`]. 
718/// `DPI_NATIVE_TYPE_INT64` | Data is passed as a 64-bit integer in [`dpiDataBuffer.asInt64`]. 
719/// `DPI_NATIVE_TYPE_INTERVAL_DS` | Data is passed as an interval (days to seconds) in [`dpiDataBuffer.asIntervalDS`]. 
720/// `DPI_NATIVE_TYPE_INTERVAL_YM` | Data is passed as an interval (years to months) in [`dpiDataBuffer.asIntervalYM`]. 
721/// `DPI_NATIVE_TYPE_JSON` | Data is passed as a JSON node in `dpiDataBuffer.asJsonNode`. 
722/// `DPI_NATIVE_TYPE_JSON_ARRAY` | Data is passed as a JSON array in [`dpiDataBuffer.asJsonArray`]. 
723/// `DPI_NATIVE_TYPE_JSON_OBJECT` | Data is passed as a JSON object in [`dpiDataBuffer.asJsonObject`]. 
724/// `DPI_NATIVE_TYPE_LOB` | Data is passed as a reference to a LOB in [`dpiDataBuffer.asLOB`]. 
725/// `DPI_NATIVE_TYPE_NULL` | No data is being passed. This is used to identify the JSON singleton null value. 
726/// `DPI_NATIVE_TYPE_OBJECT` | Data is passed as a reference to an object in [`dpiDataBuffer.asObject`]. 
727/// `DPI_NATIVE_TYPE_ROWID` | Data is passed as a reference to a rowid in [`dpiDataBuffer.asRowid`]. 
728/// `DPI_NATIVE_TYPE_STMT` | Data is passed as a reference to a statement in [`dpiDataBuffer.asStmt`]. 
729/// `DPI_NATIVE_TYPE_TIMESTAMP` | Data is passed as a timestamp in [`dpiDataBuffer.asTimestamp`]. 
730/// `DPI_NATIVE_TYPE_UINT64` | Data is passed as an unsigned 64-bit integer in [`dpiDataBuffer.asUint64`]. 
731/// `DPI_NATIVE_TYPE_VECTOR` | Data is passed as a reference to a vector in [`dpiDataBuffer.asVector`]. 
732pub type dpiNativeTypeNum = u32;
733
734/// This enumeration identifies the types of operations that can take place during
735/// object change and query change notification. It is used both as a filter when
736/// determining which operations to consider when sending notifications as well as
737/// identifying the operation that took place on a particular table or row when a
738/// notification is sent. Multiple values can be OR’ed together to specify multiple
739/// types of operations at the same time.
740/// 
741/// Value | Description
742/// ---|---
743/// `DPI_OPCODE_ALL_OPS` | Indicates that notifications should be sent for all operations on the table or query. 
744/// `DPI_OPCODE_ALL_ROWS` | Indicates that all rows have been changed in the table or query (or too many rows were changed or row information was not requested). 
745/// `DPI_OPCODE_ALTER` | Indicates that the registered table or query has been altered. 
746/// `DPI_OPCODE_DELETE` | Indicates that a delete operation has taken place in the table or query. 
747/// `DPI_OPCODE_DROP` | Indicates that the registered table or query has been dropped. 
748/// `DPI_OPCODE_INSERT` | Indicates that an insert operation has taken place in the table or query. 
749/// `DPI_OPCODE_UPDATE` | Indicates that an update operation has taken place in the table or query. 
750/// `DPI_OPCODE_UNKNOWN` | An unknown operation has taken place. 
751pub type dpiOpCode = u32;
752
753/// This enumeration identifies the types of Oracle data that can be used for
754/// binding data as arguments to a statement, fetching data from the database, or
755/// getting and setting object attributes and element values.
756/// 
757/// Value | Description
758/// ---|---
759/// `DPI_ORACLE_TYPE_BFILE` | Default type used for BFILE columns in the database. Only a locator is transferred to/from Oracle, which can subsequently be used via dpiLob references to read/write from that locator. 
760/// `DPI_ORACLE_TYPE_BLOB` | Default type used for BLOB columns in the database. Only a locator is transferred to/from Oracle, which can subsequently be used via dpiLob references to read/write from that locator. 
761/// `DPI_ORACLE_TYPE_BOOLEAN` | Used within PL/SQL for boolean values. This is only available in 12.1. Earlier releases simply use the integer values 0 and 1 to represent a boolean value. Data is transferred to/from Oracle as an integer. 
762/// `DPI_ORACLE_TYPE_CHAR` | Default type used for CHAR columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for CHAR data. 
763/// `DPI_ORACLE_TYPE_CLOB` | Default type used for CLOB columns in the database. Only a locator is transferred to/from Oracle, which can subsequently be used via dpiLob references to read/write from that locator. 
764/// `DPI_ORACLE_TYPE_DATE` | Default type used for DATE columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
765/// `DPI_ORACLE_TYPE_INTERVAL_DS` | Default type used for INTERVAL DAY TO SECOND columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
766/// `DPI_ORACLE_TYPE_INTERVAL_YM` | Default type used for INTERVAL YEAR TO MONTH columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
767/// `DPI_ORACLE_TYPE_JSON` | Default type used for JSON columns in the database (available in Oracle Database 20 and higher). Data is transferred to/from Oracle using the structure [`dpiJsonNode`]. 
768/// `DPI_ORACLE_TYPE_JSON_ARRAY` | Type used for identifying nodes that are JSON arrays. Data is transferred to/from Oracle using the structure [`dpiJsonArray`]. 
769/// `DPI_ORACLE_TYPE_JSON_ID` | Type used for identifying nodes that are JSON IDs. Data is transferred to/from Oracle as raw byte strings. 
770/// `DPI_ORACLE_TYPE_JSON_OBJECT` | Type used for identifying nodes that are JSON objects. Data is transferred to/from Oracle using the structure [`dpiJsonObject`]. 
771/// `DPI_ORACLE_TYPE_LONG_NVARCHAR` | This value cannot be represented in an Oracle database but is used when fetching NCLOB data as a string. Data is transferred to/from Oracle as byte strings in the encoding used for NCHAR data. 
772/// `DPI_ORACLE_TYPE_LONG_RAW` | Default type used for LONG RAW columns in the database. Data is transferred to/from Oracle as raw byte strings. 
773/// `DPI_ORACLE_TYPE_LONG_VARCHAR` | Default type used for LONG columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for CHAR data. 
774/// `DPI_ORACLE_TYPE_NATIVE_DOUBLE` | Default type used for BINARY_DOUBLE columns in the database. Data is transferred to/from Oracle as the C double type. 
775/// `DPI_ORACLE_TYPE_NATIVE_FLOAT` | Default type used for BINARY_FLOAT columns in the database. Data is transferred to/from Oracle as the C float type. 
776/// `DPI_ORACLE_TYPE_NATIVE_INT` | Type available for binding native integers directly in PL/SQL (such as PLS_INTEGER). Data is transferred to/from Oracle as 64-bit integers. 
777/// `DPI_ORACLE_TYPE_NATIVE_UINT` | Type available for binding native integers directly in PL/SQL (such as PLS_INTEGER). Data is transferred to/from Oracle as 64-bit unsigned integers. 
778/// `DPI_ORACLE_TYPE_NCHAR` | Default type used for NCHAR columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for NCHAR data. 
779/// `DPI_ORACLE_TYPE_NCLOB` | Default type used for NCLOB columns in the database. Only a locator is transferred to/from Oracle, which can subsequently be used via dpiLob references to read/write from that locator. 
780/// `DPI_ORACLE_TYPE_NUMBER` | Default type used for NUMBER columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
781/// `DPI_ORACLE_TYPE_NVARCHAR` | Default type used for NVARCHAR2 columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for NCHAR data. 
782/// `DPI_ORACLE_TYPE_OBJECT` | Default type used for named type columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
783/// `DPI_ORACLE_TYPE_RAW` | Default type used for RAW columns in the database. Data is transferred to/from Oracle as raw byte strings. 
784/// `DPI_ORACLE_TYPE_ROWID` | Default type used for the pseudocolumn “ROWID”. Data is transferred to/from Oracle as byte strings, in the encoding used for CHAR data. 
785/// `DPI_ORACLE_TYPE_STMT` | Used within PL/SQL for REF CURSOR or within SQL for querying a CURSOR. Only a handle is transferred to/from Oracle, which can subsequently be used via dpiStmt for querying. 
786/// `DPI_ORACLE_TYPE_TIMESTAMP` | Default type used for TIMESTAMP columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
787/// `DPI_ORACLE_TYPE_TIMESTAMP_LTZ` | Default type used for TIMESTAMP WITH LOCAL TIME ZONE columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
788/// `DPI_ORACLE_TYPE_TIMESTAMP_TZ` | Default type used for TIMESTAMP WITH TIME ZONE columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
789/// `DPI_ORACLE_TYPE_UROWID` | This value is currently a synonym for DPI_ORACLE_TYPE_ROWID. It is intended to be the default type for UROWID columns in the database when it is possible to distinguish betweeen ROWID and UROWID. Data is transferred to/from Oracle as byte strings, in the encoding used for CHAR data. 
790/// `DPI_ORACLE_TYPE_VARCHAR` | Default type used for VARCHAR2 columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for CHAR data. 
791/// `DPI_ORACLE_TYPE_VECTOR` | Default type used for VECTOR columns in the database. Data is transferred to/from Oracle in Oracle’s internal format. 
792/// `DPI_ORACLE_TYPE_XMLTYPE` | Default type used for SYS.XMLTYPE columns in the database. Data is transferred to/from Oracle as byte strings in the encoding used for CHAR data. 
793pub type dpiOracleTypeNum = u32;
794
795/// This enumeration identifies the mode to use when closing pools.
796/// 
797/// Value | Description
798/// ---|---
799/// `DPI_MODE_POOL_CLOSE_DEFAULT` | Default value used when closing pools. If there are any active sessions in the pool an error will be raised. 
800/// `DPI_MODE_POOL_CLOSE_FORCE` | Causes all of the active connections in the pool to be closed before closing the pool itself. 
801pub type dpiPoolCloseMode = u32;
802
803/// This enumeration identifies the mode to use when getting sessions from a
804/// session pool.
805/// 
806/// Value | Description
807/// ---|---
808/// `DPI_MODE_POOL_GET_FORCEGET` | Specifies that a new session should be created if all of the sessions in the pool are busy, even if this exceeds the maximum sessions allowable for the session pool (see [`dpiPoolCreateParams.maxSessions`]). 
809/// `DPI_MODE_POOL_GET_NOWAIT` | Specifies that the caller should return immediately, regardless of whether a session is available in the pool. If a session is not available an error is returned. 
810/// `DPI_MODE_POOL_GET_TIMEDWAIT` | Specifies that the caller should block until a session is available from the pool, but only for the specified length of time defined in [`dpiPoolCreateParams.waitTimeout`]. If a session is not available within the specified period of time an error is returned. 
811/// `DPI_MODE_POOL_GET_WAIT` | Specifies that the caller should block until a session is available from the pool. 
812pub type dpiPoolGetMode = u8;
813
814/// This enumeration identifies the purity of the sessions that are acquired when
815/// using connection classes during connection creation.
816/// 
817/// Value | Description
818/// ---|---
819/// `DPI_PURITY_DEFAULT` | Default value used when creating connections. 
820/// `DPI_PURITY_NEW` | A connection is required that has not been tainted with any prior session state. 
821/// `DPI_PURITY_SELF` | A connection is permitted to have prior session state. 
822pub type dpiPurity = u32;
823
824/// This enumeration identifies the mode to use when shutting down a database
825/// using [`dpiConn_shutdownDatabase()`].
826/// 
827/// Value | Description
828/// ---|---
829/// `DPI_MODE_SHUTDOWN_ABORT` | All uncommitted transactions are terminated and are not rolled back. This is the fastest way to shut down the database but the next database startup may require instance recovery. 
830/// `DPI_MODE_SHUTDOWN_DEFAULT` | Further connections to the database are prohibited. Wait for users to disconnect from the database. 
831/// `DPI_MODE_SHUTDOWN_FINAL` | Shuts down the database. This mode should only be used in the second call to [`dpiConn_shutdownDatabase()`]. 
832/// `DPI_MODE_SHUTDOWN_IMMEDIATE` | All uncommitted transactions are terminated and rolled back and all connections to the database are closed immediately. 
833/// `DPI_MODE_SHUTDOWN_TRANSACTIONAL` | Further connections to the database are prohibited and no new transactions are allowed to be started. Wait for active transactions to complete. 
834/// `DPI_MODE_SHUTDOWN_TRANSACTIONAL_LOCAL` | Behaves the same way as DPI_MODE_SHUTDOWN_TRANSACTIONAL but only waits for local transactions to complete. 
835pub type dpiShutdownMode = u32;
836
837/// This enumeration identifies the mode to use when starting up a database using
838/// [`dpiConn_startupDatabase()`].
839/// 
840/// Value | Description
841/// ---|---
842/// `DPI_MODE_STARTUP_DEFAULT` | Default mode for startup which permits database access to all users. 
843/// `DPI_MODE_STARTUP_FORCE` | Shuts down a running instance (using ABORT) before starting a new one. This mode should only be used in unusual circumstances. 
844/// `DPI_MODE_STARTUP_RESTRICT` | Only allows database access to users with both the CREATE SESSION and RESTRICTED SESSION privileges (normally the DBA). 
845pub type dpiStartupMode = u32;
846
847/// This enumeration identifies the type of server process associated with a
848/// connection. It is only available with Oracle Client libraries 23.4 or higher.
849/// 
850/// Value | Description
851/// ---|---
852/// `DPI_SERVER_TYPE_DEDICATED` | A dedicated server process is being used with the connection. 
853/// `DPI_SERVER_TYPE_POOLED` | A pooled server process (DRCP) is being used with the connection. 
854/// `DPI_SERVER_TYPE_SHARED` | A shared server process is being used with the connection. 
855/// `DPI_SERVER_TYPE_UNKNOWN` | The type of server process is unknown. 
856pub type dpiServerType = u8;
857
858/// This enumeration identifies the type of statement that has been prepared. It is
859/// available as part of the structure [`dpiStmtInfo`].
860/// 
861/// Value | Description
862/// ---|---
863/// `DPI_STMT_TYPE_ALTER` | Identifies an alter statement. The member [`dpiStmtInfo.isDDL`] will be set to 1. 
864/// `DPI_STMT_TYPE_BEGIN` | Identifies an anonymous PL/SQL block starting with the keyword begin. The member [`dpiStmtInfo.isPLSQL`] will be set to 1. 
865/// `DPI_STMT_TYPE_CALL` | Identifies a CALL statement used for calling stored procedures and functions. The member [`dpiStmtInfo.isPLSQL`] will be set to 1. 
866/// `DPI_STMT_TYPE_COMMIT` | Identifies a commit statement. 
867/// `DPI_STMT_TYPE_CREATE` | Identifies a create statement. The member [`dpiStmtInfo.isDDL`] will be set to 1. 
868/// `DPI_STMT_TYPE_DECLARE` | Identifies an anonymous PL/SQL block starting with the keyword declare. The member [`dpiStmtInfo.isPLSQL`] will be set to 1. 
869/// `DPI_STMT_TYPE_DELETE` | Identifies a delete statement. The member [`dpiStmtInfo.isDML`] will be set to 1. 
870/// `DPI_STMT_TYPE_DROP` | Identifies a drop statement. The member [`dpiStmtInfo.isDDL`] will be set to 1. 
871/// `DPI_STMT_TYPE_EXPLAIN_PLAN` | Identifies an explain plan statement. The member [`dpiStmtInfo.isDML`] will be set to 1. 
872/// `DPI_STMT_TYPE_INSERT` | Identifies an insert statement. The member [`dpiStmtInfo.isDML`] will be set to 1. 
873/// `DPI_STMT_TYPE_MERGE` | Identifies a merge statement. The member [`dpiStmtInfo.isDML`] will be set to 1. 
874/// `DPI_STMT_TYPE_ROLLBACK` | Identifies a rollback statement. 
875/// `DPI_STMT_TYPE_SELECT` | Identifies a select statement. The member [`dpiStmtInfo.isQuery`] will be set to 1. 
876/// `DPI_STMT_TYPE_UPDATE` | Identifies an update statement. The member [`dpiStmtInfo.isDML`] will be set to 1. 
877/// `DPI_STMT_TYPE_UNKNOWN` | Indicates that the statement type is unknown. 
878pub type dpiStatementType = u16;
879
880/// This enumeration identifies the grouping class. Instead of individual events
881/// being delivered to the callback, events are grouped before being sent to the
882/// callback. This enumeration is used in the
883/// [`dpiSubscrCreateParams`] structure.
884/// 
885/// Value | Description
886/// ---|---
887/// `DPI_SUBSCR_GROUPING_CLASS_TIME` | Events are grouped by the period of time in which they are received. 
888pub type dpiSubscrGroupingClass = u8;
889
890/// This enumeration identifies the grouping type. It is used in the
891/// [`dpiSubscrCreateParams`] structure.
892/// 
893/// Value | Description
894/// ---|---
895/// `DPI_SUBSCR_GROUPING_TYPE_LAST` | The last event in the group is sent. 
896/// `DPI_SUBSCR_GROUPING_TYPE_SUMMARY` | A summary of all events in the group is sent. This is also the default value. 
897pub type dpiSubscrGroupingType = u8;
898
899/// This enumeration identifies the namespaces supported by subscriptions.
900/// 
901/// Value | Description
902/// ---|---
903/// `DPI_SUBSCR_NAMESPACE_AQ` | Identifies the namespace used for receiving notifications when messages are available to be dequeued in advanced queueing (AQ). 
904/// `DPI_SUBSCR_NAMESPACE_DBCHANGE` | Identifies the namespace used for receiving notifications for database object changes and query changes (CQN). 
905pub type dpiSubscrNamespace = u32;
906
907/// This enumeration identifies the protocol used for sending notifications to
908/// subscriptions.
909/// 
910/// Value | Description
911/// ---|---
912/// `DPI_SUBSCR_PROTO_CALLBACK` | Notifications are sent by calling the callback specified when the subscription was registered. 
913/// `DPI_SUBSCR_PROTO_HTTP` | Notifications are sent to the URL specified when the subscription was registered. 
914/// `DPI_SUBSCR_PROTO_MAIL` | Notifications are sent by sending an e-mail to the e-mail address specified when the subscription was registered. 
915/// `DPI_SUBSCR_PROTO_PLSQL` | Notifications are sent by calling the PL/SQL procedure specified when the subscription was registered. 
916pub type dpiSubscrProtocol = u32;
917
918/// This enumeration identifies the quality of service flags for sending
919/// notifications to subscriptions.
920/// 
921/// Value | Description
922/// ---|---
923/// `DPI_SUBSCR_QOS_BEST_EFFORT` | Perform query notification in best effort mode which may result in notifications being sent when the query has not in fact changed. This is needed for complex queries that cannot be registered in guaranteed mode. 
924/// `DPI_SUBSCR_QOS_DEREG_NFY` | When the notification has been received, the subscription is removed. 
925/// `DPI_SUBSCR_QOS_QUERY` | Perform query notification instead of database change notification. Notification is done in guaranteed mode which guarantees that the query has in fact changed. 
926/// `DPI_SUBSCR_QOS_RELIABLE` | Notifications are sent reliably. If the database fails, the notifications are not lost. This is not supported for nonpersistent queues or buffered messaging. 
927/// `DPI_SUBSCR_QOS_ROWIDS` | Information on the rows affected by the database or query change is sent along with the notification. 
928pub type dpiSubscrQOS = u32;
929
930/// This enumeration identifies the flags that can be used when calling
931/// [`dpiConn_tpcBegin()`].
932/// 
933/// Value | Description
934/// ---|---
935/// `DPI_TPC_BEGIN_JOIN` | Joins an existing global transaction. 
936/// `DPI_TPC_BEGIN_NEW` | Creates a new global transaction. 
937/// `DPI_TPC_BEGIN_PROMOTE` | Promotes a local transaction to a global transaction. 
938/// `DPI_TPC_BEGIN_RESUME` | Resumes an existing global transaction. 
939pub type dpiTpcBeginFlags = u32;
940
941/// This enumeration identifies the flags that can be used when calling
942/// [`dpiConn_tpcEnd()`].
943/// 
944/// Value | Description
945/// ---|---
946/// `DPI_TPC_END_NORMAL` | Normal ending of the transaction. 
947/// `DPI_TPC_END_SUSPEND` | Transaction is suspended and may be resumed at some later point. 
948pub type dpiTpcEndFlags = u32;
949
950/// This enumeration identifies the possible values for
951/// [`dpiDataTypeInfo.vectorFlags`].
952/// 
953/// Value | Description
954/// ---|---
955/// `DPI_VECTOR_FLAGS_FLEXIBLE_DIM` | The vector column uses a flexible number of dimensions. 
956/// `DPI_VECTOR_FLAGS_SPARSE` | The vector column contains sparse vectors 
957pub type dpiVectorFlags = u8;
958
959/// This enumeration identifies the storage format for a vector’s dimensions.
960/// 
961/// Value | Description
962/// ---|---
963/// `DPI_VECTOR_FORMAT_BINARY` | The vector dimension storage format is single bits, represented in groups of 8 as single byte unsigned integers. 
964/// `DPI_VECTOR_FORMAT_FLOAT32` | The vector dimension storage format is single-precision floating point numbers. 
965/// `DPI_VECTOR_FORMAT_FLOAT64` | The vector dimension storage format is double-precision floating point numbers. 
966/// `DPI_VECTOR_FORMAT_INT8` | The vector dimension storage format is single byte signed integers. 
967pub type dpiVectorFormat = u8;
968
969/// This enumeration identifies the visibility of messages in advanced queuing.
970/// 
971/// Value | Description
972/// ---|---
973/// `DPI_VISIBILITY_IMMEDIATE` | The message is not part of the current transaction but constitutes a transaction of its own. 
974/// `DPI_VISIBILITY_ON_COMMIT` | The message is part of the current transaction. This is the default value. 
975pub type dpiVisibility = u32;
976#[repr(C)]
977#[derive(Debug, Copy, Clone)]
978
979/// Connection handles are used to represent connections to the database. These can
980/// be standalone connections created by calling the function
981/// [`dpiConn_create()`] or acquired from a session pool by calling the
982/// function [`dpiPool_acquireConnection()`]. They can be closed by calling the
983/// function [`dpiConn_close()`] or releasing the last reference to the
984/// connection by calling the function [`dpiConn_release()`]. Connection
985/// handles are used to create all handles other than session pools and context
986/// handles.
987pub struct dpiConn {
988    _unused: [u8; 0],
989}
990#[repr(C)]
991#[derive(Debug, Copy, Clone)]
992
993/// Context handles are the top level handles created by the library and are used
994/// for all error handling as well as creating pools and standalone connections to
995/// the database. The first call to ODPI-C by any application must be
996/// [`dpiContext_createWithParams()`] which will create the context as well as
997/// validate the version used by the application. Context handles are destroyed by
998/// using the function [`dpiContext_destroy()`].
999pub struct dpiContext {
1000    _unused: [u8; 0],
1001}
1002#[repr(C)]
1003#[derive(Debug, Copy, Clone)]
1004
1005/// Dequeue option handles are used to represent the options specified when
1006/// dequeuing messages using advanced queueing. They are created by calling the
1007/// function [`dpiConn_newDeqOptions()`] and are destroyed by releasing the
1008/// last reference by calling the function [`dpiDeqOptions_release()`].
1009pub struct dpiDeqOptions {
1010    _unused: [u8; 0],
1011}
1012#[repr(C)]
1013#[derive(Debug, Copy, Clone)]
1014
1015/// Enqueue option handles are used to represent the options specified when
1016/// enqueuing messages using advanced queueing. They are created by calling the
1017/// function [`dpiConn_newEnqOptions()`] and are destroyed by releasing the
1018/// last reference by calling the function [`dpiEnqOptions_release()`].
1019pub struct dpiEnqOptions {
1020    _unused: [u8; 0],
1021}
1022#[repr(C)]
1023#[derive(Debug, Copy, Clone)]
1024
1025/// JSON handles are used to represent JSON values stored in the database. They are
1026/// only available from Oracle Client and Database 20 and higher. They cannot be
1027/// created directly but are created implicitly when a variable of type
1028/// DPI_ORACLE_TYPE_JSON is created. They are destroyed when the last reference is
1029/// released by a call to the function [`dpiJson_release()`].
1030pub struct dpiJson {
1031    _unused: [u8; 0],
1032}
1033#[repr(C)]
1034#[derive(Debug, Copy, Clone)]
1035
1036/// LOB handles are used to represent large objects (CLOB, BLOB, NCLOB, BFILE).
1037/// Both persistent and temporary large objects can be represented. LOB handles can
1038/// be created by calling the function [`dpiConn_newTempLob()`] or are created
1039/// implicitly when a variable of type DPI_ORACLE_TYPE_CLOB, DPI_ORACLE_TYPE_NCLOB,
1040/// DPI_ORACLE_TYPE_BLOB or DPI_ORACLE_TYPE_BFILE is created and are destroyed when
1041/// the last reference is released by calling the function
1042/// [`dpiLob_release()`]. They are used for reading and writing data to the
1043/// database in smaller pieces than is contained in the large object.
1044pub struct dpiLob {
1045    _unused: [u8; 0],
1046}
1047#[repr(C)]
1048#[derive(Debug, Copy, Clone)]
1049
1050/// Message properties handles are used to represent the properties of messages
1051/// that are enqueued and dequeued using advanced queuing. They are created by
1052/// calling the function [`dpiConn_newMsgProps()`] and are destroyed by
1053/// releasing the last reference by calling the function
1054/// [`dpiMsgProps_release()`].
1055pub struct dpiMsgProps {
1056    _unused: [u8; 0],
1057}
1058#[repr(C)]
1059#[derive(Debug, Copy, Clone)]
1060
1061/// Object handles are used to represent instances of the types created by the SQL
1062/// command CREATE OR REPLACE TYPE. They are created by calling the function
1063/// [`dpiObjectType_createObject()`] or calling the function
1064/// [`dpiObject_copy()`] or implicitly by creating a variable of the type
1065/// DPI_ORACLE_TYPE_OBJECT. The are destroyed when the last reference is released
1066/// by calling the function [`dpiObject_release()`].
1067pub struct dpiObject {
1068    _unused: [u8; 0],
1069}
1070#[repr(C)]
1071#[derive(Debug, Copy, Clone)]
1072
1073/// Object attribute handles are used to represent the attributes of types such as
1074/// those created by the SQL command CREATE OR REPLACE TYPE. They are created by
1075/// calling the function [`dpiObjectType_getAttributes()`] and are destroyed
1076/// when the last reference is released by calling the function
1077/// [`dpiObjectAttr_release()`].
1078pub struct dpiObjectAttr {
1079    _unused: [u8; 0],
1080}
1081#[repr(C)]
1082#[derive(Debug, Copy, Clone)]
1083
1084/// Object type handles are used to represent types such as those created by the
1085/// SQL command CREATE OR REPLACE TYPE. They are created using the function
1086/// [`dpiConn_getObjectType()`] or implicitly when fetching from a column
1087/// containing objects by calling the function [`dpiStmt_getQueryInfo()`].
1088/// Object types are also retrieved when used as attributes in
1089/// another object by calling the function [`dpiObjectAttr_getInfo()`] or as
1090/// the element type of a collection by calling the function
1091/// [`dpiObjectType_getInfo()`]. They are destroyed when the last reference is
1092/// released by calling the function [`dpiObjectType_release()`].
1093pub struct dpiObjectType {
1094    _unused: [u8; 0],
1095}
1096#[repr(C)]
1097#[derive(Debug, Copy, Clone)]
1098
1099/// Pool handles are used to represent session pools. They are created using the
1100/// function [`dpiPool_create()`] and can be closed by calling the function
1101/// [`dpiPool_close()`] or releasing the last reference to the pool by
1102/// calling the function [`dpiPool_release()`]. Pools can be used to create
1103/// connections by calling the function [`dpiPool_acquireConnection()`].
1104pub struct dpiPool {
1105    _unused: [u8; 0],
1106}
1107#[repr(C)]
1108#[derive(Debug, Copy, Clone)]
1109
1110/// Queue handles are used to represent Advanced Queueing (AQ) queues. They are
1111/// created by calling the function [`dpiConn_newQueue()`] and are destroyed
1112/// when the last reference is released by calling the function
1113/// [`dpiQueue_release()`].
1114pub struct dpiQueue {
1115    _unused: [u8; 0],
1116}
1117#[repr(C)]
1118#[derive(Debug, Copy, Clone)]
1119
1120/// Rowid handles are used to represent the unique identifier of a row in the
1121/// database. They cannot be created or set directly but are created implicitly
1122/// when a variable of type DPI_ORACLE_TYPE_ROWID is created. They are destroyed
1123/// when the last reference is released by a call to the function
1124/// [`dpiRowid_release()`].
1125pub struct dpiRowid {
1126    _unused: [u8; 0],
1127}
1128#[repr(C)]
1129#[derive(Debug, Copy, Clone)]
1130
1131/// SODA collection handles are used to represent SODA collections in the database.
1132/// They are created by calling one of the functions
1133/// [`dpiSodaDb_createCollection()`], [`dpiSodaDb_openCollection()`] or
1134/// [`dpiSodaCollCursor_getNext()`] and are destroyed when the last reference
1135/// is released by calling the function [`dpiSodaColl_release()`].
1136/// 
1137/// See [this tracking issue](https://github.com/oracle/odpi/issues/110) for
1138/// known issues with SODA.
1139pub struct dpiSodaColl {
1140    _unused: [u8; 0],
1141}
1142#[repr(C)]
1143#[derive(Debug, Copy, Clone)]
1144
1145/// SODA collection cursor handles are used to represent SODA collection cursors.
1146/// They are created by calling the function [`dpiSodaDb_getCollections()`]
1147/// and are destroyed when the last reference is released by calling the function
1148/// [`dpiSodaCollCursor_release()`].
1149/// 
1150/// See [this tracking issue](https://github.com/oracle/odpi/issues/110) for
1151/// known issues with SODA.
1152pub struct dpiSodaCollCursor {
1153    _unused: [u8; 0],
1154}
1155#[repr(C)]
1156#[derive(Debug, Copy, Clone)]
1157
1158/// SODA database handles are used to represent connections to the SODA database.
1159/// They are created by calling the function [`dpiConn_getSodaDb()`]. They are
1160/// destroyed when the last reference is released by calling
1161/// [`dpiSodaDb_release()`].
1162/// 
1163/// See [this tracking issue](https://github.com/oracle/odpi/issues/110) for
1164/// known issues with SODA.
1165pub struct dpiSodaDb {
1166    _unused: [u8; 0],
1167}
1168#[repr(C)]
1169#[derive(Debug, Copy, Clone)]
1170
1171/// SODA document handles are used to represent SODA documents in the database.
1172/// They are created by calling one of the functions
1173/// [`dpiSodaDb_createDocument()`], [`dpiSodaDocCursor_getNext()`],
1174/// [`dpiSodaColl_findOne()`], [`dpiSodaColl_getDataGuide()`],
1175/// [`dpiSodaColl_insertMany()`], [`dpiSodaColl_insertOne()`],
1176/// [`dpiSodaColl_replaceOne()`] or [`dpiSodaColl_save()`] and
1177/// are destroyed when the last reference is released by calling the function
1178/// [`dpiSodaDoc_release()`].
1179/// 
1180/// See [this tracking issue](https://github.com/oracle/odpi/issues/110) for
1181/// known issues with SODA.
1182pub struct dpiSodaDoc {
1183    _unused: [u8; 0],
1184}
1185#[repr(C)]
1186#[derive(Debug, Copy, Clone)]
1187
1188/// SODA document cursor handles are used to represent SODA document cursors.
1189/// They are created by calling the function [`dpiSodaColl_find()`]
1190/// and are destroyed when the last reference is released by calling the function
1191/// [`dpiSodaDocCursor_release()`].
1192/// 
1193/// See [this tracking issue](https://github.com/oracle/odpi/issues/110) for
1194/// known issues with SODA.
1195pub struct dpiSodaDocCursor {
1196    _unused: [u8; 0],
1197}
1198#[repr(C)]
1199#[derive(Debug, Copy, Clone)]
1200
1201/// Statement handles are used to represent statements of all types (queries, DML,
1202/// DDL and PL/SQL). They are created by calling the function
1203/// [`dpiConn_prepareStmt()`] or the function [`dpiSubscr_prepareStmt()`].
1204/// They are also created implicitly when a variable of type DPI_ORACLE_TYPE_STMT
1205/// is created. Statement handles can be closed by calling the function
1206/// [`dpiStmt_close()`] or by releasing the last reference to the statement by
1207/// calling the function [`dpiStmt_release()`].
1208pub struct dpiStmt {
1209    _unused: [u8; 0],
1210}
1211#[repr(C)]
1212#[derive(Debug, Copy, Clone)]
1213
1214/// Subscription handles are used to represent subscriptions to events such as
1215/// continuous query notification and object change notification. They are created
1216/// by calling the function [`dpiConn_subscribe()`] and are destroyed
1217/// by calling the function [`dpiConn_unsubscribe()`] or releasing the last
1218/// reference by calling the function [`dpiSubscr_release()`].
1219pub struct dpiSubscr {
1220    _unused: [u8; 0],
1221}
1222#[repr(C)]
1223#[derive(Debug, Copy, Clone)]
1224
1225/// Variable handles are used to represent memory areas used for transferring data
1226/// to and from the database. They are created by calling the function
1227/// [`dpiConn_newVar()`]. They are destroyed when the last reference to the
1228/// variable is released by calling the function [`dpiVar_release()`]. They are
1229/// bound to statements by calling the function [`dpiStmt_bindByName()`] or the
1230/// function [`dpiStmt_bindByPos()`]. They can also be used for fetching data
1231/// from the database by calling the function [`dpiStmt_define()`].
1232pub struct dpiVar {
1233    _unused: [u8; 0],
1234}
1235#[repr(C)]
1236#[derive(Debug, Copy, Clone)]
1237
1238/// Vector handles are used to represent vector values stored in the database. They
1239/// are only available from Oracle Client and Database 23.4 and higher. They can be
1240/// created explicitly by a call to [`dpiConn_newVector()`] or implicitly when
1241/// a variable of type DPI_ORACLE_TYPE_VECTOR is created. They are destroyed when
1242/// the last reference is released by a call to the function
1243/// [`dpiVector_release()`].
1244pub struct dpiVector {
1245    _unused: [u8; 0],
1246}
1247pub type dpiSodaCollNames = dpiStringList;
1248pub type dpiAccessTokenCallback = ::std::option::Option<
1249    unsafe extern "C" fn(
1250        context: *mut ::std::os::raw::c_void,
1251        accessToken: *mut dpiAccessToken,
1252    ) -> ::std::os::raw::c_int,
1253>;
1254#[repr(C)]
1255#[derive(Debug, Copy, Clone)]
1256
1257/// This structure is used for passing byte strings to and from the database in
1258/// the structure [`dpiData`].
1259pub struct dpiBytes {
1260
1261    /// Specifies the pointer to the memory allocated by ODPI-C for the variable.
1262    /// For strings, data written to this memory should be in the encoding
1263    /// appropriate to the type of data being transferred. When data is transferred
1264    /// from the database it will be in the correct encoding already.
1265    pub ptr: *mut ::std::os::raw::c_char,
1266
1267    /// Specifies the length of the byte string, in bytes.
1268    pub length: u32,
1269
1270    /// Specifies the encoding for character data. This value is populated when
1271    /// data is transferred from the database. It is ignored when data is being
1272    /// transferred to the database.
1273    pub encoding: *const ::std::os::raw::c_char,
1274}
1275#[test]
1276fn bindgen_test_layout_dpiBytes() {
1277    const UNINIT: ::std::mem::MaybeUninit<dpiBytes> = ::std::mem::MaybeUninit::uninit();
1278    let ptr = UNINIT.as_ptr();
1279    assert_eq!(
1280        ::std::mem::size_of::<dpiBytes>(),
1281        24usize,
1282        "Size of dpiBytes"
1283    );
1284    assert_eq!(
1285        ::std::mem::align_of::<dpiBytes>(),
1286        8usize,
1287        "Alignment of dpiBytes"
1288    );
1289    assert_eq!(
1290        unsafe { ::std::ptr::addr_of!((*ptr).ptr) as usize - ptr as usize },
1291        0usize,
1292        "Offset of field: dpiBytes::ptr"
1293    );
1294    assert_eq!(
1295        unsafe { ::std::ptr::addr_of!((*ptr).length) as usize - ptr as usize },
1296        8usize,
1297        "Offset of field: dpiBytes::length"
1298    );
1299    assert_eq!(
1300        unsafe { ::std::ptr::addr_of!((*ptr).encoding) as usize - ptr as usize },
1301        16usize,
1302        "Offset of field: dpiBytes::encoding"
1303    );
1304}
1305impl Default for dpiBytes {
1306    fn default() -> Self {
1307        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
1308        unsafe {
1309            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
1310            s.assume_init()
1311        }
1312    }
1313}
1314#[repr(C)]
1315#[derive(Debug, Default, Copy, Clone)]
1316
1317/// This structure is used for passing interval (days to seconds) data to and from
1318/// the database in the structure [`dpiData`].
1319pub struct dpiIntervalDS {
1320
1321    /// Specifies the number of days in the interval.
1322    pub days: i32,
1323
1324    /// Specifies the number of hours in the interval.
1325    pub hours: i32,
1326
1327    /// Specifies the number of minutes in the interval.
1328    pub minutes: i32,
1329
1330    /// Specifies the number of seconds in the interval.
1331    pub seconds: i32,
1332
1333    /// Specifies the number of fractional seconds in the interval (in
1334    /// nanoseconds).
1335    pub fseconds: i32,
1336}
1337#[test]
1338fn bindgen_test_layout_dpiIntervalDS() {
1339    const UNINIT: ::std::mem::MaybeUninit<dpiIntervalDS> = ::std::mem::MaybeUninit::uninit();
1340    let ptr = UNINIT.as_ptr();
1341    assert_eq!(
1342        ::std::mem::size_of::<dpiIntervalDS>(),
1343        20usize,
1344        "Size of dpiIntervalDS"
1345    );
1346    assert_eq!(
1347        ::std::mem::align_of::<dpiIntervalDS>(),
1348        4usize,
1349        "Alignment of dpiIntervalDS"
1350    );
1351    assert_eq!(
1352        unsafe { ::std::ptr::addr_of!((*ptr).days) as usize - ptr as usize },
1353        0usize,
1354        "Offset of field: dpiIntervalDS::days"
1355    );
1356    assert_eq!(
1357        unsafe { ::std::ptr::addr_of!((*ptr).hours) as usize - ptr as usize },
1358        4usize,
1359        "Offset of field: dpiIntervalDS::hours"
1360    );
1361    assert_eq!(
1362        unsafe { ::std::ptr::addr_of!((*ptr).minutes) as usize - ptr as usize },
1363        8usize,
1364        "Offset of field: dpiIntervalDS::minutes"
1365    );
1366    assert_eq!(
1367        unsafe { ::std::ptr::addr_of!((*ptr).seconds) as usize - ptr as usize },
1368        12usize,
1369        "Offset of field: dpiIntervalDS::seconds"
1370    );
1371    assert_eq!(
1372        unsafe { ::std::ptr::addr_of!((*ptr).fseconds) as usize - ptr as usize },
1373        16usize,
1374        "Offset of field: dpiIntervalDS::fseconds"
1375    );
1376}
1377#[repr(C)]
1378#[derive(Debug, Default, Copy, Clone)]
1379
1380/// This structure is used for passing interval (years to months) data to and from
1381/// the database in the structure [`dpiData`].
1382pub struct dpiIntervalYM {
1383
1384    /// Specifies the number of years in the interval.
1385    pub years: i32,
1386
1387    /// Specifies the number of months in the interval.
1388    pub months: i32,
1389}
1390#[test]
1391fn bindgen_test_layout_dpiIntervalYM() {
1392    const UNINIT: ::std::mem::MaybeUninit<dpiIntervalYM> = ::std::mem::MaybeUninit::uninit();
1393    let ptr = UNINIT.as_ptr();
1394    assert_eq!(
1395        ::std::mem::size_of::<dpiIntervalYM>(),
1396        8usize,
1397        "Size of dpiIntervalYM"
1398    );
1399    assert_eq!(
1400        ::std::mem::align_of::<dpiIntervalYM>(),
1401        4usize,
1402        "Alignment of dpiIntervalYM"
1403    );
1404    assert_eq!(
1405        unsafe { ::std::ptr::addr_of!((*ptr).years) as usize - ptr as usize },
1406        0usize,
1407        "Offset of field: dpiIntervalYM::years"
1408    );
1409    assert_eq!(
1410        unsafe { ::std::ptr::addr_of!((*ptr).months) as usize - ptr as usize },
1411        4usize,
1412        "Offset of field: dpiIntervalYM::months"
1413    );
1414}
1415#[repr(C)]
1416#[derive(Debug, Copy, Clone)]
1417
1418/// This structure is used for passing JSON node data to and from the database in
1419/// the structure [`dpiData`]. Nodes can consist of scalar values,
1420/// objects, or arrays.
1421pub struct dpiJsonNode {
1422
1423    /// The Oracle type of the data that is stored in the node. It will be one of
1424    /// the values from the enumeration [`dpiOracleTypeNum`].
1425    pub oracleTypeNum: dpiOracleTypeNum,
1426
1427    /// The native type of the data that is stored in the node. It will be one of
1428    /// the values from the enumeration [`dpiNativeTypeNum`].
1429    pub nativeTypeNum: dpiNativeTypeNum,
1430
1431    /// The value that is stored in the node. It is a union of type
1432    /// [`dpiDataBuffer`].
1433    pub value: *mut dpiDataBuffer,
1434}
1435#[test]
1436fn bindgen_test_layout_dpiJsonNode() {
1437    const UNINIT: ::std::mem::MaybeUninit<dpiJsonNode> = ::std::mem::MaybeUninit::uninit();
1438    let ptr = UNINIT.as_ptr();
1439    assert_eq!(
1440        ::std::mem::size_of::<dpiJsonNode>(),
1441        16usize,
1442        "Size of dpiJsonNode"
1443    );
1444    assert_eq!(
1445        ::std::mem::align_of::<dpiJsonNode>(),
1446        8usize,
1447        "Alignment of dpiJsonNode"
1448    );
1449    assert_eq!(
1450        unsafe { ::std::ptr::addr_of!((*ptr).oracleTypeNum) as usize - ptr as usize },
1451        0usize,
1452        "Offset of field: dpiJsonNode::oracleTypeNum"
1453    );
1454    assert_eq!(
1455        unsafe { ::std::ptr::addr_of!((*ptr).nativeTypeNum) as usize - ptr as usize },
1456        4usize,
1457        "Offset of field: dpiJsonNode::nativeTypeNum"
1458    );
1459    assert_eq!(
1460        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
1461        8usize,
1462        "Offset of field: dpiJsonNode::value"
1463    );
1464}
1465impl Default for dpiJsonNode {
1466    fn default() -> Self {
1467        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
1468        unsafe {
1469            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
1470            s.assume_init()
1471        }
1472    }
1473}
1474#[repr(C)]
1475#[derive(Debug, Copy, Clone)]
1476
1477/// This structure is used for passing JSON objects to and from the database.
1478pub struct dpiJsonObject {
1479
1480    /// Specifies the number of fields that are found in the JSON object. This also
1481    /// identifies the number of elements in each of the remaining arrays.
1482    pub numFields: u32,
1483
1484    /// Specifies an array of field names that are found in the JSON object. Each
1485    /// element is a byte string encoded in UTF-8. The length of each byte string
1486    /// is found in the [`dpiJsonObject.fieldNameLengths`] member.
1487    pub fieldNames: *mut *mut ::std::os::raw::c_char,
1488
1489    /// Specifies an array of lengths for the names of the fields found in the JSON
1490    /// object.
1491    pub fieldNameLengths: *mut u32,
1492
1493    /// Specifies an array of JSON nodes that are the values of the fields found in
1494    /// the JSON object. Each of these is a structure of type
1495    /// [`dpiJsonNode`].
1496    pub fields: *mut dpiJsonNode,
1497
1498    /// Specifies an array of buffers that contain the data for the values of the
1499    /// fields found in the JSON object. This member should not be used directly.
1500    /// Instead, the [`dpiJsonNode.value`] member of the corresponding node
1501    /// in the member [`dpiJsonObject.fields`] should be used.
1502    pub fieldValues: *mut dpiDataBuffer,
1503}
1504#[test]
1505fn bindgen_test_layout_dpiJsonObject() {
1506    const UNINIT: ::std::mem::MaybeUninit<dpiJsonObject> = ::std::mem::MaybeUninit::uninit();
1507    let ptr = UNINIT.as_ptr();
1508    assert_eq!(
1509        ::std::mem::size_of::<dpiJsonObject>(),
1510        40usize,
1511        "Size of dpiJsonObject"
1512    );
1513    assert_eq!(
1514        ::std::mem::align_of::<dpiJsonObject>(),
1515        8usize,
1516        "Alignment of dpiJsonObject"
1517    );
1518    assert_eq!(
1519        unsafe { ::std::ptr::addr_of!((*ptr).numFields) as usize - ptr as usize },
1520        0usize,
1521        "Offset of field: dpiJsonObject::numFields"
1522    );
1523    assert_eq!(
1524        unsafe { ::std::ptr::addr_of!((*ptr).fieldNames) as usize - ptr as usize },
1525        8usize,
1526        "Offset of field: dpiJsonObject::fieldNames"
1527    );
1528    assert_eq!(
1529        unsafe { ::std::ptr::addr_of!((*ptr).fieldNameLengths) as usize - ptr as usize },
1530        16usize,
1531        "Offset of field: dpiJsonObject::fieldNameLengths"
1532    );
1533    assert_eq!(
1534        unsafe { ::std::ptr::addr_of!((*ptr).fields) as usize - ptr as usize },
1535        24usize,
1536        "Offset of field: dpiJsonObject::fields"
1537    );
1538    assert_eq!(
1539        unsafe { ::std::ptr::addr_of!((*ptr).fieldValues) as usize - ptr as usize },
1540        32usize,
1541        "Offset of field: dpiJsonObject::fieldValues"
1542    );
1543}
1544impl Default for dpiJsonObject {
1545    fn default() -> Self {
1546        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
1547        unsafe {
1548            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
1549            s.assume_init()
1550        }
1551    }
1552}
1553#[repr(C)]
1554#[derive(Debug, Copy, Clone)]
1555
1556/// This structure is used for passing JSON objects to and from the database.
1557pub struct dpiJsonArray {
1558
1559    /// Specifies the number of elements that are found in the JSON array. This
1560    /// also identifies the number of elements in each of the remaining arrays.
1561    pub numElements: u32,
1562
1563    /// Specifies an array of JSON nodes that are the values of the elements found
1564    /// in the JSON array. Each of these is a structure of type
1565    /// [`dpiJsonNode`].
1566    pub elements: *mut dpiJsonNode,
1567
1568    /// Specifies an array of buffers that contain the data for the values of the
1569    /// elements found in the JSON array. This member should not be used directly.
1570    /// Instead, the [`dpiJsonNode.value`] member of the corresponding node
1571    /// in the member [`dpiJsonArray.elements`] should be used.
1572    pub elementValues: *mut dpiDataBuffer,
1573}
1574#[test]
1575fn bindgen_test_layout_dpiJsonArray() {
1576    const UNINIT: ::std::mem::MaybeUninit<dpiJsonArray> = ::std::mem::MaybeUninit::uninit();
1577    let ptr = UNINIT.as_ptr();
1578    assert_eq!(
1579        ::std::mem::size_of::<dpiJsonArray>(),
1580        24usize,
1581        "Size of dpiJsonArray"
1582    );
1583    assert_eq!(
1584        ::std::mem::align_of::<dpiJsonArray>(),
1585        8usize,
1586        "Alignment of dpiJsonArray"
1587    );
1588    assert_eq!(
1589        unsafe { ::std::ptr::addr_of!((*ptr).numElements) as usize - ptr as usize },
1590        0usize,
1591        "Offset of field: dpiJsonArray::numElements"
1592    );
1593    assert_eq!(
1594        unsafe { ::std::ptr::addr_of!((*ptr).elements) as usize - ptr as usize },
1595        8usize,
1596        "Offset of field: dpiJsonArray::elements"
1597    );
1598    assert_eq!(
1599        unsafe { ::std::ptr::addr_of!((*ptr).elementValues) as usize - ptr as usize },
1600        16usize,
1601        "Offset of field: dpiJsonArray::elementValues"
1602    );
1603}
1604impl Default for dpiJsonArray {
1605    fn default() -> Self {
1606        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
1607        unsafe {
1608            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
1609            s.assume_init()
1610        }
1611    }
1612}
1613#[repr(C)]
1614#[derive(Debug, Default, Copy, Clone)]
1615
1616/// This structure is used for passing timestamp data to and from the database in
1617/// the structure [`dpiData`].
1618pub struct dpiTimestamp {
1619
1620    /// Specifies the year for the timestamp.
1621    pub year: i16,
1622
1623    /// Specifies the month for the timestamp. This should be between 1 and 12.
1624    pub month: u8,
1625
1626    /// Specifies the day for the timestamp. This should be between 1 and 31.
1627    pub day: u8,
1628
1629    /// Specifies the hour for the timestamp. This should be between 0 and 23.
1630    pub hour: u8,
1631
1632    /// Specifies the minute for the timestamp. This should be between 0 and 59.
1633    pub minute: u8,
1634
1635    /// Specifies the second for the timestamp. This should be between 0 and 59.
1636    pub second: u8,
1637
1638    /// Specifies the fractional seconds for the timestamp, in nanoseconds.
1639    pub fsecond: u32,
1640
1641    /// Specifies the hours offset from UTC. This value is only used for timestamp
1642    /// with time zone and timestamp with local time zone columns.
1643    pub tzHourOffset: i8,
1644
1645    /// Specifies the minutes offset from UTC. This value is only used for
1646    /// timestamp with time zone and timestamp with local time zone columns. Note
1647    /// that this value will be negative in the western hemisphere. For example,
1648    /// when the timezone is -03:30, tzHourOffset will be -3 and tzMinuteOffset
1649    /// will be -30.
1650    pub tzMinuteOffset: i8,
1651}
1652#[test]
1653fn bindgen_test_layout_dpiTimestamp() {
1654    const UNINIT: ::std::mem::MaybeUninit<dpiTimestamp> = ::std::mem::MaybeUninit::uninit();
1655    let ptr = UNINIT.as_ptr();
1656    assert_eq!(
1657        ::std::mem::size_of::<dpiTimestamp>(),
1658        16usize,
1659        "Size of dpiTimestamp"
1660    );
1661    assert_eq!(
1662        ::std::mem::align_of::<dpiTimestamp>(),
1663        4usize,
1664        "Alignment of dpiTimestamp"
1665    );
1666    assert_eq!(
1667        unsafe { ::std::ptr::addr_of!((*ptr).year) as usize - ptr as usize },
1668        0usize,
1669        "Offset of field: dpiTimestamp::year"
1670    );
1671    assert_eq!(
1672        unsafe { ::std::ptr::addr_of!((*ptr).month) as usize - ptr as usize },
1673        2usize,
1674        "Offset of field: dpiTimestamp::month"
1675    );
1676    assert_eq!(
1677        unsafe { ::std::ptr::addr_of!((*ptr).day) as usize - ptr as usize },
1678        3usize,
1679        "Offset of field: dpiTimestamp::day"
1680    );
1681    assert_eq!(
1682        unsafe { ::std::ptr::addr_of!((*ptr).hour) as usize - ptr as usize },
1683        4usize,
1684        "Offset of field: dpiTimestamp::hour"
1685    );
1686    assert_eq!(
1687        unsafe { ::std::ptr::addr_of!((*ptr).minute) as usize - ptr as usize },
1688        5usize,
1689        "Offset of field: dpiTimestamp::minute"
1690    );
1691    assert_eq!(
1692        unsafe { ::std::ptr::addr_of!((*ptr).second) as usize - ptr as usize },
1693        6usize,
1694        "Offset of field: dpiTimestamp::second"
1695    );
1696    assert_eq!(
1697        unsafe { ::std::ptr::addr_of!((*ptr).fsecond) as usize - ptr as usize },
1698        8usize,
1699        "Offset of field: dpiTimestamp::fsecond"
1700    );
1701    assert_eq!(
1702        unsafe { ::std::ptr::addr_of!((*ptr).tzHourOffset) as usize - ptr as usize },
1703        12usize,
1704        "Offset of field: dpiTimestamp::tzHourOffset"
1705    );
1706    assert_eq!(
1707        unsafe { ::std::ptr::addr_of!((*ptr).tzMinuteOffset) as usize - ptr as usize },
1708        13usize,
1709        "Offset of field: dpiTimestamp::tzMinuteOffset"
1710    );
1711}
1712#[repr(C)]
1713#[derive(Copy, Clone)]
1714
1715/// This union is used for passing data to and from the database without requiring
1716/// casts.
1717pub union dpiDataBuffer {
1718
1719    /// Value that is used when the native type that is being used is
1720    /// DPI_NATIVE_TYPE_BOOLEAN. The value should be either 1 (true) or 0 (false).
1721    pub asBoolean: ::std::os::raw::c_int,
1722
1723    /// Only used for getting/setting OCI attributes of 1 byte in length.
1724    pub asUint8: u8,
1725
1726    /// Only used for getting/setting OCI attributes of 2 bytes in length.
1727    pub asUint16: u16,
1728
1729    /// Only used for getting/setting OCI attributes of 4 bytes in length.
1730    pub asUint32: u32,
1731
1732    /// Value that is used when the native type that is being used is
1733    /// DPI_NATIVE_TYPE_INT64.
1734    pub asInt64: i64,
1735
1736    /// Value that is used when the native type that is being used is
1737    /// DPI_NATIVE_TYPE_UINT64.
1738    pub asUint64: u64,
1739
1740    /// Value that is used when the native type that is being used is
1741    /// DPI_NATIVE_TYPE_FLOAT.
1742    pub asFloat: f32,
1743
1744    /// Value that is used when the native type that is being used is
1745    /// DPI_NATIVE_TYPE_DOUBLE.
1746    pub asDouble: f64,
1747
1748    /// Only used for getting/setting OCI attributes of type string.
1749    pub asString: *mut ::std::os::raw::c_char,
1750
1751    /// Raw pointer used for getting/setting all OCI attributes.
1752    pub asRaw: *mut ::std::os::raw::c_void,
1753
1754    /// Value that is used when the native type that is being used is
1755    /// DPI_NATIVE_TYPE_BYTES. This is a structure of type
1756    /// [`dpiBytes`].
1757    pub asBytes: dpiBytes,
1758
1759    /// Value that is used when the native type that is being used is
1760    /// DPI_NATIVE_TYPE_TIMESTAMP. This is a structure of type
1761    /// [`dpiTimestamp`].
1762    pub asTimestamp: dpiTimestamp,
1763
1764    /// Value that is used when the native type that is being used is
1765    /// DPI_NATIVE_TYPE_INTERVAL_DS. This is a structure of type
1766    /// [`dpiIntervalDS`].
1767    pub asIntervalDS: dpiIntervalDS,
1768
1769    /// Value that is used when the native type that is being used is
1770    /// DPI_NATIVE_TYPE_INTERVAL_YM. This is a structure of type
1771    /// [`dpiIntervalYM`].
1772    pub asIntervalYM: dpiIntervalYM,
1773
1774    /// Value that is used when the native type that is being used is
1775    /// DPI_NATIVE_TYPE_JSON. This is a reference to a JSON value which can be used
1776    /// for reading and writing the data that belongs to it.
1777    pub asJson: *mut dpiJson,
1778
1779    /// Value this is used when the native type that is being used is
1780    /// DPI_NATIVE_TYPE_JSON_OBJECT. This is a structure of type
1781    /// [`dpiJsonObject`].
1782    pub asJsonObject: dpiJsonObject,
1783
1784    /// Value this is used when the native type that is being used is
1785    /// DPI_NATIVE_TYPE_JSON_ARRAY. This is a structure of type
1786    /// [`dpiJsonArray`].
1787    pub asJsonArray: dpiJsonArray,
1788
1789    /// Value that is used when the native type that is being used is
1790    /// DPI_NATIVE_TYPE_LOB. This is a reference to a LOB (large object) which can
1791    /// be used for reading and writing the data that belongs to it.
1792    pub asLOB: *mut dpiLob,
1793
1794    /// Value that is used when the native type that is being used is
1795    /// DPI_NATIVE_TYPE_OBJECT. This is a reference to an object which can be used
1796    /// for reading and writing its attributes or element values.
1797    pub asObject: *mut dpiObject,
1798
1799    /// Value that is used when the native type that is being used is
1800    /// DPI_NATIVE_TYPE_STMT. This is a reference to a statement which can be used
1801    /// to query data from the database.
1802    pub asStmt: *mut dpiStmt,
1803
1804    /// Value that is used when the native type that is being used is
1805    /// DPI_NATIVE_TYPE_ROWID. This is a reference to a rowid which is used to
1806    /// uniquely identify a row in a table in the database.
1807    pub asRowid: *mut dpiRowid,
1808
1809    /// Value that is used when the native type that is being used is
1810    /// DPI_NATIVE_TYPE_VECTOR. This is a reference to a vector value which can be
1811    /// used for reading and writing the data that belongs to it.
1812    pub asVector: *mut dpiVector,
1813}
1814#[test]
1815fn bindgen_test_layout_dpiDataBuffer() {
1816    const UNINIT: ::std::mem::MaybeUninit<dpiDataBuffer> = ::std::mem::MaybeUninit::uninit();
1817    let ptr = UNINIT.as_ptr();
1818    assert_eq!(
1819        ::std::mem::size_of::<dpiDataBuffer>(),
1820        40usize,
1821        "Size of dpiDataBuffer"
1822    );
1823    assert_eq!(
1824        ::std::mem::align_of::<dpiDataBuffer>(),
1825        8usize,
1826        "Alignment of dpiDataBuffer"
1827    );
1828    assert_eq!(
1829        unsafe { ::std::ptr::addr_of!((*ptr).asBoolean) as usize - ptr as usize },
1830        0usize,
1831        "Offset of field: dpiDataBuffer::asBoolean"
1832    );
1833    assert_eq!(
1834        unsafe { ::std::ptr::addr_of!((*ptr).asUint8) as usize - ptr as usize },
1835        0usize,
1836        "Offset of field: dpiDataBuffer::asUint8"
1837    );
1838    assert_eq!(
1839        unsafe { ::std::ptr::addr_of!((*ptr).asUint16) as usize - ptr as usize },
1840        0usize,
1841        "Offset of field: dpiDataBuffer::asUint16"
1842    );
1843    assert_eq!(
1844        unsafe { ::std::ptr::addr_of!((*ptr).asUint32) as usize - ptr as usize },
1845        0usize,
1846        "Offset of field: dpiDataBuffer::asUint32"
1847    );
1848    assert_eq!(
1849        unsafe { ::std::ptr::addr_of!((*ptr).asInt64) as usize - ptr as usize },
1850        0usize,
1851        "Offset of field: dpiDataBuffer::asInt64"
1852    );
1853    assert_eq!(
1854        unsafe { ::std::ptr::addr_of!((*ptr).asUint64) as usize - ptr as usize },
1855        0usize,
1856        "Offset of field: dpiDataBuffer::asUint64"
1857    );
1858    assert_eq!(
1859        unsafe { ::std::ptr::addr_of!((*ptr).asFloat) as usize - ptr as usize },
1860        0usize,
1861        "Offset of field: dpiDataBuffer::asFloat"
1862    );
1863    assert_eq!(
1864        unsafe { ::std::ptr::addr_of!((*ptr).asDouble) as usize - ptr as usize },
1865        0usize,
1866        "Offset of field: dpiDataBuffer::asDouble"
1867    );
1868    assert_eq!(
1869        unsafe { ::std::ptr::addr_of!((*ptr).asString) as usize - ptr as usize },
1870        0usize,
1871        "Offset of field: dpiDataBuffer::asString"
1872    );
1873    assert_eq!(
1874        unsafe { ::std::ptr::addr_of!((*ptr).asRaw) as usize - ptr as usize },
1875        0usize,
1876        "Offset of field: dpiDataBuffer::asRaw"
1877    );
1878    assert_eq!(
1879        unsafe { ::std::ptr::addr_of!((*ptr).asBytes) as usize - ptr as usize },
1880        0usize,
1881        "Offset of field: dpiDataBuffer::asBytes"
1882    );
1883    assert_eq!(
1884        unsafe { ::std::ptr::addr_of!((*ptr).asTimestamp) as usize - ptr as usize },
1885        0usize,
1886        "Offset of field: dpiDataBuffer::asTimestamp"
1887    );
1888    assert_eq!(
1889        unsafe { ::std::ptr::addr_of!((*ptr).asIntervalDS) as usize - ptr as usize },
1890        0usize,
1891        "Offset of field: dpiDataBuffer::asIntervalDS"
1892    );
1893    assert_eq!(
1894        unsafe { ::std::ptr::addr_of!((*ptr).asIntervalYM) as usize - ptr as usize },
1895        0usize,
1896        "Offset of field: dpiDataBuffer::asIntervalYM"
1897    );
1898    assert_eq!(
1899        unsafe { ::std::ptr::addr_of!((*ptr).asJson) as usize - ptr as usize },
1900        0usize,
1901        "Offset of field: dpiDataBuffer::asJson"
1902    );
1903    assert_eq!(
1904        unsafe { ::std::ptr::addr_of!((*ptr).asJsonObject) as usize - ptr as usize },
1905        0usize,
1906        "Offset of field: dpiDataBuffer::asJsonObject"
1907    );
1908    assert_eq!(
1909        unsafe { ::std::ptr::addr_of!((*ptr).asJsonArray) as usize - ptr as usize },
1910        0usize,
1911        "Offset of field: dpiDataBuffer::asJsonArray"
1912    );
1913    assert_eq!(
1914        unsafe { ::std::ptr::addr_of!((*ptr).asLOB) as usize - ptr as usize },
1915        0usize,
1916        "Offset of field: dpiDataBuffer::asLOB"
1917    );
1918    assert_eq!(
1919        unsafe { ::std::ptr::addr_of!((*ptr).asObject) as usize - ptr as usize },
1920        0usize,
1921        "Offset of field: dpiDataBuffer::asObject"
1922    );
1923    assert_eq!(
1924        unsafe { ::std::ptr::addr_of!((*ptr).asStmt) as usize - ptr as usize },
1925        0usize,
1926        "Offset of field: dpiDataBuffer::asStmt"
1927    );
1928    assert_eq!(
1929        unsafe { ::std::ptr::addr_of!((*ptr).asRowid) as usize - ptr as usize },
1930        0usize,
1931        "Offset of field: dpiDataBuffer::asRowid"
1932    );
1933    assert_eq!(
1934        unsafe { ::std::ptr::addr_of!((*ptr).asVector) as usize - ptr as usize },
1935        0usize,
1936        "Offset of field: dpiDataBuffer::asVector"
1937    );
1938}
1939impl Default for dpiDataBuffer {
1940    fn default() -> Self {
1941        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
1942        unsafe {
1943            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
1944            s.assume_init()
1945        }
1946    }
1947}
1948#[repr(C)]
1949#[derive(Debug, Copy, Clone)]
1950
1951/// This structure is part of the structure [`dpiDataTypeInfo`]
1952/// and provides information about [annotations](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/annotations_clause.html#GUID-1AC16117-BBB6-4435-8794-2B99F8F68052)
1953/// associated with columns that are fetched from the database. Annotations are
1954/// only available with Oracle Database 23ai (or later). Oracle Client libraries
1955/// must also be 23.1 (or later).
1956pub struct dpiAnnotation {
1957
1958    /// Specifies the annoation key.
1959    pub key: *const ::std::os::raw::c_char,
1960
1961    /// Specifies the length of the annotation key, in bytes.
1962    pub keyLength: u32,
1963
1964    /// Specifies the annoation value.
1965    pub value: *const ::std::os::raw::c_char,
1966
1967    /// Specifies the length of the annotation value, in bytes.
1968    pub valueLength: u32,
1969}
1970#[test]
1971fn bindgen_test_layout_dpiAnnotation() {
1972    const UNINIT: ::std::mem::MaybeUninit<dpiAnnotation> = ::std::mem::MaybeUninit::uninit();
1973    let ptr = UNINIT.as_ptr();
1974    assert_eq!(
1975        ::std::mem::size_of::<dpiAnnotation>(),
1976        32usize,
1977        "Size of dpiAnnotation"
1978    );
1979    assert_eq!(
1980        ::std::mem::align_of::<dpiAnnotation>(),
1981        8usize,
1982        "Alignment of dpiAnnotation"
1983    );
1984    assert_eq!(
1985        unsafe { ::std::ptr::addr_of!((*ptr).key) as usize - ptr as usize },
1986        0usize,
1987        "Offset of field: dpiAnnotation::key"
1988    );
1989    assert_eq!(
1990        unsafe { ::std::ptr::addr_of!((*ptr).keyLength) as usize - ptr as usize },
1991        8usize,
1992        "Offset of field: dpiAnnotation::keyLength"
1993    );
1994    assert_eq!(
1995        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
1996        16usize,
1997        "Offset of field: dpiAnnotation::value"
1998    );
1999    assert_eq!(
2000        unsafe { ::std::ptr::addr_of!((*ptr).valueLength) as usize - ptr as usize },
2001        24usize,
2002        "Offset of field: dpiAnnotation::valueLength"
2003    );
2004}
2005impl Default for dpiAnnotation {
2006    fn default() -> Self {
2007        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2008        unsafe {
2009            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2010            s.assume_init()
2011        }
2012    }
2013}
2014#[repr(C)]
2015#[derive(Debug, Copy, Clone)]
2016
2017/// This structure is used for passing application context to the database during
2018/// the process of creating standalone connections. These values are ignored when
2019/// acquiring a connection from a session pool or when using DRCP (Database
2020/// Resident Connection Pooling). All values must be set to valid values prior to
2021/// being used in the [`dpiConnCreateParams`] structure and
2022/// must remain valid until the execution of [`dpiConn_create()`] completes.
2023/// Values set using this structure are available in logon triggers by using the
2024/// sys_context() SQL function.
2025pub struct dpiAppContext {
2026
2027    /// Specifies the value of the “namespace” parameter to sys_context(). It is
2028    /// expected to be a byte string in the encoding specified in the
2029    /// [`dpiConnCreateParams`] structure and must not be
2030    /// NULL.
2031    pub namespaceName: *const ::std::os::raw::c_char,
2032
2033    /// Specifies the length of the [`dpiAppContext.namespaceName`] member,
2034    /// in bytes.
2035    pub namespaceNameLength: u32,
2036
2037    /// Specifies the value of the “parameter” parameter to sys_context(). It is
2038    /// expected to be a byte string in the encoding specified in the
2039    /// [`dpiConnCreateParams`] structure and must not be
2040    /// NULL.
2041    pub name: *const ::std::os::raw::c_char,
2042
2043    /// Specifies the length of the [`dpiAppContext.name`] member, in bytes.
2044    pub nameLength: u32,
2045
2046    /// Specifies the value that will be returned from sys_context(). It is
2047    /// expected to be a byte string in the encoding specified in the
2048    /// [`dpiConnCreateParams`] structure and must not be
2049    /// NULL.
2050    pub value: *const ::std::os::raw::c_char,
2051
2052    /// Specifies the length of the [`dpiAppContext.value`] member, in bytes.
2053    pub valueLength: u32,
2054}
2055#[test]
2056fn bindgen_test_layout_dpiAppContext() {
2057    const UNINIT: ::std::mem::MaybeUninit<dpiAppContext> = ::std::mem::MaybeUninit::uninit();
2058    let ptr = UNINIT.as_ptr();
2059    assert_eq!(
2060        ::std::mem::size_of::<dpiAppContext>(),
2061        48usize,
2062        "Size of dpiAppContext"
2063    );
2064    assert_eq!(
2065        ::std::mem::align_of::<dpiAppContext>(),
2066        8usize,
2067        "Alignment of dpiAppContext"
2068    );
2069    assert_eq!(
2070        unsafe { ::std::ptr::addr_of!((*ptr).namespaceName) as usize - ptr as usize },
2071        0usize,
2072        "Offset of field: dpiAppContext::namespaceName"
2073    );
2074    assert_eq!(
2075        unsafe { ::std::ptr::addr_of!((*ptr).namespaceNameLength) as usize - ptr as usize },
2076        8usize,
2077        "Offset of field: dpiAppContext::namespaceNameLength"
2078    );
2079    assert_eq!(
2080        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
2081        16usize,
2082        "Offset of field: dpiAppContext::name"
2083    );
2084    assert_eq!(
2085        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
2086        24usize,
2087        "Offset of field: dpiAppContext::nameLength"
2088    );
2089    assert_eq!(
2090        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
2091        32usize,
2092        "Offset of field: dpiAppContext::value"
2093    );
2094    assert_eq!(
2095        unsafe { ::std::ptr::addr_of!((*ptr).valueLength) as usize - ptr as usize },
2096        40usize,
2097        "Offset of field: dpiAppContext::valueLength"
2098    );
2099}
2100impl Default for dpiAppContext {
2101    fn default() -> Self {
2102        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2103        unsafe {
2104            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2105            s.assume_init()
2106        }
2107    }
2108}
2109#[repr(C)]
2110#[derive(Debug, Copy, Clone)]
2111
2112/// This structure is used for creating session pools and standalone connections to
2113/// the database. All members are initialized to default values using the
2114/// [`dpiContext_initCommonCreateParams()`] function.
2115pub struct dpiCommonCreateParams {
2116
2117    /// Specifies the mode used for creating connections. It is expected to be
2118    /// one or more of the values from the enumeration
2119    /// [`dpiCreateMode`], OR’ed together. The default value is
2120    /// *DPI_MODE_CREATE_DEFAULT*.
2121    /// 
2122    /// Note that when this structure is used during creation of a pool, the mode
2123    /// *DPI_MODE_CREATE_THREADED* is automatically enabled regardless of what
2124    /// value is set in this member.
2125    pub createMode: dpiCreateMode,
2126
2127    /// Specifies the encoding to use for CHAR data, as a null-terminated ASCII
2128    /// string. Either an IANA or Oracle specific character set name is expected.
2129    /// NULL is also acceptable which implies the use of the NLS_LANG environment
2130    /// variable (or ASCII, if the NLS_LANG environment variable is not set).
2131    /// The default value is the value of the member
2132    /// [`dpiContextCreateParams.defaultEncoding`] specified when the call to
2133    /// [`dpiContext_createWithParams()`] was made.
2134    pub encoding: *const ::std::os::raw::c_char,
2135
2136    /// Specifies the encoding to use for NCHAR data, as a null-terminated ASCII
2137    /// string. Either an IANA or Oracle specific character set name is expected.
2138    /// NULL is also acceptable which implies the use of the NLS_NCHAR environment
2139    /// variable (or the same value as the [`dpiCommonCreateParams.encoding`]
2140    /// member if the NLS_NCHAR environment variable is not set). The default
2141    /// value is the value of the member
2142    /// [`dpiContextCreateParams.defaultEncoding`] specified when the call to
2143    /// [`dpiContext_createWithParams()`] was made.
2144    pub nencoding: *const ::std::os::raw::c_char,
2145
2146    /// Specifies the edition to be used when creating a standalone connection. It
2147    /// is expected to be NULL (meaning that no edition is set) or a byte string in
2148    /// the encoding specified by the [`dpiCommonCreateParams.encoding`]
2149    /// member. The default value is NULL.
2150    pub edition: *const ::std::os::raw::c_char,
2151
2152    /// Specifies the length of the [`dpiCommonCreateParams.edition`] member,
2153    /// in bytes. The default value is 0.
2154    pub editionLength: u32,
2155
2156    /// Specifies the name of the driver that is being used. It is expected to be
2157    /// NULL or a byte string in the encoding specified by the
2158    /// [`dpiCommonCreateParams.encoding`] member. The default value is the
2159    /// value of the member [`dpiContextCreateParams.defaultDriverName`]
2160    /// specified when the call to
2161    /// [`dpiContext_createWithParams()`] was made.
2162    pub driverName: *const ::std::os::raw::c_char,
2163
2164    /// Specifies the length of the [`dpiCommonCreateParams.driverName`]
2165    /// member, in bytes. The default value is the length of the member
2166    /// [`dpiContextCreateParams.defaultDriverName`] specified when the call
2167    /// to [`dpiContext_createWithParams()`] was made.
2168    pub driverNameLength: u32,
2169
2170    /// Specifies whether to enable the SODA metadata cache or not, which can
2171    /// significantly improve the performance of repeated calls to methods
2172    /// [`dpiSodaDb_createCollection()`] (when not specifying a value for the
2173    /// metadata parameter) and [`dpiSodaDb_openCollection()`]. This requires
2174    /// Oracle Client 21.3 or higher (also available in Oracle Client 19 from
2175    /// 19.11).
2176    pub sodaMetadataCache: ::std::os::raw::c_int,
2177
2178    /// Specifies the number of statements to retain in the statement cache. Use a
2179    /// value of 0 to disable the statement cache completely.
2180    pub stmtCacheSize: u32,
2181
2182    /// Specifies a pointer to a [`dpiAccessToken`] structure.
2183    /// Each member of structure is populated with authentication parameters used for
2184    /// token based authentication. This requires Oracle Client 19.4 (or later),
2185    /// or 21.5 (or later).
2186    pub accessToken: *mut dpiAccessToken,
2187}
2188#[test]
2189fn bindgen_test_layout_dpiCommonCreateParams() {
2190    const UNINIT: ::std::mem::MaybeUninit<dpiCommonCreateParams> =
2191        ::std::mem::MaybeUninit::uninit();
2192    let ptr = UNINIT.as_ptr();
2193    assert_eq!(
2194        ::std::mem::size_of::<dpiCommonCreateParams>(),
2195        72usize,
2196        "Size of dpiCommonCreateParams"
2197    );
2198    assert_eq!(
2199        ::std::mem::align_of::<dpiCommonCreateParams>(),
2200        8usize,
2201        "Alignment of dpiCommonCreateParams"
2202    );
2203    assert_eq!(
2204        unsafe { ::std::ptr::addr_of!((*ptr).createMode) as usize - ptr as usize },
2205        0usize,
2206        "Offset of field: dpiCommonCreateParams::createMode"
2207    );
2208    assert_eq!(
2209        unsafe { ::std::ptr::addr_of!((*ptr).encoding) as usize - ptr as usize },
2210        8usize,
2211        "Offset of field: dpiCommonCreateParams::encoding"
2212    );
2213    assert_eq!(
2214        unsafe { ::std::ptr::addr_of!((*ptr).nencoding) as usize - ptr as usize },
2215        16usize,
2216        "Offset of field: dpiCommonCreateParams::nencoding"
2217    );
2218    assert_eq!(
2219        unsafe { ::std::ptr::addr_of!((*ptr).edition) as usize - ptr as usize },
2220        24usize,
2221        "Offset of field: dpiCommonCreateParams::edition"
2222    );
2223    assert_eq!(
2224        unsafe { ::std::ptr::addr_of!((*ptr).editionLength) as usize - ptr as usize },
2225        32usize,
2226        "Offset of field: dpiCommonCreateParams::editionLength"
2227    );
2228    assert_eq!(
2229        unsafe { ::std::ptr::addr_of!((*ptr).driverName) as usize - ptr as usize },
2230        40usize,
2231        "Offset of field: dpiCommonCreateParams::driverName"
2232    );
2233    assert_eq!(
2234        unsafe { ::std::ptr::addr_of!((*ptr).driverNameLength) as usize - ptr as usize },
2235        48usize,
2236        "Offset of field: dpiCommonCreateParams::driverNameLength"
2237    );
2238    assert_eq!(
2239        unsafe { ::std::ptr::addr_of!((*ptr).sodaMetadataCache) as usize - ptr as usize },
2240        52usize,
2241        "Offset of field: dpiCommonCreateParams::sodaMetadataCache"
2242    );
2243    assert_eq!(
2244        unsafe { ::std::ptr::addr_of!((*ptr).stmtCacheSize) as usize - ptr as usize },
2245        56usize,
2246        "Offset of field: dpiCommonCreateParams::stmtCacheSize"
2247    );
2248    assert_eq!(
2249        unsafe { ::std::ptr::addr_of!((*ptr).accessToken) as usize - ptr as usize },
2250        64usize,
2251        "Offset of field: dpiCommonCreateParams::accessToken"
2252    );
2253}
2254impl Default for dpiCommonCreateParams {
2255    fn default() -> Self {
2256        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2257        unsafe {
2258            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2259            s.assume_init()
2260        }
2261    }
2262}
2263#[repr(C)]
2264#[derive(Debug, Copy, Clone)]
2265
2266/// This structure is used for creating connections to the database, whether
2267/// standalone or acquired from a session pool. All members are initialized to
2268/// default values using the [`dpiContext_initConnCreateParams()`] function.
2269/// Care should be taken to ensure a copy of this structure exists only as long as
2270/// needed to create the connection since it can contain a clear text copy of
2271/// credentials used for connecting to the database.
2272pub struct dpiConnCreateParams {
2273
2274    /// Specifies the mode used for authorizing connections. It is expected to be
2275    /// one or more of the values from the enumeration
2276    /// [`dpiAuthMode`], OR’ed together. The default value is
2277    /// DPI_MODE_AUTH_DEFAULT.
2278    pub authMode: dpiAuthMode,
2279
2280    /// Specifies the connection class to use when connecting to the database. This
2281    /// is used with DRCP (database resident connection pooling) or to further
2282    /// subdivide a session pool. It is expected to be NULL (meaning that no
2283    /// connection class will be set) or a byte string in the encoding used for
2284    /// CHAR data. The default value is NULL.
2285    pub connectionClass: *const ::std::os::raw::c_char,
2286
2287    /// Specifies the length of the
2288    /// [`dpiConnCreateParams.connectionClass`] member, in bytes. The
2289    /// default value is 0.
2290    pub connectionClassLength: u32,
2291
2292    /// Specifies the level of purity required when creating a connection using a
2293    /// connection class. It is expected to be one of the values from the
2294    /// enumeration [`dpiPurity`]. The default value is
2295    /// DPI_PURITY_DEFAULT.
2296    pub purity: dpiPurity,
2297
2298    /// Specifies the new password to set when creating a connection. This value
2299    /// is only used when creating a standalone connection. It is expected to be
2300    /// NULL or a byte string in the encoding used for CHAR data. The default value
2301    /// of this member is NULL. If specified, the password for the user is changed
2302    /// when the connection is created (useful when the password has expired and a
2303    /// session cannot be established without changing the password).
2304    pub newPassword: *const ::std::os::raw::c_char,
2305
2306    /// Specifies the length of the [`dpiConnCreateParams.newPassword`]
2307    /// member, in bytes. The default value is 0.
2308    pub newPasswordLength: u32,
2309
2310    /// Specifies the application context that will be set when the connection is
2311    /// created. This value is only used when creating standalone connections. It
2312    /// is expected to be NULL or an array of [`dpiAppContext`]
2313    /// structures. The context specified here can be used in logon triggers, for
2314    /// example. The default value is NULL.
2315    pub appContext: *mut dpiAppContext,
2316
2317    /// Specifies the number of elements found in the
2318    /// [`dpiConnCreateParams.appContext`] member. The default value is 0.
2319    pub numAppContext: u32,
2320
2321    /// Specifies whether external authentication should be used to create the
2322    /// connection. If this value is 0, the user name and password values must be
2323    /// specified in the call to [`dpiConn_create()`]; otherwise, the user
2324    /// name and password values must be zero length or NULL. The default value is
2325    /// 0.
2326    pub externalAuth: ::std::os::raw::c_int,
2327
2328    /// Specifies an OCI service context handle created externally that will be
2329    /// used instead of creating a connection from scratch. The default value is
2330    /// NULL. Note that this connection depends on the external handle remaining
2331    /// valid for the lifetime of this connection. It is also important to ensure
2332    /// that the last reference to this connection is released before the external
2333    /// service context handle and environment handle are destroyed. Unlike regular
2334    /// connections, no attempt is made to rollback any outstanding transactions or
2335    /// close any open statements, objects and LOBs when the last reference to this
2336    /// connection is released, since attempts to do so after the external service
2337    /// context handle and environment are destroyed may result in crashes and
2338    /// other undesirable behavior.
2339    pub externalHandle: *mut ::std::os::raw::c_void,
2340
2341    /// Specifies the session pool from which to acquire a connection or NULL if
2342    /// a standalone connection should be created. The default value is NULL. If
2343    /// the method [`dpiPool_acquireConnection()`] is being called, this value
2344    /// is ignored.
2345    pub pool: *mut dpiPool,
2346
2347    /// Specifies the tag to use when acquiring a connection from a session pool.
2348    /// This member is ignored when creating a standalone connection. If specified,
2349    /// the tag restricts the type of session that can be returned to those with
2350    /// that tag or a NULL tag. If the member
2351    /// [`dpiConnCreateParams.matchAnyTag`] is set, however, any session can
2352    /// be returned if no matching sessions are found.
2353    /// 
2354    /// The value is expected to be NULL (any session can be returned) or a byte
2355    /// string in the encoding used for CHAR data. The default value is NULL. If
2356    /// specified, the value should be one or more properties (specified in the
2357    /// form *key=value*) separated by semicolons.
2358    pub tag: *const ::std::os::raw::c_char,
2359
2360    /// Specifies the length of the [`dpiConnCreateParams.tag`] member, in
2361    /// bytes. The default value is 0.
2362    pub tagLength: u32,
2363
2364    /// Specifies whether any tagged session should be accepted when acquiring a
2365    /// connection from a session pool, if no connection using the tag specified
2366    /// in the [`dpiConnCreateParams.tag`] is available. This value is only
2367    /// used when acquiring a connection from a session pool. The default value is
2368    /// 0.
2369    pub matchAnyTag: ::std::os::raw::c_int,
2370
2371    /// Specifies the tag of the connection that was acquired from a session pool,
2372    /// or NULL if the session was not tagged. This member is left untouched when
2373    /// creating a standalone connection and is filled in only if the connection
2374    /// acquired from the session pool was tagged. If filled in, it is a byte
2375    /// string in the encoding used for CHAR data.
2376    pub outTag: *const ::std::os::raw::c_char,
2377
2378    /// Specifies the length of the [`dpiConnCreateParams.outTag`]
2379    /// member, in bytes.
2380    pub outTagLength: u32,
2381
2382    /// Specifies if the connection created used the tag specified by the
2383    /// [`dpiConnCreateParams.tag`] member. It is only filled in if the
2384    /// connection was acquired from a session pool and a tag was initially
2385    /// specified.
2386    pub outTagFound: ::std::os::raw::c_int,
2387
2388    /// Specifies an array of [`dpiShardingKeyColumn`]
2389    /// structures which are used to identify which database shard should be
2390    /// connected to. The number of elements in the array is assumed to contain at
2391    /// least [`dpiConnCreateParams.numShardingKeyColumns`] elements.
2392    pub shardingKeyColumns: *mut dpiShardingKeyColumn,
2393
2394    /// Specifies the number of elements in the array of sharding key columns found
2395    /// in the member [`dpiConnCreateParams.shardingKeyColumns`].
2396    pub numShardingKeyColumns: u8,
2397
2398    /// Specifies an array of [`dpiShardingKeyColumn`]
2399    /// structures which are used to identify which database shard should be
2400    /// connected to. The number of elements in the array is assumed to contain at
2401    /// least [`dpiConnCreateParams.numSuperShardingKeyColumns`] elements.
2402    pub superShardingKeyColumns: *mut dpiShardingKeyColumn,
2403
2404    /// Specifies the number of elements in the array of sharding key columns found
2405    /// in the member [`dpiConnCreateParams.superShardingKeyColumns`].
2406    pub numSuperShardingKeyColumns: u8,
2407
2408    /// Specifies if the connection created was newly created by the session pool
2409    /// and has never been acquired from the pool (1) or not (0). It is only filled
2410    /// in if the connection was acquired from a session pool.
2411    pub outNewSession: ::std::os::raw::c_int,
2412}
2413#[test]
2414fn bindgen_test_layout_dpiConnCreateParams() {
2415    const UNINIT: ::std::mem::MaybeUninit<dpiConnCreateParams> = ::std::mem::MaybeUninit::uninit();
2416    let ptr = UNINIT.as_ptr();
2417    assert_eq!(
2418        ::std::mem::size_of::<dpiConnCreateParams>(),
2419        136usize,
2420        "Size of dpiConnCreateParams"
2421    );
2422    assert_eq!(
2423        ::std::mem::align_of::<dpiConnCreateParams>(),
2424        8usize,
2425        "Alignment of dpiConnCreateParams"
2426    );
2427    assert_eq!(
2428        unsafe { ::std::ptr::addr_of!((*ptr).authMode) as usize - ptr as usize },
2429        0usize,
2430        "Offset of field: dpiConnCreateParams::authMode"
2431    );
2432    assert_eq!(
2433        unsafe { ::std::ptr::addr_of!((*ptr).connectionClass) as usize - ptr as usize },
2434        8usize,
2435        "Offset of field: dpiConnCreateParams::connectionClass"
2436    );
2437    assert_eq!(
2438        unsafe { ::std::ptr::addr_of!((*ptr).connectionClassLength) as usize - ptr as usize },
2439        16usize,
2440        "Offset of field: dpiConnCreateParams::connectionClassLength"
2441    );
2442    assert_eq!(
2443        unsafe { ::std::ptr::addr_of!((*ptr).purity) as usize - ptr as usize },
2444        20usize,
2445        "Offset of field: dpiConnCreateParams::purity"
2446    );
2447    assert_eq!(
2448        unsafe { ::std::ptr::addr_of!((*ptr).newPassword) as usize - ptr as usize },
2449        24usize,
2450        "Offset of field: dpiConnCreateParams::newPassword"
2451    );
2452    assert_eq!(
2453        unsafe { ::std::ptr::addr_of!((*ptr).newPasswordLength) as usize - ptr as usize },
2454        32usize,
2455        "Offset of field: dpiConnCreateParams::newPasswordLength"
2456    );
2457    assert_eq!(
2458        unsafe { ::std::ptr::addr_of!((*ptr).appContext) as usize - ptr as usize },
2459        40usize,
2460        "Offset of field: dpiConnCreateParams::appContext"
2461    );
2462    assert_eq!(
2463        unsafe { ::std::ptr::addr_of!((*ptr).numAppContext) as usize - ptr as usize },
2464        48usize,
2465        "Offset of field: dpiConnCreateParams::numAppContext"
2466    );
2467    assert_eq!(
2468        unsafe { ::std::ptr::addr_of!((*ptr).externalAuth) as usize - ptr as usize },
2469        52usize,
2470        "Offset of field: dpiConnCreateParams::externalAuth"
2471    );
2472    assert_eq!(
2473        unsafe { ::std::ptr::addr_of!((*ptr).externalHandle) as usize - ptr as usize },
2474        56usize,
2475        "Offset of field: dpiConnCreateParams::externalHandle"
2476    );
2477    assert_eq!(
2478        unsafe { ::std::ptr::addr_of!((*ptr).pool) as usize - ptr as usize },
2479        64usize,
2480        "Offset of field: dpiConnCreateParams::pool"
2481    );
2482    assert_eq!(
2483        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
2484        72usize,
2485        "Offset of field: dpiConnCreateParams::tag"
2486    );
2487    assert_eq!(
2488        unsafe { ::std::ptr::addr_of!((*ptr).tagLength) as usize - ptr as usize },
2489        80usize,
2490        "Offset of field: dpiConnCreateParams::tagLength"
2491    );
2492    assert_eq!(
2493        unsafe { ::std::ptr::addr_of!((*ptr).matchAnyTag) as usize - ptr as usize },
2494        84usize,
2495        "Offset of field: dpiConnCreateParams::matchAnyTag"
2496    );
2497    assert_eq!(
2498        unsafe { ::std::ptr::addr_of!((*ptr).outTag) as usize - ptr as usize },
2499        88usize,
2500        "Offset of field: dpiConnCreateParams::outTag"
2501    );
2502    assert_eq!(
2503        unsafe { ::std::ptr::addr_of!((*ptr).outTagLength) as usize - ptr as usize },
2504        96usize,
2505        "Offset of field: dpiConnCreateParams::outTagLength"
2506    );
2507    assert_eq!(
2508        unsafe { ::std::ptr::addr_of!((*ptr).outTagFound) as usize - ptr as usize },
2509        100usize,
2510        "Offset of field: dpiConnCreateParams::outTagFound"
2511    );
2512    assert_eq!(
2513        unsafe { ::std::ptr::addr_of!((*ptr).shardingKeyColumns) as usize - ptr as usize },
2514        104usize,
2515        "Offset of field: dpiConnCreateParams::shardingKeyColumns"
2516    );
2517    assert_eq!(
2518        unsafe { ::std::ptr::addr_of!((*ptr).numShardingKeyColumns) as usize - ptr as usize },
2519        112usize,
2520        "Offset of field: dpiConnCreateParams::numShardingKeyColumns"
2521    );
2522    assert_eq!(
2523        unsafe { ::std::ptr::addr_of!((*ptr).superShardingKeyColumns) as usize - ptr as usize },
2524        120usize,
2525        "Offset of field: dpiConnCreateParams::superShardingKeyColumns"
2526    );
2527    assert_eq!(
2528        unsafe { ::std::ptr::addr_of!((*ptr).numSuperShardingKeyColumns) as usize - ptr as usize },
2529        128usize,
2530        "Offset of field: dpiConnCreateParams::numSuperShardingKeyColumns"
2531    );
2532    assert_eq!(
2533        unsafe { ::std::ptr::addr_of!((*ptr).outNewSession) as usize - ptr as usize },
2534        132usize,
2535        "Offset of field: dpiConnCreateParams::outNewSession"
2536    );
2537}
2538impl Default for dpiConnCreateParams {
2539    fn default() -> Self {
2540        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2541        unsafe {
2542            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2543            s.assume_init()
2544        }
2545    }
2546}
2547#[repr(C)]
2548#[derive(Debug, Copy, Clone)]
2549
2550/// This structure is used for passing information about a connection from ODPI-C.
2551/// It is used by the function [`dpiConn_getInfo()`].
2552pub struct dpiConnInfo {
2553
2554    /// A pointer to the name of the Oracle Database Domain name associated with
2555    /// the connection, encoded in the encoding used for CHAR data. This is the
2556    /// same value returned by the SQL expression
2557    /// `SELECT VALUE FROM V$PARAMETER WHERE NAME = 'db_domain'`.
2558    pub dbDomain: *const ::std::os::raw::c_char,
2559
2560    /// Contains the length of the [`dpiConnInfo.dbDomain`] member, in bytes.
2561    pub dbDomainLength: u32,
2562
2563    /// A pointer to the Oracle Database name associated with the connection,
2564    /// encoded in the encoding used for CHAR data. This is the same value returned
2565    /// by the SQL expression `SELECT NAME FROM V$DATABASE`. Note the values may
2566    /// have different cases.
2567    pub dbName: *const ::std::os::raw::c_char,
2568
2569    /// Contains the length of the [`dpiConnInfo.dbName`] member, in bytes.
2570    pub dbNameLength: u32,
2571
2572    /// A pointer to the Oracle Database instance name associated with the
2573    /// connection, encoded in the encoding used for CHAR data. This is the same
2574    /// value returned by the SQL expression
2575    /// `SELECT SYS_CONTEXT('USERENV', 'INSTANCE_NAME') FROM DUAL`. Note the
2576    /// values may have different cases.
2577    pub instanceName: *const ::std::os::raw::c_char,
2578
2579    /// Contains the length of the [`dpiConnInfo.instanceName`] member, in
2580    /// bytes.
2581    pub instanceNameLength: u32,
2582
2583    /// A pointer to the Oracle Database service name associated with the
2584    /// connection, encoded in the encoding used for CHAR data. This is the same
2585    /// value returned by the SQL expression
2586    /// `SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') FROM DUAL`.
2587    pub serviceName: *const ::std::os::raw::c_char,
2588
2589    /// Contains the length of the [`dpiConnInfo.serviceName`] member, in
2590    /// bytes.
2591    pub serviceNameLength: u32,
2592
2593    /// Specifies the maximum length of identifiers (in bytes) supported by the
2594    /// database to which the connection has been established. See [Database Object
2595    /// Naming Rules](https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-75337742-67FD-4EC0-985F-741C93D918DA). The value
2596    /// may be 0, 30, or 128. The value 0 indicates the size cannot be reliably
2597    /// determined by ODPI-C, which occurs when using Oracle Client libraries 12.1
2598    /// (or older) and also connected to Oracle Database 12.2, or later.
2599    pub maxIdentifierLength: u32,
2600
2601    /// Specifies the maximum number of cursors that can be opened. This is the
2602    /// same value returned by the SQL expression
2603    /// `SELECT VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors'`.
2604    pub maxOpenCursors: u32,
2605
2606    /// Specifies the type of server process used by the connection. This value
2607    /// will be one of the values in the enumeration
2608    /// [`dpiServerType`].
2609    pub serverType: u8,
2610}
2611#[test]
2612fn bindgen_test_layout_dpiConnInfo() {
2613    const UNINIT: ::std::mem::MaybeUninit<dpiConnInfo> = ::std::mem::MaybeUninit::uninit();
2614    let ptr = UNINIT.as_ptr();
2615    assert_eq!(
2616        ::std::mem::size_of::<dpiConnInfo>(),
2617        72usize,
2618        "Size of dpiConnInfo"
2619    );
2620    assert_eq!(
2621        ::std::mem::align_of::<dpiConnInfo>(),
2622        8usize,
2623        "Alignment of dpiConnInfo"
2624    );
2625    assert_eq!(
2626        unsafe { ::std::ptr::addr_of!((*ptr).dbDomain) as usize - ptr as usize },
2627        0usize,
2628        "Offset of field: dpiConnInfo::dbDomain"
2629    );
2630    assert_eq!(
2631        unsafe { ::std::ptr::addr_of!((*ptr).dbDomainLength) as usize - ptr as usize },
2632        8usize,
2633        "Offset of field: dpiConnInfo::dbDomainLength"
2634    );
2635    assert_eq!(
2636        unsafe { ::std::ptr::addr_of!((*ptr).dbName) as usize - ptr as usize },
2637        16usize,
2638        "Offset of field: dpiConnInfo::dbName"
2639    );
2640    assert_eq!(
2641        unsafe { ::std::ptr::addr_of!((*ptr).dbNameLength) as usize - ptr as usize },
2642        24usize,
2643        "Offset of field: dpiConnInfo::dbNameLength"
2644    );
2645    assert_eq!(
2646        unsafe { ::std::ptr::addr_of!((*ptr).instanceName) as usize - ptr as usize },
2647        32usize,
2648        "Offset of field: dpiConnInfo::instanceName"
2649    );
2650    assert_eq!(
2651        unsafe { ::std::ptr::addr_of!((*ptr).instanceNameLength) as usize - ptr as usize },
2652        40usize,
2653        "Offset of field: dpiConnInfo::instanceNameLength"
2654    );
2655    assert_eq!(
2656        unsafe { ::std::ptr::addr_of!((*ptr).serviceName) as usize - ptr as usize },
2657        48usize,
2658        "Offset of field: dpiConnInfo::serviceName"
2659    );
2660    assert_eq!(
2661        unsafe { ::std::ptr::addr_of!((*ptr).serviceNameLength) as usize - ptr as usize },
2662        56usize,
2663        "Offset of field: dpiConnInfo::serviceNameLength"
2664    );
2665    assert_eq!(
2666        unsafe { ::std::ptr::addr_of!((*ptr).maxIdentifierLength) as usize - ptr as usize },
2667        60usize,
2668        "Offset of field: dpiConnInfo::maxIdentifierLength"
2669    );
2670    assert_eq!(
2671        unsafe { ::std::ptr::addr_of!((*ptr).maxOpenCursors) as usize - ptr as usize },
2672        64usize,
2673        "Offset of field: dpiConnInfo::maxOpenCursors"
2674    );
2675    assert_eq!(
2676        unsafe { ::std::ptr::addr_of!((*ptr).serverType) as usize - ptr as usize },
2677        68usize,
2678        "Offset of field: dpiConnInfo::serverType"
2679    );
2680}
2681impl Default for dpiConnInfo {
2682    fn default() -> Self {
2683        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2684        unsafe {
2685            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2686            s.assume_init()
2687        }
2688    }
2689}
2690#[repr(C)]
2691#[derive(Debug, Copy, Clone)]
2692
2693/// This structure is used for specifying parameters when creating an ODPI-C
2694/// context by calling [`dpiContext_createWithParams()`].
2695pub struct dpiContextCreateParams {
2696
2697    /// A null-terminated string defining the default driver name to use when
2698    /// creating pools or standalone connections.
2699    /// 
2700    /// The standard is to set this value to `"<name> : <version>"`, where &lt;name&gt;
2701    /// is the name of the driver and &lt;version&gt; is its version. There should be a
2702    /// single space character before and after the colon.
2703    /// 
2704    /// This value is shown in database views that give information about
2705    /// connections. For example, it is in the `CLIENT_DRIVER` column
2706    /// of `V$SESSION_CONNECT_INFO`.
2707    /// 
2708    /// If this member is NULL, then the default value will be the value of
2709    /// `DPI_DEFAULT_DRIVER_NAME` from [dpi.h](https://github.com/oracle/odpi/blob/main/include/dpi.h).
2710    /// 
2711    /// This member is propagated to the [`dpiCommonCreateParams.driverName`]
2712    /// and [`dpiCommonCreateParams.driverNameLength`] members when the
2713    /// function [`dpiContext_initCommonCreateParams()`] is called.
2714    pub defaultDriverName: *const ::std::os::raw::c_char,
2715
2716    /// A null-terminated string defining the default encoding to use for all
2717    /// string data (including NCHAR, NVARCHAR2 and NCLOB data) passed into or
2718    /// returned from the database.
2719    /// 
2720    /// If this member is NULL, then the default value will be “UTF-8”. The Oracle
2721    /// equivalent of this is “AL32UTF8”.
2722    /// 
2723    /// This member is propagated to the [`dpiCommonCreateParams.encoding`]
2724    /// and [`dpiCommonCreateParams.nencoding`] members when the
2725    /// function [`dpiContext_initCommonCreateParams()`] is called.
2726    pub defaultEncoding: *const ::std::os::raw::c_char,
2727
2728    /// A null-terminated UTF-8 encoded string defining the URL that should be
2729    /// provided in the error message returned when the Oracle Client library
2730    /// cannot be loaded. This URL should direct the user to the installation
2731    /// instructions for the application or driver using ODPI-C. If this value is
2732    /// NULL then the default ODPI-C URL is provided in the error message instead.
2733    pub loadErrorUrl: *const ::std::os::raw::c_char,
2734
2735    /// A null-terminated UTF-8 encoded string defining the location from which to
2736    /// load the Oracle Client library. If this value is not NULL it is the only
2737    /// location that is searched; otherwise, if this value is NULL the Oracle
2738    /// Client library is searched for in the usual fashion as noted in
2739    /// [`Oracle Client Library Loading`]. Also see that
2740    /// section for limitations on using this member.
2741    pub oracleClientLibDir: *const ::std::os::raw::c_char,
2742
2743    /// A null-terminated UTF-8 encoded string defining the location the Oracle
2744    /// client library will search for configuration files. This is equivalent to
2745    /// setting the environment variable `TNS_ADMIN`. If this value is not NULL,
2746    /// it overrides any value set by the environment variable `TNS_ADMIN`.
2747    pub oracleClientConfigDir: *const ::std::os::raw::c_char,
2748
2749    /// A boolean value indicating whether or not to use JSON descriptors with
2750    /// SODA. This requires Oracle Client 23.4 or higher and setting this value to
2751    /// 1 in earlier versions will simply be ignored. Once a call to
2752    /// [`dpiContext_createWithParams()`] is made with this structure, this
2753    /// member will be cleared if JSON descriptors cannot be used.
2754    pub sodaUseJsonDesc: ::std::os::raw::c_int,
2755
2756    /// A boolean value indicating whether or not to treat JSON ID values
2757    /// distinctly from other binary data.
2758    pub useJsonId: ::std::os::raw::c_int,
2759}
2760#[test]
2761fn bindgen_test_layout_dpiContextCreateParams() {
2762    const UNINIT: ::std::mem::MaybeUninit<dpiContextCreateParams> =
2763        ::std::mem::MaybeUninit::uninit();
2764    let ptr = UNINIT.as_ptr();
2765    assert_eq!(
2766        ::std::mem::size_of::<dpiContextCreateParams>(),
2767        48usize,
2768        "Size of dpiContextCreateParams"
2769    );
2770    assert_eq!(
2771        ::std::mem::align_of::<dpiContextCreateParams>(),
2772        8usize,
2773        "Alignment of dpiContextCreateParams"
2774    );
2775    assert_eq!(
2776        unsafe { ::std::ptr::addr_of!((*ptr).defaultDriverName) as usize - ptr as usize },
2777        0usize,
2778        "Offset of field: dpiContextCreateParams::defaultDriverName"
2779    );
2780    assert_eq!(
2781        unsafe { ::std::ptr::addr_of!((*ptr).defaultEncoding) as usize - ptr as usize },
2782        8usize,
2783        "Offset of field: dpiContextCreateParams::defaultEncoding"
2784    );
2785    assert_eq!(
2786        unsafe { ::std::ptr::addr_of!((*ptr).loadErrorUrl) as usize - ptr as usize },
2787        16usize,
2788        "Offset of field: dpiContextCreateParams::loadErrorUrl"
2789    );
2790    assert_eq!(
2791        unsafe { ::std::ptr::addr_of!((*ptr).oracleClientLibDir) as usize - ptr as usize },
2792        24usize,
2793        "Offset of field: dpiContextCreateParams::oracleClientLibDir"
2794    );
2795    assert_eq!(
2796        unsafe { ::std::ptr::addr_of!((*ptr).oracleClientConfigDir) as usize - ptr as usize },
2797        32usize,
2798        "Offset of field: dpiContextCreateParams::oracleClientConfigDir"
2799    );
2800    assert_eq!(
2801        unsafe { ::std::ptr::addr_of!((*ptr).sodaUseJsonDesc) as usize - ptr as usize },
2802        40usize,
2803        "Offset of field: dpiContextCreateParams::sodaUseJsonDesc"
2804    );
2805    assert_eq!(
2806        unsafe { ::std::ptr::addr_of!((*ptr).useJsonId) as usize - ptr as usize },
2807        44usize,
2808        "Offset of field: dpiContextCreateParams::useJsonId"
2809    );
2810}
2811impl Default for dpiContextCreateParams {
2812    fn default() -> Self {
2813        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2814        unsafe {
2815            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2816            s.assume_init()
2817        }
2818    }
2819}
2820#[repr(C)]
2821#[derive(Copy, Clone)]
2822
2823/// This structure is used for passing data to and from the database in variables
2824/// and for getting and setting object attributes and collection values. The data
2825/// that is stored in the structure will remain valid for differing durations
2826/// depending on the source of the data.
2827/// 
2828/// For data that is supplied by the application (for passing data into the
2829/// database) the duration of the data is under the control of the application
2830/// itself and the application should ensure that it remains valid for as long as
2831/// any call that uses that data.
2832/// 
2833/// For data that is supplied by the database in a variable (either fetching data
2834/// or binding data out) the data will remain valid as long as a reference to the
2835/// variable is retained; the contents of the data may change however if a
2836/// statement to which the variable is bound or defined is executed or fetched
2837/// again.
2838/// 
2839/// For data that is acquired from an object attribute or a collection element the
2840/// data will remain valid as long as a reference to the object is retained; the
2841/// contents of the data may change however if the object is modified.
2842pub struct dpiData {
2843
2844    /// Specifies if the value refers to a null value (1) or not (0).
2845    pub isNull: ::std::os::raw::c_int,
2846
2847    /// Specifies the value that is being passed or received. It is only examined
2848    /// when the member [`dpiData.isNull`] is 0. It is a union of type
2849    /// [`dpiDataBuffer`].
2850    pub value: dpiDataBuffer,
2851}
2852#[test]
2853fn bindgen_test_layout_dpiData() {
2854    const UNINIT: ::std::mem::MaybeUninit<dpiData> = ::std::mem::MaybeUninit::uninit();
2855    let ptr = UNINIT.as_ptr();
2856    assert_eq!(::std::mem::size_of::<dpiData>(), 48usize, "Size of dpiData");
2857    assert_eq!(
2858        ::std::mem::align_of::<dpiData>(),
2859        8usize,
2860        "Alignment of dpiData"
2861    );
2862    assert_eq!(
2863        unsafe { ::std::ptr::addr_of!((*ptr).isNull) as usize - ptr as usize },
2864        0usize,
2865        "Offset of field: dpiData::isNull"
2866    );
2867    assert_eq!(
2868        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
2869        8usize,
2870        "Offset of field: dpiData::value"
2871    );
2872}
2873impl Default for dpiData {
2874    fn default() -> Self {
2875        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2876        unsafe {
2877            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2878            s.assume_init()
2879        }
2880    }
2881}
2882#[repr(C)]
2883#[derive(Debug, Copy, Clone)]
2884
2885/// This structure is used for passing data type information from ODPI-C. It is
2886/// part of the structures [`dpiObjectAttrInfo`],
2887/// [`dpiObjectTypeInfo`] and
2888/// [`dpiQueryInfo`].
2889pub struct dpiDataTypeInfo {
2890
2891    /// Specifies the type of the data. It will be one of the values from the
2892    /// enumeration [`dpiOracleTypeNum`], or 0 if the type
2893    /// is not supported by ODPI-C.
2894    pub oracleTypeNum: dpiOracleTypeNum,
2895
2896    /// Specifies the default native type for the data. It will be one of the
2897    /// values from the enumeration [`dpiNativeTypeNum`], or 0
2898    /// if the type is not supported by ODPI-C.
2899    pub defaultNativeTypeNum: dpiNativeTypeNum,
2900
2901    /// Specifies the OCI type code for the data, which can be useful if the type
2902    /// is not supported by ODPI-C.
2903    pub ociTypeCode: u16,
2904
2905    /// Specifies the size in bytes (from the database’s perspective) of the data.
2906    /// This value is only populated for strings and binary data. For all other
2907    /// data the value is zero.
2908    pub dbSizeInBytes: u32,
2909
2910    /// Specifies the size in bytes (from the client’s perspective) of the data.
2911    /// This value is only populated for strings and binary data. For all other
2912    /// data the value is zero.
2913    pub clientSizeInBytes: u32,
2914
2915    /// Specifies the size in characters of the data. This value is only populated
2916    /// for string data. For all other data the value is zero.
2917    pub sizeInChars: u32,
2918
2919    /// Specifies the precision of the data. This value is only populated for
2920    /// numeric and interval data. For all other data the value is zero.
2921    pub precision: i16,
2922
2923    /// Specifies the scale of the data. This value is only populated for numeric
2924    /// data. For all other data the value is zero.
2925    pub scale: i8,
2926
2927    /// Specifies the fractional seconds precision of the data. This value is only
2928    /// populated for timestamp and interval day to second data. For all other
2929    /// data the value is zero.
2930    pub fsPrecision: u8,
2931
2932    /// Specifies a reference to the type of the object. This value is only
2933    /// populated for named type data. For all other data the value is NULL. This
2934    /// reference is owned by the object attribute, object type or statement and a
2935    /// call to [`dpiObjectType_addRef()`] must be made if the reference is
2936    /// going to be used beyond the lifetime of the owning object.
2937    pub objectType: *mut dpiObjectType,
2938
2939    /// Specifies if the data contains JSON. This is set to true when columns are
2940    /// fetched that are of type `DPI_ORACLE_TYPE_JSON` or if the column fetched
2941    /// has the check constraint “IS JSON” enabled.
2942    pub isJson: ::std::os::raw::c_int,
2943
2944    /// Specifies the schema of the [SQL domain](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/create-domain.html#GUID-17D3A9C6-D993-4E94-BF6B-CACA56581F41)
2945    /// associated with the column which is being queried, as a byte string in the
2946    /// encoding used for CHAR data.
2947    pub domainSchema: *const ::std::os::raw::c_char,
2948
2949    /// Specifies the length of the [`dpiDataTypeInfo.domainSchema`] member,
2950    /// in bytes.
2951    pub domainSchemaLength: u32,
2952
2953    /// Specifies the name of the [SQL domain](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/create-domain.html#GUID-17D3A9C6-D993-4E94-BF6B-CACA56581F41)
2954    /// associated with the column which is being queried, as a byte string in the
2955    /// encoding used for CHAR data.
2956    pub domainName: *const ::std::os::raw::c_char,
2957
2958    /// Specifies the length of the [`dpiDataTypeInfo.domainName`] member,
2959    /// in bytes.
2960    pub domainNameLength: u32,
2961
2962    /// Specifies the number of annotations associated with the column which is
2963    /// being fetched.  It is the length of [`dpiDataTypeInfo.annotations`].
2964    pub numAnnotations: u32,
2965
2966    /// Specifies an array of structures of type
2967    /// [`dpiAnnotation`]. The length of the array is specified
2968    /// in the [`dpiDataTypeInfo.numAnnotations`] member.
2969    pub annotations: *mut dpiAnnotation,
2970
2971    /// Specifies if the data contains binary encoded OSON. This is set to true
2972    /// when columns are fetched that have the check constraint “IS JSON FORMAT
2973    /// OSON” enabled.
2974    pub isOson: ::std::os::raw::c_int,
2975
2976    /// Specifies the number of dimensions that a vector column contains. This
2977    /// value will be 0 if [`dpiDataTypeInfo.oracleTypeNum`] is not
2978    /// DPI_ORACLE_TYPE_VECTOR or the vector columns uses a flexible number of
2979    /// dimensions.
2980    pub vectorDimensions: u32,
2981
2982    /// Specifies the storage format of the vector column. This value will be 0 if
2983    /// [`dpiDataTypeInfo.oracleTypeNum`] is not DPI_ORACLE_TYPE_VECTOR or
2984    /// the vector column uses a flexible storage format. If a value is set it will
2985    /// be one of the values in the eneumeration
2986    /// [`dpiVectorFormat`].
2987    pub vectorFormat: u8,
2988
2989    /// Specifies flags for the vector column. This value will be 0 if
2990    /// [`dpiDataTypeInfo.oracleTypeNum`] is not DPI_ORACLE_TYPE_VECTOR or
2991    /// no flags have been set. If flags have been set, they will be one or more of
2992    /// the values in the enumeration [`dpiVectorFlags`], or’ed
2993    /// together.
2994    pub vectorFlags: u8,
2995}
2996#[test]
2997fn bindgen_test_layout_dpiDataTypeInfo() {
2998    const UNINIT: ::std::mem::MaybeUninit<dpiDataTypeInfo> = ::std::mem::MaybeUninit::uninit();
2999    let ptr = UNINIT.as_ptr();
3000    assert_eq!(
3001        ::std::mem::size_of::<dpiDataTypeInfo>(),
3002        104usize,
3003        "Size of dpiDataTypeInfo"
3004    );
3005    assert_eq!(
3006        ::std::mem::align_of::<dpiDataTypeInfo>(),
3007        8usize,
3008        "Alignment of dpiDataTypeInfo"
3009    );
3010    assert_eq!(
3011        unsafe { ::std::ptr::addr_of!((*ptr).oracleTypeNum) as usize - ptr as usize },
3012        0usize,
3013        "Offset of field: dpiDataTypeInfo::oracleTypeNum"
3014    );
3015    assert_eq!(
3016        unsafe { ::std::ptr::addr_of!((*ptr).defaultNativeTypeNum) as usize - ptr as usize },
3017        4usize,
3018        "Offset of field: dpiDataTypeInfo::defaultNativeTypeNum"
3019    );
3020    assert_eq!(
3021        unsafe { ::std::ptr::addr_of!((*ptr).ociTypeCode) as usize - ptr as usize },
3022        8usize,
3023        "Offset of field: dpiDataTypeInfo::ociTypeCode"
3024    );
3025    assert_eq!(
3026        unsafe { ::std::ptr::addr_of!((*ptr).dbSizeInBytes) as usize - ptr as usize },
3027        12usize,
3028        "Offset of field: dpiDataTypeInfo::dbSizeInBytes"
3029    );
3030    assert_eq!(
3031        unsafe { ::std::ptr::addr_of!((*ptr).clientSizeInBytes) as usize - ptr as usize },
3032        16usize,
3033        "Offset of field: dpiDataTypeInfo::clientSizeInBytes"
3034    );
3035    assert_eq!(
3036        unsafe { ::std::ptr::addr_of!((*ptr).sizeInChars) as usize - ptr as usize },
3037        20usize,
3038        "Offset of field: dpiDataTypeInfo::sizeInChars"
3039    );
3040    assert_eq!(
3041        unsafe { ::std::ptr::addr_of!((*ptr).precision) as usize - ptr as usize },
3042        24usize,
3043        "Offset of field: dpiDataTypeInfo::precision"
3044    );
3045    assert_eq!(
3046        unsafe { ::std::ptr::addr_of!((*ptr).scale) as usize - ptr as usize },
3047        26usize,
3048        "Offset of field: dpiDataTypeInfo::scale"
3049    );
3050    assert_eq!(
3051        unsafe { ::std::ptr::addr_of!((*ptr).fsPrecision) as usize - ptr as usize },
3052        27usize,
3053        "Offset of field: dpiDataTypeInfo::fsPrecision"
3054    );
3055    assert_eq!(
3056        unsafe { ::std::ptr::addr_of!((*ptr).objectType) as usize - ptr as usize },
3057        32usize,
3058        "Offset of field: dpiDataTypeInfo::objectType"
3059    );
3060    assert_eq!(
3061        unsafe { ::std::ptr::addr_of!((*ptr).isJson) as usize - ptr as usize },
3062        40usize,
3063        "Offset of field: dpiDataTypeInfo::isJson"
3064    );
3065    assert_eq!(
3066        unsafe { ::std::ptr::addr_of!((*ptr).domainSchema) as usize - ptr as usize },
3067        48usize,
3068        "Offset of field: dpiDataTypeInfo::domainSchema"
3069    );
3070    assert_eq!(
3071        unsafe { ::std::ptr::addr_of!((*ptr).domainSchemaLength) as usize - ptr as usize },
3072        56usize,
3073        "Offset of field: dpiDataTypeInfo::domainSchemaLength"
3074    );
3075    assert_eq!(
3076        unsafe { ::std::ptr::addr_of!((*ptr).domainName) as usize - ptr as usize },
3077        64usize,
3078        "Offset of field: dpiDataTypeInfo::domainName"
3079    );
3080    assert_eq!(
3081        unsafe { ::std::ptr::addr_of!((*ptr).domainNameLength) as usize - ptr as usize },
3082        72usize,
3083        "Offset of field: dpiDataTypeInfo::domainNameLength"
3084    );
3085    assert_eq!(
3086        unsafe { ::std::ptr::addr_of!((*ptr).numAnnotations) as usize - ptr as usize },
3087        76usize,
3088        "Offset of field: dpiDataTypeInfo::numAnnotations"
3089    );
3090    assert_eq!(
3091        unsafe { ::std::ptr::addr_of!((*ptr).annotations) as usize - ptr as usize },
3092        80usize,
3093        "Offset of field: dpiDataTypeInfo::annotations"
3094    );
3095    assert_eq!(
3096        unsafe { ::std::ptr::addr_of!((*ptr).isOson) as usize - ptr as usize },
3097        88usize,
3098        "Offset of field: dpiDataTypeInfo::isOson"
3099    );
3100    assert_eq!(
3101        unsafe { ::std::ptr::addr_of!((*ptr).vectorDimensions) as usize - ptr as usize },
3102        92usize,
3103        "Offset of field: dpiDataTypeInfo::vectorDimensions"
3104    );
3105    assert_eq!(
3106        unsafe { ::std::ptr::addr_of!((*ptr).vectorFormat) as usize - ptr as usize },
3107        96usize,
3108        "Offset of field: dpiDataTypeInfo::vectorFormat"
3109    );
3110    assert_eq!(
3111        unsafe { ::std::ptr::addr_of!((*ptr).vectorFlags) as usize - ptr as usize },
3112        97usize,
3113        "Offset of field: dpiDataTypeInfo::vectorFlags"
3114    );
3115}
3116impl Default for dpiDataTypeInfo {
3117    fn default() -> Self {
3118        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3119        unsafe {
3120            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3121            s.assume_init()
3122        }
3123    }
3124}
3125#[repr(C)]
3126#[derive(Debug, Copy, Clone)]
3127
3128/// This structure is used when creating connection pools and standalone
3129/// connections using token based authentication. Oracle Client libraries
3130/// must be 19.14 (or later), or 21.5 (or later).
3131/// 
3132/// The externalAuth must be set to 1 and in addition, homogeneous must be
3133/// set to 1 when creating a pool. The user (or username) and password properties
3134/// should not be set.
3135/// 
3136/// Both token and privateKey (and their lengths) must be set while using IAM
3137/// for token based authentication.
3138/// 
3139/// Only token and it’s length must be set while using OAuth for token based
3140/// authentication.
3141pub struct dpiAccessToken {
3142
3143    /// Specifies the database authentication token string used for token based
3144    /// authentication.
3145    pub token: *const ::std::os::raw::c_char,
3146
3147    /// Specifies the database authentication token string length used for token
3148    /// based authentication.
3149    pub tokenLength: u32,
3150
3151    /// Specifies the database authentication private key string used for token
3152    /// based authentication.
3153    pub privateKey: *const ::std::os::raw::c_char,
3154
3155    /// Specifies the database authentication private key string length used for
3156    /// token based authentication.
3157    pub privateKeyLength: u32,
3158}
3159#[test]
3160fn bindgen_test_layout_dpiAccessToken() {
3161    const UNINIT: ::std::mem::MaybeUninit<dpiAccessToken> = ::std::mem::MaybeUninit::uninit();
3162    let ptr = UNINIT.as_ptr();
3163    assert_eq!(
3164        ::std::mem::size_of::<dpiAccessToken>(),
3165        32usize,
3166        "Size of dpiAccessToken"
3167    );
3168    assert_eq!(
3169        ::std::mem::align_of::<dpiAccessToken>(),
3170        8usize,
3171        "Alignment of dpiAccessToken"
3172    );
3173    assert_eq!(
3174        unsafe { ::std::ptr::addr_of!((*ptr).token) as usize - ptr as usize },
3175        0usize,
3176        "Offset of field: dpiAccessToken::token"
3177    );
3178    assert_eq!(
3179        unsafe { ::std::ptr::addr_of!((*ptr).tokenLength) as usize - ptr as usize },
3180        8usize,
3181        "Offset of field: dpiAccessToken::tokenLength"
3182    );
3183    assert_eq!(
3184        unsafe { ::std::ptr::addr_of!((*ptr).privateKey) as usize - ptr as usize },
3185        16usize,
3186        "Offset of field: dpiAccessToken::privateKey"
3187    );
3188    assert_eq!(
3189        unsafe { ::std::ptr::addr_of!((*ptr).privateKeyLength) as usize - ptr as usize },
3190        24usize,
3191        "Offset of field: dpiAccessToken::privateKeyLength"
3192    );
3193}
3194impl Default for dpiAccessToken {
3195    fn default() -> Self {
3196        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3197        unsafe {
3198            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3199            s.assume_init()
3200        }
3201    }
3202}
3203#[repr(C)]
3204#[derive(Debug, Copy, Clone)]
3205
3206/// This structure is used for transferring encoding information from ODPI-C. All of
3207/// the information here remains valid as long as a reference is held to the
3208/// standalone connection (by calling [`dpiConn_getEncodingInfo()`]) or session
3209/// pool (by calling [`dpiPool_getEncodingInfo()`]) from which the information
3210/// was taken.
3211pub struct dpiEncodingInfo {
3212
3213    /// The encoding used for CHAR data, as a null-terminated ASCII string.
3214    pub encoding: *const ::std::os::raw::c_char,
3215
3216    /// The maximum number of bytes required for each character in the encoding
3217    /// used for CHAR data. This value is used when calculating the size of
3218    /// buffers required when lengths in characters are provided.
3219    pub maxBytesPerCharacter: i32,
3220
3221    /// The encoding used for NCHAR data, as a null-terminated ASCII string.
3222    pub nencoding: *const ::std::os::raw::c_char,
3223
3224    /// The maximum number of bytes required for each character in the encoding
3225    /// used for NCHAR data. Since this information is not directly available
3226    /// from Oracle it is only accurate if the encodings used for CHAR and NCHAR
3227    /// data are identical or one of ASCII or UTF-8; otherwise a value of 4 is
3228    /// assumed. This value is used when calculating the size of buffers required
3229    /// when lengths in characters are provided.
3230    pub nmaxBytesPerCharacter: i32,
3231}
3232#[test]
3233fn bindgen_test_layout_dpiEncodingInfo() {
3234    const UNINIT: ::std::mem::MaybeUninit<dpiEncodingInfo> = ::std::mem::MaybeUninit::uninit();
3235    let ptr = UNINIT.as_ptr();
3236    assert_eq!(
3237        ::std::mem::size_of::<dpiEncodingInfo>(),
3238        32usize,
3239        "Size of dpiEncodingInfo"
3240    );
3241    assert_eq!(
3242        ::std::mem::align_of::<dpiEncodingInfo>(),
3243        8usize,
3244        "Alignment of dpiEncodingInfo"
3245    );
3246    assert_eq!(
3247        unsafe { ::std::ptr::addr_of!((*ptr).encoding) as usize - ptr as usize },
3248        0usize,
3249        "Offset of field: dpiEncodingInfo::encoding"
3250    );
3251    assert_eq!(
3252        unsafe { ::std::ptr::addr_of!((*ptr).maxBytesPerCharacter) as usize - ptr as usize },
3253        8usize,
3254        "Offset of field: dpiEncodingInfo::maxBytesPerCharacter"
3255    );
3256    assert_eq!(
3257        unsafe { ::std::ptr::addr_of!((*ptr).nencoding) as usize - ptr as usize },
3258        16usize,
3259        "Offset of field: dpiEncodingInfo::nencoding"
3260    );
3261    assert_eq!(
3262        unsafe { ::std::ptr::addr_of!((*ptr).nmaxBytesPerCharacter) as usize - ptr as usize },
3263        24usize,
3264        "Offset of field: dpiEncodingInfo::nmaxBytesPerCharacter"
3265    );
3266}
3267impl Default for dpiEncodingInfo {
3268    fn default() -> Self {
3269        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3270        unsafe {
3271            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3272            s.assume_init()
3273        }
3274    }
3275}
3276#[repr(C)]
3277#[derive(Debug, Copy, Clone)]
3278
3279/// This structure is used for transferring error information from ODPI-C. All of the
3280/// strings referenced here may become invalid as soon as the next ODPI-C call is
3281/// made.
3282pub struct dpiErrorInfo {
3283
3284    /// The OCI error code if an OCI error has taken place. If no OCI error has
3285    /// taken place the value is 0.
3286    pub code: i32,
3287
3288    /// The 16-bit value of [`dpiErrorInfo.offset`] retained for backwards
3289    /// compatibility. This member will be removed at some point in the future.
3290    pub offset16: u16,
3291
3292    /// The error message as a byte string in the encoding specified by the
3293    /// [`dpiErrorInfo.encoding`] member.
3294    pub message: *const ::std::os::raw::c_char,
3295
3296    /// The length of the [`dpiErrorInfo.message`] member, in bytes.
3297    pub messageLength: u32,
3298
3299    /// The encoding in which the error message is encoded as a null-terminated
3300    /// string. For OCI errors this is the CHAR encoding used when the connection
3301    /// was created. For ODPI-C specific errors this is UTF-8.
3302    pub encoding: *const ::std::os::raw::c_char,
3303
3304    /// The public ODPI-C function name which was called in which the error took
3305    /// place. This is a null-terminated ASCII string.
3306    pub fnName: *const ::std::os::raw::c_char,
3307
3308    /// The internal action that was being performed when the error took place.
3309    /// This is a null-terminated ASCII string.
3310    pub action: *const ::std::os::raw::c_char,
3311
3312    /// The SQLSTATE code associated with the error. This is a 5 character
3313    /// null-terminated string.
3314    pub sqlState: *const ::std::os::raw::c_char,
3315
3316    /// A boolean value indicating if the error is recoverable. This member always
3317    /// has a value of 0 unless both client and server are at release 12.1 or
3318    /// higher.
3319    pub isRecoverable: ::std::os::raw::c_int,
3320
3321    /// A boolean value indicating if the error information is for a warning
3322    /// returned by Oracle that does not prevent the requested operation from
3323    /// proceeding. Examples include connecting to the database with a password
3324    /// that is about to expire (within the grace period) and creating a stored
3325    /// procedure with compilation errors.
3326    pub isWarning: ::std::os::raw::c_int,
3327
3328    /// The parse error offset (in bytes) when executing a statement or the row
3329    /// offset when performing bulk operations or fetching batch error information.
3330    /// If neither of these cases are true, the value is 0.
3331    pub offset: u32,
3332}
3333#[test]
3334fn bindgen_test_layout_dpiErrorInfo() {
3335    const UNINIT: ::std::mem::MaybeUninit<dpiErrorInfo> = ::std::mem::MaybeUninit::uninit();
3336    let ptr = UNINIT.as_ptr();
3337    assert_eq!(
3338        ::std::mem::size_of::<dpiErrorInfo>(),
3339        72usize,
3340        "Size of dpiErrorInfo"
3341    );
3342    assert_eq!(
3343        ::std::mem::align_of::<dpiErrorInfo>(),
3344        8usize,
3345        "Alignment of dpiErrorInfo"
3346    );
3347    assert_eq!(
3348        unsafe { ::std::ptr::addr_of!((*ptr).code) as usize - ptr as usize },
3349        0usize,
3350        "Offset of field: dpiErrorInfo::code"
3351    );
3352    assert_eq!(
3353        unsafe { ::std::ptr::addr_of!((*ptr).offset16) as usize - ptr as usize },
3354        4usize,
3355        "Offset of field: dpiErrorInfo::offset16"
3356    );
3357    assert_eq!(
3358        unsafe { ::std::ptr::addr_of!((*ptr).message) as usize - ptr as usize },
3359        8usize,
3360        "Offset of field: dpiErrorInfo::message"
3361    );
3362    assert_eq!(
3363        unsafe { ::std::ptr::addr_of!((*ptr).messageLength) as usize - ptr as usize },
3364        16usize,
3365        "Offset of field: dpiErrorInfo::messageLength"
3366    );
3367    assert_eq!(
3368        unsafe { ::std::ptr::addr_of!((*ptr).encoding) as usize - ptr as usize },
3369        24usize,
3370        "Offset of field: dpiErrorInfo::encoding"
3371    );
3372    assert_eq!(
3373        unsafe { ::std::ptr::addr_of!((*ptr).fnName) as usize - ptr as usize },
3374        32usize,
3375        "Offset of field: dpiErrorInfo::fnName"
3376    );
3377    assert_eq!(
3378        unsafe { ::std::ptr::addr_of!((*ptr).action) as usize - ptr as usize },
3379        40usize,
3380        "Offset of field: dpiErrorInfo::action"
3381    );
3382    assert_eq!(
3383        unsafe { ::std::ptr::addr_of!((*ptr).sqlState) as usize - ptr as usize },
3384        48usize,
3385        "Offset of field: dpiErrorInfo::sqlState"
3386    );
3387    assert_eq!(
3388        unsafe { ::std::ptr::addr_of!((*ptr).isRecoverable) as usize - ptr as usize },
3389        56usize,
3390        "Offset of field: dpiErrorInfo::isRecoverable"
3391    );
3392    assert_eq!(
3393        unsafe { ::std::ptr::addr_of!((*ptr).isWarning) as usize - ptr as usize },
3394        60usize,
3395        "Offset of field: dpiErrorInfo::isWarning"
3396    );
3397    assert_eq!(
3398        unsafe { ::std::ptr::addr_of!((*ptr).offset) as usize - ptr as usize },
3399        64usize,
3400        "Offset of field: dpiErrorInfo::offset"
3401    );
3402}
3403impl Default for dpiErrorInfo {
3404    fn default() -> Self {
3405        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3406        unsafe {
3407            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3408            s.assume_init()
3409        }
3410    }
3411}
3412#[repr(C)]
3413#[derive(Debug, Copy, Clone)]
3414
3415/// This structure is used for passing information about an object type from ODPI-C.
3416/// It is used by the function [`dpiObjectAttr_getInfo()`].
3417pub struct dpiObjectAttrInfo {
3418
3419    /// Specifies the name of the attribute, as a byte string in the encoding used
3420    /// for CHAR data.
3421    pub name: *const ::std::os::raw::c_char,
3422
3423    /// Specifies the length of the [`dpiObjectAttrInfo.name`] member, in
3424    /// bytes.
3425    pub nameLength: u32,
3426
3427    /// Specifies the type of data of the attribute. It is a structure of type
3428    /// [`dpiDataTypeInfo`].
3429    pub typeInfo: dpiDataTypeInfo,
3430}
3431#[test]
3432fn bindgen_test_layout_dpiObjectAttrInfo() {
3433    const UNINIT: ::std::mem::MaybeUninit<dpiObjectAttrInfo> = ::std::mem::MaybeUninit::uninit();
3434    let ptr = UNINIT.as_ptr();
3435    assert_eq!(
3436        ::std::mem::size_of::<dpiObjectAttrInfo>(),
3437        120usize,
3438        "Size of dpiObjectAttrInfo"
3439    );
3440    assert_eq!(
3441        ::std::mem::align_of::<dpiObjectAttrInfo>(),
3442        8usize,
3443        "Alignment of dpiObjectAttrInfo"
3444    );
3445    assert_eq!(
3446        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
3447        0usize,
3448        "Offset of field: dpiObjectAttrInfo::name"
3449    );
3450    assert_eq!(
3451        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
3452        8usize,
3453        "Offset of field: dpiObjectAttrInfo::nameLength"
3454    );
3455    assert_eq!(
3456        unsafe { ::std::ptr::addr_of!((*ptr).typeInfo) as usize - ptr as usize },
3457        16usize,
3458        "Offset of field: dpiObjectAttrInfo::typeInfo"
3459    );
3460}
3461impl Default for dpiObjectAttrInfo {
3462    fn default() -> Self {
3463        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3464        unsafe {
3465            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3466            s.assume_init()
3467        }
3468    }
3469}
3470#[repr(C)]
3471#[derive(Debug, Copy, Clone)]
3472
3473/// This structure is used for passing information about an object type from ODPI-C.
3474/// It is used by the function [`dpiObjectType_getInfo()`].
3475pub struct dpiObjectTypeInfo {
3476
3477    /// Specifies the schema which owns the object type, as a byte string in the
3478    /// encoding used for CHAR data.
3479    pub schema: *const ::std::os::raw::c_char,
3480
3481    /// Specifies the length of the [`dpiObjectTypeInfo.schema`] member, in
3482    /// bytes.
3483    pub schemaLength: u32,
3484
3485    /// Specifies the name of the object type, as a byte string in the encoding
3486    /// used for CHAR data.
3487    pub name: *const ::std::os::raw::c_char,
3488
3489    /// Specifies the length of the [`dpiObjectTypeInfo.name`] member, in
3490    /// bytes.
3491    pub nameLength: u32,
3492
3493    /// Specifies if the object type is a collection (1) or not (0).
3494    pub isCollection: ::std::os::raw::c_int,
3495
3496    /// Specifies the type of data of the elements in the collection. It is a
3497    /// structure of type [`dpiDataTypeInfo`] which is only
3498    /// valid if the object type is a collection.
3499    pub elementTypeInfo: dpiDataTypeInfo,
3500
3501    /// Specifies the number of attributes that the object type has.
3502    pub numAttributes: u16,
3503
3504    /// Specifies the name of the name of the package for a PL/SQL type, as a byte
3505    /// string in the encoding used for CHAR data. If the type is not a PL/SQL
3506    /// type, this value is NULL.
3507    pub packageName: *const ::std::os::raw::c_char,
3508
3509    /// Specifies the length of the [`dpiObjectTypeInfo.packageName`] member,
3510    /// in bytes.
3511    pub packageNameLength: u32,
3512}
3513#[test]
3514fn bindgen_test_layout_dpiObjectTypeInfo() {
3515    const UNINIT: ::std::mem::MaybeUninit<dpiObjectTypeInfo> = ::std::mem::MaybeUninit::uninit();
3516    let ptr = UNINIT.as_ptr();
3517    assert_eq!(
3518        ::std::mem::size_of::<dpiObjectTypeInfo>(),
3519        160usize,
3520        "Size of dpiObjectTypeInfo"
3521    );
3522    assert_eq!(
3523        ::std::mem::align_of::<dpiObjectTypeInfo>(),
3524        8usize,
3525        "Alignment of dpiObjectTypeInfo"
3526    );
3527    assert_eq!(
3528        unsafe { ::std::ptr::addr_of!((*ptr).schema) as usize - ptr as usize },
3529        0usize,
3530        "Offset of field: dpiObjectTypeInfo::schema"
3531    );
3532    assert_eq!(
3533        unsafe { ::std::ptr::addr_of!((*ptr).schemaLength) as usize - ptr as usize },
3534        8usize,
3535        "Offset of field: dpiObjectTypeInfo::schemaLength"
3536    );
3537    assert_eq!(
3538        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
3539        16usize,
3540        "Offset of field: dpiObjectTypeInfo::name"
3541    );
3542    assert_eq!(
3543        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
3544        24usize,
3545        "Offset of field: dpiObjectTypeInfo::nameLength"
3546    );
3547    assert_eq!(
3548        unsafe { ::std::ptr::addr_of!((*ptr).isCollection) as usize - ptr as usize },
3549        28usize,
3550        "Offset of field: dpiObjectTypeInfo::isCollection"
3551    );
3552    assert_eq!(
3553        unsafe { ::std::ptr::addr_of!((*ptr).elementTypeInfo) as usize - ptr as usize },
3554        32usize,
3555        "Offset of field: dpiObjectTypeInfo::elementTypeInfo"
3556    );
3557    assert_eq!(
3558        unsafe { ::std::ptr::addr_of!((*ptr).numAttributes) as usize - ptr as usize },
3559        136usize,
3560        "Offset of field: dpiObjectTypeInfo::numAttributes"
3561    );
3562    assert_eq!(
3563        unsafe { ::std::ptr::addr_of!((*ptr).packageName) as usize - ptr as usize },
3564        144usize,
3565        "Offset of field: dpiObjectTypeInfo::packageName"
3566    );
3567    assert_eq!(
3568        unsafe { ::std::ptr::addr_of!((*ptr).packageNameLength) as usize - ptr as usize },
3569        152usize,
3570        "Offset of field: dpiObjectTypeInfo::packageNameLength"
3571    );
3572}
3573impl Default for dpiObjectTypeInfo {
3574    fn default() -> Self {
3575        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3576        unsafe {
3577            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3578            s.assume_init()
3579        }
3580    }
3581}
3582#[repr(C)]
3583#[derive(Debug, Copy, Clone)]
3584
3585/// This structure is used for creating session pools, which can in turn be used to
3586/// create connections that are acquired from that session pool. All members are
3587/// initialized to default values using the
3588/// [`dpiContext_initPoolCreateParams()`] function.
3589pub struct dpiPoolCreateParams {
3590
3591    /// Specifies the minimum number of sessions to be created by the session pool.
3592    /// This value is ignored if the [`dpiPoolCreateParams.homogeneous`]
3593    /// member has a value of 0. The default value is 1.
3594    pub minSessions: u32,
3595
3596    /// Specifies the maximum number of sessions that can be created by the session
3597    /// pool. Values of 1 and higher are acceptable. The default value is 1.
3598    pub maxSessions: u32,
3599
3600    /// Specifies the number of sessions that will be created by the session pool
3601    /// when more sessions are required and the number of sessions is less than
3602    /// the maximum allowed. This value is ignored if the
3603    /// [`dpiPoolCreateParams.homogeneous`] member has a value of 0. This
3604    /// value added to the [`dpiPoolCreateParams.minSessions`] member value
3605    /// must not exceed the [`dpiPoolCreateParams.maxSessions`] member value.
3606    /// The default value is 0.
3607    pub sessionIncrement: u32,
3608
3609    /// Specifies the number of seconds since a connection has last been used
3610    /// before a ping will be performed to verify that the connection is still
3611    /// valid. A negative value disables this check. The default value is 60.
3612    pub pingInterval: ::std::os::raw::c_int,
3613
3614    /// Specifies the number of milliseconds to wait when performing a ping to
3615    /// verify the connection is still valid before the connection is considered
3616    /// invalid and is dropped. The default value is 5000 (5 seconds).
3617    pub pingTimeout: ::std::os::raw::c_int,
3618
3619    /// Specifies whether the pool is homogeneous or not. In a homogeneous pool all
3620    /// connections use the same credentials whereas in a heterogeneous pool other
3621    /// credentials are permitted. The default value is 1.
3622    pub homogeneous: ::std::os::raw::c_int,
3623
3624    /// Specifies whether external authentication should be used to create the
3625    /// sessions in the pool. If this value is 0, the user name and password values
3626    /// must be specified in the call to [`dpiPool_create()`]; otherwise, the
3627    /// user name and password values must be zero length or NULL. The default
3628    /// value is 0. External authentication cannot be used with homogeneous pools.
3629    pub externalAuth: ::std::os::raw::c_int,
3630
3631    /// Specifies the mode to use when sessions are acquired from the pool. It is
3632    /// expected to be one of the values from the enumeration
3633    /// [`dpiPoolGetMode`]. The default value is
3634    /// DPI_MODE_POOL_GET_NOWAIT. This value can be set after the pool has been
3635    /// created using the function [`dpiPool_setGetMode()`] and acquired using
3636    /// the function [`dpiPool_getGetMode()`].
3637    pub getMode: dpiPoolGetMode,
3638
3639    /// This member is populated upon successful creation of a pool using the
3640    /// function [`dpiPool_create()`]. It is a byte string in the encoding
3641    /// used for CHAR data. Any value specified prior to creating the session pool
3642    /// is ignored.
3643    pub outPoolName: *const ::std::os::raw::c_char,
3644
3645    /// This member is populated upon successful creation of a pool using the
3646    /// function [`dpiPool_create()`]. It is the length of the
3647    /// [`dpiPoolCreateParams.outPoolName`] member, in bytes. Any value
3648    /// specified prior to creating the session pool is ignored.
3649    pub outPoolNameLength: u32,
3650
3651    /// Specifies the length of time (in seconds) after which idle sessions in the
3652    /// pool are terminated. Note that termination only occurs when the pool is
3653    /// accessed. The default value is 0 which means that no idle sessions are
3654    /// terminated. This value can be set after the pool has been created using the
3655    /// function [`dpiPool_setTimeout()`] and acquired using the function
3656    /// [`dpiPool_getTimeout()`].
3657    pub timeout: u32,
3658
3659    /// Specifies the length of time (in milliseconds) that the caller should wait
3660    /// for a session to become available in the pool before returning with an
3661    /// error. This value is only used if the
3662    /// [`dpiPoolCreateParams.getMode`] member is set to the value
3663    /// DPI_MODE_POOL_GET_TIMEDWAIT. The default value is 0. This value can be set
3664    /// after the pool has been created using the function
3665    /// [`dpiPool_setWaitTimeout()`] and acquired using the function
3666    /// [`dpiPool_getWaitTimeout()`].
3667    pub waitTimeout: u32,
3668
3669    /// Specifies the maximum length of time (in seconds) a pooled session may
3670    /// exist. Sessions in use will not be closed. They become candidates for
3671    /// termination only when they are released back to the pool and have existed
3672    /// for longer than maxLifetimeSession seconds. Session termination only occurs
3673    /// when the pool is accessed. The default value is 0 which means that there is
3674    /// no maximum length of time that a pooled session may exist. This value can
3675    /// be set after the pool has been created using the function
3676    /// [`dpiPool_setMaxLifetimeSession()`] and acquired using the function
3677    /// [`dpiPool_getMaxLifetimeSession()`].
3678    pub maxLifetimeSession: u32,
3679
3680    /// Specifies the name of a PL/SQL procedure in the format
3681    /// *schema.package.callback_proc* which will be called when a session is
3682    /// checked out from the pool and the requested tag doesn’t match the actual
3683    /// tag assigned to the session. The procedure accepts the desired
3684    /// and actual tags as parameters and it is the responsibility of the procedure
3685    /// to ensure that the session matches the desired state upon completion. See
3686    /// the [OCI documentation](https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-B853A020-752F-494A-8D88-D0396EF57177) for more
3687    /// information. The value is expected to be a byte string in the encoding used
3688    /// for CHAR data. This functionality is only available when Oracle Client
3689    /// is at version 12.2 and higher.
3690    pub plsqlFixupCallback: *const ::std::os::raw::c_char,
3691
3692    /// Specifies the length of the PL/SQL fixup callback, in bytes.
3693    pub plsqlFixupCallbackLength: u32,
3694
3695    /// Specifies the maximum number of sessions that can be created by the session
3696    /// pool for each shard in a sharded database. Set this attribute to a value
3697    /// other than zero to ensure that the pool is balanced towards each shard. A
3698    /// value of zero will not set any maximum number of sessions for each shard.
3699    /// If the Oracle client library version is less than 18.3, this value is
3700    /// ignored.
3701    pub maxSessionsPerShard: u32,
3702
3703    /// The callback function which will get called by the connection pool if the
3704    /// pool needs to expand and create new connections but the current
3705    /// authentication token has expired.
3706    /// 
3707    /// The function should get a new authentication token and then set
3708    /// [`dpiAccessToken.token`] and [`dpiAccessToken.privateKey`]
3709    /// in the accessToken argument. The authentication token can be generated by
3710    /// invoking the Oracle Cloud Infrastructure (OCI) Command Line Interface
3711    /// (CLI).
3712    /// 
3713    /// The function should return DPI_SUCCESS for success and DPI_FAILURE
3714    /// for failure. Returning DPI_FAILURE will cause the connection to fail
3715    /// and return ORA-01017 to the application.
3716    /// 
3717    /// The callback accepts the following arguments:
3718    pub accessTokenCallback: dpiAccessTokenCallback,
3719
3720    /// Specifies the value that will be used as the first argument to the callback
3721    /// specified in the [`dpiPoolCreateParams.accessTokenCallback`]
3722    /// member. The default value is NULL.
3723    pub accessTokenCallbackContext: *mut ::std::os::raw::c_void,
3724}
3725#[test]
3726fn bindgen_test_layout_dpiPoolCreateParams() {
3727    const UNINIT: ::std::mem::MaybeUninit<dpiPoolCreateParams> = ::std::mem::MaybeUninit::uninit();
3728    let ptr = UNINIT.as_ptr();
3729    assert_eq!(
3730        ::std::mem::size_of::<dpiPoolCreateParams>(),
3731        88usize,
3732        "Size of dpiPoolCreateParams"
3733    );
3734    assert_eq!(
3735        ::std::mem::align_of::<dpiPoolCreateParams>(),
3736        8usize,
3737        "Alignment of dpiPoolCreateParams"
3738    );
3739    assert_eq!(
3740        unsafe { ::std::ptr::addr_of!((*ptr).minSessions) as usize - ptr as usize },
3741        0usize,
3742        "Offset of field: dpiPoolCreateParams::minSessions"
3743    );
3744    assert_eq!(
3745        unsafe { ::std::ptr::addr_of!((*ptr).maxSessions) as usize - ptr as usize },
3746        4usize,
3747        "Offset of field: dpiPoolCreateParams::maxSessions"
3748    );
3749    assert_eq!(
3750        unsafe { ::std::ptr::addr_of!((*ptr).sessionIncrement) as usize - ptr as usize },
3751        8usize,
3752        "Offset of field: dpiPoolCreateParams::sessionIncrement"
3753    );
3754    assert_eq!(
3755        unsafe { ::std::ptr::addr_of!((*ptr).pingInterval) as usize - ptr as usize },
3756        12usize,
3757        "Offset of field: dpiPoolCreateParams::pingInterval"
3758    );
3759    assert_eq!(
3760        unsafe { ::std::ptr::addr_of!((*ptr).pingTimeout) as usize - ptr as usize },
3761        16usize,
3762        "Offset of field: dpiPoolCreateParams::pingTimeout"
3763    );
3764    assert_eq!(
3765        unsafe { ::std::ptr::addr_of!((*ptr).homogeneous) as usize - ptr as usize },
3766        20usize,
3767        "Offset of field: dpiPoolCreateParams::homogeneous"
3768    );
3769    assert_eq!(
3770        unsafe { ::std::ptr::addr_of!((*ptr).externalAuth) as usize - ptr as usize },
3771        24usize,
3772        "Offset of field: dpiPoolCreateParams::externalAuth"
3773    );
3774    assert_eq!(
3775        unsafe { ::std::ptr::addr_of!((*ptr).getMode) as usize - ptr as usize },
3776        28usize,
3777        "Offset of field: dpiPoolCreateParams::getMode"
3778    );
3779    assert_eq!(
3780        unsafe { ::std::ptr::addr_of!((*ptr).outPoolName) as usize - ptr as usize },
3781        32usize,
3782        "Offset of field: dpiPoolCreateParams::outPoolName"
3783    );
3784    assert_eq!(
3785        unsafe { ::std::ptr::addr_of!((*ptr).outPoolNameLength) as usize - ptr as usize },
3786        40usize,
3787        "Offset of field: dpiPoolCreateParams::outPoolNameLength"
3788    );
3789    assert_eq!(
3790        unsafe { ::std::ptr::addr_of!((*ptr).timeout) as usize - ptr as usize },
3791        44usize,
3792        "Offset of field: dpiPoolCreateParams::timeout"
3793    );
3794    assert_eq!(
3795        unsafe { ::std::ptr::addr_of!((*ptr).waitTimeout) as usize - ptr as usize },
3796        48usize,
3797        "Offset of field: dpiPoolCreateParams::waitTimeout"
3798    );
3799    assert_eq!(
3800        unsafe { ::std::ptr::addr_of!((*ptr).maxLifetimeSession) as usize - ptr as usize },
3801        52usize,
3802        "Offset of field: dpiPoolCreateParams::maxLifetimeSession"
3803    );
3804    assert_eq!(
3805        unsafe { ::std::ptr::addr_of!((*ptr).plsqlFixupCallback) as usize - ptr as usize },
3806        56usize,
3807        "Offset of field: dpiPoolCreateParams::plsqlFixupCallback"
3808    );
3809    assert_eq!(
3810        unsafe { ::std::ptr::addr_of!((*ptr).plsqlFixupCallbackLength) as usize - ptr as usize },
3811        64usize,
3812        "Offset of field: dpiPoolCreateParams::plsqlFixupCallbackLength"
3813    );
3814    assert_eq!(
3815        unsafe { ::std::ptr::addr_of!((*ptr).maxSessionsPerShard) as usize - ptr as usize },
3816        68usize,
3817        "Offset of field: dpiPoolCreateParams::maxSessionsPerShard"
3818    );
3819    assert_eq!(
3820        unsafe { ::std::ptr::addr_of!((*ptr).accessTokenCallback) as usize - ptr as usize },
3821        72usize,
3822        "Offset of field: dpiPoolCreateParams::accessTokenCallback"
3823    );
3824    assert_eq!(
3825        unsafe { ::std::ptr::addr_of!((*ptr).accessTokenCallbackContext) as usize - ptr as usize },
3826        80usize,
3827        "Offset of field: dpiPoolCreateParams::accessTokenCallbackContext"
3828    );
3829}
3830impl Default for dpiPoolCreateParams {
3831    fn default() -> Self {
3832        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3833        unsafe {
3834            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3835            s.assume_init()
3836        }
3837    }
3838}
3839#[repr(C)]
3840#[derive(Debug, Copy, Clone)]
3841
3842/// This structure is used for passing query metadata from ODPI-C. It is populated
3843/// by the function [`dpiStmt_getQueryInfo()`]. All values remain valid as long
3844/// as a reference is held to the statement and the statement is not re-executed or
3845/// closed.
3846pub struct dpiQueryInfo {
3847
3848    /// Specifies the name of the column which is being queried, as a byte string
3849    /// in the encoding used for CHAR data.
3850    pub name: *const ::std::os::raw::c_char,
3851
3852    /// Specifies the length of the [`dpiQueryInfo.name`] member, in bytes.
3853    pub nameLength: u32,
3854
3855    /// Specifies the type of data of the column that is being queried. It is a
3856    /// structure of type [`dpiDataTypeInfo`].
3857    pub typeInfo: dpiDataTypeInfo,
3858
3859    /// Specifies if the data that is being queried may return null values (1) or
3860    /// not (0).
3861    pub nullOk: ::std::os::raw::c_int,
3862}
3863#[test]
3864fn bindgen_test_layout_dpiQueryInfo() {
3865    const UNINIT: ::std::mem::MaybeUninit<dpiQueryInfo> = ::std::mem::MaybeUninit::uninit();
3866    let ptr = UNINIT.as_ptr();
3867    assert_eq!(
3868        ::std::mem::size_of::<dpiQueryInfo>(),
3869        128usize,
3870        "Size of dpiQueryInfo"
3871    );
3872    assert_eq!(
3873        ::std::mem::align_of::<dpiQueryInfo>(),
3874        8usize,
3875        "Alignment of dpiQueryInfo"
3876    );
3877    assert_eq!(
3878        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
3879        0usize,
3880        "Offset of field: dpiQueryInfo::name"
3881    );
3882    assert_eq!(
3883        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
3884        8usize,
3885        "Offset of field: dpiQueryInfo::nameLength"
3886    );
3887    assert_eq!(
3888        unsafe { ::std::ptr::addr_of!((*ptr).typeInfo) as usize - ptr as usize },
3889        16usize,
3890        "Offset of field: dpiQueryInfo::typeInfo"
3891    );
3892    assert_eq!(
3893        unsafe { ::std::ptr::addr_of!((*ptr).nullOk) as usize - ptr as usize },
3894        120usize,
3895        "Offset of field: dpiQueryInfo::nullOk"
3896    );
3897}
3898impl Default for dpiQueryInfo {
3899    fn default() -> Self {
3900        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3901        unsafe {
3902            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3903            s.assume_init()
3904        }
3905    }
3906}
3907#[repr(C)]
3908#[derive(Debug, Copy, Clone)]
3909
3910/// This structure is used to set recipients for an AQ message.
3911/// 
3912/// A list of recipient names can be associated with a message at the time
3913/// a message is enqueued. This allows a limited set of recipients to
3914/// dequeue each message. The recipient list associated with the message
3915/// overrides the queue subscriber list, if there is one. The recipient
3916/// names need not be in the subscriber list but can be, if desired.
3917/// 
3918/// To dequeue a message, the consumername attribute can be set to one of
3919/// the recipient names. The original message recipient list is not
3920/// available on dequeued messages. All recipients have to dequeue a
3921/// message before it gets removed from the queue.
3922/// 
3923/// Subscribing to a queue is like subscribing to a magazine: each
3924/// subscriber can dequeue all the messages placed into a specific queue,
3925/// just as each magazine subscriber has access to all its articles. Being
3926/// a recipient, however, is like getting a letter: each recipient is a
3927/// designated target of a particular message.
3928pub struct dpiMsgRecipient {
3929
3930    /// Specifies the name of the message recipient, in the encoding used for
3931    /// CHAR data.
3932    pub name: *const ::std::os::raw::c_char,
3933
3934    /// Specifies the length of the [`dpiMsgRecipient.name`] member, in
3935    /// bytes.
3936    pub nameLength: u32,
3937}
3938#[test]
3939fn bindgen_test_layout_dpiMsgRecipient() {
3940    const UNINIT: ::std::mem::MaybeUninit<dpiMsgRecipient> = ::std::mem::MaybeUninit::uninit();
3941    let ptr = UNINIT.as_ptr();
3942    assert_eq!(
3943        ::std::mem::size_of::<dpiMsgRecipient>(),
3944        16usize,
3945        "Size of dpiMsgRecipient"
3946    );
3947    assert_eq!(
3948        ::std::mem::align_of::<dpiMsgRecipient>(),
3949        8usize,
3950        "Alignment of dpiMsgRecipient"
3951    );
3952    assert_eq!(
3953        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
3954        0usize,
3955        "Offset of field: dpiMsgRecipient::name"
3956    );
3957    assert_eq!(
3958        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
3959        8usize,
3960        "Offset of field: dpiMsgRecipient::nameLength"
3961    );
3962}
3963impl Default for dpiMsgRecipient {
3964    fn default() -> Self {
3965        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
3966        unsafe {
3967            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
3968            s.assume_init()
3969        }
3970    }
3971}
3972#[repr(C)]
3973#[derive(Copy, Clone)]
3974
3975/// This structure is used for passing sharding key column values to the database.
3976/// It is part of the structure [`dpiConnCreateParams`].
3977pub struct dpiShardingKeyColumn {
3978
3979    /// Specifies the Oracle type of the column which makes up the sharding key. It
3980    /// is expected to be one of the values from the enumeration
3981    /// [`dpiOracleTypeNum`] but currently only the value
3982    /// DPI_ORACLE_TYPE_VARCHAR is supported.
3983    pub oracleTypeNum: dpiOracleTypeNum,
3984
3985    /// Specifies the native type of the column which makes up the sharding key. It
3986    /// is expected to be one of the values from the enumeration
3987    /// [`dpiNativeTypeNum`] but currently only the value
3988    /// DPI_NATIVE_TYPE_BYTES is supported.
3989    pub nativeTypeNum: dpiNativeTypeNum,
3990
3991    /// Specifies the value of the column which makes up the sharding key. It is a
3992    /// union of type [`dpiDataBuffer`] and the member of the
3993    /// union that is set must correspond to the value of the member
3994    /// [`dpiShardingKeyColumn.nativeTypeNum`].
3995    pub value: dpiDataBuffer,
3996}
3997#[test]
3998fn bindgen_test_layout_dpiShardingKeyColumn() {
3999    const UNINIT: ::std::mem::MaybeUninit<dpiShardingKeyColumn> = ::std::mem::MaybeUninit::uninit();
4000    let ptr = UNINIT.as_ptr();
4001    assert_eq!(
4002        ::std::mem::size_of::<dpiShardingKeyColumn>(),
4003        48usize,
4004        "Size of dpiShardingKeyColumn"
4005    );
4006    assert_eq!(
4007        ::std::mem::align_of::<dpiShardingKeyColumn>(),
4008        8usize,
4009        "Alignment of dpiShardingKeyColumn"
4010    );
4011    assert_eq!(
4012        unsafe { ::std::ptr::addr_of!((*ptr).oracleTypeNum) as usize - ptr as usize },
4013        0usize,
4014        "Offset of field: dpiShardingKeyColumn::oracleTypeNum"
4015    );
4016    assert_eq!(
4017        unsafe { ::std::ptr::addr_of!((*ptr).nativeTypeNum) as usize - ptr as usize },
4018        4usize,
4019        "Offset of field: dpiShardingKeyColumn::nativeTypeNum"
4020    );
4021    assert_eq!(
4022        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
4023        8usize,
4024        "Offset of field: dpiShardingKeyColumn::value"
4025    );
4026}
4027impl Default for dpiShardingKeyColumn {
4028    fn default() -> Self {
4029        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4030        unsafe {
4031            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4032            s.assume_init()
4033        }
4034    }
4035}
4036#[repr(C)]
4037#[derive(Copy, Clone)]
4038
4039/// This structure is used for receiving a list of strings from such functions as
4040/// [`dpiSodaDb_getCollectionNames()`] and [`dpiSodaColl_listIndexes()`].
4041/// The memory referenced by this structure should be freed by the function
4042/// [`dpiContext_freeStringList()`] and should not be manipulated directly.
4043pub struct dpiStringList {
4044    pub __bindgen_anon_1: dpiStringList__bindgen_ty_1,
4045    pub __bindgen_anon_2: dpiStringList__bindgen_ty_2,
4046    pub __bindgen_anon_3: dpiStringList__bindgen_ty_3,
4047}
4048#[repr(C)]
4049#[derive(Copy, Clone)]
4050pub union dpiStringList__bindgen_ty_1 {
4051    pub numStrings: u32,
4052    pub numNames: u32,
4053}
4054#[test]
4055fn bindgen_test_layout_dpiStringList__bindgen_ty_1() {
4056    const UNINIT: ::std::mem::MaybeUninit<dpiStringList__bindgen_ty_1> =
4057        ::std::mem::MaybeUninit::uninit();
4058    let ptr = UNINIT.as_ptr();
4059    assert_eq!(
4060        ::std::mem::size_of::<dpiStringList__bindgen_ty_1>(),
4061        4usize,
4062        "Size of dpiStringList__bindgen_ty_1"
4063    );
4064    assert_eq!(
4065        ::std::mem::align_of::<dpiStringList__bindgen_ty_1>(),
4066        4usize,
4067        "Alignment of dpiStringList__bindgen_ty_1"
4068    );
4069    assert_eq!(
4070        unsafe { ::std::ptr::addr_of!((*ptr).numStrings) as usize - ptr as usize },
4071        0usize,
4072        "Offset of field: dpiStringList__bindgen_ty_1::numStrings"
4073    );
4074    assert_eq!(
4075        unsafe { ::std::ptr::addr_of!((*ptr).numNames) as usize - ptr as usize },
4076        0usize,
4077        "Offset of field: dpiStringList__bindgen_ty_1::numNames"
4078    );
4079}
4080impl Default for dpiStringList__bindgen_ty_1 {
4081    fn default() -> Self {
4082        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4083        unsafe {
4084            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4085            s.assume_init()
4086        }
4087    }
4088}
4089#[repr(C)]
4090#[derive(Copy, Clone)]
4091pub union dpiStringList__bindgen_ty_2 {
4092    pub strings: *mut *const ::std::os::raw::c_char,
4093    pub names: *mut *const ::std::os::raw::c_char,
4094}
4095#[test]
4096fn bindgen_test_layout_dpiStringList__bindgen_ty_2() {
4097    const UNINIT: ::std::mem::MaybeUninit<dpiStringList__bindgen_ty_2> =
4098        ::std::mem::MaybeUninit::uninit();
4099    let ptr = UNINIT.as_ptr();
4100    assert_eq!(
4101        ::std::mem::size_of::<dpiStringList__bindgen_ty_2>(),
4102        8usize,
4103        "Size of dpiStringList__bindgen_ty_2"
4104    );
4105    assert_eq!(
4106        ::std::mem::align_of::<dpiStringList__bindgen_ty_2>(),
4107        8usize,
4108        "Alignment of dpiStringList__bindgen_ty_2"
4109    );
4110    assert_eq!(
4111        unsafe { ::std::ptr::addr_of!((*ptr).strings) as usize - ptr as usize },
4112        0usize,
4113        "Offset of field: dpiStringList__bindgen_ty_2::strings"
4114    );
4115    assert_eq!(
4116        unsafe { ::std::ptr::addr_of!((*ptr).names) as usize - ptr as usize },
4117        0usize,
4118        "Offset of field: dpiStringList__bindgen_ty_2::names"
4119    );
4120}
4121impl Default for dpiStringList__bindgen_ty_2 {
4122    fn default() -> Self {
4123        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4124        unsafe {
4125            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4126            s.assume_init()
4127        }
4128    }
4129}
4130#[repr(C)]
4131#[derive(Copy, Clone)]
4132pub union dpiStringList__bindgen_ty_3 {
4133    pub stringLengths: *mut u32,
4134    pub nameLengths: *mut u32,
4135}
4136#[test]
4137fn bindgen_test_layout_dpiStringList__bindgen_ty_3() {
4138    const UNINIT: ::std::mem::MaybeUninit<dpiStringList__bindgen_ty_3> =
4139        ::std::mem::MaybeUninit::uninit();
4140    let ptr = UNINIT.as_ptr();
4141    assert_eq!(
4142        ::std::mem::size_of::<dpiStringList__bindgen_ty_3>(),
4143        8usize,
4144        "Size of dpiStringList__bindgen_ty_3"
4145    );
4146    assert_eq!(
4147        ::std::mem::align_of::<dpiStringList__bindgen_ty_3>(),
4148        8usize,
4149        "Alignment of dpiStringList__bindgen_ty_3"
4150    );
4151    assert_eq!(
4152        unsafe { ::std::ptr::addr_of!((*ptr).stringLengths) as usize - ptr as usize },
4153        0usize,
4154        "Offset of field: dpiStringList__bindgen_ty_3::stringLengths"
4155    );
4156    assert_eq!(
4157        unsafe { ::std::ptr::addr_of!((*ptr).nameLengths) as usize - ptr as usize },
4158        0usize,
4159        "Offset of field: dpiStringList__bindgen_ty_3::nameLengths"
4160    );
4161}
4162impl Default for dpiStringList__bindgen_ty_3 {
4163    fn default() -> Self {
4164        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4165        unsafe {
4166            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4167            s.assume_init()
4168        }
4169    }
4170}
4171#[test]
4172fn bindgen_test_layout_dpiStringList() {
4173    assert_eq!(
4174        ::std::mem::size_of::<dpiStringList>(),
4175        24usize,
4176        "Size of dpiStringList"
4177    );
4178    assert_eq!(
4179        ::std::mem::align_of::<dpiStringList>(),
4180        8usize,
4181        "Alignment of dpiStringList"
4182    );
4183}
4184impl Default for dpiStringList {
4185    fn default() -> Self {
4186        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4187        unsafe {
4188            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4189            s.assume_init()
4190        }
4191    }
4192}
4193#[repr(C)]
4194#[derive(Debug, Copy, Clone)]
4195
4196/// This structure is used for passing search criteria to a number of SODA
4197/// operations. It is initialized using the function
4198/// [`dpiContext_initSodaOperOptions()`] and used by the functions
4199/// [`dpiSodaColl_find()`], [`dpiSodaColl_findOne()`],
4200/// [`dpiSodaColl_getDocCount()`], [`dpiSodaColl_remove()`]
4201/// and [`dpiSodaColl_replaceOne()`].
4202pub struct dpiSodaOperOptions {
4203
4204    /// Specifies the number of elements in the members
4205    /// [`dpiSodaOperOptions.keys`] and
4206    /// [`dpiSodaOperOptions.keyLengths`].
4207    pub numKeys: u32,
4208
4209    /// Specifies an array of key values which documents in the collection must
4210    /// have in order to be processed by the operation. The length of this array
4211    /// is defined by the member [`dpiSodaOperOptions.numKeys`].
4212    pub keys: *mut *const ::std::os::raw::c_char,
4213
4214    /// Specifies an array of key length values. Each element corresponds to the
4215    /// length of the key (in bytes) found in the member
4216    /// [`dpiSodaOperOptions.keys`] at the same element index. The length of
4217    /// this array is defined by the member [`dpiSodaOperOptions.numKeys`].
4218    pub keyLengths: *mut u32,
4219
4220    /// Specifies the key which the document must have in order to be processed by
4221    /// the operation.
4222    pub key: *const ::std::os::raw::c_char,
4223
4224    /// Specifies the length of the member [`dpiSodaOperOptions.key`], in
4225    /// bytes.
4226    pub keyLength: u32,
4227
4228    /// Specifies the document version that documents must have in order to be
4229    /// processed by the operation. This is typically used in conjunction with
4230    /// [`dpiSodaOperOptions.key`] and allows for opportunistic locking,
4231    /// so that operations do not affect a document that someone else has already
4232    /// modified.
4233    pub version: *const ::std::os::raw::c_char,
4234
4235    /// Specifies the length of the member [`dpiSodaOperOptions.version`],
4236    /// in bytes.
4237    pub versionLength: u32,
4238
4239    /// Specifies a filter value which limits the documents processed by the
4240    /// operation. See [Overview of SODA Filter Specifications (QBEs)](https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-CB09C4E3-BBB1-40DC-88A8-8417821B0FBE).
4241    pub filter: *const ::std::os::raw::c_char,
4242
4243    /// Specifies the length of the member [`dpiSodaOperOptions.filter`],
4244    /// in bytes.
4245    pub filterLength: u32,
4246
4247    /// Specifies the number of documents to skip before processing documents in
4248    /// the collection. A value of 0 will result in no documents being skipped.
4249    pub skip: u32,
4250
4251    /// Specifies the maximum number of documents to process in the collection. A
4252    /// value of 0 means no limit is enforced.
4253    pub limit: u32,
4254
4255    /// Specifies the number of documents that will be fetched at one time from a
4256    /// SODA collection. Increasing this value reduces the number of round-trips to
4257    /// the database but increases the amount of memory allocated. A value of 0
4258    /// means that the default value (100) is used. This member is only supported
4259    /// in Oracle Client 19.5 and higher.
4260    pub fetchArraySize: u32,
4261
4262    /// Specifies a hint that will be passed through to the SODA operation. These
4263    /// hints are the same as the hints used for normal SQL operations but without
4264    /// the enclosing comment characters. This member is only supported in Oracle
4265    /// Client 21.3 and higher (also available in Oracle Client 19 from 19.11).
4266    pub hint: *const ::std::os::raw::c_char,
4267
4268    /// Specifies the length of the member [`dpiSodaOperOptions.hint`],
4269    /// in bytes. This member is only supported in Oracle Client 21.3 and higher
4270    /// (also available in Oracle Client 19 from 19.11).
4271    pub hintLength: u32,
4272
4273    /// Specifies whether the documents fetched from the collection should be
4274    /// locked (equivalent to SQL “select for update”). The next commit or
4275    /// rollback on the connection made after the operation is performed will
4276    /// “unlock” the documents. Ensure that the flag
4277    /// `DPI_SODA_FLAGS_ATOMIC_COMMIT` is not used for the operation as otherwise
4278    /// the lock will be removed immediately.
4279    /// 
4280    /// This member should only be used with read operations (other than
4281    /// [`dpiSodaColl_getDocCount()`]) and should not be used in conjunction
4282    /// with the [`dpiSodaOperOptions.skip`] and
4283    /// [`dpiSodaOperOptions.limit`] members.
4284    /// 
4285    /// If this member is specified in conjunction with a write operation the value
4286    /// is ignored.
4287    /// 
4288    /// This member is only supported in Oracle Client 21.3 and higher (also
4289    /// available in Oracle Client 19 from 19.11).
4290    pub lock: ::std::os::raw::c_int,
4291}
4292#[test]
4293fn bindgen_test_layout_dpiSodaOperOptions() {
4294    const UNINIT: ::std::mem::MaybeUninit<dpiSodaOperOptions> = ::std::mem::MaybeUninit::uninit();
4295    let ptr = UNINIT.as_ptr();
4296    assert_eq!(
4297        ::std::mem::size_of::<dpiSodaOperOptions>(),
4298        96usize,
4299        "Size of dpiSodaOperOptions"
4300    );
4301    assert_eq!(
4302        ::std::mem::align_of::<dpiSodaOperOptions>(),
4303        8usize,
4304        "Alignment of dpiSodaOperOptions"
4305    );
4306    assert_eq!(
4307        unsafe { ::std::ptr::addr_of!((*ptr).numKeys) as usize - ptr as usize },
4308        0usize,
4309        "Offset of field: dpiSodaOperOptions::numKeys"
4310    );
4311    assert_eq!(
4312        unsafe { ::std::ptr::addr_of!((*ptr).keys) as usize - ptr as usize },
4313        8usize,
4314        "Offset of field: dpiSodaOperOptions::keys"
4315    );
4316    assert_eq!(
4317        unsafe { ::std::ptr::addr_of!((*ptr).keyLengths) as usize - ptr as usize },
4318        16usize,
4319        "Offset of field: dpiSodaOperOptions::keyLengths"
4320    );
4321    assert_eq!(
4322        unsafe { ::std::ptr::addr_of!((*ptr).key) as usize - ptr as usize },
4323        24usize,
4324        "Offset of field: dpiSodaOperOptions::key"
4325    );
4326    assert_eq!(
4327        unsafe { ::std::ptr::addr_of!((*ptr).keyLength) as usize - ptr as usize },
4328        32usize,
4329        "Offset of field: dpiSodaOperOptions::keyLength"
4330    );
4331    assert_eq!(
4332        unsafe { ::std::ptr::addr_of!((*ptr).version) as usize - ptr as usize },
4333        40usize,
4334        "Offset of field: dpiSodaOperOptions::version"
4335    );
4336    assert_eq!(
4337        unsafe { ::std::ptr::addr_of!((*ptr).versionLength) as usize - ptr as usize },
4338        48usize,
4339        "Offset of field: dpiSodaOperOptions::versionLength"
4340    );
4341    assert_eq!(
4342        unsafe { ::std::ptr::addr_of!((*ptr).filter) as usize - ptr as usize },
4343        56usize,
4344        "Offset of field: dpiSodaOperOptions::filter"
4345    );
4346    assert_eq!(
4347        unsafe { ::std::ptr::addr_of!((*ptr).filterLength) as usize - ptr as usize },
4348        64usize,
4349        "Offset of field: dpiSodaOperOptions::filterLength"
4350    );
4351    assert_eq!(
4352        unsafe { ::std::ptr::addr_of!((*ptr).skip) as usize - ptr as usize },
4353        68usize,
4354        "Offset of field: dpiSodaOperOptions::skip"
4355    );
4356    assert_eq!(
4357        unsafe { ::std::ptr::addr_of!((*ptr).limit) as usize - ptr as usize },
4358        72usize,
4359        "Offset of field: dpiSodaOperOptions::limit"
4360    );
4361    assert_eq!(
4362        unsafe { ::std::ptr::addr_of!((*ptr).fetchArraySize) as usize - ptr as usize },
4363        76usize,
4364        "Offset of field: dpiSodaOperOptions::fetchArraySize"
4365    );
4366    assert_eq!(
4367        unsafe { ::std::ptr::addr_of!((*ptr).hint) as usize - ptr as usize },
4368        80usize,
4369        "Offset of field: dpiSodaOperOptions::hint"
4370    );
4371    assert_eq!(
4372        unsafe { ::std::ptr::addr_of!((*ptr).hintLength) as usize - ptr as usize },
4373        88usize,
4374        "Offset of field: dpiSodaOperOptions::hintLength"
4375    );
4376    assert_eq!(
4377        unsafe { ::std::ptr::addr_of!((*ptr).lock) as usize - ptr as usize },
4378        92usize,
4379        "Offset of field: dpiSodaOperOptions::lock"
4380    );
4381}
4382impl Default for dpiSodaOperOptions {
4383    fn default() -> Self {
4384        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4385        unsafe {
4386            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4387            s.assume_init()
4388        }
4389    }
4390}
4391#[repr(C)]
4392#[derive(Debug, Default, Copy, Clone)]
4393
4394/// This structure is used for passing information about a statement from ODPI-C. It
4395/// is used by the function [`dpiStmt_getInfo()`].
4396pub struct dpiStmtInfo {
4397
4398    /// Specifies if the statement refers to a query (1) or not (0).
4399    pub isQuery: ::std::os::raw::c_int,
4400
4401    /// Specifies if the statement refers to a PL/SQL block (1) or not (0).
4402    pub isPLSQL: ::std::os::raw::c_int,
4403
4404    /// Specifies if the statement refers to DDL (data definition language) such
4405    /// as creating a table (1) or not (0).
4406    pub isDDL: ::std::os::raw::c_int,
4407
4408    /// Specifies if the statement refers to DML (data manipulation language) such
4409    /// as inserting, updating and deleting (1) or not (0).
4410    pub isDML: ::std::os::raw::c_int,
4411
4412    /// Specifies the type of statement that has been prepared. The members
4413    /// [`dpiStmtInfo.isQuery`], [`dpiStmtInfo.isPLSQL`],
4414    /// [`dpiStmtInfo.isDDL`] and [`dpiStmtInfo.isDML`] are all
4415    /// categorizations of this value. It will be one of the values from the
4416    /// enumeration [`dpiStatementType`].
4417    pub statementType: dpiStatementType,
4418
4419    /// Specifies if the statement has a returning clause in it (1) or not (0).
4420    pub isReturning: ::std::os::raw::c_int,
4421}
4422#[test]
4423fn bindgen_test_layout_dpiStmtInfo() {
4424    const UNINIT: ::std::mem::MaybeUninit<dpiStmtInfo> = ::std::mem::MaybeUninit::uninit();
4425    let ptr = UNINIT.as_ptr();
4426    assert_eq!(
4427        ::std::mem::size_of::<dpiStmtInfo>(),
4428        24usize,
4429        "Size of dpiStmtInfo"
4430    );
4431    assert_eq!(
4432        ::std::mem::align_of::<dpiStmtInfo>(),
4433        4usize,
4434        "Alignment of dpiStmtInfo"
4435    );
4436    assert_eq!(
4437        unsafe { ::std::ptr::addr_of!((*ptr).isQuery) as usize - ptr as usize },
4438        0usize,
4439        "Offset of field: dpiStmtInfo::isQuery"
4440    );
4441    assert_eq!(
4442        unsafe { ::std::ptr::addr_of!((*ptr).isPLSQL) as usize - ptr as usize },
4443        4usize,
4444        "Offset of field: dpiStmtInfo::isPLSQL"
4445    );
4446    assert_eq!(
4447        unsafe { ::std::ptr::addr_of!((*ptr).isDDL) as usize - ptr as usize },
4448        8usize,
4449        "Offset of field: dpiStmtInfo::isDDL"
4450    );
4451    assert_eq!(
4452        unsafe { ::std::ptr::addr_of!((*ptr).isDML) as usize - ptr as usize },
4453        12usize,
4454        "Offset of field: dpiStmtInfo::isDML"
4455    );
4456    assert_eq!(
4457        unsafe { ::std::ptr::addr_of!((*ptr).statementType) as usize - ptr as usize },
4458        16usize,
4459        "Offset of field: dpiStmtInfo::statementType"
4460    );
4461    assert_eq!(
4462        unsafe { ::std::ptr::addr_of!((*ptr).isReturning) as usize - ptr as usize },
4463        20usize,
4464        "Offset of field: dpiStmtInfo::isReturning"
4465    );
4466}
4467pub type dpiSubscrCallback = ::std::option::Option<
4468    unsafe extern "C" fn(context: *mut ::std::os::raw::c_void, message: *mut dpiSubscrMessage),
4469>;
4470#[repr(C)]
4471#[derive(Debug, Copy, Clone)]
4472
4473/// This structure is used for creating subscriptions to messages sent for object
4474/// change notification, query change notification or advanced queuing. All members
4475/// are initialized to default values using the
4476/// [`dpiContext_initSubscrCreateParams()`] function.
4477pub struct dpiSubscrCreateParams {
4478
4479    /// Specifies the namespace in which the subscription is created. It is
4480    /// expected to be one of the values from the enumeration
4481    /// [`dpiSubscrNamespace`]. The default value is
4482    /// DPI_SUBSCR_NAMESPACE_DBCHANGE.
4483    pub subscrNamespace: dpiSubscrNamespace,
4484
4485    /// Specifies the protocol used for sending notifications for the subscription.
4486    /// It is expected to be one of the values from the enumeration
4487    /// [`dpiSubscrProtocol`]. The default value is
4488    /// DPI_SUBSCR_PROTO_CALLBACK.
4489    pub protocol: dpiSubscrProtocol,
4490
4491    /// Specifies the quality of service flags to use with the subscription. It is
4492    /// expected to be one or more of the values from the enumeration
4493    /// [`dpiSubscrQOS`], OR’ed together. The default value is to
4494    /// have no flags set.
4495    pub qos: dpiSubscrQOS,
4496
4497    /// Specifies which operations on the registered tables or queries should
4498    /// result in notifications. It is expected to be one or more of the values
4499    /// from the enumeration [`dpiOpCode`], OR’ed together. The
4500    /// default value is DPI_OPCODE_ALL_OPS.
4501    pub operations: dpiOpCode,
4502
4503    /// Specifies the port number on which to receive notifications. The default
4504    /// value is 0, which means that a port number will be selected by the Oracle
4505    /// client.
4506    pub portNumber: u32,
4507
4508    /// Specifies the length of time, in seconds, before the subscription is
4509    /// unregistered. If the value is 0, the subscription remains active until
4510    /// explicitly unregistered. The default value is 0.
4511    pub timeout: u32,
4512
4513    /// Specifies the name of the subscription, as a byte string in the encoding
4514    /// used for CHAR data. This name must be consistent with the namespace
4515    /// identified in the [`dpiSubscrCreateParams.subscrNamespace`] member.
4516    /// The default value is NULL.
4517    pub name: *const ::std::os::raw::c_char,
4518
4519    /// Specifies the length of the [`dpiSubscrCreateParams.name`] member, in
4520    /// bytes. The default value is 0.
4521    pub nameLength: u32,
4522
4523    /// Specifies the callback that will be called when a notification is sent to
4524    /// the subscription, if the [`dpiSubscrCreateParams.protocol`] member
4525    /// is set to DPI_SUBSCR_PROTO_CALLBACK. The callback accepts the following
4526    /// arguments:
4527    /// 
4528    /// The default value is NULL. If a callback is specified and a notification is
4529    /// sent, this will be performed on a separate thread. If database operations
4530    /// are going to take place, ensure that the create mode
4531    /// DPI_MODE_CREATE_THREADED is set in the structure
4532    /// [`dpiCommonCreateParams`] when creating the
4533    /// session pool or standalone connection that will be used in this callback.
4534    pub callback: dpiSubscrCallback,
4535
4536    /// Specifies the value that will be used as the first argument to the callback
4537    /// specified in the [`dpiSubscrCreateParams.callback`] member. The
4538    /// default value is NULL.
4539    pub callbackContext: *mut ::std::os::raw::c_void,
4540
4541    /// Specifies the name of the recipient to which notifications are sent when
4542    /// the [`dpiSubscrCreateParams.protocol`] member is not set to
4543    /// DPI_SUBSCR_PROTO_CALLBACK. The value is expected to be a byte string in the
4544    /// encoding used for CHAR data. The default value is NULL.
4545    pub recipientName: *const ::std::os::raw::c_char,
4546
4547    /// Specifies the length of the [`dpiSubscrCreateParams.recipientName`]
4548    /// member, in bytes. The default value is 0.
4549    pub recipientNameLength: u32,
4550
4551    /// Specifies the IP address on which the subscription listens to receive
4552    /// notifications. The IP address can be an IPv4 address in dotted decimal
4553    /// format such as 192.1.2.34 or an IPv6 address in hexadecimal format such as
4554    /// 2001:0db8:0000:0000:0217:f2ff:fe4b:4ced. The default value is NULL which
4555    /// means that an IP address will be selected by the Oracle client.
4556    pub ipAddress: *const ::std::os::raw::c_char,
4557
4558    /// Specifies the length of the [`dpiSubscrCreateParams.ipAddress`]
4559    /// member, in bytes. The default value is 0.
4560    pub ipAddressLength: u32,
4561
4562    /// Specifies the grouping class to use when grouping events. It should be one
4563    /// of the values from the enumeration
4564    /// [`dpiSubscrGroupingClass`]. The default value is
4565    /// 0. If this value is 0, the groupingValue and groupingType attributes are
4566    /// ignored.
4567    pub groupingClass: u8,
4568
4569    /// Specifies the value to be used in grouping. The meaning of this value
4570    /// depends on the value of the groupingClass attribute. For time based
4571    /// grouping this value refers to the number of seconds during which events
4572    /// will be grouped together. The default value is 0.
4573    pub groupingValue: u32,
4574
4575    /// Specifies the type of grouping to use when grouping events. It should be
4576    /// one of the values from the enumeration
4577    /// [`dpiSubscrGroupingType`]. The default value is
4578    /// DPI_SUBSCR_GROUPING_TYPE_SUMMARY.
4579    pub groupingType: u8,
4580
4581    /// Specifies the registration id of the subscription that corresponds to the
4582    /// REG_ID column in the USER_SUBSCR_REGISTRATIONS and DBA_SUBSCR_REGISTRATIONS
4583    /// views in the database. It will be populated for CQN registrations after a
4584    /// successful call to [`dpiConn_subscribe()`].
4585    pub outRegId: u64,
4586
4587    /// Specifies whether a client initiated connection should be created (1) or
4588    /// a server initiated connection should be created (0). The default value is
4589    /// 0. This feature is only available when Oracle Client 19.4 and Oracle
4590    /// Database 19.4 or higher are being used.
4591    pub clientInitiated: ::std::os::raw::c_int,
4592}
4593#[test]
4594fn bindgen_test_layout_dpiSubscrCreateParams() {
4595    const UNINIT: ::std::mem::MaybeUninit<dpiSubscrCreateParams> =
4596        ::std::mem::MaybeUninit::uninit();
4597    let ptr = UNINIT.as_ptr();
4598    assert_eq!(
4599        ::std::mem::size_of::<dpiSubscrCreateParams>(),
4600        112usize,
4601        "Size of dpiSubscrCreateParams"
4602    );
4603    assert_eq!(
4604        ::std::mem::align_of::<dpiSubscrCreateParams>(),
4605        8usize,
4606        "Alignment of dpiSubscrCreateParams"
4607    );
4608    assert_eq!(
4609        unsafe { ::std::ptr::addr_of!((*ptr).subscrNamespace) as usize - ptr as usize },
4610        0usize,
4611        "Offset of field: dpiSubscrCreateParams::subscrNamespace"
4612    );
4613    assert_eq!(
4614        unsafe { ::std::ptr::addr_of!((*ptr).protocol) as usize - ptr as usize },
4615        4usize,
4616        "Offset of field: dpiSubscrCreateParams::protocol"
4617    );
4618    assert_eq!(
4619        unsafe { ::std::ptr::addr_of!((*ptr).qos) as usize - ptr as usize },
4620        8usize,
4621        "Offset of field: dpiSubscrCreateParams::qos"
4622    );
4623    assert_eq!(
4624        unsafe { ::std::ptr::addr_of!((*ptr).operations) as usize - ptr as usize },
4625        12usize,
4626        "Offset of field: dpiSubscrCreateParams::operations"
4627    );
4628    assert_eq!(
4629        unsafe { ::std::ptr::addr_of!((*ptr).portNumber) as usize - ptr as usize },
4630        16usize,
4631        "Offset of field: dpiSubscrCreateParams::portNumber"
4632    );
4633    assert_eq!(
4634        unsafe { ::std::ptr::addr_of!((*ptr).timeout) as usize - ptr as usize },
4635        20usize,
4636        "Offset of field: dpiSubscrCreateParams::timeout"
4637    );
4638    assert_eq!(
4639        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
4640        24usize,
4641        "Offset of field: dpiSubscrCreateParams::name"
4642    );
4643    assert_eq!(
4644        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
4645        32usize,
4646        "Offset of field: dpiSubscrCreateParams::nameLength"
4647    );
4648    assert_eq!(
4649        unsafe { ::std::ptr::addr_of!((*ptr).callback) as usize - ptr as usize },
4650        40usize,
4651        "Offset of field: dpiSubscrCreateParams::callback"
4652    );
4653    assert_eq!(
4654        unsafe { ::std::ptr::addr_of!((*ptr).callbackContext) as usize - ptr as usize },
4655        48usize,
4656        "Offset of field: dpiSubscrCreateParams::callbackContext"
4657    );
4658    assert_eq!(
4659        unsafe { ::std::ptr::addr_of!((*ptr).recipientName) as usize - ptr as usize },
4660        56usize,
4661        "Offset of field: dpiSubscrCreateParams::recipientName"
4662    );
4663    assert_eq!(
4664        unsafe { ::std::ptr::addr_of!((*ptr).recipientNameLength) as usize - ptr as usize },
4665        64usize,
4666        "Offset of field: dpiSubscrCreateParams::recipientNameLength"
4667    );
4668    assert_eq!(
4669        unsafe { ::std::ptr::addr_of!((*ptr).ipAddress) as usize - ptr as usize },
4670        72usize,
4671        "Offset of field: dpiSubscrCreateParams::ipAddress"
4672    );
4673    assert_eq!(
4674        unsafe { ::std::ptr::addr_of!((*ptr).ipAddressLength) as usize - ptr as usize },
4675        80usize,
4676        "Offset of field: dpiSubscrCreateParams::ipAddressLength"
4677    );
4678    assert_eq!(
4679        unsafe { ::std::ptr::addr_of!((*ptr).groupingClass) as usize - ptr as usize },
4680        84usize,
4681        "Offset of field: dpiSubscrCreateParams::groupingClass"
4682    );
4683    assert_eq!(
4684        unsafe { ::std::ptr::addr_of!((*ptr).groupingValue) as usize - ptr as usize },
4685        88usize,
4686        "Offset of field: dpiSubscrCreateParams::groupingValue"
4687    );
4688    assert_eq!(
4689        unsafe { ::std::ptr::addr_of!((*ptr).groupingType) as usize - ptr as usize },
4690        92usize,
4691        "Offset of field: dpiSubscrCreateParams::groupingType"
4692    );
4693    assert_eq!(
4694        unsafe { ::std::ptr::addr_of!((*ptr).outRegId) as usize - ptr as usize },
4695        96usize,
4696        "Offset of field: dpiSubscrCreateParams::outRegId"
4697    );
4698    assert_eq!(
4699        unsafe { ::std::ptr::addr_of!((*ptr).clientInitiated) as usize - ptr as usize },
4700        104usize,
4701        "Offset of field: dpiSubscrCreateParams::clientInitiated"
4702    );
4703}
4704impl Default for dpiSubscrCreateParams {
4705    fn default() -> Self {
4706        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4707        unsafe {
4708            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4709            s.assume_init()
4710        }
4711    }
4712}
4713#[repr(C)]
4714#[derive(Debug, Copy, Clone)]
4715
4716/// This structure is used for passing messages sent by notifications to
4717/// subscriptions. It is the second parameter to the callback method specified in
4718/// the [`dpiSubscrCreateParams`] structure.
4719pub struct dpiSubscrMessage {
4720
4721    /// Specifies the type of event that took place which generated the
4722    /// notification. It will be one of the values from the enumeration
4723    /// [`dpiEventType`].
4724    pub eventType: dpiEventType,
4725
4726    /// Specifies the name of the database which generated the notification, as a
4727    /// byte string in the encoding used for CHAR data. This value is not
4728    /// populated when the [`dpiSubscrMessage.eventType`] member is set to
4729    /// the values DPI_EVENT_AQ or DPI_EVENT_DEREG.
4730    pub dbName: *const ::std::os::raw::c_char,
4731
4732    /// Specifies the length of the [`dpiSubscrMessage.dbName`] member, in
4733    /// bytes.
4734    pub dbNameLength: u32,
4735
4736    /// Specifies a pointer to an array of
4737    /// [`dpiSubscrMessageTable`] structures representing
4738    /// the list of tables that were modified and generated this notification. This
4739    /// value is only populated when the value of the
4740    /// [`dpiSubscrMessage.eventType`] member is set to DPI_EVENT_OBJCHANGE.
4741    pub tables: *mut dpiSubscrMessageTable,
4742
4743    /// Specifies the number of structures available in the
4744    /// [`dpiSubscrMessage.tables`] member.
4745    pub numTables: u32,
4746
4747    /// Specifies a pointer to an array of
4748    /// [`dpiSubscrMessageQuery`] structures representing
4749    /// the list of queries that were modified and generated this notification.
4750    /// This value is only populated when the value of the
4751    /// [`dpiSubscrMessage.eventType`] member is set to
4752    /// DPI_EVENT_QUERYCHANGE.
4753    pub queries: *mut dpiSubscrMessageQuery,
4754
4755    /// Specifies the number of structures available in the
4756    /// [`dpiSubscrMessage.queries`] member.
4757    pub numQueries: u32,
4758
4759    /// Specifies a pointer to a [`dpiErrorInfo`] structure. This
4760    /// value will be NULL if no error has taken place. If this value is not NULL
4761    /// the other members in this structure will not be populated.
4762    pub errorInfo: *mut dpiErrorInfo,
4763
4764    /// Specifies the id of the transaction which generated the notification, as a
4765    /// series of bytes. This value is not populated when the
4766    /// [`dpiSubscrMessage.eventType`] member is set to the values
4767    /// DPI_EVENT_AQ or DPI_EVENT_DEREG.
4768    pub txId: *const ::std::os::raw::c_void,
4769
4770    /// Specifies the length of the [`dpiSubscrMessage.txId`] member, in
4771    /// bytes.
4772    pub txIdLength: u32,
4773
4774    /// Specifies whether the subscription is registered with the database (1) or
4775    /// not (0). The subscription is automatically deregistered with the database
4776    /// when the subscription timeout value is reached or when the first
4777    /// notification is sent (when the quality of service flag
4778    /// DPI_SUBSCR_QOS_DEREG_NFY is used).
4779    pub registered: ::std::os::raw::c_int,
4780
4781    /// Specifies the name of the queue which has messages available to dequeue, as
4782    /// a byte string in the encoding used for CHAR data. This value is only
4783    /// populated when the [`dpiSubscrMessage.eventType`] member is set to
4784    /// the value DPI_EVENT_AQ.
4785    pub queueName: *const ::std::os::raw::c_char,
4786
4787    /// Specifies the length of the [`dpiSubscrMessage.queueName`] member,
4788    /// in bytes.
4789    pub queueNameLength: u32,
4790
4791    /// Specifies the consumer name of the queue which has messages available to
4792    /// dequeue, as a byte string in the encoding used for CHAR data. This value is
4793    /// only populated when the [`dpiSubscrMessage.eventType`] member is set
4794    /// to the value DPI_EVENT_AQ. It is also only populated if the queue that has
4795    /// messages to dequeue is a multi-consumer queue.
4796    pub consumerName: *const ::std::os::raw::c_char,
4797
4798    /// Specifies the length of the [`dpiSubscrMessage.consumerName`]
4799    /// member, in bytes.
4800    pub consumerNameLength: u32,
4801
4802    /// Specifies message id of the message which is available to dequeue, as a
4803    /// series of bytes. This value is only populated when the
4804    /// [`dpiSubscrMessage.eventType`] member is set to the value
4805    /// DPI_EVENT_AQ.
4806    pub aqMsgId: *const ::std::os::raw::c_void,
4807
4808    /// Specifies the length of the [`dpiSubscrMessage.aqMsgId`]
4809    /// member, in bytes.
4810    pub aqMsgIdLength: u32,
4811}
4812#[test]
4813fn bindgen_test_layout_dpiSubscrMessage() {
4814    const UNINIT: ::std::mem::MaybeUninit<dpiSubscrMessage> = ::std::mem::MaybeUninit::uninit();
4815    let ptr = UNINIT.as_ptr();
4816    assert_eq!(
4817        ::std::mem::size_of::<dpiSubscrMessage>(),
4818        128usize,
4819        "Size of dpiSubscrMessage"
4820    );
4821    assert_eq!(
4822        ::std::mem::align_of::<dpiSubscrMessage>(),
4823        8usize,
4824        "Alignment of dpiSubscrMessage"
4825    );
4826    assert_eq!(
4827        unsafe { ::std::ptr::addr_of!((*ptr).eventType) as usize - ptr as usize },
4828        0usize,
4829        "Offset of field: dpiSubscrMessage::eventType"
4830    );
4831    assert_eq!(
4832        unsafe { ::std::ptr::addr_of!((*ptr).dbName) as usize - ptr as usize },
4833        8usize,
4834        "Offset of field: dpiSubscrMessage::dbName"
4835    );
4836    assert_eq!(
4837        unsafe { ::std::ptr::addr_of!((*ptr).dbNameLength) as usize - ptr as usize },
4838        16usize,
4839        "Offset of field: dpiSubscrMessage::dbNameLength"
4840    );
4841    assert_eq!(
4842        unsafe { ::std::ptr::addr_of!((*ptr).tables) as usize - ptr as usize },
4843        24usize,
4844        "Offset of field: dpiSubscrMessage::tables"
4845    );
4846    assert_eq!(
4847        unsafe { ::std::ptr::addr_of!((*ptr).numTables) as usize - ptr as usize },
4848        32usize,
4849        "Offset of field: dpiSubscrMessage::numTables"
4850    );
4851    assert_eq!(
4852        unsafe { ::std::ptr::addr_of!((*ptr).queries) as usize - ptr as usize },
4853        40usize,
4854        "Offset of field: dpiSubscrMessage::queries"
4855    );
4856    assert_eq!(
4857        unsafe { ::std::ptr::addr_of!((*ptr).numQueries) as usize - ptr as usize },
4858        48usize,
4859        "Offset of field: dpiSubscrMessage::numQueries"
4860    );
4861    assert_eq!(
4862        unsafe { ::std::ptr::addr_of!((*ptr).errorInfo) as usize - ptr as usize },
4863        56usize,
4864        "Offset of field: dpiSubscrMessage::errorInfo"
4865    );
4866    assert_eq!(
4867        unsafe { ::std::ptr::addr_of!((*ptr).txId) as usize - ptr as usize },
4868        64usize,
4869        "Offset of field: dpiSubscrMessage::txId"
4870    );
4871    assert_eq!(
4872        unsafe { ::std::ptr::addr_of!((*ptr).txIdLength) as usize - ptr as usize },
4873        72usize,
4874        "Offset of field: dpiSubscrMessage::txIdLength"
4875    );
4876    assert_eq!(
4877        unsafe { ::std::ptr::addr_of!((*ptr).registered) as usize - ptr as usize },
4878        76usize,
4879        "Offset of field: dpiSubscrMessage::registered"
4880    );
4881    assert_eq!(
4882        unsafe { ::std::ptr::addr_of!((*ptr).queueName) as usize - ptr as usize },
4883        80usize,
4884        "Offset of field: dpiSubscrMessage::queueName"
4885    );
4886    assert_eq!(
4887        unsafe { ::std::ptr::addr_of!((*ptr).queueNameLength) as usize - ptr as usize },
4888        88usize,
4889        "Offset of field: dpiSubscrMessage::queueNameLength"
4890    );
4891    assert_eq!(
4892        unsafe { ::std::ptr::addr_of!((*ptr).consumerName) as usize - ptr as usize },
4893        96usize,
4894        "Offset of field: dpiSubscrMessage::consumerName"
4895    );
4896    assert_eq!(
4897        unsafe { ::std::ptr::addr_of!((*ptr).consumerNameLength) as usize - ptr as usize },
4898        104usize,
4899        "Offset of field: dpiSubscrMessage::consumerNameLength"
4900    );
4901    assert_eq!(
4902        unsafe { ::std::ptr::addr_of!((*ptr).aqMsgId) as usize - ptr as usize },
4903        112usize,
4904        "Offset of field: dpiSubscrMessage::aqMsgId"
4905    );
4906    assert_eq!(
4907        unsafe { ::std::ptr::addr_of!((*ptr).aqMsgIdLength) as usize - ptr as usize },
4908        120usize,
4909        "Offset of field: dpiSubscrMessage::aqMsgIdLength"
4910    );
4911}
4912impl Default for dpiSubscrMessage {
4913    fn default() -> Self {
4914        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4915        unsafe {
4916            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4917            s.assume_init()
4918        }
4919    }
4920}
4921#[repr(C)]
4922#[derive(Debug, Copy, Clone)]
4923
4924/// This structure is used for passing information on query change notification
4925/// events and is part of the [`dpiSubscrMessage`] structure.
4926pub struct dpiSubscrMessageQuery {
4927
4928    /// Specifies the id of the query that was registered as part of the
4929    /// subscription that generated this notification.
4930    pub id: u64,
4931
4932    /// Specifies the operations that took place on the registered query. It will
4933    /// be one or more of the values from the enumeration
4934    /// [`dpiOpCode`], OR’ed together.
4935    pub operation: dpiOpCode,
4936
4937    /// Specifies a pointer to an array of
4938    /// [`dpiSubscrMessageTable`] structures representing
4939    /// the list of tables that were modified by the event which generated this
4940    /// notification.
4941    pub tables: *mut dpiSubscrMessageTable,
4942
4943    /// Specifies the number of structures available in the
4944    /// [`dpiSubscrMessageQuery.tables`] member.
4945    pub numTables: u32,
4946}
4947#[test]
4948fn bindgen_test_layout_dpiSubscrMessageQuery() {
4949    const UNINIT: ::std::mem::MaybeUninit<dpiSubscrMessageQuery> =
4950        ::std::mem::MaybeUninit::uninit();
4951    let ptr = UNINIT.as_ptr();
4952    assert_eq!(
4953        ::std::mem::size_of::<dpiSubscrMessageQuery>(),
4954        32usize,
4955        "Size of dpiSubscrMessageQuery"
4956    );
4957    assert_eq!(
4958        ::std::mem::align_of::<dpiSubscrMessageQuery>(),
4959        8usize,
4960        "Alignment of dpiSubscrMessageQuery"
4961    );
4962    assert_eq!(
4963        unsafe { ::std::ptr::addr_of!((*ptr).id) as usize - ptr as usize },
4964        0usize,
4965        "Offset of field: dpiSubscrMessageQuery::id"
4966    );
4967    assert_eq!(
4968        unsafe { ::std::ptr::addr_of!((*ptr).operation) as usize - ptr as usize },
4969        8usize,
4970        "Offset of field: dpiSubscrMessageQuery::operation"
4971    );
4972    assert_eq!(
4973        unsafe { ::std::ptr::addr_of!((*ptr).tables) as usize - ptr as usize },
4974        16usize,
4975        "Offset of field: dpiSubscrMessageQuery::tables"
4976    );
4977    assert_eq!(
4978        unsafe { ::std::ptr::addr_of!((*ptr).numTables) as usize - ptr as usize },
4979        24usize,
4980        "Offset of field: dpiSubscrMessageQuery::numTables"
4981    );
4982}
4983impl Default for dpiSubscrMessageQuery {
4984    fn default() -> Self {
4985        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4986        unsafe {
4987            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
4988            s.assume_init()
4989        }
4990    }
4991}
4992#[repr(C)]
4993#[derive(Debug, Copy, Clone)]
4994
4995/// This structure is used for passing information on the rows that were changed
4996/// and resulted in the notification message of which this structure is a part.
4997pub struct dpiSubscrMessageRow {
4998
4999    /// Specifies the operations that took place on the registered query. It will
5000    /// be one or more of the values from the enumeration
5001    /// [`dpiOpCode`], OR’ed together.
5002    pub operation: dpiOpCode,
5003
5004    /// Specifies the rowid of the row that was changed, in the encoding used for
5005    /// CHAR data.
5006    pub rowid: *const ::std::os::raw::c_char,
5007
5008    /// Specifies the length of the [`dpiSubscrMessageRow.rowid`] member, in
5009    /// bytes.
5010    pub rowidLength: u32,
5011}
5012#[test]
5013fn bindgen_test_layout_dpiSubscrMessageRow() {
5014    const UNINIT: ::std::mem::MaybeUninit<dpiSubscrMessageRow> = ::std::mem::MaybeUninit::uninit();
5015    let ptr = UNINIT.as_ptr();
5016    assert_eq!(
5017        ::std::mem::size_of::<dpiSubscrMessageRow>(),
5018        24usize,
5019        "Size of dpiSubscrMessageRow"
5020    );
5021    assert_eq!(
5022        ::std::mem::align_of::<dpiSubscrMessageRow>(),
5023        8usize,
5024        "Alignment of dpiSubscrMessageRow"
5025    );
5026    assert_eq!(
5027        unsafe { ::std::ptr::addr_of!((*ptr).operation) as usize - ptr as usize },
5028        0usize,
5029        "Offset of field: dpiSubscrMessageRow::operation"
5030    );
5031    assert_eq!(
5032        unsafe { ::std::ptr::addr_of!((*ptr).rowid) as usize - ptr as usize },
5033        8usize,
5034        "Offset of field: dpiSubscrMessageRow::rowid"
5035    );
5036    assert_eq!(
5037        unsafe { ::std::ptr::addr_of!((*ptr).rowidLength) as usize - ptr as usize },
5038        16usize,
5039        "Offset of field: dpiSubscrMessageRow::rowidLength"
5040    );
5041}
5042impl Default for dpiSubscrMessageRow {
5043    fn default() -> Self {
5044        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
5045        unsafe {
5046            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5047            s.assume_init()
5048        }
5049    }
5050}
5051#[repr(C)]
5052#[derive(Debug, Copy, Clone)]
5053
5054/// This structure is used for passing information on the tables that were changed
5055/// and resulted in the notification message of which this structure is a part.
5056pub struct dpiSubscrMessageTable {
5057
5058    /// Specifies the operations that took place on the modified table. It will
5059    /// be one or more of the values from the enumeration
5060    /// [`dpiOpCode`], OR’ed together.
5061    pub operation: dpiOpCode,
5062
5063    /// Specifies the name of the table that was changed, in the encoding used for
5064    /// CHAR data.
5065    pub name: *const ::std::os::raw::c_char,
5066
5067    /// Specifies the length of the [`dpiSubscrMessageRow.name`] member, in
5068    /// bytes.
5069    pub nameLength: u32,
5070
5071    /// Specifies a pointer to an array of
5072    /// [`dpiSubscrMessageRow`] structures representing the
5073    /// list of rows that were modified by the event which generated this
5074    /// notification.
5075    pub rows: *mut dpiSubscrMessageRow,
5076
5077    /// Specifies the number of structures available in the
5078    /// [`dpiSubscrMessageTable.rows`] member.
5079    pub numRows: u32,
5080}
5081#[test]
5082fn bindgen_test_layout_dpiSubscrMessageTable() {
5083    const UNINIT: ::std::mem::MaybeUninit<dpiSubscrMessageTable> =
5084        ::std::mem::MaybeUninit::uninit();
5085    let ptr = UNINIT.as_ptr();
5086    assert_eq!(
5087        ::std::mem::size_of::<dpiSubscrMessageTable>(),
5088        40usize,
5089        "Size of dpiSubscrMessageTable"
5090    );
5091    assert_eq!(
5092        ::std::mem::align_of::<dpiSubscrMessageTable>(),
5093        8usize,
5094        "Alignment of dpiSubscrMessageTable"
5095    );
5096    assert_eq!(
5097        unsafe { ::std::ptr::addr_of!((*ptr).operation) as usize - ptr as usize },
5098        0usize,
5099        "Offset of field: dpiSubscrMessageTable::operation"
5100    );
5101    assert_eq!(
5102        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
5103        8usize,
5104        "Offset of field: dpiSubscrMessageTable::name"
5105    );
5106    assert_eq!(
5107        unsafe { ::std::ptr::addr_of!((*ptr).nameLength) as usize - ptr as usize },
5108        16usize,
5109        "Offset of field: dpiSubscrMessageTable::nameLength"
5110    );
5111    assert_eq!(
5112        unsafe { ::std::ptr::addr_of!((*ptr).rows) as usize - ptr as usize },
5113        24usize,
5114        "Offset of field: dpiSubscrMessageTable::rows"
5115    );
5116    assert_eq!(
5117        unsafe { ::std::ptr::addr_of!((*ptr).numRows) as usize - ptr as usize },
5118        32usize,
5119        "Offset of field: dpiSubscrMessageTable::numRows"
5120    );
5121}
5122impl Default for dpiSubscrMessageTable {
5123    fn default() -> Self {
5124        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
5125        unsafe {
5126            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5127            s.assume_init()
5128        }
5129    }
5130}
5131#[repr(C)]
5132#[derive(Debug, Default, Copy, Clone)]
5133
5134/// This structure is used for returning Oracle version information about the
5135/// Oracle Client ([`dpiContext_getClientVersion()`]) and Oracle Database
5136/// ([`dpiConn_getServerVersion()`]).
5137pub struct dpiVersionInfo {
5138
5139    /// Specifies the major version of the Oracle Client or Database.
5140    pub versionNum: ::std::os::raw::c_int,
5141
5142    /// Specifies the release version of the Oracle Client or Database.
5143    pub releaseNum: ::std::os::raw::c_int,
5144
5145    /// Specifies the update version of the Oracle Client or Database.
5146    pub updateNum: ::std::os::raw::c_int,
5147
5148    /// Specifies the port specific release version of the Oracle Client or
5149    /// Database.
5150    pub portReleaseNum: ::std::os::raw::c_int,
5151
5152    /// Specifies the port specific update version of the Oracle Client or
5153    /// Database.
5154    pub portUpdateNum: ::std::os::raw::c_int,
5155
5156    /// Specifies the full version (all five components) as a number that is
5157    /// suitable for comparison with the result of the macro
5158    /// DPI_ORACLE_VERSION_TO_NUMBER.
5159    pub fullVersionNum: u32,
5160}
5161#[test]
5162fn bindgen_test_layout_dpiVersionInfo() {
5163    const UNINIT: ::std::mem::MaybeUninit<dpiVersionInfo> = ::std::mem::MaybeUninit::uninit();
5164    let ptr = UNINIT.as_ptr();
5165    assert_eq!(
5166        ::std::mem::size_of::<dpiVersionInfo>(),
5167        24usize,
5168        "Size of dpiVersionInfo"
5169    );
5170    assert_eq!(
5171        ::std::mem::align_of::<dpiVersionInfo>(),
5172        4usize,
5173        "Alignment of dpiVersionInfo"
5174    );
5175    assert_eq!(
5176        unsafe { ::std::ptr::addr_of!((*ptr).versionNum) as usize - ptr as usize },
5177        0usize,
5178        "Offset of field: dpiVersionInfo::versionNum"
5179    );
5180    assert_eq!(
5181        unsafe { ::std::ptr::addr_of!((*ptr).releaseNum) as usize - ptr as usize },
5182        4usize,
5183        "Offset of field: dpiVersionInfo::releaseNum"
5184    );
5185    assert_eq!(
5186        unsafe { ::std::ptr::addr_of!((*ptr).updateNum) as usize - ptr as usize },
5187        8usize,
5188        "Offset of field: dpiVersionInfo::updateNum"
5189    );
5190    assert_eq!(
5191        unsafe { ::std::ptr::addr_of!((*ptr).portReleaseNum) as usize - ptr as usize },
5192        12usize,
5193        "Offset of field: dpiVersionInfo::portReleaseNum"
5194    );
5195    assert_eq!(
5196        unsafe { ::std::ptr::addr_of!((*ptr).portUpdateNum) as usize - ptr as usize },
5197        16usize,
5198        "Offset of field: dpiVersionInfo::portUpdateNum"
5199    );
5200    assert_eq!(
5201        unsafe { ::std::ptr::addr_of!((*ptr).fullVersionNum) as usize - ptr as usize },
5202        20usize,
5203        "Offset of field: dpiVersionInfo::fullVersionNum"
5204    );
5205}
5206#[repr(C)]
5207#[derive(Copy, Clone)]
5208
5209/// This union is used for passing vector dimensions to and from the database
5210/// without requiring casts.
5211pub union dpiVectorDimensionBuffer {
5212
5213    /// Raw pointer to dimension buffer.
5214    pub asPtr: *mut ::std::os::raw::c_void,
5215
5216    /// Pointer to dimension buffer when vector format is VECTOR_FORMAT_INT8.
5217    pub asInt8: *mut i8,
5218
5219    /// Pointer to dimension buffer when vector format is VECTOR_FORMAT_FLOAT32.
5220    pub asFloat: *mut f32,
5221
5222    /// Pointer to dimension buffer when vector format is VECTOR_FORMAT_FLOAT64.
5223    pub asDouble: *mut f64,
5224}
5225#[test]
5226fn bindgen_test_layout_dpiVectorDimensionBuffer() {
5227    const UNINIT: ::std::mem::MaybeUninit<dpiVectorDimensionBuffer> =
5228        ::std::mem::MaybeUninit::uninit();
5229    let ptr = UNINIT.as_ptr();
5230    assert_eq!(
5231        ::std::mem::size_of::<dpiVectorDimensionBuffer>(),
5232        8usize,
5233        "Size of dpiVectorDimensionBuffer"
5234    );
5235    assert_eq!(
5236        ::std::mem::align_of::<dpiVectorDimensionBuffer>(),
5237        8usize,
5238        "Alignment of dpiVectorDimensionBuffer"
5239    );
5240    assert_eq!(
5241        unsafe { ::std::ptr::addr_of!((*ptr).asPtr) as usize - ptr as usize },
5242        0usize,
5243        "Offset of field: dpiVectorDimensionBuffer::asPtr"
5244    );
5245    assert_eq!(
5246        unsafe { ::std::ptr::addr_of!((*ptr).asInt8) as usize - ptr as usize },
5247        0usize,
5248        "Offset of field: dpiVectorDimensionBuffer::asInt8"
5249    );
5250    assert_eq!(
5251        unsafe { ::std::ptr::addr_of!((*ptr).asFloat) as usize - ptr as usize },
5252        0usize,
5253        "Offset of field: dpiVectorDimensionBuffer::asFloat"
5254    );
5255    assert_eq!(
5256        unsafe { ::std::ptr::addr_of!((*ptr).asDouble) as usize - ptr as usize },
5257        0usize,
5258        "Offset of field: dpiVectorDimensionBuffer::asDouble"
5259    );
5260}
5261impl Default for dpiVectorDimensionBuffer {
5262    fn default() -> Self {
5263        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
5264        unsafe {
5265            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5266            s.assume_init()
5267        }
5268    }
5269}
5270#[repr(C)]
5271#[derive(Copy, Clone)]
5272
5273/// This structure is used for providing or receiving information about a vector.
5274pub struct dpiVectorInfo {
5275
5276    /// Specifies the storage format for the vector. It should be one of the values
5277    /// from the enumeration [`dpiVectorFormat`].
5278    pub format: u8,
5279
5280    /// Specifies the number of dimensions the vector contains.
5281    pub numDimensions: u32,
5282
5283    /// Specifies the size (in bytes) of each dimension of the vector. This value
5284    /// does not need to be specified on input but is populated on output as a
5285    /// convenience.
5286    pub dimensionSize: u8,
5287
5288    /// Specifies the buffer for the dimensions. On input the buffer must remain
5289    /// valid for the duration of the call into ODPI-C. On output the buffer will
5290    /// remain valid as long as the vector object remains valid and the contents of
5291    /// the vector are not changed. See the
5292    /// [`dpiVectorDimensionBuffer`] union for more
5293    /// information.
5294    /// 
5295    /// For dense vectors, the length of this array is defined by the
5296    /// [`dpiVectorInfo.numDimensions`] member. For sparse vectors, the
5297    /// length of this array is defined by the
5298    /// [`dpiVectorInfo.numSparseValues`] member.
5299    pub dimensions: dpiVectorDimensionBuffer,
5300
5301    /// Specifies the number of values that a sparse vector contains that are
5302    /// non-zero. If this value is 0, the vector is considered a dense vector.
5303    pub numSparseValues: u32,
5304
5305    /// Specifies an array of sparse vector indices. Each element in this array is
5306    /// the index of a non-zero value in the vector. The length of this array is
5307    /// defined by the [`dpiVectorInfo.numSparseValues`] member. If the
5308    /// vector is not a sparse vector, this value will be NULL.
5309    pub sparseIndices: *mut u32,
5310}
5311#[test]
5312fn bindgen_test_layout_dpiVectorInfo() {
5313    const UNINIT: ::std::mem::MaybeUninit<dpiVectorInfo> = ::std::mem::MaybeUninit::uninit();
5314    let ptr = UNINIT.as_ptr();
5315    assert_eq!(
5316        ::std::mem::size_of::<dpiVectorInfo>(),
5317        40usize,
5318        "Size of dpiVectorInfo"
5319    );
5320    assert_eq!(
5321        ::std::mem::align_of::<dpiVectorInfo>(),
5322        8usize,
5323        "Alignment of dpiVectorInfo"
5324    );
5325    assert_eq!(
5326        unsafe { ::std::ptr::addr_of!((*ptr).format) as usize - ptr as usize },
5327        0usize,
5328        "Offset of field: dpiVectorInfo::format"
5329    );
5330    assert_eq!(
5331        unsafe { ::std::ptr::addr_of!((*ptr).numDimensions) as usize - ptr as usize },
5332        4usize,
5333        "Offset of field: dpiVectorInfo::numDimensions"
5334    );
5335    assert_eq!(
5336        unsafe { ::std::ptr::addr_of!((*ptr).dimensionSize) as usize - ptr as usize },
5337        8usize,
5338        "Offset of field: dpiVectorInfo::dimensionSize"
5339    );
5340    assert_eq!(
5341        unsafe { ::std::ptr::addr_of!((*ptr).dimensions) as usize - ptr as usize },
5342        16usize,
5343        "Offset of field: dpiVectorInfo::dimensions"
5344    );
5345    assert_eq!(
5346        unsafe { ::std::ptr::addr_of!((*ptr).numSparseValues) as usize - ptr as usize },
5347        24usize,
5348        "Offset of field: dpiVectorInfo::numSparseValues"
5349    );
5350    assert_eq!(
5351        unsafe { ::std::ptr::addr_of!((*ptr).sparseIndices) as usize - ptr as usize },
5352        32usize,
5353        "Offset of field: dpiVectorInfo::sparseIndices"
5354    );
5355}
5356impl Default for dpiVectorInfo {
5357    fn default() -> Self {
5358        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
5359        unsafe {
5360            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5361            s.assume_init()
5362        }
5363    }
5364}
5365#[repr(C)]
5366#[derive(Debug, Copy, Clone)]
5367
5368/// This structure is used for identifying a TPC (two-phase commit) transaction. It
5369/// is used by the TPC functions [`dpiConn_tpcBegin()`],
5370/// [`dpiConn_tpcCommit()`], [`dpiConn_tpcEnd()`],
5371/// [`dpiConn_tpcForget()`], [`dpiConn_tpcPrepare()`] and
5372/// [`dpiConn_tpcRollback()`].
5373pub struct dpiXid {
5374
5375    /// An integer identifying the format the transaction id is expected to take.
5376    /// A value of -1 implies that the XID value is NULL.
5377    pub formatId: ::std::os::raw::c_long,
5378
5379    /// Specifies the global transaction identifier of the XID.
5380    pub globalTransactionId: *const ::std::os::raw::c_char,
5381
5382    /// Specifies the length of the [`dpiXid.globalTransactionId`] member, in
5383    /// bytes. The maximum supported length is 64 bytes.
5384    pub globalTransactionIdLength: u32,
5385
5386    /// Specifies the branch qualifier of the XID.
5387    pub branchQualifier: *const ::std::os::raw::c_char,
5388
5389    /// Specifies the length of the [`dpiXid.branchQualifier`] member, in
5390    /// bytes. The maximum supported length is 64 bytes.
5391    pub branchQualifierLength: u32,
5392}
5393#[test]
5394fn bindgen_test_layout_dpiXid() {
5395    const UNINIT: ::std::mem::MaybeUninit<dpiXid> = ::std::mem::MaybeUninit::uninit();
5396    let ptr = UNINIT.as_ptr();
5397    assert_eq!(::std::mem::size_of::<dpiXid>(), 40usize, "Size of dpiXid");
5398    assert_eq!(
5399        ::std::mem::align_of::<dpiXid>(),
5400        8usize,
5401        "Alignment of dpiXid"
5402    );
5403    assert_eq!(
5404        unsafe { ::std::ptr::addr_of!((*ptr).formatId) as usize - ptr as usize },
5405        0usize,
5406        "Offset of field: dpiXid::formatId"
5407    );
5408    assert_eq!(
5409        unsafe { ::std::ptr::addr_of!((*ptr).globalTransactionId) as usize - ptr as usize },
5410        8usize,
5411        "Offset of field: dpiXid::globalTransactionId"
5412    );
5413    assert_eq!(
5414        unsafe { ::std::ptr::addr_of!((*ptr).globalTransactionIdLength) as usize - ptr as usize },
5415        16usize,
5416        "Offset of field: dpiXid::globalTransactionIdLength"
5417    );
5418    assert_eq!(
5419        unsafe { ::std::ptr::addr_of!((*ptr).branchQualifier) as usize - ptr as usize },
5420        24usize,
5421        "Offset of field: dpiXid::branchQualifier"
5422    );
5423    assert_eq!(
5424        unsafe { ::std::ptr::addr_of!((*ptr).branchQualifierLength) as usize - ptr as usize },
5425        32usize,
5426        "Offset of field: dpiXid::branchQualifierLength"
5427    );
5428}
5429impl Default for dpiXid {
5430    fn default() -> Self {
5431        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
5432        unsafe {
5433            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5434            s.assume_init()
5435        }
5436    }
5437}
5438extern "C" {
5439
5440    /// Creates a new context for interaction with the library. This is the first
5441    /// function that must be called and it must have completed successfully before
5442    /// any other functions can be called, including in other threads.
5443    /// 
5444    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5445    /// If a failure occurs, the errorInfo structure is filled in with error
5446    /// information.
5447    pub fn dpiContext_createWithParams(
5448        majorVersion: ::std::os::raw::c_uint,
5449        minorVersion: ::std::os::raw::c_uint,
5450        params: *mut dpiContextCreateParams,
5451        context: *mut *mut dpiContext,
5452        errorInfo: *mut dpiErrorInfo,
5453    ) -> ::std::os::raw::c_int;
5454}
5455extern "C" {
5456
5457    /// Destroys the context that was earlier created with the function
5458    /// [`dpiContext_createWithParams()`].
5459    /// 
5460    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5461    pub fn dpiContext_destroy(context: *mut dpiContext) -> ::std::os::raw::c_int;
5462}
5463extern "C" {
5464
5465    /// Frees the memory associated with the string list allocated by a call to
5466    /// one of the functions [`dpiSodaDb_getCollectionNames()`]
5467    /// or [`dpiSodaColl_listIndexes()`]. This function should not be
5468    /// called without first calling one of those functions first.
5469    /// 
5470    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5471    pub fn dpiContext_freeStringList(
5472        context: *mut dpiContext,
5473        list: *mut dpiStringList,
5474    ) -> ::std::os::raw::c_int;
5475}
5476extern "C" {
5477
5478    /// Return information about the version of the Oracle Client that is being
5479    /// used.
5480    /// 
5481    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5482    pub fn dpiContext_getClientVersion(
5483        context: *const dpiContext,
5484        versionInfo: *mut dpiVersionInfo,
5485    ) -> ::std::os::raw::c_int;
5486}
5487extern "C" {
5488
5489    /// Returns information for the last error or warning that was raised by the
5490    /// library. This function must be called with the same thread that generated
5491    /// the error or warning. It must also be called before any other ODPI-C
5492    /// library calls are made on the calling thread since the error/warning
5493    /// information specific to that thread is cleared at the start of every ODPI-C
5494    /// function call.
5495    pub fn dpiContext_getError(context: *const dpiContext, errorInfo: *mut dpiErrorInfo);
5496}
5497extern "C" {
5498
5499    /// Initializes the [`dpiCommonCreateParams`]
5500    /// structure to default values.
5501    /// 
5502    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5503    pub fn dpiContext_initCommonCreateParams(
5504        context: *const dpiContext,
5505        params: *mut dpiCommonCreateParams,
5506    ) -> ::std::os::raw::c_int;
5507}
5508extern "C" {
5509
5510    /// Initializes the [`dpiConnCreateParams`] structure
5511    /// to default values.
5512    /// 
5513    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5514    pub fn dpiContext_initConnCreateParams(
5515        context: *const dpiContext,
5516        params: *mut dpiConnCreateParams,
5517    ) -> ::std::os::raw::c_int;
5518}
5519extern "C" {
5520
5521    /// Initializes the [`dpiPoolCreateParams`] structure
5522    /// to default values.
5523    /// 
5524    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5525    pub fn dpiContext_initPoolCreateParams(
5526        context: *const dpiContext,
5527        params: *mut dpiPoolCreateParams,
5528    ) -> ::std::os::raw::c_int;
5529}
5530extern "C" {
5531
5532    /// Initializes the [`dpiSodaOperOptions`]
5533    /// structure to default values.
5534    /// 
5535    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5536    pub fn dpiContext_initSodaOperOptions(
5537        context: *const dpiContext,
5538        options: *mut dpiSodaOperOptions,
5539    ) -> ::std::os::raw::c_int;
5540}
5541extern "C" {
5542
5543    /// Initializes the [`dpiSubscrCreateParams`]
5544    /// structure to default values.
5545    /// 
5546    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5547    pub fn dpiContext_initSubscrCreateParams(
5548        context: *const dpiContext,
5549        params: *mut dpiSubscrCreateParams,
5550    ) -> ::std::os::raw::c_int;
5551}
5552extern "C" {
5553
5554    /// Adds a reference to the connection. This is intended for situations where a
5555    /// reference to the connection needs to be maintained independently of the
5556    /// reference returned when the connection was created.
5557    /// 
5558    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5559    pub fn dpiConn_addRef(conn: *mut dpiConn) -> ::std::os::raw::c_int;
5560}
5561extern "C" {
5562
5563    /// Returns the current call timeout (in milliseconds) used for round-trips to
5564    /// the database made with this connection. A value of 0 means that no timeouts
5565    /// will take place. This value can be set using the function
5566    /// [`dpiConn_setCallTimeout()`].
5567    /// 
5568    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5569    pub fn dpiConn_getCallTimeout(conn: *mut dpiConn, value: *mut u32) -> ::std::os::raw::c_int;
5570}
5571extern "C" {
5572
5573    /// Returns the current schema that is being used by the connection.
5574    /// 
5575    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5576    pub fn dpiConn_getCurrentSchema(
5577        conn: *mut dpiConn,
5578        value: *mut *const ::std::os::raw::c_char,
5579        valueLength: *mut u32,
5580    ) -> ::std::os::raw::c_int;
5581}
5582extern "C" {
5583
5584    /// Returns the Oracle Database Domain name associated with the connection.
5585    /// This is the same value returned by the SQL expression
5586    /// `SELECT value FROM V$PARAMETER WHERE NAME = 'db_domain'`.
5587    /// 
5588    /// This function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5589    pub fn dpiConn_getDbDomain(
5590        conn: *mut dpiConn,
5591        value: *mut *const ::std::os::raw::c_char,
5592        valueLength: *mut u32,
5593    ) -> ::std::os::raw::c_int;
5594}
5595extern "C" {
5596
5597    /// Returns the Oracle Database name associated with the connection. This is
5598    /// the same value returned by the SQL expression
5599    /// `SELECT NAME FROM V$DATABASE`.
5600    /// 
5601    /// This function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5602    pub fn dpiConn_getDbName(
5603        conn: *mut dpiConn,
5604        value: *mut *const ::std::os::raw::c_char,
5605        valueLength: *mut u32,
5606    ) -> ::std::os::raw::c_int;
5607}
5608extern "C" {
5609
5610    /// Returns the edition that is being used by the connection.
5611    /// 
5612    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5613    pub fn dpiConn_getEdition(
5614        conn: *mut dpiConn,
5615        value: *mut *const ::std::os::raw::c_char,
5616        valueLength: *mut u32,
5617    ) -> ::std::os::raw::c_int;
5618}
5619extern "C" {
5620
5621    /// Returns the encoding information used by the connection. This will be
5622    /// equivalent to the values passed when the standalone connection or session
5623    /// pool was created, or the values retrieved from the environment variables
5624    /// NLS_LANG and NLS_NCHAR.
5625    /// 
5626    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5627    pub fn dpiConn_getEncodingInfo(
5628        conn: *mut dpiConn,
5629        info: *mut dpiEncodingInfo,
5630    ) -> ::std::os::raw::c_int;
5631}
5632extern "C" {
5633
5634    /// Returns the external name that is being used by the connection. This value
5635    /// is used when logging distributed transactions.
5636    /// 
5637    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5638    pub fn dpiConn_getExternalName(
5639        conn: *mut dpiConn,
5640        value: *mut *const ::std::os::raw::c_char,
5641        valueLength: *mut u32,
5642    ) -> ::std::os::raw::c_int;
5643}
5644extern "C" {
5645
5646    /// Returns the OCI service context handle in use by the connection.
5647    /// 
5648    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5649    pub fn dpiConn_getHandle(
5650        conn: *mut dpiConn,
5651        handle: *mut *mut ::std::os::raw::c_void,
5652    ) -> ::std::os::raw::c_int;
5653}
5654extern "C" {
5655
5656    /// Returns information about the connection.
5657    /// 
5658    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5659    pub fn dpiConn_getInfo(conn: *mut dpiConn, info: *mut dpiConnInfo) -> ::std::os::raw::c_int;
5660}
5661extern "C" {
5662
5663    /// Returns the Oracle Database instance name associated with the connection.
5664    /// This is the same value returned by the SQL expression
5665    /// `sys_context('userenv', 'instance_name')`.
5666    /// 
5667    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5668    pub fn dpiConn_getInstanceName(
5669        conn: *mut dpiConn,
5670        value: *mut *const ::std::os::raw::c_char,
5671        valueLength: *mut u32,
5672    ) -> ::std::os::raw::c_int;
5673}
5674extern "C" {
5675
5676    /// Returns the internal name that is being used by the connection. This value
5677    /// is used when logging distributed transactions.
5678    /// 
5679    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5680    pub fn dpiConn_getInternalName(
5681        conn: *mut dpiConn,
5682        value: *mut *const ::std::os::raw::c_char,
5683        valueLength: *mut u32,
5684    ) -> ::std::os::raw::c_int;
5685}
5686extern "C" {
5687
5688    /// Checks if a connection is usable. Connections may become unusable in
5689    /// several cases, such as if the network socket is broken, if an Oracle error
5690    /// indicates the connection is unusable or after receiving a planned down
5691    /// notification from the database.
5692    /// 
5693    /// This function is best used before starting a new database request on an
5694    /// existing standalone connection. Pooled connections internally perform this
5695    /// check before returning a connection to the application.
5696    /// 
5697    /// Avoid using this function when database requests are in progress.
5698    /// 
5699    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5700    /// If DPI_FAILURE is returned, the connection should be not be used by the
5701    /// application and a new connection should be established instead.
5702    /// 
5703    /// This function performs a local check. To fully check a connection’s health,
5704    /// use [`dpiConn_ping()`].
5705    pub fn dpiConn_getIsHealthy(
5706        conn: *mut dpiConn,
5707        isHealthy: *mut ::std::os::raw::c_int,
5708    ) -> ::std::os::raw::c_int;
5709}
5710extern "C" {
5711
5712    /// Returns the logical transaction id for the connection. This value is used
5713    /// in Transaction Guard to determine if the last failed call was completed and
5714    /// if the transaction was committed using the procedure call
5715    /// dbms_app_cont.get_ltxid_outcome().
5716    /// 
5717    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5718    pub fn dpiConn_getLTXID(
5719        conn: *mut dpiConn,
5720        value: *mut *const ::std::os::raw::c_char,
5721        valueLength: *mut u32,
5722    ) -> ::std::os::raw::c_int;
5723}
5724extern "C" {
5725
5726    /// Returns the maximum number of cursors that can be opened. This is the same
5727    /// value returned by the SQL expression
5728    /// `SELECT VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors'`.
5729    /// 
5730    /// This function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5731    pub fn dpiConn_getMaxOpenCursors(
5732        conn: *mut dpiConn,
5733        maxOpenCursors: *mut u32,
5734    ) -> ::std::os::raw::c_int;
5735}
5736extern "C" {
5737
5738    /// Returns the value of an OCI attribute. This is intended solely for testing
5739    /// attributes that are not otherwise supported by ODPI-C and should not be
5740    /// used for any other purpose. Use only as directed by Oracle.
5741    /// 
5742    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5743    pub fn dpiConn_getOciAttr(
5744        conn: *mut dpiConn,
5745        handleType: u32,
5746        attribute: u32,
5747        value: *mut dpiDataBuffer,
5748        valueLength: *mut u32,
5749    ) -> ::std::os::raw::c_int;
5750}
5751extern "C" {
5752
5753    /// Returns the Oracle Database service name associated with the connection.
5754    /// This is the same value returned by the SQL expression
5755    /// `SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') FROM DUAL`.
5756    /// 
5757    /// This function returns DPI_SCCUESS for success and DPI_FAILURE for failure.
5758    pub fn dpiConn_getServiceName(
5759        conn: *mut dpiConn,
5760        value: *mut *const ::std::os::raw::c_char,
5761        valueLength: *mut u32,
5762    ) -> ::std::os::raw::c_int;
5763}
5764extern "C" {
5765
5766    /// Returns the size of the statement cache, in number of statements.
5767    /// 
5768    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5769    pub fn dpiConn_getStmtCacheSize(
5770        conn: *mut dpiConn,
5771        cacheSize: *mut u32,
5772    ) -> ::std::os::raw::c_int;
5773}
5774extern "C" {
5775
5776    /// Returns whether a transaction is in progress or not.
5777    /// 
5778    /// This function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5779    pub fn dpiConn_getTransactionInProgress(
5780        conn: *mut dpiConn,
5781        txnInProgress: *mut ::std::os::raw::c_int,
5782    ) -> ::std::os::raw::c_int;
5783}
5784extern "C" {
5785
5786    /// Returns a reference to a new set of dequeue options, used in dequeuing
5787    /// objects from a queue. The reference should be released as soon as it is no
5788    /// longer needed. This function is deprecated and will be removed in version
5789    /// 4. The function [`dpiQueue_getDeqOptions()`] should be used instead.
5790    /// 
5791    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5792    pub fn dpiConn_newDeqOptions(
5793        conn: *mut dpiConn,
5794        options: *mut *mut dpiDeqOptions,
5795    ) -> ::std::os::raw::c_int;
5796}
5797extern "C" {
5798
5799    /// Returns a reference to a new set of enqueue options, used in enqueuing
5800    /// objects into a queue. The reference should be released as soon as it is no
5801    /// longer needed. This function is deprecated and will be removed in version
5802    /// 4. The function [`dpiQueue_getEnqOptions()`] should be used instead.
5803    /// 
5804    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5805    pub fn dpiConn_newEnqOptions(
5806        conn: *mut dpiConn,
5807        options: *mut *mut dpiEnqOptions,
5808    ) -> ::std::os::raw::c_int;
5809}
5810extern "C" {
5811
5812    /// Returns a reference to a new JSON object. This object can be used as the
5813    /// payload in a message enqueued in a JSON queue, or as the value for a
5814    /// variable. The reference should be released by calling
5815    /// [`dpiJson_release()`] as soon as it is no longer needed.
5816    /// 
5817    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5818    pub fn dpiConn_newJson(conn: *mut dpiConn, json: *mut *mut dpiJson) -> ::std::os::raw::c_int;
5819}
5820extern "C" {
5821
5822    /// Returns a reference to a new queue which enqueues and dequeues messages
5823    /// from Advanced Queueing (AQ) with a JSON payload. The reference should be
5824    /// released by calling [`dpiQueue_release()`] as soon as it is no longer
5825    /// needed. For queues with RAW or Database Object payloads, use the method
5826    /// [`dpiConn_newQueue()`] instead.
5827    /// 
5828    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5829    pub fn dpiConn_newJsonQueue(
5830        conn: *mut dpiConn,
5831        name: *const ::std::os::raw::c_char,
5832        nameLength: u32,
5833        queue: *mut *mut dpiQueue,
5834    ) -> ::std::os::raw::c_int;
5835}
5836extern "C" {
5837
5838    /// Returns a reference to a new set of message properties, used in enqueuing
5839    /// and dequeuing objects in a queue. The reference should be released as soon
5840    /// as it is no longer needed.
5841    /// 
5842    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5843    pub fn dpiConn_newMsgProps(
5844        conn: *mut dpiConn,
5845        props: *mut *mut dpiMsgProps,
5846    ) -> ::std::os::raw::c_int;
5847}
5848extern "C" {
5849
5850    /// Returns a reference to a new queue which may be used to enqueue and dequeue
5851    /// messages from Advanced Queuing (AQ) queues. The reference should be
5852    /// released by calling [`dpiQueue_release()`] as soon as it is no longer
5853    /// needed.
5854    /// 
5855    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5856    pub fn dpiConn_newQueue(
5857        conn: *mut dpiConn,
5858        name: *const ::std::os::raw::c_char,
5859        nameLength: u32,
5860        payloadType: *mut dpiObjectType,
5861        queue: *mut *mut dpiQueue,
5862    ) -> ::std::os::raw::c_int;
5863}
5864extern "C" {
5865
5866    /// Returns a reference to a new variable which can be used for binding data to
5867    /// a statement or providing a buffer for querying data from the database.
5868    /// The reference should be released as soon as it is no longer needed.
5869    /// 
5870    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5871    pub fn dpiConn_newVar(
5872        conn: *mut dpiConn,
5873        oracleTypeNum: dpiOracleTypeNum,
5874        nativeTypeNum: dpiNativeTypeNum,
5875        maxArraySize: u32,
5876        size: u32,
5877        sizeIsBytes: ::std::os::raw::c_int,
5878        isArray: ::std::os::raw::c_int,
5879        objType: *mut dpiObjectType,
5880        var: *mut *mut dpiVar,
5881        data: *mut *mut dpiData,
5882    ) -> ::std::os::raw::c_int;
5883}
5884extern "C" {
5885
5886    /// Returns a reference to a new vector object. This object can be used as the
5887    /// value for a variable. The reference should be released by calling
5888    /// [`dpiVector_release()`] as soon as it is no longer needed.
5889    /// 
5890    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5891    pub fn dpiConn_newVector(
5892        conn: *mut dpiConn,
5893        info: *mut dpiVectorInfo,
5894        vector: *mut *mut dpiVector,
5895    ) -> ::std::os::raw::c_int;
5896}
5897extern "C" {
5898
5899    /// Returns a reference to a statement prepared for execution. The reference
5900    /// should be released as soon as it is no longer needed.
5901    /// 
5902    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5903    pub fn dpiConn_prepareStmt(
5904        conn: *mut dpiConn,
5905        scrollable: ::std::os::raw::c_int,
5906        sql: *const ::std::os::raw::c_char,
5907        sqlLength: u32,
5908        tag: *const ::std::os::raw::c_char,
5909        tagLength: u32,
5910        stmt: *mut *mut dpiStmt,
5911    ) -> ::std::os::raw::c_int;
5912}
5913extern "C" {
5914
5915    /// Sets the action attribute on the connection. This is one of the end-to-end
5916    /// tracing attributes that can be tracked in database views, shown in audit
5917    /// trails and seen in tools such as Enterprise Manager.
5918    /// 
5919    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5920    pub fn dpiConn_setAction(
5921        conn: *mut dpiConn,
5922        value: *const ::std::os::raw::c_char,
5923        valueLength: u32,
5924    ) -> ::std::os::raw::c_int;
5925}
5926extern "C" {
5927
5928    /// Sets the call timeout (in milliseconds) to be used for round-trips to the
5929    /// database made with this connection. A value of 0 means that no timeouts
5930    /// will take place. The current value can be acquired using the function
5931    /// [`dpiConn_getCallTimeout()`].
5932    /// 
5933    /// The call timeout value applies to each database round-trip
5934    /// individually, not to the sum of all round-trips. Time spent
5935    /// processing in ODPI-C before or after the completion of each
5936    /// round-trip is not counted.
5937    /// 
5938    /// After a timeout is triggered, ODPI-C attempts to clean up the
5939    /// internal connection state. The cleanup is allowed to take another
5940    /// `value` milliseconds.
5941    /// 
5942    /// If the cleanup was successful, an exception DPI-1067 will be
5943    /// raised but the application can continue to use the connection.
5944    /// 
5945    /// For small values of call timeout, the connection cleanup may not
5946    /// complete successfully within the additional call timeout
5947    /// period. In this case an exception ORA-3114 is raised and the
5948    /// connection will no longer be usable. It should be closed.
5949    /// 
5950    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5951    pub fn dpiConn_setCallTimeout(conn: *mut dpiConn, value: u32) -> ::std::os::raw::c_int;
5952}
5953extern "C" {
5954
5955    /// Sets the client identifier attribute on the connection. This is one of the
5956    /// end-to-end tracing attributes that can be tracked in database views, shown
5957    /// in audit trails and seen in tools such as Enterprise Manager.
5958    /// 
5959    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5960    pub fn dpiConn_setClientIdentifier(
5961        conn: *mut dpiConn,
5962        value: *const ::std::os::raw::c_char,
5963        valueLength: u32,
5964    ) -> ::std::os::raw::c_int;
5965}
5966extern "C" {
5967
5968    /// Sets the client info attribute on the connection. This is one of the
5969    /// end-to-end tracing attributes that can be tracked in database views, shown
5970    /// in audit trails and seen in tools such as Enterprise Manager.
5971    /// 
5972    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5973    pub fn dpiConn_setClientInfo(
5974        conn: *mut dpiConn,
5975        value: *const ::std::os::raw::c_char,
5976        valueLength: u32,
5977    ) -> ::std::os::raw::c_int;
5978}
5979extern "C" {
5980
5981    /// Sets the current schema to be used on the connection. This has the same
5982    /// effect as the SQL statement ALTER SESSION SET CURRENT_SCHEMA. The value
5983    /// be changed when the next call requiring a round trip to the server is
5984    /// performed. If the new schema name does not exist, the same error is
5985    /// returned as when the alter session statement is executed. The new schema
5986    /// name is placed before database objects in statement that you execute that
5987    /// do not already have a schema.
5988    /// 
5989    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
5990    pub fn dpiConn_setCurrentSchema(
5991        conn: *mut dpiConn,
5992        value: *const ::std::os::raw::c_char,
5993        valueLength: u32,
5994    ) -> ::std::os::raw::c_int;
5995}
5996extern "C" {
5997
5998    /// Sets the database operation attribute on the connection. This is one of the
5999    /// end-to-end tracing attributes that can be tracked in database views, shown
6000    /// in audit trails and seen in tools such as Enterprise Manager.
6001    /// 
6002    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6003    pub fn dpiConn_setDbOp(
6004        conn: *mut dpiConn,
6005        value: *const ::std::os::raw::c_char,
6006        valueLength: u32,
6007    ) -> ::std::os::raw::c_int;
6008}
6009extern "C" {
6010
6011    /// Sets the execution context id attribute on the connection. This is one of
6012    /// the end-to-end tracing attributes that can be tracked in database views,
6013    /// shown in audit trails and seen in tools such as Enterprise Manager.
6014    /// 
6015    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6016    pub fn dpiConn_setEcontextId(
6017        conn: *mut dpiConn,
6018        value: *const ::std::os::raw::c_char,
6019        valueLength: u32,
6020    ) -> ::std::os::raw::c_int;
6021}
6022extern "C" {
6023
6024    /// Sets the external name that is being used by the connection. This value is
6025    /// used when logging distributed transactions.
6026    /// 
6027    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6028    pub fn dpiConn_setExternalName(
6029        conn: *mut dpiConn,
6030        value: *const ::std::os::raw::c_char,
6031        valueLength: u32,
6032    ) -> ::std::os::raw::c_int;
6033}
6034extern "C" {
6035
6036    /// Sets the internal name that is being used by the connection. This value is
6037    /// used when logging distributed transactions.
6038    /// 
6039    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6040    pub fn dpiConn_setInternalName(
6041        conn: *mut dpiConn,
6042        value: *const ::std::os::raw::c_char,
6043        valueLength: u32,
6044    ) -> ::std::os::raw::c_int;
6045}
6046extern "C" {
6047
6048    /// Sets the module attribute on the connection. This is one of the end-to-end
6049    /// tracing attributes that can be tracked in database views, shown in audit
6050    /// trails and seen in tools such as Enterprise Manager.
6051    /// 
6052    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6053    pub fn dpiConn_setModule(
6054        conn: *mut dpiConn,
6055        value: *const ::std::os::raw::c_char,
6056        valueLength: u32,
6057    ) -> ::std::os::raw::c_int;
6058}
6059extern "C" {
6060
6061    /// Sets the value of an OCI attribute. This is intended solely for testing
6062    /// attributes that are not otherwise supported by ODPI-C and should not be
6063    /// used for any other purpose. Use only as directed by Oracle.
6064    /// 
6065    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6066    pub fn dpiConn_setOciAttr(
6067        conn: *mut dpiConn,
6068        handleType: u32,
6069        attribute: u32,
6070        value: *mut ::std::os::raw::c_void,
6071        valueLength: u32,
6072    ) -> ::std::os::raw::c_int;
6073}
6074extern "C" {
6075
6076    /// Sets the size of the statement cache.
6077    /// 
6078    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6079    pub fn dpiConn_setStmtCacheSize(conn: *mut dpiConn, cacheSize: u32) -> ::std::os::raw::c_int;
6080}
6081extern "C" {
6082
6083    /// Returns the value of the data when the native type is
6084    /// DPI_NATIVE_TYPE_BOOLEAN.
6085    pub fn dpiData_getBool(data: *mut dpiData) -> ::std::os::raw::c_int;
6086}
6087extern "C" {
6088
6089    /// Returns a pointer to the value of the data when the native type is
6090    /// DPI_NATIVE_TYPE_BYTES.
6091    pub fn dpiData_getBytes(data: *mut dpiData) -> *mut dpiBytes;
6092}
6093extern "C" {
6094
6095    /// Returns the value of the data when the native type is
6096    /// DPI_NATIVE_TYPE_DOUBLE.
6097    pub fn dpiData_getDouble(data: *mut dpiData) -> f64;
6098}
6099extern "C" {
6100
6101    /// Returns the value of the data when the native type is
6102    /// DPI_NATIVE_TYPE_FLOAT.
6103    pub fn dpiData_getFloat(data: *mut dpiData) -> f32;
6104}
6105extern "C" {
6106
6107    /// Returns the value of the data when the native type is
6108    /// DPI_NATIVE_TYPE_INT64.
6109    pub fn dpiData_getInt64(data: *mut dpiData) -> i64;
6110}
6111extern "C" {
6112
6113    /// Returns a pointer to the value of the data when the native type is
6114    /// DPI_NATIVE_TYPE_INTERVAL_DS.
6115    pub fn dpiData_getIntervalDS(data: *mut dpiData) -> *mut dpiIntervalDS;
6116}
6117extern "C" {
6118
6119    /// Returns a pointer to the value of the data when the native type is
6120    /// DPI_NATIVE_TYPE_INTERVAL_YM.
6121    pub fn dpiData_getIntervalYM(data: *mut dpiData) -> *mut dpiIntervalYM;
6122}
6123extern "C" {
6124
6125    /// Returns whether the data refers to a null value (1) or not (0).
6126    pub fn dpiData_getIsNull(data: *mut dpiData) -> ::std::os::raw::c_int;
6127}
6128extern "C" {
6129
6130    /// Returns the value of the data when the native type is DPI_NATIVE_TYPE_JSON.
6131    pub fn dpiData_getJson(data: *mut dpiData) -> *mut dpiJson;
6132}
6133extern "C" {
6134
6135    /// Returns the value of the data when the native type is
6136    /// DPI_NATIVE_TYPE_JSON_ARRAY.
6137    pub fn dpiData_getJsonArray(data: *mut dpiData) -> *mut dpiJsonArray;
6138}
6139extern "C" {
6140
6141    /// Returns the value of the data when the native type is
6142    /// DPI_NATIVE_TYPE_JSON_OBJECT.
6143    pub fn dpiData_getJsonObject(data: *mut dpiData) -> *mut dpiJsonObject;
6144}
6145extern "C" {
6146
6147    /// Returns the value of the data when the native type is DPI_NATIVE_TYPE_LOB.
6148    pub fn dpiData_getLOB(data: *mut dpiData) -> *mut dpiLob;
6149}
6150extern "C" {
6151
6152    /// Returns the value of the data when the native type is
6153    /// DPI_NATIVE_TYPE_OBJECT.
6154    pub fn dpiData_getObject(data: *mut dpiData) -> *mut dpiObject;
6155}
6156extern "C" {
6157
6158    /// Returns the value of the data when the native type is DPI_NATIVE_TYPE_STMT.
6159    pub fn dpiData_getStmt(data: *mut dpiData) -> *mut dpiStmt;
6160}
6161extern "C" {
6162
6163    /// Returns a pointer to the value of the data when the native type is
6164    /// DPI_NATIVE_TYPE_TIMESTAMP.
6165    pub fn dpiData_getTimestamp(data: *mut dpiData) -> *mut dpiTimestamp;
6166}
6167extern "C" {
6168
6169    /// Returns the value of the data when the native type is
6170    /// DPI_NATIVE_TYPE_UINT64.
6171    pub fn dpiData_getUint64(data: *mut dpiData) -> u64;
6172}
6173extern "C" {
6174
6175    /// Returns the value of the data when the native type is DPI_NATIVE_TYPE_VECTOR.
6176    pub fn dpiData_getVector(data: *mut dpiData) -> *mut dpiVector;
6177}
6178extern "C" {
6179
6180    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_BOOLEAN.
6181    pub fn dpiData_setBool(data: *mut dpiData, value: ::std::os::raw::c_int);
6182}
6183extern "C" {
6184
6185    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_BYTES.
6186    /// Do *not* use this function when setting data for variables. Instead, use
6187    /// the function [`dpiVar_setFromBytes()`].
6188    pub fn dpiData_setBytes(data: *mut dpiData, ptr: *mut ::std::os::raw::c_char, length: u32);
6189}
6190extern "C" {
6191
6192    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_DOUBLE.
6193    pub fn dpiData_setDouble(data: *mut dpiData, value: f64);
6194}
6195extern "C" {
6196
6197    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_FLOAT.
6198    pub fn dpiData_setFloat(data: *mut dpiData, value: f32);
6199}
6200extern "C" {
6201
6202    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_INT64.
6203    pub fn dpiData_setInt64(data: *mut dpiData, value: i64);
6204}
6205extern "C" {
6206
6207    /// Sets the value of the data when the native type is
6208    /// DPI_NATIVE_TYPE_INTERVAL_DS.
6209    pub fn dpiData_setIntervalDS(
6210        data: *mut dpiData,
6211        days: i32,
6212        hours: i32,
6213        minutes: i32,
6214        seconds: i32,
6215        fseconds: i32,
6216    );
6217}
6218extern "C" {
6219
6220    /// Sets the value of the data when the native type is
6221    /// DPI_NATIVE_TYPE_INTERVAL_YM.
6222    pub fn dpiData_setIntervalYM(data: *mut dpiData, years: i32, months: i32);
6223}
6224extern "C" {
6225
6226    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_LOB.
6227    /// Do *not* use this function when setting data for variables. Instead, use
6228    /// the function [`dpiVar_setFromLob()`].
6229    pub fn dpiData_setLOB(data: *mut dpiData, lob: *mut dpiLob);
6230}
6231extern "C" {
6232
6233    /// Sets the value of the data to be the null value.
6234    pub fn dpiData_setNull(data: *mut dpiData);
6235}
6236extern "C" {
6237
6238    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_OBJECT.
6239    /// Do *not* use this function when setting data for variables. Instead, use
6240    /// the function [`dpiVar_setFromObject()`].
6241    pub fn dpiData_setObject(data: *mut dpiData, obj: *mut dpiObject);
6242}
6243extern "C" {
6244
6245    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_STMT.
6246    /// Do *not* use this function when setting data for variables. Instead, use
6247    /// the function [`dpiVar_setFromStmt()`].
6248    pub fn dpiData_setStmt(data: *mut dpiData, stmt: *mut dpiStmt);
6249}
6250extern "C" {
6251
6252    /// Sets the value of the data when the native type is
6253    /// DPI_NATIVE_TYPE_TIMESTAMP.
6254    pub fn dpiData_setTimestamp(
6255        data: *mut dpiData,
6256        year: i16,
6257        month: u8,
6258        day: u8,
6259        hour: u8,
6260        minute: u8,
6261        second: u8,
6262        fsecond: u32,
6263        tzHourOffset: i8,
6264        tzMinuteOffset: i8,
6265    );
6266}
6267extern "C" {
6268
6269    /// Sets the value of the data when the native type is DPI_NATIVE_TYPE_UINT64.
6270    pub fn dpiData_setUint64(data: *mut dpiData, value: u64);
6271}
6272extern "C" {
6273
6274    /// Adds a reference to the dequeue options. This is intended for situations
6275    /// where a reference to the dequeue options needs to be maintained
6276    /// independently of the reference returned when the handle was created.
6277    /// 
6278    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6279    pub fn dpiDeqOptions_addRef(options: *mut dpiDeqOptions) -> ::std::os::raw::c_int;
6280}
6281extern "C" {
6282
6283    /// Returns the condition that must be satisfied in order for a message to be
6284    /// dequeued. See function [`dpiDeqOptions_setCondition()`] for more
6285    /// information.
6286    /// 
6287    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6288    pub fn dpiDeqOptions_getCondition(
6289        options: *mut dpiDeqOptions,
6290        value: *mut *const ::std::os::raw::c_char,
6291        valueLength: *mut u32,
6292    ) -> ::std::os::raw::c_int;
6293}
6294extern "C" {
6295
6296    /// Returns the name of the consumer that is dequeuing messages. See function
6297    /// [`dpiDeqOptions_setConsumerName()`] for more information.
6298    /// 
6299    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6300    pub fn dpiDeqOptions_getConsumerName(
6301        options: *mut dpiDeqOptions,
6302        value: *mut *const ::std::os::raw::c_char,
6303        valueLength: *mut u32,
6304    ) -> ::std::os::raw::c_int;
6305}
6306extern "C" {
6307
6308    /// Returns the correlation of the message to be dequeued. See function
6309    /// [`dpiDeqOptions_setCorrelation()`] for more information.
6310    /// 
6311    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6312    pub fn dpiDeqOptions_getCorrelation(
6313        options: *mut dpiDeqOptions,
6314        value: *mut *const ::std::os::raw::c_char,
6315        valueLength: *mut u32,
6316    ) -> ::std::os::raw::c_int;
6317}
6318extern "C" {
6319
6320    /// Returns the mode that is to be used when dequeuing messages.
6321    /// 
6322    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6323    pub fn dpiDeqOptions_getMode(
6324        options: *mut dpiDeqOptions,
6325        value: *mut dpiDeqMode,
6326    ) -> ::std::os::raw::c_int;
6327}
6328extern "C" {
6329
6330    /// Returns the identifier of the specific message that is to be dequeued.
6331    /// 
6332    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6333    pub fn dpiDeqOptions_getMsgId(
6334        options: *mut dpiDeqOptions,
6335        value: *mut *const ::std::os::raw::c_char,
6336        valueLength: *mut u32,
6337    ) -> ::std::os::raw::c_int;
6338}
6339extern "C" {
6340
6341    /// Returns the position of the message that is to be dequeued.
6342    /// 
6343    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6344    pub fn dpiDeqOptions_getNavigation(
6345        options: *mut dpiDeqOptions,
6346        value: *mut dpiDeqNavigation,
6347    ) -> ::std::os::raw::c_int;
6348}
6349extern "C" {
6350
6351    /// Returns the transformation of the message to be dequeued. See function
6352    /// [`dpiDeqOptions_setTransformation()`] for more information.
6353    /// 
6354    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6355    pub fn dpiDeqOptions_getTransformation(
6356        options: *mut dpiDeqOptions,
6357        value: *mut *const ::std::os::raw::c_char,
6358        valueLength: *mut u32,
6359    ) -> ::std::os::raw::c_int;
6360}
6361extern "C" {
6362
6363    /// Returns whether the message being dequeued is part of the current
6364    /// transaction or constitutes a transaction on its own.
6365    /// 
6366    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6367    pub fn dpiDeqOptions_getVisibility(
6368        options: *mut dpiDeqOptions,
6369        value: *mut dpiVisibility,
6370    ) -> ::std::os::raw::c_int;
6371}
6372extern "C" {
6373
6374    /// Returns the time to wait, in seconds, for a message matching the search
6375    /// criteria. See function [`dpiDeqOptions_setWait()`] for more
6376    /// information.
6377    /// 
6378    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6379    pub fn dpiDeqOptions_getWait(
6380        options: *mut dpiDeqOptions,
6381        value: *mut u32,
6382    ) -> ::std::os::raw::c_int;
6383}
6384extern "C" {
6385
6386    /// Sets the condition which must be true for messages to be dequeued. The
6387    /// condition must be a valid boolean expression similar to the where clause
6388    /// of a SQL query. The expression can include conditions on message
6389    /// properties, user data properties and PL/SQL or SQL functions. User data
6390    /// properties must be prefixed with tab.user_data as a qualifier to indicate
6391    /// the specific column of the queue table that stores the message payload.
6392    /// 
6393    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6394    pub fn dpiDeqOptions_setCondition(
6395        options: *mut dpiDeqOptions,
6396        value: *const ::std::os::raw::c_char,
6397        valueLength: u32,
6398    ) -> ::std::os::raw::c_int;
6399}
6400extern "C" {
6401
6402    /// Sets the name of the consumer which will be dequeuing messages. This value
6403    /// should only be set if the queue is set up for multiple consumers.
6404    /// 
6405    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6406    pub fn dpiDeqOptions_setConsumerName(
6407        options: *mut dpiDeqOptions,
6408        value: *const ::std::os::raw::c_char,
6409        valueLength: u32,
6410    ) -> ::std::os::raw::c_int;
6411}
6412extern "C" {
6413
6414    /// Sets the correlation of the message to be dequeued. Special pattern
6415    /// matching characters such as the percent sign (%) and the underscore (_)
6416    /// can be used. If multiple messages satisfy the pattern, the order of
6417    /// dequeuing is undetermined.
6418    /// 
6419    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6420    pub fn dpiDeqOptions_setCorrelation(
6421        options: *mut dpiDeqOptions,
6422        value: *const ::std::os::raw::c_char,
6423        valueLength: u32,
6424    ) -> ::std::os::raw::c_int;
6425}
6426extern "C" {
6427
6428    /// Sets the message delivery mode that is to be used when dequeuing messages.
6429    /// 
6430    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6431    pub fn dpiDeqOptions_setDeliveryMode(
6432        options: *mut dpiDeqOptions,
6433        value: dpiMessageDeliveryMode,
6434    ) -> ::std::os::raw::c_int;
6435}
6436extern "C" {
6437
6438    /// Sets the mode that is to be used when dequeuing messages.
6439    /// 
6440    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6441    pub fn dpiDeqOptions_setMode(
6442        options: *mut dpiDeqOptions,
6443        value: dpiDeqMode,
6444    ) -> ::std::os::raw::c_int;
6445}
6446extern "C" {
6447
6448    /// Sets the identifier of the specific message to be dequeued.
6449    /// 
6450    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6451    pub fn dpiDeqOptions_setMsgId(
6452        options: *mut dpiDeqOptions,
6453        value: *const ::std::os::raw::c_char,
6454        valueLength: u32,
6455    ) -> ::std::os::raw::c_int;
6456}
6457extern "C" {
6458
6459    /// Sets the position in the queue of the message that is to be dequeued.
6460    /// 
6461    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6462    pub fn dpiDeqOptions_setNavigation(
6463        options: *mut dpiDeqOptions,
6464        value: dpiDeqNavigation,
6465    ) -> ::std::os::raw::c_int;
6466}
6467extern "C" {
6468
6469    /// Sets the transformation of the message to be dequeued. The transformation
6470    /// is applied after the message is dequeued but before it is returned to the
6471    /// application. It must be created using DBMS_TRANSFORM.
6472    /// 
6473    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6474    pub fn dpiDeqOptions_setTransformation(
6475        options: *mut dpiDeqOptions,
6476        value: *const ::std::os::raw::c_char,
6477        valueLength: u32,
6478    ) -> ::std::os::raw::c_int;
6479}
6480extern "C" {
6481
6482    /// Sets whether the message being dequeued is part of the current transaction
6483    /// or constitutes a transaction on its own.
6484    /// 
6485    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6486    pub fn dpiDeqOptions_setVisibility(
6487        options: *mut dpiDeqOptions,
6488        value: dpiVisibility,
6489    ) -> ::std::os::raw::c_int;
6490}
6491extern "C" {
6492
6493    /// Set the time to wait, in seconds, for a message matching the search
6494    /// criteria.
6495    /// 
6496    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6497    pub fn dpiDeqOptions_setWait(options: *mut dpiDeqOptions, value: u32) -> ::std::os::raw::c_int;
6498}
6499extern "C" {
6500
6501    /// Adds a reference to the enqueue options. This is intended for situations
6502    /// where a reference to the enqueue options needs to be maintained
6503    /// independently of the reference returned when the handle was created.
6504    /// 
6505    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6506    pub fn dpiEnqOptions_addRef(options: *mut dpiEnqOptions) -> ::std::os::raw::c_int;
6507}
6508extern "C" {
6509
6510    /// Returns the transformation of the message to be enqueued. See function
6511    /// [`dpiEnqOptions_setTransformation()`] for more information.
6512    /// 
6513    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6514    pub fn dpiEnqOptions_getTransformation(
6515        options: *mut dpiEnqOptions,
6516        value: *mut *const ::std::os::raw::c_char,
6517        valueLength: *mut u32,
6518    ) -> ::std::os::raw::c_int;
6519}
6520extern "C" {
6521
6522    /// Returns whether the message being enqueued is part of the current
6523    /// transaction or constitutes a transaction on its own.
6524    /// 
6525    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6526    pub fn dpiEnqOptions_getVisibility(
6527        options: *mut dpiEnqOptions,
6528        value: *mut dpiVisibility,
6529    ) -> ::std::os::raw::c_int;
6530}
6531extern "C" {
6532
6533    /// Sets the message delivery mode that is to be used when enqueuing messages.
6534    /// 
6535    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6536    pub fn dpiEnqOptions_setDeliveryMode(
6537        options: *mut dpiEnqOptions,
6538        value: dpiMessageDeliveryMode,
6539    ) -> ::std::os::raw::c_int;
6540}
6541extern "C" {
6542
6543    /// Sets the transformation of the message to be enqueued. The transformation
6544    /// is applied after the message is enqueued but before it is returned to the
6545    /// application. It must be created using DBMS_TRANSFORM.
6546    /// 
6547    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6548    pub fn dpiEnqOptions_setTransformation(
6549        options: *mut dpiEnqOptions,
6550        value: *const ::std::os::raw::c_char,
6551        valueLength: u32,
6552    ) -> ::std::os::raw::c_int;
6553}
6554extern "C" {
6555
6556    /// Sets whether the message being enqueued is part of the current transaction
6557    /// or constitutes a transaction on its own.
6558    /// 
6559    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6560    pub fn dpiEnqOptions_setVisibility(
6561        options: *mut dpiEnqOptions,
6562        value: dpiVisibility,
6563    ) -> ::std::os::raw::c_int;
6564}
6565extern "C" {
6566
6567    /// Adds a reference to the JSON value. This is intended for situations where a
6568    /// reference to the JSON value needs to be maintained independently of the
6569    /// reference returned when the JSON value was created.
6570    /// 
6571    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6572    pub fn dpiJson_addRef(json: *mut dpiJson) -> ::std::os::raw::c_int;
6573}
6574extern "C" {
6575
6576    /// Sets the JSON value from the JSON string passed as a byte string.
6577    /// 
6578    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6579    pub fn dpiJson_setFromText(
6580        json: *mut dpiJson,
6581        value: *const ::std::os::raw::c_char,
6582        valueLength: u64,
6583        flags: u32,
6584    ) -> ::std::os::raw::c_int;
6585}
6586extern "C" {
6587
6588    /// Sets the JSON value to the data found in the hierarchy of nodes pointed to
6589    /// by the top level node.
6590    /// 
6591    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6592    pub fn dpiJson_setValue(json: *mut dpiJson, topNode: *mut dpiJsonNode)
6593        -> ::std::os::raw::c_int;
6594}
6595extern "C" {
6596
6597    /// Adds a reference to the LOB. This is intended for situations where a
6598    /// reference to the LOB needs to be maintained independently of the reference
6599    /// returned when the LOB was created.
6600    /// 
6601    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6602    pub fn dpiLob_addRef(lob: *mut dpiLob) -> ::std::os::raw::c_int;
6603}
6604extern "C" {
6605
6606    /// Returns the size of the buffer needed to hold the number of characters
6607    /// specified for a buffer of the type associated with the LOB. If the LOB does
6608    /// not refer to a character LOB the value is returned unchanged.
6609    /// 
6610    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6611    pub fn dpiLob_getBufferSize(
6612        lob: *mut dpiLob,
6613        sizeInChars: u64,
6614        sizeInBytes: *mut u64,
6615    ) -> ::std::os::raw::c_int;
6616}
6617extern "C" {
6618
6619    /// Returns the directory alias name and file name for a BFILE type LOB.
6620    /// 
6621    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6622    pub fn dpiLob_getDirectoryAndFileName(
6623        lob: *mut dpiLob,
6624        directoryAlias: *mut *const ::std::os::raw::c_char,
6625        directoryAliasLength: *mut u32,
6626        fileName: *mut *const ::std::os::raw::c_char,
6627        fileNameLength: *mut u32,
6628    ) -> ::std::os::raw::c_int;
6629}
6630extern "C" {
6631
6632    /// Returns the type of the LOB.
6633    /// 
6634    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6635    pub fn dpiLob_getType(lob: *mut dpiLob, type_: *mut dpiOracleTypeNum) -> ::std::os::raw::c_int;
6636}
6637extern "C" {
6638
6639    /// Sets the directory alias name and file name for a BFILE type LOB.
6640    /// 
6641    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6642    pub fn dpiLob_setDirectoryAndFileName(
6643        lob: *mut dpiLob,
6644        directoryAlias: *const ::std::os::raw::c_char,
6645        directoryAliasLength: u32,
6646        fileName: *const ::std::os::raw::c_char,
6647        fileNameLength: u32,
6648    ) -> ::std::os::raw::c_int;
6649}
6650extern "C" {
6651
6652    /// Adds a reference to the message properties. This is intended for situations
6653    /// where a reference to the message properties needs to be maintained
6654    /// independently of the reference returned when the handle was created.
6655    /// 
6656    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6657    pub fn dpiMsgProps_addRef(props: *mut dpiMsgProps) -> ::std::os::raw::c_int;
6658}
6659extern "C" {
6660
6661    /// Returns the number of attempts that have been made to dequeue a message.
6662    /// 
6663    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6664    pub fn dpiMsgProps_getNumAttempts(
6665        props: *mut dpiMsgProps,
6666        value: *mut i32,
6667    ) -> ::std::os::raw::c_int;
6668}
6669extern "C" {
6670
6671    /// Returns the correlation supplied by the producer when the message was
6672    /// enqueued.
6673    /// 
6674    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6675    pub fn dpiMsgProps_getCorrelation(
6676        props: *mut dpiMsgProps,
6677        value: *mut *const ::std::os::raw::c_char,
6678        valueLength: *mut u32,
6679    ) -> ::std::os::raw::c_int;
6680}
6681extern "C" {
6682
6683    /// Returns the number of seconds the enqueued message will be delayed.
6684    /// 
6685    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6686    pub fn dpiMsgProps_getDelay(props: *mut dpiMsgProps, value: *mut i32) -> ::std::os::raw::c_int;
6687}
6688extern "C" {
6689
6690    /// Returns the mode that was used to deliver the message.
6691    /// 
6692    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6693    pub fn dpiMsgProps_getDeliveryMode(
6694        props: *mut dpiMsgProps,
6695        value: *mut dpiMessageDeliveryMode,
6696    ) -> ::std::os::raw::c_int;
6697}
6698extern "C" {
6699
6700    /// Returns the time that the message was enqueued.
6701    /// 
6702    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6703    pub fn dpiMsgProps_getEnqTime(
6704        props: *mut dpiMsgProps,
6705        value: *mut dpiTimestamp,
6706    ) -> ::std::os::raw::c_int;
6707}
6708extern "C" {
6709
6710    /// Returns the name of the queue to which the message is moved if it cannot be
6711    /// processed successfully. See function [`dpiMsgProps_setExceptionQ()`]
6712    /// for more information.
6713    /// 
6714    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6715    pub fn dpiMsgProps_getExceptionQ(
6716        props: *mut dpiMsgProps,
6717        value: *mut *const ::std::os::raw::c_char,
6718        valueLength: *mut u32,
6719    ) -> ::std::os::raw::c_int;
6720}
6721extern "C" {
6722
6723    /// Returns the number of seconds the message is available to be dequeued.
6724    /// See function [`dpiMsgProps_setExpiration()`] for more information.
6725    /// 
6726    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6727    pub fn dpiMsgProps_getExpiration(
6728        props: *mut dpiMsgProps,
6729        value: *mut i32,
6730    ) -> ::std::os::raw::c_int;
6731}
6732extern "C" {
6733
6734    /// Returns the id of the message in the queue that generated this message. No
6735    /// value is available until the message has been enqueued or dequeued.
6736    /// 
6737    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6738    pub fn dpiMsgProps_getMsgId(
6739        props: *mut dpiMsgProps,
6740        value: *mut *const ::std::os::raw::c_char,
6741        valueLength: *mut u32,
6742    ) -> ::std::os::raw::c_int;
6743}
6744extern "C" {
6745
6746    /// Returns the id of the message in the last queue that generated this
6747    /// message. See function [`dpiMsgProps_setOriginalMsgId()`] for more
6748    /// information.
6749    /// 
6750    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6751    pub fn dpiMsgProps_getOriginalMsgId(
6752        props: *mut dpiMsgProps,
6753        value: *mut *const ::std::os::raw::c_char,
6754        valueLength: *mut u32,
6755    ) -> ::std::os::raw::c_int;
6756}
6757extern "C" {
6758
6759    /// Returns the payload associated with the message properties. The payload can
6760    /// either be an object or an arbitrary series of bytes and is available after
6761    /// a call to [`dpiQueue_deqOne()`] or [`dpiQueue_deqMany()`].
6762    /// 
6763    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6764    pub fn dpiMsgProps_getPayload(
6765        props: *mut dpiMsgProps,
6766        obj: *mut *mut dpiObject,
6767        value: *mut *const ::std::os::raw::c_char,
6768        valueLength: *mut u32,
6769    ) -> ::std::os::raw::c_int;
6770}
6771extern "C" {
6772
6773    /// Returns the payload associated with the message properties, The payload
6774    /// must be a JSON object and is available after the call to
6775    /// [`dpiQueue_deqOne()`] or [`dpiQueue_deqMany()`]; otherwise, the
6776    /// value NULL will be returned.
6777    /// 
6778    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6779    pub fn dpiMsgProps_getPayloadJson(
6780        props: *mut dpiMsgProps,
6781        json: *mut *mut dpiJson,
6782    ) -> ::std::os::raw::c_int;
6783}
6784extern "C" {
6785
6786    /// Returns the priority assigned to the message. See function
6787    /// [`dpiMsgProps_setPriority()`] for more information.
6788    /// 
6789    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6790    pub fn dpiMsgProps_getPriority(
6791        props: *mut dpiMsgProps,
6792        value: *mut i32,
6793    ) -> ::std::os::raw::c_int;
6794}
6795extern "C" {
6796
6797    /// Returns the state of the message at the time of dequeue.
6798    /// 
6799    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6800    pub fn dpiMsgProps_getState(
6801        props: *mut dpiMsgProps,
6802        value: *mut dpiMessageState,
6803    ) -> ::std::os::raw::c_int;
6804}
6805extern "C" {
6806
6807    /// Sets the correlation of the message to be dequeued. Special pattern
6808    /// matching characters such as the percent sign (%) and the underscore (_)
6809    /// can be used. If multiple messages satisfy the pattern, the order of
6810    /// dequeuing is undetermined.
6811    /// 
6812    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6813    pub fn dpiMsgProps_setCorrelation(
6814        props: *mut dpiMsgProps,
6815        value: *const ::std::os::raw::c_char,
6816        valueLength: u32,
6817    ) -> ::std::os::raw::c_int;
6818}
6819extern "C" {
6820
6821    /// Sets the number of seconds to delay the message before it can be dequeued.
6822    /// Messages enqueued with a delay are put into the DPI_MSG_STATE_WAITING
6823    /// state. When the delay expires the message is put into the
6824    /// DPI_MSG_STATE_READY state. Dequeuing directly by message id overrides this
6825    /// delay specification. Note that delay processing requires the queue monitor
6826    /// to be started.
6827    /// 
6828    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6829    pub fn dpiMsgProps_setDelay(props: *mut dpiMsgProps, value: i32) -> ::std::os::raw::c_int;
6830}
6831extern "C" {
6832
6833    /// Sets the name of the queue to which the message is moved if it cannot be
6834    /// processed successfully. Messages are moved if the number of unsuccessful
6835    /// dequeue attempts has reached the maximum allowed number or if the message
6836    /// has expired. All messages in the exception queue are in the
6837    /// DPI_MSG_STATE_EXPIRED state.
6838    /// 
6839    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6840    pub fn dpiMsgProps_setExceptionQ(
6841        props: *mut dpiMsgProps,
6842        value: *const ::std::os::raw::c_char,
6843        valueLength: u32,
6844    ) -> ::std::os::raw::c_int;
6845}
6846extern "C" {
6847
6848    /// Sets the number of seconds the message is available to be dequeued. This
6849    /// value is an offset from the delay. Expiration processing requires the queue
6850    /// monitor to be running. Until this time elapses, the messages are in the
6851    /// queue in the state DPI_MSG_STATE_READY. After this time elapses messages
6852    /// are moved to the exception queue in the DPI_MSG_STATE_EXPIRED state.
6853    /// 
6854    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6855    pub fn dpiMsgProps_setExpiration(props: *mut dpiMsgProps, value: i32) -> ::std::os::raw::c_int;
6856}
6857extern "C" {
6858
6859    /// Sets the id of the message in the last queue that generated this
6860    /// message.
6861    /// 
6862    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6863    pub fn dpiMsgProps_setOriginalMsgId(
6864        props: *mut dpiMsgProps,
6865        value: *const ::std::os::raw::c_char,
6866        valueLength: u32,
6867    ) -> ::std::os::raw::c_int;
6868}
6869extern "C" {
6870
6871    /// Sets the payload for the message as a series of bytes. This value will be
6872    /// used when the message is enqueued using [`dpiQueue_enqOne()`] or
6873    /// [`dpiQueue_enqMany()`].
6874    /// 
6875    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6876    pub fn dpiMsgProps_setPayloadBytes(
6877        props: *mut dpiMsgProps,
6878        value: *const ::std::os::raw::c_char,
6879        valueLength: u32,
6880    ) -> ::std::os::raw::c_int;
6881}
6882extern "C" {
6883
6884    /// Sets the payload for the message as a JSON object. This value will be used
6885    /// when the message is enqueued using [`dpiQueue_enqOne()`] or
6886    /// [`dpiQueue_enqMany()`].
6887    /// 
6888    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6889    pub fn dpiMsgProps_setPayloadJson(
6890        props: *mut dpiMsgProps,
6891        json: *mut dpiJson,
6892    ) -> ::std::os::raw::c_int;
6893}
6894extern "C" {
6895
6896    /// Sets the payload for the message as an object. This value will be used when
6897    /// the message is enqueued using [`dpiQueue_enqOne()`] or
6898    /// [`dpiQueue_enqMany()`].
6899    /// 
6900    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6901    pub fn dpiMsgProps_setPayloadObject(
6902        props: *mut dpiMsgProps,
6903        obj: *mut dpiObject,
6904    ) -> ::std::os::raw::c_int;
6905}
6906extern "C" {
6907
6908    /// Sets the priority assigned to the message. A smaller number indicates a
6909    /// higher priority. The priority can be any number, including negative
6910    /// numbers.
6911    /// 
6912    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6913    pub fn dpiMsgProps_setPriority(props: *mut dpiMsgProps, value: i32) -> ::std::os::raw::c_int;
6914}
6915extern "C" {
6916
6917    /// Sets recipients list for the message to be enqueued.
6918    /// 
6919    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6920    pub fn dpiMsgProps_setRecipients(
6921        props: *mut dpiMsgProps,
6922        recipients: *mut dpiMsgRecipient,
6923        numRecipients: u32,
6924    ) -> ::std::os::raw::c_int;
6925}
6926extern "C" {
6927
6928    /// Adds a reference to the object. This is intended for situations where a
6929    /// reference to the object needs to be maintained independently of the
6930    /// reference returned when the object was created.
6931    /// 
6932    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6933    pub fn dpiObject_addRef(obj: *mut dpiObject) -> ::std::os::raw::c_int;
6934}
6935extern "C" {
6936
6937    /// Appends an element with the specified value to the collection.
6938    /// 
6939    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6940    pub fn dpiObject_appendElement(
6941        obj: *mut dpiObject,
6942        nativeTypeNum: dpiNativeTypeNum,
6943        value: *mut dpiData,
6944    ) -> ::std::os::raw::c_int;
6945}
6946extern "C" {
6947
6948    /// Creates an independent copy of an object and returns a reference to the
6949    /// newly created object. This reference should be released as soon as it is
6950    /// no longer needed.
6951    /// 
6952    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6953    pub fn dpiObject_copy(
6954        obj: *mut dpiObject,
6955        copiedObj: *mut *mut dpiObject,
6956    ) -> ::std::os::raw::c_int;
6957}
6958extern "C" {
6959
6960    /// Deletes an element from the collection. Note that the position ordinals of
6961    /// the remaining elements are not changed. The delete operation creates
6962    /// *holes* in the collection.
6963    /// 
6964    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6965    pub fn dpiObject_deleteElementByIndex(obj: *mut dpiObject, index: i32)
6966        -> ::std::os::raw::c_int;
6967}
6968extern "C" {
6969
6970    /// Returns the value of one of the object’s attributes.
6971    /// 
6972    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6973    pub fn dpiObject_getAttributeValue(
6974        obj: *mut dpiObject,
6975        attr: *mut dpiObjectAttr,
6976        nativeTypeNum: dpiNativeTypeNum,
6977        value: *mut dpiData,
6978    ) -> ::std::os::raw::c_int;
6979}
6980extern "C" {
6981
6982    /// Returns whether an element exists at the specified index.
6983    /// 
6984    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6985    pub fn dpiObject_getElementExistsByIndex(
6986        obj: *mut dpiObject,
6987        index: i32,
6988        exists: *mut ::std::os::raw::c_int,
6989    ) -> ::std::os::raw::c_int;
6990}
6991extern "C" {
6992
6993    /// Returns the value of the element found at the specified index.
6994    /// 
6995    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
6996    pub fn dpiObject_getElementValueByIndex(
6997        obj: *mut dpiObject,
6998        index: i32,
6999        nativeTypeNum: dpiNativeTypeNum,
7000        value: *mut dpiData,
7001    ) -> ::std::os::raw::c_int;
7002}
7003extern "C" {
7004
7005    /// Returns the first index used in a collection.
7006    /// 
7007    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7008    pub fn dpiObject_getFirstIndex(
7009        obj: *mut dpiObject,
7010        index: *mut i32,
7011        exists: *mut ::std::os::raw::c_int,
7012    ) -> ::std::os::raw::c_int;
7013}
7014extern "C" {
7015
7016    /// Returns the last index used in a collection.
7017    /// 
7018    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7019    pub fn dpiObject_getLastIndex(
7020        obj: *mut dpiObject,
7021        index: *mut i32,
7022        exists: *mut ::std::os::raw::c_int,
7023    ) -> ::std::os::raw::c_int;
7024}
7025extern "C" {
7026
7027    /// Returns the next index used in a collection following the specified index.
7028    /// 
7029    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7030    pub fn dpiObject_getNextIndex(
7031        obj: *mut dpiObject,
7032        index: i32,
7033        nextIndex: *mut i32,
7034        exists: *mut ::std::os::raw::c_int,
7035    ) -> ::std::os::raw::c_int;
7036}
7037extern "C" {
7038
7039    /// Returns the previous index used in a collection preceding the specified
7040    /// index.
7041    /// 
7042    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7043    pub fn dpiObject_getPrevIndex(
7044        obj: *mut dpiObject,
7045        index: i32,
7046        prevIndex: *mut i32,
7047        exists: *mut ::std::os::raw::c_int,
7048    ) -> ::std::os::raw::c_int;
7049}
7050extern "C" {
7051
7052    /// Returns the number of elements in a collection.
7053    /// 
7054    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7055    pub fn dpiObject_getSize(obj: *mut dpiObject, size: *mut i32) -> ::std::os::raw::c_int;
7056}
7057extern "C" {
7058
7059    /// Sets the value of one of the object’s attributes.
7060    /// 
7061    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7062    pub fn dpiObject_setAttributeValue(
7063        obj: *mut dpiObject,
7064        attr: *mut dpiObjectAttr,
7065        nativeTypeNum: dpiNativeTypeNum,
7066        value: *mut dpiData,
7067    ) -> ::std::os::raw::c_int;
7068}
7069extern "C" {
7070
7071    /// Sets the value of the element found at the specified index.
7072    /// 
7073    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7074    pub fn dpiObject_setElementValueByIndex(
7075        obj: *mut dpiObject,
7076        index: i32,
7077        nativeTypeNum: dpiNativeTypeNum,
7078        value: *mut dpiData,
7079    ) -> ::std::os::raw::c_int;
7080}
7081extern "C" {
7082
7083    /// Trims a number of elements from the end of a collection.
7084    /// 
7085    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7086    pub fn dpiObject_trim(obj: *mut dpiObject, numToTrim: u32) -> ::std::os::raw::c_int;
7087}
7088extern "C" {
7089
7090    /// Adds a reference to the attribute. This is intended for situations where a
7091    /// reference to the attribute needs to be maintained independently of the
7092    /// reference returned when the attribute was created.
7093    /// 
7094    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7095    pub fn dpiObjectAttr_addRef(attr: *mut dpiObjectAttr) -> ::std::os::raw::c_int;
7096}
7097extern "C" {
7098
7099    /// Returns information about the attribute.
7100    /// 
7101    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7102    pub fn dpiObjectAttr_getInfo(
7103        attr: *mut dpiObjectAttr,
7104        info: *mut dpiObjectAttrInfo,
7105    ) -> ::std::os::raw::c_int;
7106}
7107extern "C" {
7108
7109    /// Adds a reference to the object type. This is intended for situations where
7110    /// a reference to the object type needs to be maintained independently of the
7111    /// reference returned when the object type was created.
7112    /// 
7113    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7114    pub fn dpiObjectType_addRef(objType: *mut dpiObjectType) -> ::std::os::raw::c_int;
7115}
7116extern "C" {
7117
7118    /// Creates an object of the specified type and returns a reference to it.
7119    /// This reference should be released as soon as it is no longer needed.
7120    /// 
7121    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7122    pub fn dpiObjectType_createObject(
7123        objType: *mut dpiObjectType,
7124        obj: *mut *mut dpiObject,
7125    ) -> ::std::os::raw::c_int;
7126}
7127extern "C" {
7128
7129    /// Returns the list of attributes that belong to the object type.
7130    /// 
7131    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7132    pub fn dpiObjectType_getAttributes(
7133        objType: *mut dpiObjectType,
7134        numAttributes: u16,
7135        attributes: *mut *mut dpiObjectAttr,
7136    ) -> ::std::os::raw::c_int;
7137}
7138extern "C" {
7139
7140    /// Returns information about the object type.
7141    /// 
7142    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7143    pub fn dpiObjectType_getInfo(
7144        objType: *mut dpiObjectType,
7145        info: *mut dpiObjectTypeInfo,
7146    ) -> ::std::os::raw::c_int;
7147}
7148extern "C" {
7149
7150    /// Adds a reference to the pool. This is intended for situations where a
7151    /// reference to the pool needs to be maintained independently of the reference
7152    /// returned when the pool was created.
7153    /// 
7154    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7155    pub fn dpiPool_addRef(pool: *mut dpiPool) -> ::std::os::raw::c_int;
7156}
7157extern "C" {
7158
7159    /// Returns the number of sessions in the pool that are busy.
7160    /// 
7161    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7162    pub fn dpiPool_getBusyCount(pool: *mut dpiPool, value: *mut u32) -> ::std::os::raw::c_int;
7163}
7164extern "C" {
7165
7166    /// Returns the encoding information used by the pool. This will be equivalent
7167    /// to the values passed when the pool was created, or the values retrieved
7168    /// from the environment variables NLS_LANG and NLS_NCHAR.
7169    /// 
7170    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7171    pub fn dpiPool_getEncodingInfo(
7172        pool: *mut dpiPool,
7173        info: *mut dpiEncodingInfo,
7174    ) -> ::std::os::raw::c_int;
7175}
7176extern "C" {
7177
7178    /// Returns the mode used for acquiring or getting connections from the pool.
7179    /// 
7180    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7181    pub fn dpiPool_getGetMode(
7182        pool: *mut dpiPool,
7183        value: *mut dpiPoolGetMode,
7184    ) -> ::std::os::raw::c_int;
7185}
7186extern "C" {
7187
7188    /// Returns the maximum lifetime a pooled session may exist, in seconds.
7189    /// Sessions in use will not be closed. They become candidates for termination
7190    /// only when they are released back to the pool and have existed for longer
7191    /// then the returned value. Note that termination only occurs when the pool is
7192    /// accessed. The value 0 means that there is no maximum length of time that a
7193    /// pooled session may exist.
7194    /// 
7195    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7196    pub fn dpiPool_getMaxLifetimeSession(
7197        pool: *mut dpiPool,
7198        value: *mut u32,
7199    ) -> ::std::os::raw::c_int;
7200}
7201extern "C" {
7202
7203    /// Returns the maximum sessions per shard. This parameter is used for
7204    /// balancing shards.
7205    /// 
7206    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7207    pub fn dpiPool_getMaxSessionsPerShard(
7208        pool: *mut dpiPool,
7209        value: *mut u32,
7210    ) -> ::std::os::raw::c_int;
7211}
7212extern "C" {
7213
7214    /// Returns the number of sessions in the pool that are open.
7215    /// 
7216    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7217    pub fn dpiPool_getOpenCount(pool: *mut dpiPool, value: *mut u32) -> ::std::os::raw::c_int;
7218}
7219extern "C" {
7220
7221    /// Returns whether or not the SODA metadata cache is enabled or not.
7222    /// 
7223    /// The SODA metadata cache requires Oracle Client 21.3, or later. It is also
7224    /// available in Oracle Client 19 from 19.11.
7225    /// 
7226    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7227    pub fn dpiPool_getSodaMetadataCache(
7228        pool: *mut dpiPool,
7229        enabled: *mut ::std::os::raw::c_int,
7230    ) -> ::std::os::raw::c_int;
7231}
7232extern "C" {
7233
7234    /// Returns the default size of the statement cache for sessions in the pool,
7235    /// in number of statements.
7236    /// 
7237    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7238    pub fn dpiPool_getStmtCacheSize(
7239        pool: *mut dpiPool,
7240        cacheSize: *mut u32,
7241    ) -> ::std::os::raw::c_int;
7242}
7243extern "C" {
7244
7245    /// Returns the length of time (in seconds) after which idle sessions in the
7246    /// pool are terminated. Note that termination only occurs when the pool is
7247    /// accessed. A value of 0 means that no ide sessions are terminated.
7248    /// 
7249    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7250    pub fn dpiPool_getTimeout(pool: *mut dpiPool, value: *mut u32) -> ::std::os::raw::c_int;
7251}
7252extern "C" {
7253
7254    /// Returns the amount of time (in milliseconds) that the caller will wait for
7255    /// a session to become available in the pool before returning an error.
7256    /// 
7257    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7258    pub fn dpiPool_getWaitTimeout(pool: *mut dpiPool, value: *mut u32) -> ::std::os::raw::c_int;
7259}
7260extern "C" {
7261
7262    /// Returns the ping interval duration (in seconds), which is used to check the
7263    /// healthiness of idle connections before getting checked out. A negative
7264    /// value indicates this check is disabled.
7265    pub fn dpiPool_getPingInterval(
7266        pool: *mut dpiPool,
7267        value: *mut ::std::os::raw::c_int,
7268    ) -> ::std::os::raw::c_int;
7269}
7270extern "C" {
7271
7272    /// The function is used to manually set the token and private key for a
7273    /// session pool. After pool creation it can be used to periodically reset
7274    /// the token and private key to avoid the need for the pool token callback
7275    /// function
7276    /// [`dpiPoolCreateParams.accessTokenCallback`] to
7277    /// be called during pool growth.
7278    /// 
7279    /// This function may also be useful for testing. By setting an expired token
7280    /// and key the subsequent pool callback function behavior can be seen without
7281    /// waiting for normal token expiry.
7282    /// 
7283    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7284    pub fn dpiPool_setAccessToken(
7285        pool: *mut dpiPool,
7286        params: *mut dpiAccessToken,
7287    ) -> ::std::os::raw::c_int;
7288}
7289extern "C" {
7290
7291    /// Sets the mode used for acquiring or getting connections from the pool.
7292    /// 
7293    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7294    pub fn dpiPool_setGetMode(pool: *mut dpiPool, value: dpiPoolGetMode) -> ::std::os::raw::c_int;
7295}
7296extern "C" {
7297
7298    /// Sets the maximum lifetime a pooled session may exist, in seconds. Sessions
7299    /// in use will not be closed. They become candidates for termination only when
7300    /// they are released back to the pool and have existed for longer then the
7301    /// specified value. Note that termination only occurs when the pool is
7302    /// accessed. The value 0 means that there is no maximum length of time that a
7303    /// pooled session may exist.
7304    /// 
7305    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7306    pub fn dpiPool_setMaxLifetimeSession(pool: *mut dpiPool, value: u32) -> ::std::os::raw::c_int;
7307}
7308extern "C" {
7309
7310    /// Sets the maximum number of sessions per shard.
7311    /// 
7312    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7313    pub fn dpiPool_setMaxSessionsPerShard(pool: *mut dpiPool, value: u32) -> ::std::os::raw::c_int;
7314}
7315extern "C" {
7316
7317    /// Sets whether the SODA metadata cache is enabled or not. Enabling the SODA
7318    /// metadata cache can significantly improve the performance of repeated calls
7319    /// to methods [`dpiSodaDb_createCollection()`] (when not specifying a
7320    /// value for the metadata parameter) and [`dpiSodaDb_openCollection()`].
7321    /// Note that the cache can become out of date if changes to the metadata of
7322    /// cached collections are made externally.
7323    /// 
7324    /// The SODA metadata cache requires Oracle Client 21.3, or later. It is also
7325    /// available in Oracle Client 19 from 19.11.
7326    /// 
7327    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7328    pub fn dpiPool_setSodaMetadataCache(
7329        pool: *mut dpiPool,
7330        enabled: ::std::os::raw::c_int,
7331    ) -> ::std::os::raw::c_int;
7332}
7333extern "C" {
7334
7335    /// Sets the default size of the statement cache for sessions in the pool.
7336    /// 
7337    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7338    pub fn dpiPool_setStmtCacheSize(pool: *mut dpiPool, cacheSize: u32) -> ::std::os::raw::c_int;
7339}
7340extern "C" {
7341
7342    /// Sets the amount of time (in seconds) after which idle sessions in the
7343    /// pool are terminated. Note that termination only occurs when the pool is
7344    /// accessed. A value of zero will result in no idle sessions being terminated.
7345    /// 
7346    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7347    pub fn dpiPool_setTimeout(pool: *mut dpiPool, value: u32) -> ::std::os::raw::c_int;
7348}
7349extern "C" {
7350
7351    /// Sets the amount of time (in milliseconds) that the caller should wait for a
7352    /// session to be available in the pool before returning with an error.
7353    /// 
7354    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7355    pub fn dpiPool_setWaitTimeout(pool: *mut dpiPool, value: u32) -> ::std::os::raw::c_int;
7356}
7357extern "C" {
7358
7359    /// Sets the ping interval duration (in seconds) which is used to to check for
7360    /// healthiness of sessions. If this time has passed since the last time the
7361    /// session was checked out a ping will be performed. A negative value will
7362    /// disable this check.
7363    /// 
7364    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7365    pub fn dpiPool_setPingInterval(
7366        pool: *mut dpiPool,
7367        value: ::std::os::raw::c_int,
7368    ) -> ::std::os::raw::c_int;
7369}
7370extern "C" {
7371
7372    /// Adds a reference to the queue. This is intended for situations where a
7373    /// reference to the queue needs to be maintained independently of the
7374    /// reference returned when the queue was created.
7375    /// 
7376    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7377    pub fn dpiQueue_addRef(queue: *mut dpiQueue) -> ::std::os::raw::c_int;
7378}
7379extern "C" {
7380
7381    /// Returns a reference to the dequeue options associated with the queue. These
7382    /// options affect how messages are dequeued.
7383    /// 
7384    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7385    pub fn dpiQueue_getDeqOptions(
7386        queue: *mut dpiQueue,
7387        options: *mut *mut dpiDeqOptions,
7388    ) -> ::std::os::raw::c_int;
7389}
7390extern "C" {
7391
7392    /// Returns a reference to the enqueue options associated with the queue. These
7393    /// options affect how messages are enqueued.
7394    /// 
7395    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7396    pub fn dpiQueue_getEnqOptions(
7397        queue: *mut dpiQueue,
7398        options: *mut *mut dpiEnqOptions,
7399    ) -> ::std::os::raw::c_int;
7400}
7401extern "C" {
7402
7403    /// Adds a reference to the SODA collection. This is intended for situations
7404    /// where a reference to the collection needs to be maintained independently of
7405    /// the reference returned when the collection was created.
7406    /// 
7407    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7408    pub fn dpiSodaColl_addRef(coll: *mut dpiSodaColl) -> ::std::os::raw::c_int;
7409}
7410extern "C" {
7411
7412    /// Returns the metadata for the collection.
7413    /// 
7414    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7415    pub fn dpiSodaColl_getMetadata(
7416        coll: *mut dpiSodaColl,
7417        value: *mut *const ::std::os::raw::c_char,
7418        valueLength: *mut u32,
7419    ) -> ::std::os::raw::c_int;
7420}
7421extern "C" {
7422
7423    /// Returns the name of the collection.
7424    /// 
7425    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7426    pub fn dpiSodaColl_getName(
7427        coll: *mut dpiSodaColl,
7428        value: *mut *const ::std::os::raw::c_char,
7429        valueLength: *mut u32,
7430    ) -> ::std::os::raw::c_int;
7431}
7432extern "C" {
7433
7434    /// Adds a reference to the SODA collection cursor. This is intended for
7435    /// situations where a reference to the cursor needs to be maintained
7436    /// independently of the reference returned when the cursor was created.
7437    /// 
7438    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7439    pub fn dpiSodaCollCursor_addRef(cursor: *mut dpiSodaCollCursor) -> ::std::os::raw::c_int;
7440}
7441extern "C" {
7442
7443    /// Closes the cursor and makes it unusable for further work immediately,
7444    /// rather than when the reference count reaches zero.
7445    /// 
7446    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7447    pub fn dpiSodaCollCursor_close(cursor: *mut dpiSodaCollCursor) -> ::std::os::raw::c_int;
7448}
7449extern "C" {
7450
7451    /// Adds a reference to the SODA database. This is intended for situations
7452    /// where a reference to the SODA database needs to be maintained independently
7453    /// of the reference returned when the database was created.
7454    /// 
7455    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7456    pub fn dpiSodaDb_addRef(db: *mut dpiSodaDb) -> ::std::os::raw::c_int;
7457}
7458extern "C" {
7459
7460    /// Creates a SODA document that can later be inserted into a collection or
7461    /// used to replace an existing document in a collection. This method should be
7462    /// used when the content is binary or encoded text.
7463    /// 
7464    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7465    pub fn dpiSodaDb_createDocument(
7466        db: *mut dpiSodaDb,
7467        key: *const ::std::os::raw::c_char,
7468        keyLength: u32,
7469        content: *const ::std::os::raw::c_char,
7470        contentLength: u32,
7471        mediaType: *const ::std::os::raw::c_char,
7472        mediaTypeLength: u32,
7473        flags: u32,
7474        doc: *mut *mut dpiSodaDoc,
7475    ) -> ::std::os::raw::c_int;
7476}
7477extern "C" {
7478
7479    /// Creates a SODA document that can later be inserted into a collection or
7480    /// used to replace an existing document in a collection. This method should be
7481    /// used when the content is JSON and Oracle Client 23 or higher is being used.
7482    /// 
7483    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7484    pub fn dpiSodaDb_createJsonDocument(
7485        db: *mut dpiSodaDb,
7486        key: *const ::std::os::raw::c_char,
7487        keyLength: u32,
7488        content: *const dpiJsonNode,
7489        flags: u32,
7490        doc: *mut *mut dpiSodaDoc,
7491    ) -> ::std::os::raw::c_int;
7492}
7493extern "C" {
7494    pub fn dpiSodaDb_freeCollectionNames(
7495        db: *mut dpiSodaDb,
7496        names: *mut dpiStringList,
7497    ) -> ::std::os::raw::c_int;
7498}
7499extern "C" {
7500
7501    /// Adds a reference to the SODA document. This is intended for situations
7502    /// where a reference to the document needs to be maintained independently of
7503    /// the reference returned when the document was created.
7504    /// 
7505    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7506    pub fn dpiSodaDoc_addRef(cursor: *mut dpiSodaDoc) -> ::std::os::raw::c_int;
7507}
7508extern "C" {
7509
7510    /// Returns the content of the document. If the document contains JSON an
7511    /// exception will be thrown. Use [`dpiSodaDoc_getIsJson()`] to determine
7512    /// whether to call this function or [`dpiSodaDoc_getJsonContent()`].
7513    /// 
7514    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7515    pub fn dpiSodaDoc_getContent(
7516        doc: *mut dpiSodaDoc,
7517        value: *mut *const ::std::os::raw::c_char,
7518        valueLength: *mut u32,
7519        encoding: *mut *const ::std::os::raw::c_char,
7520    ) -> ::std::os::raw::c_int;
7521}
7522extern "C" {
7523
7524    /// Returns the timestamp when the document was created, as a string, in ISO
7525    /// format. This value will be empty if the metadata used to create the
7526    /// collection in which the document is found does not support the storage of
7527    /// this attribute, or if the document was created using
7528    /// [`dpiSodaDb_createDocument()`].
7529    /// 
7530    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7531    pub fn dpiSodaDoc_getCreatedOn(
7532        doc: *mut dpiSodaDoc,
7533        value: *mut *const ::std::os::raw::c_char,
7534        valueLength: *mut u32,
7535    ) -> ::std::os::raw::c_int;
7536}
7537extern "C" {
7538
7539    /// Returns a boolean value indicating if the document contains JSON or not.
7540    /// This method should be used to determine if [`dpiSodaDoc_getContent()`]
7541    /// or [`dpiSodaDoc_getJsonContent()`] should be called to get the content
7542    /// of the document.
7543    /// 
7544    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7545    pub fn dpiSodaDoc_getIsJson(
7546        doc: *mut dpiSodaDoc,
7547        isJson: *mut ::std::os::raw::c_int,
7548    ) -> ::std::os::raw::c_int;
7549}
7550extern "C" {
7551
7552    /// Returns the content of the document. If the document does not contain JSON
7553    /// an exception will be thrown. Use [`dpiSodaDoc_getIsJson()`] to
7554    /// determine whether to call this function or [`dpiSodaDoc_getContent()`].
7555    /// 
7556    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7557    pub fn dpiSodaDoc_getJsonContent(
7558        doc: *mut dpiSodaDoc,
7559        value: *mut *mut dpiJson,
7560    ) -> ::std::os::raw::c_int;
7561}
7562extern "C" {
7563
7564    /// Returns the key that uniquely identifies the document in the collection.
7565    /// This value will be empty if no key was supplied when the document was
7566    /// created using [`dpiSodaDb_createDocument()`].
7567    /// 
7568    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7569    pub fn dpiSodaDoc_getKey(
7570        doc: *mut dpiSodaDoc,
7571        value: *mut *const ::std::os::raw::c_char,
7572        valueLength: *mut u32,
7573    ) -> ::std::os::raw::c_int;
7574}
7575extern "C" {
7576
7577    /// Returns the timestamp when the document was last modified, as a string, in
7578    /// ISO format. This value will be empty if the metadata used to create the
7579    /// collection in which the document is found does not support the storage of
7580    /// this attribute, or if the document was created using
7581    /// [`dpiSodaDb_createDocument()`].
7582    /// 
7583    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7584    pub fn dpiSodaDoc_getLastModified(
7585        doc: *mut dpiSodaDoc,
7586        value: *mut *const ::std::os::raw::c_char,
7587        valueLength: *mut u32,
7588    ) -> ::std::os::raw::c_int;
7589}
7590extern "C" {
7591
7592    /// Returns the media type of the document.
7593    /// 
7594    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7595    pub fn dpiSodaDoc_getMediaType(
7596        doc: *mut dpiSodaDoc,
7597        value: *mut *const ::std::os::raw::c_char,
7598        valueLength: *mut u32,
7599    ) -> ::std::os::raw::c_int;
7600}
7601extern "C" {
7602
7603    /// Returns the current version of the document. This value will be empty if
7604    /// the metadata used to create the collection in which the document is found
7605    /// does not support the storage of this attribute, or if the document was
7606    /// created using [`dpiSodaDb_createDocument()`].
7607    /// 
7608    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7609    pub fn dpiSodaDoc_getVersion(
7610        doc: *mut dpiSodaDoc,
7611        value: *mut *const ::std::os::raw::c_char,
7612        valueLength: *mut u32,
7613    ) -> ::std::os::raw::c_int;
7614}
7615extern "C" {
7616
7617    /// Adds a reference to the SODA document cursor. This is intended for
7618    /// situations where a reference to the cursor needs to be maintained
7619    /// independently of the reference returned when the cursor was created.
7620    /// 
7621    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7622    pub fn dpiSodaDocCursor_addRef(cursor: *mut dpiSodaDocCursor) -> ::std::os::raw::c_int;
7623}
7624extern "C" {
7625
7626    /// Closes the cursor and makes it unusable for further work immediately,
7627    /// rather than when the reference count reaches zero.
7628    /// 
7629    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7630    pub fn dpiSodaDocCursor_close(cursor: *mut dpiSodaDocCursor) -> ::std::os::raw::c_int;
7631}
7632extern "C" {
7633
7634    /// Adds a reference to the statement. This is intended for situations where a
7635    /// reference to the statement needs to be maintained independently of the
7636    /// reference returned when the statement was created.
7637    /// 
7638    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7639    pub fn dpiStmt_addRef(stmt: *mut dpiStmt) -> ::std::os::raw::c_int;
7640}
7641extern "C" {
7642
7643    /// Binds a variable to a named placeholder in the statement. A reference to
7644    /// the variable is retained by the library and is released when the statement
7645    /// itself is released or a new variable is bound to the same name.
7646    /// 
7647    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7648    pub fn dpiStmt_bindByName(
7649        stmt: *mut dpiStmt,
7650        name: *const ::std::os::raw::c_char,
7651        nameLength: u32,
7652        var: *mut dpiVar,
7653    ) -> ::std::os::raw::c_int;
7654}
7655extern "C" {
7656
7657    /// Binds a variable to a placeholder in the statement by position. A reference
7658    /// to the variable is retained by the library and is released when the
7659    /// statement itself is released or a new variable is bound to the same
7660    /// position.
7661    /// 
7662    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7663    pub fn dpiStmt_bindByPos(
7664        stmt: *mut dpiStmt,
7665        pos: u32,
7666        var: *mut dpiVar,
7667    ) -> ::std::os::raw::c_int;
7668}
7669extern "C" {
7670
7671    /// Binds a value to a named placeholder in the statement without the need to
7672    /// create a variable directly. One is created implicitly and released when the
7673    /// statement is released or a new value is bound to the same name.
7674    /// 
7675    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7676    pub fn dpiStmt_bindValueByName(
7677        stmt: *mut dpiStmt,
7678        name: *const ::std::os::raw::c_char,
7679        nameLength: u32,
7680        nativeTypeNum: dpiNativeTypeNum,
7681        data: *mut dpiData,
7682    ) -> ::std::os::raw::c_int;
7683}
7684extern "C" {
7685
7686    /// Binds a value to a placeholder in the statement without the need to create
7687    /// a variable directly. One is created implicitly and released when the
7688    /// statement is released or a new value is bound to the same position.
7689    /// 
7690    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7691    pub fn dpiStmt_bindValueByPos(
7692        stmt: *mut dpiStmt,
7693        pos: u32,
7694        nativeTypeNum: dpiNativeTypeNum,
7695        data: *mut dpiData,
7696    ) -> ::std::os::raw::c_int;
7697}
7698extern "C" {
7699
7700    /// Closes the statement and makes it unusable for further work immediately,
7701    /// rather than when the reference count reaches zero.
7702    /// 
7703    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7704    pub fn dpiStmt_close(
7705        stmt: *mut dpiStmt,
7706        tag: *const ::std::os::raw::c_char,
7707        tagLength: u32,
7708    ) -> ::std::os::raw::c_int;
7709}
7710extern "C" {
7711
7712    /// Defines the variable that will be used to fetch rows from the statement. A
7713    /// reference to the variable will be retained until the next define is
7714    /// performed on the same position or the statement is closed.
7715    /// 
7716    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7717    pub fn dpiStmt_define(stmt: *mut dpiStmt, pos: u32, var: *mut dpiVar) -> ::std::os::raw::c_int;
7718}
7719extern "C" {
7720
7721    /// Defines the type of data that will be used to fetch rows from the
7722    /// statement. This is intended for use with the function
7723    /// [`dpiStmt_getQueryValue()`], when the default data type derived from
7724    /// the column metadata needs to be overridden by the application. Internally,
7725    /// a variable is created with the specified data type and size.
7726    /// 
7727    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7728    pub fn dpiStmt_defineValue(
7729        stmt: *mut dpiStmt,
7730        pos: u32,
7731        oracleTypeNum: dpiOracleTypeNum,
7732        nativeTypeNum: dpiNativeTypeNum,
7733        size: u32,
7734        sizeIsBytes: ::std::os::raw::c_int,
7735        objType: *mut dpiObjectType,
7736    ) -> ::std::os::raw::c_int;
7737}
7738extern "C" {
7739
7740    /// Returns the number of batch errors that took place during the last
7741    /// execution with batch mode enabled. Batch errors are only available when
7742    /// both the client and the server are at 12.1.
7743    /// 
7744    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7745    pub fn dpiStmt_getBatchErrorCount(stmt: *mut dpiStmt, count: *mut u32)
7746        -> ::std::os::raw::c_int;
7747}
7748extern "C" {
7749
7750    /// Returns the batch errors that took place during the last execution with
7751    /// batch mode enabled. Batch errors are only available when both the client
7752    /// and the server are at 12.1.
7753    /// 
7754    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7755    pub fn dpiStmt_getBatchErrors(
7756        stmt: *mut dpiStmt,
7757        numErrors: u32,
7758        errors: *mut dpiErrorInfo,
7759    ) -> ::std::os::raw::c_int;
7760}
7761extern "C" {
7762
7763    /// Returns the number of bind variables in the prepared statement. In SQL
7764    /// statements this is the total number of bind variables whereas in PL/SQL
7765    /// statements this is the count of the **unique** bind variables.
7766    /// 
7767    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7768    pub fn dpiStmt_getBindCount(stmt: *mut dpiStmt, count: *mut u32) -> ::std::os::raw::c_int;
7769}
7770extern "C" {
7771
7772    /// Returns the names of the unique bind variables in the prepared statement.
7773    /// 
7774    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7775    pub fn dpiStmt_getBindNames(
7776        stmt: *mut dpiStmt,
7777        numBindNames: *mut u32,
7778        bindNames: *mut *const ::std::os::raw::c_char,
7779        bindNameLengths: *mut u32,
7780    ) -> ::std::os::raw::c_int;
7781}
7782extern "C" {
7783
7784    /// Gets the array size used for performing fetches.
7785    /// 
7786    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7787    pub fn dpiStmt_getFetchArraySize(
7788        stmt: *mut dpiStmt,
7789        arraySize: *mut u32,
7790    ) -> ::std::os::raw::c_int;
7791}
7792extern "C" {
7793
7794    /// Returns the next implicit result available from the last execution of the
7795    /// statement. Implicit results are only available when both the client and
7796    /// server are 12.1 or higher.
7797    /// 
7798    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7799    pub fn dpiStmt_getImplicitResult(
7800        stmt: *mut dpiStmt,
7801        implicitResult: *mut *mut dpiStmt,
7802    ) -> ::std::os::raw::c_int;
7803}
7804extern "C" {
7805
7806    /// Returns information about the statement.
7807    /// 
7808    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7809    pub fn dpiStmt_getInfo(stmt: *mut dpiStmt, info: *mut dpiStmtInfo) -> ::std::os::raw::c_int;
7810}
7811extern "C" {
7812
7813    /// Returns the rowid of the last row that was affected by the statement.
7814    /// 
7815    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7816    pub fn dpiStmt_getLastRowid(
7817        stmt: *mut dpiStmt,
7818        rowid: *mut *mut dpiRowid,
7819    ) -> ::std::os::raw::c_int;
7820}
7821extern "C" {
7822
7823    /// Returns the number of columns that are being queried.
7824    /// 
7825    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7826    pub fn dpiStmt_getNumQueryColumns(
7827        stmt: *mut dpiStmt,
7828        numQueryColumns: *mut u32,
7829    ) -> ::std::os::raw::c_int;
7830}
7831extern "C" {
7832
7833    /// Returns the value of an OCI attribute. This is intended solely for testing
7834    /// attributes that are not otherwise supported by ODPI-C and should not be
7835    /// used for any other purpose. Use only as directed by Oracle.
7836    /// 
7837    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7838    pub fn dpiStmt_getOciAttr(
7839        stmt: *mut dpiStmt,
7840        attribute: u32,
7841        value: *mut dpiDataBuffer,
7842        valueLength: *mut u32,
7843    ) -> ::std::os::raw::c_int;
7844}
7845extern "C" {
7846
7847    /// Gets the number of rows that will be prefetched by the Oracle Client
7848    /// library when a query is executed.
7849    /// 
7850    /// The value may be changed by calling [`dpiStmt_setPrefetchRows()`].
7851    /// 
7852    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7853    pub fn dpiStmt_getPrefetchRows(stmt: *mut dpiStmt, numRows: *mut u32) -> ::std::os::raw::c_int;
7854}
7855extern "C" {
7856
7857    /// Returns information about the column that is being queried.
7858    /// 
7859    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7860    pub fn dpiStmt_getQueryInfo(
7861        stmt: *mut dpiStmt,
7862        pos: u32,
7863        info: *mut dpiQueryInfo,
7864    ) -> ::std::os::raw::c_int;
7865}
7866extern "C" {
7867
7868    /// Returns the value of the column at the given position for the currently
7869    /// fetched row, without needing to provide a variable. If the data type of
7870    /// the column needs to be overridden, the function
7871    /// [`dpiStmt_defineValue()`] can be called to specify a different type
7872    /// after executing the statement but before fetching any data.
7873    /// 
7874    /// This function should only be called after a call to the function
7875    /// [`dpiStmt_fetch()`] has succeeded and indicated that a row is
7876    /// available.
7877    /// 
7878    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7879    pub fn dpiStmt_getQueryValue(
7880        stmt: *mut dpiStmt,
7881        pos: u32,
7882        nativeTypeNum: *mut dpiNativeTypeNum,
7883        data: *mut *mut dpiData,
7884    ) -> ::std::os::raw::c_int;
7885}
7886extern "C" {
7887
7888    /// Returns the number of rows affected by the last DML statement that was
7889    /// executed, the number of rows currently fetched from a query, or the number
7890    /// of successful executions of a PL/SQL block. In all other cases 0 is
7891    /// returned.
7892    /// 
7893    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7894    pub fn dpiStmt_getRowCount(stmt: *mut dpiStmt, count: *mut u64) -> ::std::os::raw::c_int;
7895}
7896extern "C" {
7897
7898    /// Returns an array of row counts affected by the last invocation of
7899    /// [`dpiStmt_executeMany()`] with the array DML rowcounts mode enabled.
7900    /// This feature is only available if both client and server are at 12.1.
7901    /// 
7902    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7903    pub fn dpiStmt_getRowCounts(
7904        stmt: *mut dpiStmt,
7905        numRowCounts: *mut u32,
7906        rowCounts: *mut *mut u64,
7907    ) -> ::std::os::raw::c_int;
7908}
7909extern "C" {
7910
7911    /// Returns the id of the query that was just registered on the subscription
7912    /// by calling [`dpiStmt_execute()`] on a statement prepared by calling
7913    /// [`dpiSubscr_prepareStmt()`].
7914    /// 
7915    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7916    pub fn dpiStmt_getSubscrQueryId(stmt: *mut dpiStmt, queryId: *mut u64)
7917        -> ::std::os::raw::c_int;
7918}
7919extern "C" {
7920
7921    /// Sets the array size used for performing fetches. All variables defined for
7922    /// fetching must have this many (or more) elements allocated for them. The
7923    /// higher this value is the less network round trips are required to fetch
7924    /// rows from the database but more memory is also required. A value of zero
7925    /// will reset the array size to the default value of
7926    /// DPI_DEFAULT_FETCH_ARRAY_SIZE.
7927    /// 
7928    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7929    pub fn dpiStmt_setFetchArraySize(stmt: *mut dpiStmt, arraySize: u32) -> ::std::os::raw::c_int;
7930}
7931extern "C" {
7932
7933    /// Sets the value of an OCI attribute. This is intended solely for testing
7934    /// attributes that are not otherwise supported by ODPI-C and should not be
7935    /// used for any other purpose. Use only as directed by Oracle.
7936    /// 
7937    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7938    pub fn dpiStmt_setOciAttr(
7939        stmt: *mut dpiStmt,
7940        attribute: u32,
7941        value: *mut ::std::os::raw::c_void,
7942        valueLength: u32,
7943    ) -> ::std::os::raw::c_int;
7944}
7945extern "C" {
7946
7947    /// Sets the number of rows that will be prefetched by the Oracle Client
7948    /// library when a query is executed. The default value is
7949    /// *DPI_DEFAULT_PREFETCH_ROWS* (2). Increasing this value may reduce the
7950    /// number of round-trips to the database that are required in order to
7951    /// fetch rows, but at the cost of increasing memory requirements. Setting this
7952    /// value to 0 will disable prefetch completely, which may be useful when
7953    /// the timing for fetching rows must be controlled by the caller.
7954    /// 
7955    /// The current value can be determined by calling
7956    /// [`dpiStmt_getPrefetchRows()`].
7957    /// 
7958    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7959    pub fn dpiStmt_setPrefetchRows(stmt: *mut dpiStmt, numRows: u32) -> ::std::os::raw::c_int;
7960}
7961extern "C" {
7962
7963    /// Excludes the associated SQL statement from the statement cache. If the
7964    /// SQL statement was not already in the cache, it will not be added. This
7965    /// function can be called before or after the statment is executed.
7966    /// 
7967    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7968    pub fn dpiStmt_deleteFromCache(stmt: *mut dpiStmt) -> ::std::os::raw::c_int;
7969}
7970extern "C" {
7971
7972    /// Adds a reference to the rowid. This is intended for situations where a
7973    /// reference to the rowid needs to be maintained independently of the
7974    /// reference returned when the rowid was created.
7975    /// 
7976    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7977    pub fn dpiRowid_addRef(rowid: *mut dpiRowid) -> ::std::os::raw::c_int;
7978}
7979extern "C" {
7980
7981    /// Returns the sting (base64) representation of the rowid.
7982    /// 
7983    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7984    pub fn dpiRowid_getStringValue(
7985        rowid: *mut dpiRowid,
7986        value: *mut *const ::std::os::raw::c_char,
7987        valueLength: *mut u32,
7988    ) -> ::std::os::raw::c_int;
7989}
7990extern "C" {
7991
7992    /// Releases a reference to the rowid. A count of the references to the rowid
7993    /// is maintained and when this count reaches zero, the memory associated with
7994    /// the rowid is freed.
7995    /// 
7996    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
7997    pub fn dpiRowid_release(subscr: *mut dpiRowid) -> ::std::os::raw::c_int;
7998}
7999extern "C" {
8000
8001    /// Adds a reference to the subscription. This is intended for situations where
8002    /// a reference to the subscription needs to be maintained independently of the
8003    /// reference returned when the subscription was created.
8004    /// 
8005    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8006    pub fn dpiSubscr_addRef(subscr: *mut dpiSubscr) -> ::std::os::raw::c_int;
8007}
8008extern "C" {
8009
8010    /// Prepares a statement for registration on the subscription. The statement is
8011    /// then registered by calling the function [`dpiStmt_execute()`]. The
8012    /// reference to the statement that is returned should be released as soon as
8013    /// it is no longer needed.
8014    /// 
8015    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8016    pub fn dpiSubscr_prepareStmt(
8017        subscr: *mut dpiSubscr,
8018        sql: *const ::std::os::raw::c_char,
8019        sqlLength: u32,
8020        stmt: *mut *mut dpiStmt,
8021    ) -> ::std::os::raw::c_int;
8022}
8023extern "C" {
8024
8025    /// Adds a reference to the variable. This is intended for situations where a
8026    /// reference to the variable needs to be maintained independently of the
8027    /// reference returned when the variable was created.
8028    /// 
8029    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8030    pub fn dpiVar_addRef(var: *mut dpiVar) -> ::std::os::raw::c_int;
8031}
8032extern "C" {
8033
8034    /// Copies the data from one variable to another variable.
8035    /// 
8036    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8037    pub fn dpiVar_copyData(
8038        var: *mut dpiVar,
8039        pos: u32,
8040        sourceVar: *mut dpiVar,
8041        sourcePos: u32,
8042    ) -> ::std::os::raw::c_int;
8043}
8044extern "C" {
8045
8046    /// Returns the number of elements in a PL/SQL index-by table if the variable
8047    /// was created as an array by the function [`dpiConn_newVar()`]. If the
8048    /// variable is one of the output bind variables of a DML returning statement,
8049    /// however, the value returned will correspond to the number of rows returned
8050    /// by the DML returning statement. In all other cases, the value returned will
8051    /// be the number of elements the variable was created with.
8052    /// 
8053    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8054    pub fn dpiVar_getNumElementsInArray(
8055        var: *mut dpiVar,
8056        numElements: *mut u32,
8057    ) -> ::std::os::raw::c_int;
8058}
8059extern "C" {
8060
8061    /// Returns a pointer to an array of [`dpiData`] structures used
8062    /// for transferring data to and from the database. These structures are
8063    /// allocated by the variable itself when a DML returning statement is executed
8064    /// and the variable is bound.
8065    /// 
8066    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8067    pub fn dpiVar_getReturnedData(
8068        var: *mut dpiVar,
8069        pos: u32,
8070        numElements: *mut u32,
8071        data: *mut *mut dpiData,
8072    ) -> ::std::os::raw::c_int;
8073}
8074extern "C" {
8075
8076    /// Returns the size of the buffer used for one element of the array used for
8077    /// fetching/binding Oracle data.
8078    /// 
8079    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8080    pub fn dpiVar_getSizeInBytes(var: *mut dpiVar, sizeInBytes: *mut u32) -> ::std::os::raw::c_int;
8081}
8082extern "C" {
8083
8084    /// Sets the variable value to the specified JSON value.
8085    /// 
8086    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8087    pub fn dpiVar_setFromJson(
8088        var: *mut dpiVar,
8089        pos: u32,
8090        json: *mut dpiJson,
8091    ) -> ::std::os::raw::c_int;
8092}
8093extern "C" {
8094
8095    /// Sets the variable value to the specified LOB.
8096    /// 
8097    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8098    pub fn dpiVar_setFromLob(var: *mut dpiVar, pos: u32, lob: *mut dpiLob)
8099        -> ::std::os::raw::c_int;
8100}
8101extern "C" {
8102
8103    /// Sets the variable value to the specified object.
8104    /// 
8105    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8106    pub fn dpiVar_setFromObject(
8107        var: *mut dpiVar,
8108        pos: u32,
8109        obj: *mut dpiObject,
8110    ) -> ::std::os::raw::c_int;
8111}
8112extern "C" {
8113
8114    /// Sets the variable value to the specified rowid.
8115    /// 
8116    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8117    pub fn dpiVar_setFromRowid(
8118        var: *mut dpiVar,
8119        pos: u32,
8120        rowid: *mut dpiRowid,
8121    ) -> ::std::os::raw::c_int;
8122}
8123extern "C" {
8124
8125    /// Sets the variable value to the specified statement.
8126    /// 
8127    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8128    pub fn dpiVar_setFromStmt(
8129        var: *mut dpiVar,
8130        pos: u32,
8131        stmt: *mut dpiStmt,
8132    ) -> ::std::os::raw::c_int;
8133}
8134extern "C" {
8135
8136    /// Sets the variable value to the specified vector value.
8137    /// 
8138    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8139    pub fn dpiVar_setFromVector(
8140        var: *mut dpiVar,
8141        pos: u32,
8142        vector: *mut dpiVector,
8143    ) -> ::std::os::raw::c_int;
8144}
8145extern "C" {
8146
8147    /// Sets the number of elements in a PL/SQL index-by table.
8148    /// 
8149    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8150    pub fn dpiVar_setNumElementsInArray(
8151        var: *mut dpiVar,
8152        numElements: u32,
8153    ) -> ::std::os::raw::c_int;
8154}
8155extern "C" {
8156
8157    /// Adds a reference to the vector value. This is intended for situations where
8158    /// a reference to the vector value needs to be maintained independently of the
8159    /// reference returned when the vector value was created.
8160    /// 
8161    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8162    pub fn dpiVector_addRef(vector: *mut dpiVector) -> ::std::os::raw::c_int;
8163}
8164extern "C" {
8165
8166    /// Returns information about the vector.
8167    /// 
8168    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8169    pub fn dpiVector_getValue(
8170        vector: *mut dpiVector,
8171        info: *mut dpiVectorInfo,
8172    ) -> ::std::os::raw::c_int;
8173}
8174extern "C" {
8175
8176    /// Releases a reference to the vector value. A count of the references to the
8177    /// vector value is maintained and when this count reaches zero, the memory
8178    /// associated with the vector value is freed.
8179    /// 
8180    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8181    pub fn dpiVector_release(vector: *mut dpiVector) -> ::std::os::raw::c_int;
8182}
8183extern "C" {
8184
8185    /// Sets the vector value from the supplied information.
8186    /// 
8187    /// The function returns DPI_SUCCESS for success and DPI_FAILURE for failure.
8188    pub fn dpiVector_setValue(
8189        vector: *mut dpiVector,
8190        info: *mut dpiVectorInfo,
8191    ) -> ::std::os::raw::c_int;
8192}