1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
//! Global console support for SQLModel Rust.
//!
//! This module provides an optional global console pattern for users who prefer
//! simple setup without passing console through all builders.
//!
//! # Example
//!
//! ```rust,ignore
//! use sqlmodel::prelude::*;
//!
//! // Initialize global console with auto-detection
//! sqlmodel::init_auto_console();
//!
//! // All sessions now have console output automatically
//! let session = ConnectionSession::builder().build_with(connection);
//! ```
//!
//! # Precedence Rules
//!
//! Console selection follows these priorities (highest first):
//! 1. Explicit console on builder via `with_console()`
//! 2. Global console (if set via `set_global_console()` or `init_auto_console()`)
//! 3. No console (silent operation)
use ;
use SqlModelConsole;
/// Global console storage using `OnceLock` with `Mutex` for thread-safety.
///
/// We need the `Mutex` wrapper because `SqlModelConsole` contains `rich_rust::Console`
/// which has interior mutability types (`Cell`, `RefCell`) that are not `Sync`.
/// The `Mutex` provides the necessary synchronization for safe concurrent access.
static GLOBAL_CONSOLE: = new;
/// Set the global console. Can only be called once per process.
///
/// Subsequent calls are silently ignored (no panic). Use this for custom
/// console configurations.
///
/// # Example
///
/// ```rust,ignore
/// use sqlmodel::{set_global_console, SqlModelConsole, Theme};
///
/// let console = SqlModelConsole::with_theme(Theme::dark());
/// set_global_console(console);
///
/// // Subsequent calls are ignored
/// set_global_console(SqlModelConsole::new()); // No effect
/// ```
/// Set a shared global console. Can only be called once per process.
///
/// Use this when you need to share the same console instance across
/// multiple parts of your application.
///
/// # Example
///
/// ```rust,ignore
/// use std::sync::Arc;
/// use sqlmodel::{set_global_shared_console, SqlModelConsole};
///
/// let console = Arc::new(SqlModelConsole::new());
/// set_global_shared_console(console.clone());
///
/// // console can still be used elsewhere
/// console.print("Hello");
/// ```
/// Get the global console if set.
///
/// Returns `None` if no global console has been initialized.
///
/// # Example
///
/// ```rust,ignore
/// use sqlmodel::global_console;
///
/// if let Some(console) = global_console() {
/// console.print("Global console is available");
/// }
/// ```
/// Check if a global console has been initialized.
///
/// # Example
///
/// ```rust,ignore
/// use sqlmodel::{has_global_console, init_auto_console};
///
/// assert!(!has_global_console());
/// init_auto_console();
/// assert!(has_global_console());
/// ```
/// Initialize global console with auto-detection.
///
/// This is the simplest way to enable console output. The console will
/// automatically detect the appropriate output mode (Rich, Plain, or Json)
/// based on the environment.
///
/// Can only be called once per process; subsequent calls are ignored.
///
/// # Example
///
/// ```rust,ignore
/// use sqlmodel::init_auto_console;
///
/// fn main() {
/// init_auto_console();
///
/// // All sqlmodel operations now have rich console output
/// }
/// ```